From a0aa2307322cd47bbf416810ac0292925e03be87 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 19:39:49 +0200 Subject: Adding upstream version 1:7.0.3. Signed-off-by: Daniel Baumann --- rust/vendor/brotli/.cargo-checksum.json | 1 + rust/vendor/brotli/Cargo.lock | 121 + rust/vendor/brotli/Cargo.toml | 77 + rust/vendor/brotli/LICENSE | 12 + rust/vendor/brotli/README.md | 188 + rust/vendor/brotli/appveyor.yml | 51 + rust/vendor/brotli/ci/before_deploy.ps1 | 22 + rust/vendor/brotli/ci/before_deploy.sh | 33 + rust/vendor/brotli/ci/install.sh | 47 + rust/vendor/brotli/ci/script.sh | 23 + .../brotli/corrosion/backward_references_hq.rs | 2606 ++ .../corrosion/backward_references_hq_safe.rs | 2600 ++ rust/vendor/brotli/examples/compress.rs | 46 + rust/vendor/brotli/examples/decompress.rs | 37 + rust/vendor/brotli/research/concatenate_some.py | 137 + rust/vendor/brotli/research/frombase2.py | 18 + rust/vendor/brotli/research/tobase2.py | 11 + rust/vendor/brotli/rustfmt.toml | 4 + rust/vendor/brotli/src/bin/brotli.rs | 865 + rust/vendor/brotli/src/bin/catbrotli.rs | 149 + rust/vendor/brotli/src/bin/integration_tests.rs | 1317 + rust/vendor/brotli/src/bin/test_broccoli.rs | 424 + rust/vendor/brotli/src/bin/test_custom_dict.rs | 186 + rust/vendor/brotli/src/bin/test_threading.rs | 181 + rust/vendor/brotli/src/bin/tests.rs | 113 + rust/vendor/brotli/src/bin/util.rs | 300 + rust/vendor/brotli/src/bin/validate.rs | 167 + rust/vendor/brotli/src/concat/mod.rs | 623 + .../src/enc/backward_references/benchmark.rs | 321 + .../enc/backward_references/hash_to_binary_tree.rs | 497 + .../brotli/src/enc/backward_references/hq.rs | 1956 ++ .../brotli/src/enc/backward_references/mod.rs | 2493 ++ .../brotli/src/enc/backward_references/test.rs | 227 + rust/vendor/brotli/src/enc/bit_cost.rs | 404 + rust/vendor/brotli/src/enc/block_split.rs | 34 + rust/vendor/brotli/src/enc/block_splitter.rs | 992 + rust/vendor/brotli/src/enc/brotli_bit_stream.rs | 2839 ++ rust/vendor/brotli/src/enc/cluster.rs | 545 + rust/vendor/brotli/src/enc/combined_alloc.rs | 439 + rust/vendor/brotli/src/enc/command.rs | 361 + rust/vendor/brotli/src/enc/compat.rs | 340 + rust/vendor/brotli/src/enc/compress_fragment.rs | 1144 + .../brotli/src/enc/compress_fragment_two_pass.rs | 940 + rust/vendor/brotli/src/enc/constants.rs | 3300 ++ rust/vendor/brotli/src/enc/context_map_entropy.rs | 450 + rust/vendor/brotli/src/enc/dictionary_hash.rs | 32769 ++++++++++++++++++ rust/vendor/brotli/src/enc/encode.rs | 3038 ++ rust/vendor/brotli/src/enc/entropy_encode.rs | 692 + rust/vendor/brotli/src/enc/fast_log.rs | 257 + rust/vendor/brotli/src/enc/find_stride.rs | 668 + rust/vendor/brotli/src/enc/fixed_queue.rs | 72 + rust/vendor/brotli/src/enc/histogram.rs | 545 + rust/vendor/brotli/src/enc/input_pair.rs | 133 + rust/vendor/brotli/src/enc/interface.rs | 791 + rust/vendor/brotli/src/enc/ir_interpret.rs | 103 + rust/vendor/brotli/src/enc/literal_cost.rs | 234 + rust/vendor/brotli/src/enc/metablock.rs | 1065 + rust/vendor/brotli/src/enc/mod.rs | 318 + rust/vendor/brotli/src/enc/multithreading.rs | 148 + rust/vendor/brotli/src/enc/parameters.rs | 259 + rust/vendor/brotli/src/enc/pdf.rs | 7 + rust/vendor/brotli/src/enc/prior_eval.rs | 694 + rust/vendor/brotli/src/enc/reader.rs | 261 + rust/vendor/brotli/src/enc/singlethreading.rs | 167 + rust/vendor/brotli/src/enc/static_dict.rs | 1179 + rust/vendor/brotli/src/enc/static_dict_lut.rs | 33150 +++++++++++++++++++ rust/vendor/brotli/src/enc/stride_eval.rs | 265 + rust/vendor/brotli/src/enc/test.rs | 453 + rust/vendor/brotli/src/enc/threading.rs | 496 + rust/vendor/brotli/src/enc/utf8_util.rs | 68 + rust/vendor/brotli/src/enc/util.rs | 4543 +++ rust/vendor/brotli/src/enc/vectorization.rs | 49 + rust/vendor/brotli/src/enc/weights.rs | 136 + rust/vendor/brotli/src/enc/worker_pool.rs | 321 + rust/vendor/brotli/src/enc/writer.rs | 296 + rust/vendor/brotli/src/ffi/alloc_util.rs | 66 + rust/vendor/brotli/src/ffi/broccoli.rs | 135 + rust/vendor/brotli/src/ffi/compressor.rs | 393 + rust/vendor/brotli/src/ffi/decompressor.rs | 158 + rust/vendor/brotli/src/ffi/mod.rs | 5 + rust/vendor/brotli/src/ffi/multicompress/mod.rs | 393 + rust/vendor/brotli/src/ffi/multicompress/test.rs | 250 + rust/vendor/brotli/src/lib.rs | 94 + rust/vendor/brotli/testdata/10x10y | 1 + rust/vendor/brotli/testdata/64x | 1 + rust/vendor/brotli/testdata/64x.compressed | Bin 0 -> 10 bytes rust/vendor/brotli/testdata/aaabaaaa | 1 + rust/vendor/brotli/testdata/alice29.txt | 3609 ++ rust/vendor/brotli/testdata/alice29.txt.compressed | Bin 0 -> 50096 bytes rust/vendor/brotli/testdata/asyoulik.txt | 4122 +++ .../vendor/brotli/testdata/asyoulik.txt.compressed | Bin 0 -> 45687 bytes rust/vendor/brotli/testdata/backward65536 | Bin 0 -> 65792 bytes .../brotli/testdata/backward65536.compressed | Bin 0 -> 19 bytes rust/vendor/brotli/testdata/compressed_file | Bin 0 -> 50096 bytes .../brotli/testdata/compressed_file.compressed | Bin 0 -> 50100 bytes rust/vendor/brotli/testdata/compressed_repeated | Bin 0 -> 144224 bytes .../brotli/testdata/compressed_repeated.compressed | Bin 0 -> 50299 bytes rust/vendor/brotli/testdata/empty | 0 rust/vendor/brotli/testdata/empty.compressed | 1 + rust/vendor/brotli/testdata/empty.compressed.00 | 1 + rust/vendor/brotli/testdata/empty.compressed.01 | 1 + rust/vendor/brotli/testdata/empty.compressed.02 | 1 + rust/vendor/brotli/testdata/empty.compressed.03 | 1 + rust/vendor/brotli/testdata/empty.compressed.04 | 1 + rust/vendor/brotli/testdata/empty.compressed.05 | 1 + rust/vendor/brotli/testdata/empty.compressed.06 | 1 + rust/vendor/brotli/testdata/empty.compressed.07 | 1 + rust/vendor/brotli/testdata/empty.compressed.08 | 1 + rust/vendor/brotli/testdata/empty.compressed.09 | 1 + rust/vendor/brotli/testdata/empty.compressed.10 | 1 + rust/vendor/brotli/testdata/empty.compressed.11 | 1 + rust/vendor/brotli/testdata/empty.compressed.12 | 1 + rust/vendor/brotli/testdata/empty.compressed.13 | 1 + rust/vendor/brotli/testdata/empty.compressed.14 | 1 + rust/vendor/brotli/testdata/empty.compressed.15 | 1 + rust/vendor/brotli/testdata/empty.compressed.16 | Bin 0 -> 4 bytes rust/vendor/brotli/testdata/empty.compressed.17 | 1 + rust/vendor/brotli/testdata/empty.compressed.18 | Bin 0 -> 196610 bytes .../brotli/testdata/ends_with_truncated_dictionary | 1 + rust/vendor/brotli/testdata/monkey | 1 + rust/vendor/brotli/testdata/quickfox | 1 + rust/vendor/brotli/testdata/quickfox_repeated | 1 + rust/vendor/brotli/testdata/random_org_10k.bin | Bin 0 -> 10000 bytes rust/vendor/brotli/testdata/random_then_unicode | Bin 0 -> 272666 bytes rust/vendor/brotli/testdata/ukkonooa | 1 + rust/vendor/brotli/testdata/x | 1 + rust/vendor/brotli/testdata/x.compressed.00 | Bin 0 -> 5 bytes rust/vendor/brotli/testdata/x.compressed.01 | Bin 0 -> 8 bytes rust/vendor/brotli/testdata/x.compressed.02 | Bin 0 -> 5 bytes rust/vendor/brotli/testdata/x.compressed.03 | Bin 0 -> 10 bytes rust/vendor/brotli/testdata/xyzzy | 1 + rust/vendor/brotli/uncorrode.py | 165 + 132 files changed, 120236 insertions(+) create mode 100644 rust/vendor/brotli/.cargo-checksum.json create mode 100644 rust/vendor/brotli/Cargo.lock create mode 100644 rust/vendor/brotli/Cargo.toml create mode 100644 rust/vendor/brotli/LICENSE create mode 100644 rust/vendor/brotli/README.md create mode 100644 rust/vendor/brotli/appveyor.yml create mode 100644 rust/vendor/brotli/ci/before_deploy.ps1 create mode 100644 rust/vendor/brotli/ci/before_deploy.sh create mode 100644 rust/vendor/brotli/ci/install.sh create mode 100644 rust/vendor/brotli/ci/script.sh create mode 100644 rust/vendor/brotli/corrosion/backward_references_hq.rs create mode 100644 rust/vendor/brotli/corrosion/backward_references_hq_safe.rs create mode 100644 rust/vendor/brotli/examples/compress.rs create mode 100644 rust/vendor/brotli/examples/decompress.rs create mode 100644 rust/vendor/brotli/research/concatenate_some.py create mode 100644 rust/vendor/brotli/research/frombase2.py create mode 100644 rust/vendor/brotli/research/tobase2.py create mode 100644 rust/vendor/brotli/rustfmt.toml create mode 100755 rust/vendor/brotli/src/bin/brotli.rs create mode 100644 rust/vendor/brotli/src/bin/catbrotli.rs create mode 100755 rust/vendor/brotli/src/bin/integration_tests.rs create mode 100755 rust/vendor/brotli/src/bin/test_broccoli.rs create mode 100755 rust/vendor/brotli/src/bin/test_custom_dict.rs create mode 100755 rust/vendor/brotli/src/bin/test_threading.rs create mode 100755 rust/vendor/brotli/src/bin/tests.rs create mode 100644 rust/vendor/brotli/src/bin/util.rs create mode 100644 rust/vendor/brotli/src/bin/validate.rs create mode 100644 rust/vendor/brotli/src/concat/mod.rs create mode 100755 rust/vendor/brotli/src/enc/backward_references/benchmark.rs create mode 100755 rust/vendor/brotli/src/enc/backward_references/hash_to_binary_tree.rs create mode 100755 rust/vendor/brotli/src/enc/backward_references/hq.rs create mode 100755 rust/vendor/brotli/src/enc/backward_references/mod.rs create mode 100755 rust/vendor/brotli/src/enc/backward_references/test.rs create mode 100755 rust/vendor/brotli/src/enc/bit_cost.rs create mode 100755 rust/vendor/brotli/src/enc/block_split.rs create mode 100755 rust/vendor/brotli/src/enc/block_splitter.rs create mode 100755 rust/vendor/brotli/src/enc/brotli_bit_stream.rs create mode 100755 rust/vendor/brotli/src/enc/cluster.rs create mode 100644 rust/vendor/brotli/src/enc/combined_alloc.rs create mode 100755 rust/vendor/brotli/src/enc/command.rs create mode 100755 rust/vendor/brotli/src/enc/compat.rs create mode 100755 rust/vendor/brotli/src/enc/compress_fragment.rs create mode 100755 rust/vendor/brotli/src/enc/compress_fragment_two_pass.rs create mode 100755 rust/vendor/brotli/src/enc/constants.rs create mode 100644 rust/vendor/brotli/src/enc/context_map_entropy.rs create mode 100755 rust/vendor/brotli/src/enc/dictionary_hash.rs create mode 100755 rust/vendor/brotli/src/enc/encode.rs create mode 100644 rust/vendor/brotli/src/enc/entropy_encode.rs create mode 100644 rust/vendor/brotli/src/enc/fast_log.rs create mode 100644 rust/vendor/brotli/src/enc/find_stride.rs create mode 100644 rust/vendor/brotli/src/enc/fixed_queue.rs create mode 100755 rust/vendor/brotli/src/enc/histogram.rs create mode 100644 rust/vendor/brotli/src/enc/input_pair.rs create mode 100644 rust/vendor/brotli/src/enc/interface.rs create mode 100644 rust/vendor/brotli/src/enc/ir_interpret.rs create mode 100755 rust/vendor/brotli/src/enc/literal_cost.rs create mode 100755 rust/vendor/brotli/src/enc/metablock.rs create mode 100755 rust/vendor/brotli/src/enc/mod.rs create mode 100755 rust/vendor/brotli/src/enc/multithreading.rs create mode 100644 rust/vendor/brotli/src/enc/parameters.rs create mode 100644 rust/vendor/brotli/src/enc/pdf.rs create mode 100644 rust/vendor/brotli/src/enc/prior_eval.rs create mode 100755 rust/vendor/brotli/src/enc/reader.rs create mode 100644 rust/vendor/brotli/src/enc/singlethreading.rs create mode 100755 rust/vendor/brotli/src/enc/static_dict.rs create mode 100755 rust/vendor/brotli/src/enc/static_dict_lut.rs create mode 100644 rust/vendor/brotli/src/enc/stride_eval.rs create mode 100755 rust/vendor/brotli/src/enc/test.rs create mode 100644 rust/vendor/brotli/src/enc/threading.rs create mode 100755 rust/vendor/brotli/src/enc/utf8_util.rs create mode 100755 rust/vendor/brotli/src/enc/util.rs create mode 100755 rust/vendor/brotli/src/enc/vectorization.rs create mode 100644 rust/vendor/brotli/src/enc/weights.rs create mode 100755 rust/vendor/brotli/src/enc/worker_pool.rs create mode 100755 rust/vendor/brotli/src/enc/writer.rs create mode 100644 rust/vendor/brotli/src/ffi/alloc_util.rs create mode 100644 rust/vendor/brotli/src/ffi/broccoli.rs create mode 100755 rust/vendor/brotli/src/ffi/compressor.rs create mode 100644 rust/vendor/brotli/src/ffi/decompressor.rs create mode 100644 rust/vendor/brotli/src/ffi/mod.rs create mode 100755 rust/vendor/brotli/src/ffi/multicompress/mod.rs create mode 100755 rust/vendor/brotli/src/ffi/multicompress/test.rs create mode 100755 rust/vendor/brotli/src/lib.rs create mode 100644 rust/vendor/brotli/testdata/10x10y create mode 100644 rust/vendor/brotli/testdata/64x create mode 100644 rust/vendor/brotli/testdata/64x.compressed create mode 100644 rust/vendor/brotli/testdata/aaabaaaa create mode 100644 rust/vendor/brotli/testdata/alice29.txt create mode 100644 rust/vendor/brotli/testdata/alice29.txt.compressed create mode 100644 rust/vendor/brotli/testdata/asyoulik.txt create mode 100644 rust/vendor/brotli/testdata/asyoulik.txt.compressed create mode 100644 rust/vendor/brotli/testdata/backward65536 create mode 100644 rust/vendor/brotli/testdata/backward65536.compressed create mode 100644 rust/vendor/brotli/testdata/compressed_file create mode 100644 rust/vendor/brotli/testdata/compressed_file.compressed create mode 100644 rust/vendor/brotli/testdata/compressed_repeated create mode 100644 rust/vendor/brotli/testdata/compressed_repeated.compressed create mode 100644 rust/vendor/brotli/testdata/empty create mode 100644 rust/vendor/brotli/testdata/empty.compressed create mode 100644 rust/vendor/brotli/testdata/empty.compressed.00 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.01 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.02 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.03 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.04 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.05 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.06 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.07 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.08 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.09 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.10 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.11 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.12 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.13 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.14 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.15 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.16 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.17 create mode 100644 rust/vendor/brotli/testdata/empty.compressed.18 create mode 100644 rust/vendor/brotli/testdata/ends_with_truncated_dictionary create mode 100644 rust/vendor/brotli/testdata/monkey create mode 100644 rust/vendor/brotli/testdata/quickfox create mode 100644 rust/vendor/brotli/testdata/quickfox_repeated create mode 100644 rust/vendor/brotli/testdata/random_org_10k.bin create mode 100644 rust/vendor/brotli/testdata/random_then_unicode create mode 100644 rust/vendor/brotli/testdata/ukkonooa create mode 100644 rust/vendor/brotli/testdata/x create mode 100644 rust/vendor/brotli/testdata/x.compressed.00 create mode 100644 rust/vendor/brotli/testdata/x.compressed.01 create mode 100644 rust/vendor/brotli/testdata/x.compressed.02 create mode 100644 rust/vendor/brotli/testdata/x.compressed.03 create mode 100644 rust/vendor/brotli/testdata/xyzzy create mode 100644 rust/vendor/brotli/uncorrode.py (limited to 'rust/vendor/brotli') diff --git a/rust/vendor/brotli/.cargo-checksum.json b/rust/vendor/brotli/.cargo-checksum.json new file mode 100644 index 0000000..8b53162 --- /dev/null +++ b/rust/vendor/brotli/.cargo-checksum.json @@ -0,0 +1 @@ +{"files":{"Cargo.lock":"cc3f3168e1ddd57e1ca181d9837c72e41df36e7070d80bfef13a52338396b01a","Cargo.toml":"4bdf4bc0cdaf6a59acecb4f7e7d5e54ae59e50636340deb84b5ab35d2ecb53b7","LICENSE":"c0c56f26d9c051cac4d200c34c84e7ae9aaa853e01a982a1df08b09931e518ae","README.md":"6a525bd649249d5f53849069daf3ebafbac8da67459b5f79c25c21daa9b1edea","appveyor.yml":"3c1a3ecd7e6ea90c3e0194916f3c46cd46af1c0508585d445a06227b3f6b66d6","ci/before_deploy.ps1":"bb7cd9ece5c203a31f5061101b6f926d1530bd71370a50e24bdc223db85a5f55","ci/before_deploy.sh":"a1c1c06fcac1e06197596c75aec71b7cec6ea1f3f47a64741c38422f0e047ab3","ci/install.sh":"8841985e8645d391829ba52cd669bc5c5d98b1fdd8979c7cfd3cd3573c4a0a4b","ci/script.sh":"e3fa22cf0912c10ed2a4454fbfb60b0645442323313fd8d105c1c7b9fe863a93","corrosion/backward_references_hq.rs":"d303f195bfc7b59d133eba3f237d62a5e480ad6d72c1c6a2c1c0d8973066ebdf","corrosion/backward_references_hq_safe.rs":"1a69de4641c06914e99d4604ab17586e57d935b26d8485280f684d301c1f3a48","examples/compress.rs":"4e09ae030b46750d9d18295612f8d50ff225e4dbaf9380c764e99fe2a7514d31","examples/decompress.rs":"9c88356603fea04a9518f4f18a60f2599e405922f5f7c6ef8279ac947445d720","research/concatenate_some.py":"6fd9ab11d49f5606e8efbe362a70b5909610f16eadb8a97a7b1623408ba16feb","research/frombase2.py":"e224da9235cc11b4e1c78056169ad25795003fda6390c9ce66d2c0cdf77c6506","research/tobase2.py":"f326c0cdf20ffbcbe6df0dec451fd46d8a84ab669d8070cecd74c099cf447d5f","rustfmt.toml":"e38d9677ca881648112d3d69529f58efe0ac3316d35d51c527a5bcdbfd21dcf0","src/bin/brotli.rs":"295f88bfaed8e629aecbb5cc534b1722e8b4a2ebf9efd70411bac725b5ab84f2","src/bin/catbrotli.rs":"2d8c84ab3855e68916b6bccc6251e469a935487131053dd70e9220fa3fc1062f","src/bin/integration_tests.rs":"d37f62d968172e414248e33e1f79853d754ee4cc17314f5b6debfdb704637916","src/bin/test_broccoli.rs":"f386e41b79c8c167bc25dd8c468d1417ef732049c904ba9db386b9934677f853","src/bin/test_custom_dict.rs":"8baf82273187dab948d2570c1f9e34659e66fc0d41653d25ce4f7ef7c1cb29bb","src/bin/test_threading.rs":"c6715794cf17febdc21d52895791a845ef780db4728297ae8d1edbb2c5fc211c","src/bin/tests.rs":"8e767a713d6b6af240e40019949b10bab70a2b78c68397a3c904a6bb0115415a","src/bin/util.rs":"8794cdc34bc9e7a796e58277d832fcf750ed57dcfbd950135a2c1a359b5320b0","src/bin/validate.rs":"2fa66765c62236f1ae02e65817aad1daf2e39e161b1f0618482f4f84d4833434","src/concat/mod.rs":"d5c731c11c597e62f09c2778207ff3dcf116eb594dfd7be434d4d94a2c3d5965","src/enc/backward_references/benchmark.rs":"b6ccefca109fc6542d00c448f3a16fdca836020c94977767780a79bfe469d209","src/enc/backward_references/hash_to_binary_tree.rs":"90687f6b79b9a00b4bae70be8a6a55e2bbf678475b2444c6b02db11ffffa264a","src/enc/backward_references/hq.rs":"e69e874627dc9b3835410336d18f054b44969b4fcb550fd81b967c9436ea07d9","src/enc/backward_references/mod.rs":"2736fc38ab7b749b0db774f9ce221216fe4ee0694174227d4d70cc2f6051cd57","src/enc/backward_references/test.rs":"43b6e45c1efdc05bc01b03745c830cd752669e9651459fd8951689764323fab3","src/enc/bit_cost.rs":"41abddc5ad3dc7e9da79522a4901e23d9022fb833a2a9b457e4dd51ca2eb8f66","src/enc/block_split.rs":"0cd7b3bf3d9f7171e1ea73c8b70627db9df3c98dfff05a5e32f474cb6d947970","src/enc/block_splitter.rs":"f8b23792b76c6fe427554713d532cfcfd734d1d9b4aa495a2558761a58b02ddd","src/enc/brotli_bit_stream.rs":"06a6adeb42d5253fe6a1aebbe49e664de9f36d57d6bd4de5d2b5c6be0ff6cc64","src/enc/cluster.rs":"f242a53105d46301676290f57c15ea057a25b62f8d260c5419ab846f71520cf9","src/enc/combined_alloc.rs":"f5bf6a8df2443eda019e11ce072a45a5b24a9f140db11cbbd223fccc4d8dcfac","src/enc/command.rs":"3c345ca50f1136c7a2ba49f4a993482dfdd7e0d5de4cf29126b2e331a249a204","src/enc/compat.rs":"c97dd6a224ee098e8f08e6fb99fd410abe1f5f5961a6e3ecdbd60a50850f4cc3","src/enc/compress_fragment.rs":"f50369e42fae880ba5b1f000ec59c23748d8978664139578b966c433a42b3c95","src/enc/compress_fragment_two_pass.rs":"38b394df2ed51333f1c8c900eac22c215c16f884716d38a76bcef867ddd213ca","src/enc/constants.rs":"ede8d8009334a57a9911c8eee47476c7039fe8eaecd20dfc0c55ccbfb7ed0bbe","src/enc/context_map_entropy.rs":"f4efcac9e3d6103f6711ad491bdd6d51f22d2ed8f603f29c1fb53d95326bebc7","src/enc/dictionary_hash.rs":"fc37fde783d263e4a555d87218f76d7fb2cb3960af65378753535b58aa6f3c45","src/enc/encode.rs":"ac3a7168acb8fbe5deefd5090c3f18a8ddcd3d8c965831ffccd2cc84bb656e28","src/enc/entropy_encode.rs":"54ba6374fb1109eb30b31cd2e78ec9ef6fb8c4ac3c6c34915301f181fa3a0129","src/enc/fast_log.rs":"641adf5cfd0ff949323082f47acedac2a650a88e2105e9de990fda266542fe44","src/enc/find_stride.rs":"eb1fcad587bf10c94a7f3eba1022010342bf034e65f1759e438de7650d91bcd1","src/enc/fixed_queue.rs":"6a4237895dbf929eb4d32b698044165c0809664562427cf4930193112d304f89","src/enc/histogram.rs":"54a8970bd6e84506aa1fbffa9f13912e800b1d31bbcba8c1d39c56398a7a0c4e","src/enc/input_pair.rs":"37df618cba8061887662336185d8f5fce0925c483119e8a16d2a7a98815d5bdb","src/enc/interface.rs":"1b5c9caa89b6f99c26a4074e51ed9a913be2696a877d36c6112a84d012321dcf","src/enc/ir_interpret.rs":"07368ebb0351c5d46ee129d178aae40f72b64b2ea940fed8b28251ab0bf3920c","src/enc/literal_cost.rs":"f8cd051e93eb97c4e083621b4de36b6cc35766b49f4f69012a384b54001e96a7","src/enc/metablock.rs":"89b70c5a185a0f19fb7cffe172127b8d2fe480af44d0019e7992cc17e34e28db","src/enc/mod.rs":"35b4881eb99d22d53f8b59ab97875846ae67c357755ee2872ff930e2e7d294d8","src/enc/multithreading.rs":"7205ed1b50150abb159715814b59e73b38b95e1637dac7088e6ae3afe955adf2","src/enc/parameters.rs":"386075cf641a466c95550b95d5aa5476efffa4609707c20f8ffb6901a2a9b6df","src/enc/pdf.rs":"ebade0d763ea1af7f25fbea771d1ba5bd0a5a0f39d420c9983c2e82315328533","src/enc/prior_eval.rs":"1ed4d87a400609e977e1a6b705790f01f5587af9aeb6fdef55dd6e3182496834","src/enc/reader.rs":"54d95964b69614863c3ef4a6163a589950391a1a997c3242b44878055eaf71ae","src/enc/singlethreading.rs":"c1eba2f89641273662a731e0b5dfc79b276515323a24d0bea7184c4609417f41","src/enc/static_dict.rs":"438899e84d8139aeb236777a5e2050d154701e54f4b5a82ec679c2caa0822a22","src/enc/static_dict_lut.rs":"9ea70e224e2cd77f7577d3606fc17dd9f8dd82fb013628e0844ba4e33c2730cf","src/enc/stride_eval.rs":"bd36690b5bde071a3ad3b34e581fb9d4e53daeba8f6cd00144ccc23ff6d9b568","src/enc/test.rs":"279cb2462de37104d9bd031217df32e0ff511c27bcd0692b03f80c5253d73fed","src/enc/threading.rs":"aba1735d0698aaa0d960f4153898f6f183dccbfce991806c936c5e31af76af9a","src/enc/utf8_util.rs":"885e06ecdd0e43b93c9c46521266915bd37bee36e92f8cec54652971422ffd83","src/enc/util.rs":"7621cd03bae1f00c4265c38a1a3aeddd848580bbe77325c5c56a8d997c05845e","src/enc/vectorization.rs":"0fe0be2d3c773c05542b393c428e7417283618fbbdb14389c5f2fa6353c28aa5","src/enc/weights.rs":"c28f24c40ea3633ef408072aec9c418248f98d3b48e899bb181ff0e77bcc32b4","src/enc/worker_pool.rs":"e2c1afa79d57d4248e8e8af276bc24748870bdf605e194f5e8c99fdc578516e9","src/enc/writer.rs":"0e9e8c99fbc9a0e0eba47a596e56e450703df1c9954245b483e8918c3c13115a","src/ffi/alloc_util.rs":"01f51f19d32a7caeb0b28f36f0f7d1abefe34f39ff34b40f92eb54ecc08f28a7","src/ffi/broccoli.rs":"2b45b49c1229c76b8e52474bc0d6787879b5256dcbda8c8d053144abce1a259f","src/ffi/compressor.rs":"63d5b667a18c31d7fa0837a7f49434513f9bb10a53d58357ba2d0994059b32ee","src/ffi/decompressor.rs":"bdd78a90dbe3797747cf69be2fe70af4136c6c37d0d136e09919b501590e12f4","src/ffi/mod.rs":"401b3daee423fcc68bfd6fed6d77ba41feaa7af3637f2dbecc5ba7695f2eb655","src/ffi/multicompress/mod.rs":"aa3f53ba77bf6daf8234a3aefe60a0e9130e4d7ad8031eb238e7b0eebce8f603","src/ffi/multicompress/test.rs":"dc783483571aad4d7f41a79da8cbb0e8374845e27e1de1198014c8abb4746fa0","src/lib.rs":"ea2d2ec754a062b6afe0033234e7e6f55bf4845a639357c0cfa70a3de0db5de3","testdata/10x10y":"41bd4c895e9fb36d74bc97db5092872a24267e3b0455ff6152b0d262faa00d49","testdata/64x":"be4d3ed1fc5f5cfa00735b28605a975f3293fa235d23abb1d9dea380fba0fb87","testdata/64x.compressed":"f0273c38c6a55c1d9ccb047da04bacdc4bb07acc44ff83871e6b3490dfc2c313","testdata/aaabaaaa":"af61729418abe3db1769fa5e16135d571fc9e78c274bc348bd02989150d0760f","testdata/alice29.txt":"7467306ee0feed4971260f3c87421154a05be571d944e9cb021a5713700c38f0","testdata/alice29.txt.compressed":"69e902ef5cd9247302e4f66c313271bcff32eeb38e5eec7ca7744cf98106d5c2","testdata/asyoulik.txt":"eaa3526fe53859f34ecdf255712f9ecf0b2c903451d4755b2edaa2e2599cb0fc","testdata/asyoulik.txt.compressed":"605f6bdf129de59fb490f55180f3183e44ff7e2eab88ee931bd51a3757434404","testdata/backward65536":"a6dbac2165542001c574fe1d5ed6ca646203660c228cac57b47a9fec68c20217","testdata/backward65536.compressed":"757a524ce5fb43ea5e150b919ff635fd494142508d779f39e48e29ba1f61fb86","testdata/compressed_file":"69e902ef5cd9247302e4f66c313271bcff32eeb38e5eec7ca7744cf98106d5c2","testdata/compressed_file.compressed":"ee6a6e2c37f742596f6fd5a11f186c70687b60b46f4998795d4e8f33d14eccb0","testdata/compressed_repeated":"9538e078cb2d9493befede2c004dafcfcbf5a3caf0329285e7d4d49b48da0734","testdata/compressed_repeated.compressed":"5839e626bc601d2d7e121408a0af76676369de5dc5102329ffc05ef16f0b16b7","testdata/empty":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","testdata/empty.compressed":"67586e98fad27da0b9968bc039a1ef34c939b9b8e523a8bef89d478608c5ecf6","testdata/empty.compressed.00":"67586e98fad27da0b9968bc039a1ef34c939b9b8e523a8bef89d478608c5ecf6","testdata/empty.compressed.01":"ac38783f6a3b2fe3b579718d6ba8493a456d800665b4433a0e7c823cff90a603","testdata/empty.compressed.02":"ef1534d0c6cfe8a961a19e64689dc8ba07d92b0498121852cc77c7fab995e9e2","testdata/empty.compressed.03":"433a0fdd4ca1453e5a512cfbbea0a51b8fd138de3198e064f8ed8f23f6b83572","testdata/empty.compressed.04":"e25be31e89368225296188140d8db9b7c6aef9060329a255bae3ac60b12cc2b1","testdata/empty.compressed.05":"89e451d0952dc7cef33e71a58cbf816825c210cfb5e9a61e0aa5f98d14b46302","testdata/empty.compressed.06":"83d9749292117a7555982bfdbec3c4bd6eebc4ccd972e62d55f08e74217a1adb","testdata/empty.compressed.07":"f8acfa9c2f5dc317a07919235f2c987d7632516e035bd75a41f0e5da8752cf6e","testdata/empty.compressed.08":"4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce","testdata/empty.compressed.09":"ef2d127de37b942baad06145e54b0c619a1f22327b2ebbcfbec78f5564afe39d","testdata/empty.compressed.10":"7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451","testdata/empty.compressed.11":"19581e27de7ced00ff1ce50b2047e7a567c76b1cbaebabe5ef03f7c3017bb5b7","testdata/empty.compressed.12":"41b805ea7ac014e23556e98bb374702a08344268f92489a02f0880849394a1e4","testdata/empty.compressed.13":"380918b946a526640a40df5dced6516794f3d97bbd9e6bb553d037c4439f31c3","testdata/empty.compressed.14":"8a8de823d5ed3e12746a62ef169bcf372be0ca44f0a1236abc35df05d96928e1","testdata/empty.compressed.15":"58f7b0780592032e4d8602a3e8690fb2c701b2e1dd546e703445aabd6469734d","testdata/empty.compressed.16":"592b1bea772c8f6478bbf8ee7965c9697887d68fbbe07224c5d1680056cbe6de","testdata/empty.compressed.17":"95a77d2d0275fa7d30042c567a78025d5b79ed96967873de8d57e1d152b890c4","testdata/empty.compressed.18":"1f3710654b87dc9a31778bfb09d476dca2dc96ac63f0d0ef9f6de17f363a1b2b","testdata/ends_with_truncated_dictionary":"45251d7728e5825ecc753d61861e3758b1ea128de474d24e541ee669502fa9cf","testdata/monkey":"937ad127fe0e373e0e267d11905f2bca154f40fe6fd438b6ddcce40de2ddcd99","testdata/quickfox":"d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592","testdata/quickfox_repeated":"254fdc641d1a65d0b1e427e4b0a1e16a96a5242adb98af71833782ba99c3dd82","testdata/random_org_10k.bin":"3035553aebbac63be49232495f41022bd9de43c6818917f3865e12ce8808b39e","testdata/random_then_unicode":"c4a47ed7a21d92ab9b5dae41fd1283de31dfb0f0b2c5d57af0802af1a91d4c3e","testdata/ukkonooa":"1fb2529b0c6fbf80a60d2bb4c20efba2fff6cecb0c52d42693d404501064f407","testdata/x":"4b68ab3847feda7d6c62c1fbcbeebfa35eab7351ed5e78f4ddadea5df64b8015","testdata/x.compressed.00":"69619f0d475e644c35ffeab36b4868a16a7382518d848c3a9a2c91db722c83ae","testdata/x.compressed.01":"7ff671e6adc5e24be8269e7345ebcf16d94766ffcd95323e137e848c972efe47","testdata/x.compressed.02":"c8d419e71a8bded7281954eda0a0f3cbe5aeeae31920fd5075b993089ce7cb0a","testdata/x.compressed.03":"42db916a1a0954936cdb099292d10851228037eba679af5bbe402106ef209aa5","testdata/xyzzy":"7609128715518308672067aab169e24944ead24e3d732aab8a8f0b7013a65564","uncorrode.py":"1cf33a22ddd7d2a868eef023bacfe2c3808cb257a54cdc7bda2c0343e7ab631e"},"package":"516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f"} \ No newline at end of file diff --git a/rust/vendor/brotli/Cargo.lock b/rust/vendor/brotli/Cargo.lock new file mode 100644 index 0000000..d70cc37 --- /dev/null +++ b/rust/vendor/brotli/Cargo.lock @@ -0,0 +1,121 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "brotli" +version = "3.4.0" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", + "sha2", +] + +[[package]] +name = "brotli-decompressor" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da74e2b81409b1b743f8f0c62cc6254afefb8b8e50bbfe3735550f7aeefa3448" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cpufeatures" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "libc" +version = "0.2.148" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" diff --git a/rust/vendor/brotli/Cargo.toml b/rust/vendor/brotli/Cargo.toml new file mode 100644 index 0000000..f8c9c24 --- /dev/null +++ b/rust/vendor/brotli/Cargo.toml @@ -0,0 +1,77 @@ +# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO +# +# When uploading crates to the registry Cargo will automatically +# "normalize" Cargo.toml files for maximal compatibility +# with all versions of Cargo and also rewrite `path` dependencies +# to registry (e.g., crates.io) dependencies. +# +# If you are reading this file be aware that the original Cargo.toml +# will likely look very different (and much more reasonable). +# See Cargo.toml.orig for the original contents. + +[package] +name = "brotli" +version = "3.4.0" +authors = [ + "Daniel Reiter Horn ", + "The Brotli Authors", +] +autobins = false +description = "A brotli compressor and decompressor that with an interface avoiding the rust stdlib. This makes it suitable for embedded devices and kernels. It is designed with a pluggable allocator so that the standard lib's allocator may be employed. The default build also includes a stdlib allocator and stream interface. Disable this with --features=no-stdlib. All included code is safe." +homepage = "https://github.com/dropbox/rust-brotli" +documentation = "https://docs.rs/brotli/" +readme = "README.md" +keywords = [ + "brotli", + "decompression", + "lz77", + "huffman", + "nostd", +] +license = "BSD-3-Clause/MIT" +repository = "https://github.com/dropbox/rust-brotli" + +[profile.release] +lto = true +incremental = false + +[[bin]] +name = "brotli" +doc = false + +[[bin]] +name = "catbrotli" +doc = false + +[dependencies.alloc-no-stdlib] +version = "2.0" + +[dependencies.alloc-stdlib] +version = "~0.2" +optional = true + +[dependencies.brotli-decompressor] +version = "~2.5" +default-features = false + +[dependencies.sha2] +version = "~0.10" +optional = true + +[features] +benchmark = ["brotli-decompressor/benchmark"] +default = [ + "std", + "ffi-api", +] +disable-timer = ["brotli-decompressor/disable-timer"] +external-literal-probability = [] +ffi-api = [] +pass-through-ffi-panics = [] +seccomp = ["brotli-decompressor/seccomp"] +std = [ + "alloc-stdlib", + "brotli-decompressor/std", +] +validation = ["sha2"] +vector_scratch_space = [] diff --git a/rust/vendor/brotli/LICENSE b/rust/vendor/brotli/LICENSE new file mode 100644 index 0000000..cd496ba --- /dev/null +++ b/rust/vendor/brotli/LICENSE @@ -0,0 +1,12 @@ +Copyright (c) 2016 Dropbox, Inc. +All rights reserved. + +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. diff --git a/rust/vendor/brotli/README.md b/rust/vendor/brotli/README.md new file mode 100644 index 0000000..d7faf81 --- /dev/null +++ b/rust/vendor/brotli/README.md @@ -0,0 +1,188 @@ +# rust-brotli + +[![crates.io](https://img.shields.io/crates/v/brotli.svg)](https://crates.io/crates/brotli) +[![Build Status](https://travis-ci.org/dropbox/rust-brotli.svg?branch=master)](https://travis-ci.org/dropbox/rust-brotli) + +## What's new in 3.4 +Brotli decompressor's reader and writer has better behavior when operating upon brotli streams with extra bits at the end. +Optional features like stdsimd are now tested or disabled for now. + +## What's new in 3.2 +* into_inner conversions for both Reader and Writer classes + +## What's new in 3.0 +* A fully compatible FFI for drop-in compatibiltiy with the https://github.com/google/brotli binaries + * custom allocators fully supported +* Multithreaded compression so multiple threads can operate in unison on a single file +* Concatenatability mode to add the feature requested in https://github.com/google/brotli/issues/628 + * binary tool catbrotli can accomplish this if the first file was specified with -apendable and the second with -catable +* validation mode where a file is double-checked to be able to be decompressed with the same settings; useful for benchmarking or fuzzing +* Magic Number: where the brotli file can have a useful header with a few magic bytes, concatability info and a final output size for pre-allocating memory + +## What's new in 2.5 +* In 2.5 The callback also passes down an allocator to make new StaticCommands and PDFs and 256 bit floating point vectors. +* In 2.4 The callback with the compression intermediate representation now passes a full metablock at a time. Also these items are mutable +in case futher optimization is desired + +## What's new in 2.3 + +* Flush now produces output instead of calling finish on the stream. This allows you to use the writer abstraction to +get immediate output without having to resort to the CompressStream internal abstraction + +## Project Requirements + +Direct no-stdlib port of the C brotli compressor to Rust + +no dependency on the Rust stdlib: this library would be ideal for decompressing within a rust kernel among other things. + +This is useful to see how C and Rust compare in an apples-to-apples +comparison where the same algorithms and data structures and +optimizations are employed. + +## Compression Usage + +Rust brotli currently supports compression levels 0 - 11 +They should be bitwise identical to the brotli C compression engine at compression levels 0-9 +Recommended lg_window_size is between 20 and 22 + +### With the io::Read abstraction +```rust +let mut input = brotli::CompressorReader::new(&mut io::stdin(), 4096 /* buffer size */, + quality as u32, lg_window_size as u32); +``` +then you can simply read input as you would any other io::Read class + +### With the io::Write abstraction + +```rust +let mut writer = brotli::Compressor::new(&mut io::stdout(), 4096 /* buffer size */, + quality as u32, lg_window_size as u32); +``` + +There are also methods to build Compressor Readers or Writers using the with_params static function + +eg: +```rust +let params = BrotliEncoderParams::default(); +// modify params to fit the application needs +let mut writer = brotli::Compressor::with_params(&mut io::stdout(), 4096 /* buffer size */, + params); +``` +or for the reader +```rust +let params = BrotliEncoderParams::default(); +// modify params to fit the application needs +let mut writer = brotli::CompressorReader::with_params(&mut io::stdin(), 4096 /* buffer size */, + params); +``` + + +### With the Stream Copy abstraction + +```rust +match brotli::BrotliCompress(&mut io::stdin(), &mut io::stdout(), &brotli_encoder_params) { + Ok(_) => {}, + Err(e) => panic!("Error {:?}", e), +} +``` + +## Decompression Usage + +### With the io::Read abstraction + +```rust +let mut input = brotli::Decompressor::new(&mut io::stdin(), 4096 /* buffer size */); +``` +then you can simply read input as you would any other io::Read class + +### With the io::Write abstraction + +```rust +let mut writer = brotli::DecompressorWriter::new(&mut io::stdout(), 4096 /* buffer size */); +``` + +### With the Stream Copy abstraction + +```rust +match brotli::BrotliDecompress(&mut io::stdin(), &mut io::stdout()) { + Ok(_) => {}, + Err(e) => panic!("Error {:?}", e), +} +``` + +### With manual memory management + +There are 3 steps to using brotli without stdlib + +1. setup the memory manager +2. setup the BrotliState +3. in a loop, call BrotliDecompressStream + +in Detail + +```rust +// at global scope declare a MemPool type -- in this case we'll choose the heap to +// avoid unsafe code, and avoid restrictions of the stack size + +declare_stack_allocator_struct!(MemPool, heap); + +// at local scope, make a heap allocated buffers to hold uint8's uint32's and huffman codes +let mut u8_buffer = define_allocator_memory_pool!(4096, u8, [0; 32 * 1024 * 1024], heap); +let mut u32_buffer = define_allocator_memory_pool!(4096, u32, [0; 1024 * 1024], heap); +let mut hc_buffer = define_allocator_memory_pool!(4096, HuffmanCode, [0; 4 * 1024 * 1024], heap); +let heap_u8_allocator = HeapPrealloc::::new_allocator(4096, &mut u8_buffer, bzero); +let heap_u32_allocator = HeapPrealloc::::new_allocator(4096, &mut u32_buffer, bzero); +let heap_hc_allocator = HeapPrealloc::::new_allocator(4096, &mut hc_buffer, bzero); + +// At this point no more syscalls are going to be needed since everything can come from the allocators. + +// Feel free to activate SECCOMP jailing or other mechanisms to secure your application if you wish. + +// Now it's possible to setup the decompressor state +let mut brotli_state = BrotliState::new(heap_u8_allocator, heap_u32_allocator, heap_hc_allocator); + +// at this point the decompressor simply needs an input and output buffer and the ability to track +// the available data left in each buffer +loop { + result = BrotliDecompressStream(&mut available_in, &mut input_offset, &input.slice(), + &mut available_out, &mut output_offset, &mut output.slice_mut(), + &mut written, &mut brotli_state); + + // just end the decompression if result is BrotliResult::ResultSuccess or BrotliResult::ResultFailure +} +``` + +This interface is the same interface that the C brotli decompressor uses + +Also feel free to use custom allocators that invoke Box directly. +This example illustrates a mechanism to avoid subsequent syscalls after the initial allocation + +## Using the C interface + +rust-brotli is a drop-in replacement for the official https://github.com/google/brotli C +implementation. That means you can use it from any place that supports that library. +To build rust-brotli in this manner enter the c subdirectory and run make there + +cd c && make + +this should build c/target/release/libbrotli.so and should build the vanilla +command line tool in C for compressing and decompressing any brotli file. + +the libbrotli.so in c/target/release should be able to replace any other libbrotli.so +file, but with all the advantages of using safe rust (except in the FFI bindings) + +The code also allows a wider range of options, including forcing the prediction mode +(eg UTF8 vs signed vs MSB vs LSB) and changing the weight of the literal cost from 540 + to other values. + +Additionally the CATABLE and APPENDABLE options are exposed and allow concatenation of files +created in this manner. + +Specifically CATABLE files can be concatenated in any order using the catbrotli tool +and APPENDABLE files can be the first file in a sequence of catable files... +eg you can combine +appendable.br catable1.br catable2.br catable3.br + +or simply +catable0.br catable1.br catable2.br catable3.br + diff --git a/rust/vendor/brotli/appveyor.yml b/rust/vendor/brotli/appveyor.yml new file mode 100644 index 0000000..96a563c --- /dev/null +++ b/rust/vendor/brotli/appveyor.yml @@ -0,0 +1,51 @@ +environment: + RUST_VERSION: stable + CRATE_NAME: brotli + matrix: + - TARGET: x86_64-pc-windows-gnu + BITS: 64 + MSYS2: 1 + - TARGET: x86_64-pc-windows-msvc + BITS: 64 + - TARGET: i686-pc-windows-gnu + BITS: 32 + MSYS2: 1 + - TARGET: i686-pc-windows-msvc + BITS: 32 +install: + - curl -sSf -o rustup-init.exe https://win.rustup.rs/ + - rustup-init.exe -y --default-host %TARGET% --default-toolchain %RUST_VERSION% + - set PATH=%PATH%;C:\Users\appveyor\.cargo\bin + - if defined MSYS2 set PATH=C:\msys64\mingw%BITS%\bin;%PATH% + - rustc -V + - cargo -V +build: false +test_script: + - cargo test --verbose + - set RUSTFLAGS=-C panic=abort + - set CARGO_PROFILE_RELEASE=panic=abort + - cargo build --verbose --release --features=validation +before_deploy: + - set CARGO_PROFILE_RELEASE=panic=abort + - set RUSTFLAGS=-C panic=abort + - cargo build --verbose --release --features=validation + - ps: ci\before_deploy.ps1 + +deploy: + artifact: /.*\.zip/ + auth_token: + secure: jKP3OCU0ukoMKenkxB/lhG9/tOXppd8ZWxCm9dS1VLzbkUoIUKt3+18pG3S54VdL + descriprion: 'windows rust-brotli build' + on: + RUST_VERSION: stable + provider: GitHub + +cache: + - C:\Users\appveyor\.cargo\registry + - target + +branches: + only: + # Release tags + - /^v\d+\.\d+\.\d+.*$/ + - master diff --git a/rust/vendor/brotli/ci/before_deploy.ps1 b/rust/vendor/brotli/ci/before_deploy.ps1 new file mode 100644 index 0000000..99784fe --- /dev/null +++ b/rust/vendor/brotli/ci/before_deploy.ps1 @@ -0,0 +1,22 @@ +# This script takes care of packaging the build artifacts that will go in the +# release zipfile + +$SRC_DIR = $PWD.Path +$STAGE = [System.Guid]::NewGuid().ToString() + +Set-Location $ENV:Temp +New-Item -Type Directory -Name $STAGE +Set-Location $STAGE + +$ZIP = "$SRC_DIR\$($Env:CRATE_NAME)-$($Env:APPVEYOR_REPO_TAG_NAME)-$($Env:TARGET).zip" + +Copy-Item "$SRC_DIR\target\release\brotli.exe" '.\' + +7z a "$ZIP" * + +Push-AppveyorArtifact "$ZIP" + +Remove-Item *.* -Force +Set-Location .. +Remove-Item $STAGE +Set-Location $SRC_DIR diff --git a/rust/vendor/brotli/ci/before_deploy.sh b/rust/vendor/brotli/ci/before_deploy.sh new file mode 100644 index 0000000..18159f6 --- /dev/null +++ b/rust/vendor/brotli/ci/before_deploy.sh @@ -0,0 +1,33 @@ +# This script takes care of building your crate and packaging it for release + +set -ex + +main() { + local src=$(pwd) \ + stage= + + case $TRAVIS_OS_NAME in + linux) + stage=$(mktemp -d) + ;; + osx) + stage=$(mktemp -d -t tmp) + ;; + esac + + test -f Cargo.lock || cargo generate-lockfile + + # TODO Update this to build the artifacts that matter to you + cross rustc --release --features=validation + + # TODO Update this to package the right artifacts + cp target/$TARGET/brotli $stage/ + + cd $stage + tar czf $src/$CRATE_NAME-$TRAVIS_TAG-$TARGET.tar.gz * + cd $src + + rm -rf $stage +} + +main diff --git a/rust/vendor/brotli/ci/install.sh b/rust/vendor/brotli/ci/install.sh new file mode 100644 index 0000000..80e18e4 --- /dev/null +++ b/rust/vendor/brotli/ci/install.sh @@ -0,0 +1,47 @@ +set -ex + +main() { + local target= + if [ $TRAVIS_OS_NAME = linux ]; then + target=x86_64-unknown-linux-musl + sort=sort + else + target=x86_64-apple-darwin + sort=gsort # for `sort --sort-version`, from brew's coreutils. + fi + + # Builds for iOS are done on OSX, but require the specific target to be + # installed. + case $TARGET in + aarch64-apple-ios) + rustup target install aarch64-apple-ios + ;; + armv7-apple-ios) + rustup target install armv7-apple-ios + ;; + armv7s-apple-ios) + rustup target install armv7s-apple-ios + ;; + i386-apple-ios) + rustup target install i386-apple-ios + ;; + x86_64-apple-ios) + rustup target install x86_64-apple-ios + ;; + esac + + # This fetches latest stable release + local tag=$(git ls-remote --tags --refs --exit-code https://github.com/japaric/cross \ + | cut -d/ -f3 \ + | grep -E '^v[0.1.0-9.]+$' \ + | $sort --version-sort \ + | tail -n1) + curl -LSfs https://japaric.github.io/trust/install.sh | \ + sh -s -- \ + --force \ + --git japaric/cross \ + --tag $tag \ + --target $target +} + +main diff --git a/rust/vendor/brotli/ci/script.sh b/rust/vendor/brotli/ci/script.sh new file mode 100644 index 0000000..984bd76 --- /dev/null +++ b/rust/vendor/brotli/ci/script.sh @@ -0,0 +1,23 @@ +# This script takes care of testing your crate + +set -ex + +# TODO This is the "test phase", tweak it as you see fit +main() { + cross build --target $TARGET + cross build --target $TARGET --release + + if [ ! -z $DISABLE_TESTS ]; then + return + fi + + cross test --target $TARGET + cross test --target $TARGET --release + + cross test --target $TARGET --release --features=no-stdlib +} + +# we don't run the "test phase" when doing deploys +if [ -z $TRAVIS_TAG ]; then + main +fi diff --git a/rust/vendor/brotli/corrosion/backward_references_hq.rs b/rust/vendor/brotli/corrosion/backward_references_hq.rs new file mode 100644 index 0000000..5c422dd --- /dev/null +++ b/rust/vendor/brotli/corrosion/backward_references_hq.rs @@ -0,0 +1,2606 @@ +extern { + fn BrotliAllocate( + m : *mut MemoryManager, n : usize + ) -> *mut std::os::raw::c_void; + fn BrotliEstimateBitCostsForLiterals( + pos : usize, + len : usize, + mask : usize, + data : *const u8, + cost : *mut f32 + ); + fn BrotliFindAllStaticDictionaryMatches( + dictionary : *const BrotliEncoderDictionary, + data : *const u8, + min_length : usize, + max_length : usize, + matches : *mut u32 + ) -> i32; + fn BrotliFree( + m : *mut MemoryManager, p : *mut std::os::raw::c_void + ); + fn log2(__x : f64) -> f64; + fn memcpy( + __dest : *mut std::os::raw::c_void, + __src : *const std::os::raw::c_void, + __n : usize + ) -> *mut std::os::raw::c_void; + fn memset( + __s : *mut std::os::raw::c_void, __c : i32, __n : usize + ) -> *mut std::os::raw::c_void; +} + +static mut kLog2Table + : *const f32 + = 0.0000000000000000f32 as (*const f32); + +static kDictNumBits : i32 = 15i32; + +static kDictHashMul32 : u32 = 0x1e35a7bdi32 as (u32); + +static mut kStaticDictionaryBuckets + : *const u16 + = 1i32 as (*const u16); + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct DictWord { + pub len : u8, + pub transform : u8, + pub idx : u16, +} + +static mut kStaticDictionaryWords + : *const DictWord + = 0i32 as (*const DictWord); + +static mut kInsBase : *mut u32 = 0i32 as (*mut u32); + +static mut kInsExtra : *mut u32 = 0i32 as (*mut u32); + +static mut kCopyBase : *mut u32 = 2i32 as (*mut u32); + +static mut kCopyExtra : *mut u32 = 0i32 as (*mut u32); + +#[no_mangle] +pub unsafe extern fn ctzll(mut x : usize) -> usize { + let mut count : u8 = 0i32 as (u8); + while x & 0i32 as (usize) != 0 { + count = (count as (i32) + 1i32) as (u8); + x = x >> 1i32; + } + count as (usize) +} + +static kInvalidMatch : u32 = 0xfffffffi32 as (u32); + +static kCutoffTransformsCount : u32 = 10i32 as (u32); + +static kCutoffTransforms + : usize + = 0x71b520ai32 as (usize) << 32i32 | 0xda2d3200u32 as (usize); + +static kHashMul32 : u32 = 0x1e35a7bdi32 as (u32); + +static kHashMul64 + : usize + = 0x1e35a7bdi32 as (usize) << 32i32 | 0x1e35a7bdi32 as (usize); + +static kHashMul64Long + : usize + = 0x1fe35a7bu32 as (usize) << 32i32 | 0xd3579bd3u32 as (usize); + +static kInfinity : f32 = 1.7e38f32; + +static mut kDistanceCacheIndex : *const u32 = 0i32 as (*const u32); + +static mut kDistanceCacheOffset + : *const i32 + = 0i32 as (*const i32); + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct Struct1 { + pub cost : f32, + pub next : u32, + pub shortcut : u32, +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct ZopfliNode { + pub length : u32, + pub distance : u32, + pub dcode_insert_length : u32, + pub u : Struct1, +} + +#[no_mangle] +pub unsafe extern fn BrotliInitZopfliNodes( + mut array : *mut ZopfliNode, mut length : usize +) { + let mut stub : ZopfliNode; + let mut i : usize; + stub.length = 1i32 as (u32); + stub.distance = 0i32 as (u32); + stub.dcode_insert_length = 0i32 as (u32); + stub.u.cost = kInfinity; + i = 0i32 as (usize); + while i < length { + *array.offset(i as (isize)) = stub; + i = i.wrapping_add(1 as (usize)); + } +} + +#[derive(Clone, Copy)] +#[repr(i32)] +pub enum BrotliEncoderMode { + BROTLI_MODE_GENERIC = 0i32, + BROTLI_MODE_TEXT = 1i32, + BROTLI_MODE_FONT = 2i32, +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct BrotliHasherParams { + pub type_ : i32, + pub bucket_bits : i32, + pub block_bits : i32, + pub hash_len : i32, + pub num_last_distances_to_check : i32, +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct BrotliDistanceParams { + pub distance_postfix_bits : u32, + pub num_direct_distance_codes : u32, + pub alphabet_size : u32, + pub max_distance : usize, +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct BrotliDictionary { + pub size_bits_by_length : *mut u8, + pub offsets_by_length : *mut u32, + pub data_size : usize, + pub data : *const u8, +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct BrotliEncoderDictionary { + pub words : *const BrotliDictionary, + pub cutoffTransformsCount : u32, + pub cutoffTransforms : usize, + pub hash_table : *const u16, + pub buckets : *const u16, + pub dict_words : *const DictWord, +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct BrotliEncoderParams { + pub mode : BrotliEncoderMode, + pub quality : i32, + pub lgwin : i32, + pub lgblock : i32, + pub size_hint : usize, + pub disable_literal_context_modeling : i32, + pub large_window : i32, + pub hasher : BrotliHasherParams, + pub dist : BrotliDistanceParams, + pub dictionary : BrotliEncoderDictionary, +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct Command { + pub insert_len_ : u32, + pub copy_len_ : u32, + pub dist_extra_ : u32, + pub cmd_prefix_ : u16, + pub dist_prefix_ : u16, +} + +unsafe extern fn ZopfliNodeCopyLength( + mut self : *const ZopfliNode +) -> u32 { + (*self).length & 0x1ffffffi32 as (u32) +} + +unsafe extern fn ZopfliNodeCopyDistance( + mut self : *const ZopfliNode +) -> u32 { + (*self).distance +} + +unsafe extern fn ZopfliNodeLengthCode( + mut self : *const ZopfliNode +) -> u32 { + let modifier : u32 = (*self).length >> 25i32; + ZopfliNodeCopyLength(self).wrapping_add(9u32).wrapping_sub( + modifier + ) +} + +unsafe extern fn brotli_min_size_t( + mut a : usize, mut b : usize +) -> usize { + if a < b { a } else { b } +} + +unsafe extern fn ZopfliNodeDistanceCode( + mut self : *const ZopfliNode +) -> u32 { + let short_code : u32 = (*self).dcode_insert_length >> 27i32; + if short_code == 0i32 as (u32) { + ZopfliNodeCopyDistance(self).wrapping_add( + 16i32 as (u32) + ).wrapping_sub( + 1i32 as (u32) + ) + } else { + short_code.wrapping_sub(1i32 as (u32)) + } +} + +unsafe extern fn Log2FloorNonZero(mut n : usize) -> u32 { + let mut result : u32 = 0i32 as (u32); + while { + n = n >> 1i32; + n + } != 0 { + result = result.wrapping_add(1 as (u32)); + } + result +} + +unsafe extern fn PrefixEncodeCopyDistance( + mut distance_code : usize, + mut num_direct_codes : usize, + mut postfix_bits : usize, + mut code : *mut u16, + mut extra_bits : *mut u32 +) { if distance_code < (16i32 as (usize)).wrapping_add( + num_direct_codes + ) { + *code = distance_code as (u16); + *extra_bits = 0i32 as (u32); + } else { + let mut dist + : usize + = (1i32 as (usize) << postfix_bits.wrapping_add( + 2u32 as (usize) + )).wrapping_add( + distance_code.wrapping_sub(16i32 as (usize)).wrapping_sub( + num_direct_codes + ) + ); + let mut bucket + : usize + = Log2FloorNonZero(dist).wrapping_sub(1i32 as (u32)) as (usize); + let mut postfix_mask + : usize + = (1u32 << postfix_bits).wrapping_sub(1i32 as (u32)) as (usize); + let mut postfix : usize = dist & postfix_mask; + let mut prefix : usize = dist >> bucket & 1i32 as (usize); + let mut offset + : usize + = (2i32 as (usize)).wrapping_add(prefix) << bucket; + let mut nbits : usize = bucket.wrapping_sub(postfix_bits); + *code = (nbits << 10i32 | (16i32 as (usize)).wrapping_add( + num_direct_codes + ).wrapping_add( + (2i32 as (usize)).wrapping_mul( + nbits.wrapping_sub(1i32 as (usize)) + ).wrapping_add( + prefix + ) << postfix_bits + ).wrapping_add( + postfix + )) as (u16); + *extra_bits = (dist.wrapping_sub(offset) >> postfix_bits) as (u32); + } +} + +unsafe extern fn GetInsertLengthCode( + mut insertlen : usize +) -> u16 { + if insertlen < 6i32 as (usize) { + insertlen as (u16) + } else if insertlen < 130i32 as (usize) { + let mut nbits + : u32 + = Log2FloorNonZero( + insertlen.wrapping_sub(2i32 as (usize)) + ).wrapping_sub( + 1u32 + ); + ((nbits << 1i32) as (usize)).wrapping_add( + insertlen.wrapping_sub(2i32 as (usize)) >> nbits + ).wrapping_add( + 2i32 as (usize) + ) as (u16) + } else if insertlen < 2114i32 as (usize) { + Log2FloorNonZero( + insertlen.wrapping_sub(66i32 as (usize)) + ).wrapping_add( + 10i32 as (u32) + ) as (u16) + } else if insertlen < 6210i32 as (usize) { + 21u32 as (u16) + } else if insertlen < 22594i32 as (usize) { + 22u32 as (u16) + } else { + 23u32 as (u16) + } +} + +unsafe extern fn GetCopyLengthCode(mut copylen : usize) -> u16 { + if copylen < 10i32 as (usize) { + copylen.wrapping_sub(2i32 as (usize)) as (u16) + } else if copylen < 134i32 as (usize) { + let mut nbits + : u32 + = Log2FloorNonZero( + copylen.wrapping_sub(6i32 as (usize)) + ).wrapping_sub( + 1u32 + ); + ((nbits << 1i32) as (usize)).wrapping_add( + copylen.wrapping_sub(6i32 as (usize)) >> nbits + ).wrapping_add( + 4i32 as (usize) + ) as (u16) + } else if copylen < 2118i32 as (usize) { + Log2FloorNonZero( + copylen.wrapping_sub(70i32 as (usize)) + ).wrapping_add( + 12i32 as (u32) + ) as (u16) + } else { + 23u32 as (u16) + } +} + +unsafe extern fn CombineLengthCodes( + mut inscode : u16, mut copycode : u16, mut use_last_distance : i32 +) -> u16 { + let mut bits64 + : u16 + = (copycode as (u32) & 0x7u32 | (inscode as (u32) & 0x7u32) << 3i32) as (u16); + if use_last_distance != 0 && (inscode as (i32) < 8i32) && (copycode as (i32) < 16i32) { + if copycode as (i32) < 8i32 { + bits64 as (i32) + } else { + bits64 as (i32) | 64i32 + } as (u16) + } else { + let mut offset + : i32 + = 2i32 * ((copycode as (i32) >> 3i32) + 3i32 * (inscode as (i32) >> 3i32)); + offset = (offset << 5i32) + 0x40i32 + (0x520d40i32 >> offset & 0xc0i32); + (offset as (u16) as (i32) | bits64 as (i32)) as (u16) + } +} + +unsafe extern fn GetLengthCode( + mut insertlen : usize, + mut copylen : usize, + mut use_last_distance : i32, + mut code : *mut u16 +) { + let mut inscode : u16 = GetInsertLengthCode(insertlen); + let mut copycode : u16 = GetCopyLengthCode(copylen); + *code = CombineLengthCodes(inscode,copycode,use_last_distance); +} + +unsafe extern fn InitCommand( + mut self : *mut Command, + mut dist : *const BrotliDistanceParams, + mut insertlen : usize, + mut copylen : usize, + mut copylen_code_delta : i32, + mut distance_code : usize +) { + let mut delta : u32 = copylen_code_delta as (i8) as (u8) as (u32); + (*self).insert_len_ = insertlen as (u32); + (*self).copy_len_ = (copylen | (delta << 25i32) as (usize)) as (u32); + PrefixEncodeCopyDistance( + distance_code, + (*dist).num_direct_distance_codes as (usize), + (*dist).distance_postfix_bits as (usize), + &mut (*self).dist_prefix_ as (*mut u16), + &mut (*self).dist_extra_ as (*mut u32) + ); + GetLengthCode( + insertlen, + (copylen as (i32) + copylen_code_delta) as (usize), + if !!((*self).dist_prefix_ as (i32) & 0x3ffi32 == 0i32) { + 1i32 + } else { + 0i32 + }, + &mut (*self).cmd_prefix_ as (*mut u16) + ); +} + +#[no_mangle] +pub unsafe extern fn BrotliZopfliCreateCommands( + num_bytes : usize, + block_start : usize, + max_backward_limit : usize, + mut nodes : *const ZopfliNode, + mut dist_cache : *mut i32, + mut last_insert_len : *mut usize, + mut params : *const BrotliEncoderParams, + mut commands : *mut Command, + mut num_literals : *mut usize +) { + let mut pos : usize = 0i32 as (usize); + let mut offset : u32 = (*nodes.offset(0i32 as (isize))).u.next; + let mut i : usize; + let mut gap : usize = 0i32 as (usize); + i = 0i32 as (usize); + while offset != !(0i32 as (u32)) { + { + let mut next + : *const ZopfliNode + = &*nodes.offset( + pos.wrapping_add(offset as (usize)) as (isize) + ) as (*const ZopfliNode); + let mut copy_length + : usize + = ZopfliNodeCopyLength(next) as (usize); + let mut insert_length + : usize + = ((*next).dcode_insert_length & 0x7ffffffi32 as (u32)) as (usize); + pos = pos.wrapping_add(insert_length); + offset = (*next).u.next; + if i == 0i32 as (usize) { + insert_length = insert_length.wrapping_add(*last_insert_len); + *last_insert_len = 0i32 as (usize); + } + { + let mut distance : usize = ZopfliNodeCopyDistance(next) as (usize); + let mut len_code : usize = ZopfliNodeLengthCode(next) as (usize); + let mut max_distance + : usize + = brotli_min_size_t( + block_start.wrapping_add(pos), + max_backward_limit + ); + let mut is_dictionary + : i32 + = if !!(distance > max_distance.wrapping_add(gap)) { + 1i32 + } else { + 0i32 + }; + let mut dist_code + : usize + = ZopfliNodeDistanceCode(next) as (usize); + InitCommand( + &mut *commands.offset(i as (isize)) as (*mut Command), + &(*params).dist as (*const BrotliDistanceParams), + insert_length, + copy_length, + len_code as (i32) - copy_length as (i32), + dist_code + ); + if is_dictionary == 0 && (dist_code > 0i32 as (usize)) { + *dist_cache.offset(3i32 as (isize)) = *dist_cache.offset( + 2i32 as (isize) + ); + *dist_cache.offset(2i32 as (isize)) = *dist_cache.offset( + 1i32 as (isize) + ); + *dist_cache.offset(1i32 as (isize)) = *dist_cache.offset( + 0i32 as (isize) + ); + *dist_cache.offset(0i32 as (isize)) = distance as (i32); + } + } + *num_literals = (*num_literals).wrapping_add(insert_length); + pos = pos.wrapping_add(copy_length); + } + i = i.wrapping_add(1 as (usize)); + } + *last_insert_len = (*last_insert_len).wrapping_add( + num_bytes.wrapping_sub(pos) + ); +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct MemoryManager { + pub alloc_func : unsafe extern fn(*mut std::os::raw::c_void, usize) -> *mut std::os::raw::c_void, + pub free_func : unsafe extern fn(*mut std::os::raw::c_void, *mut std::os::raw::c_void), + pub opaque : *mut std::os::raw::c_void, +} + +unsafe extern fn MaxZopfliLen( + mut params : *const BrotliEncoderParams +) -> usize { + (if (*params).quality <= 10i32 { + 150i32 + } else { + 325i32 + }) as (usize) +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct ZopfliCostModel { + pub cost_cmd_ : *mut f32, + pub cost_dist_ : *mut f32, + pub distance_histogram_size : u32, + pub literal_costs_ : *mut f32, + pub min_cost_cmd_ : f32, + pub num_bytes_ : usize, +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct PosData { + pub pos : usize, + pub distance_cache : *mut i32, + pub costdiff : f32, + pub cost : f32, +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct StartPosQueue { + pub q_ : *mut PosData, + pub idx_ : usize, +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct BackwardMatch { + pub distance : u32, + pub length_and_code : u32, +} + +unsafe extern fn StoreLookaheadH10() -> usize { 128i32 as (usize) } + +unsafe extern fn InitZopfliCostModel( + mut m : *mut MemoryManager, + mut self : *mut ZopfliCostModel, + mut dist : *const BrotliDistanceParams, + mut num_bytes : usize +) { + let mut distance_histogram_size : u32 = (*dist).alphabet_size; + if distance_histogram_size > 544i32 as (u32) { + distance_histogram_size = 544i32 as (u32); + } + (*self).num_bytes_ = num_bytes; + (*self).literal_costs_ = if num_bytes.wrapping_add( + 2i32 as (usize) + ) > 0i32 as (usize) { + BrotliAllocate( + m, + num_bytes.wrapping_add(2i32 as (usize)).wrapping_mul( + std::mem::size_of::() + ) + ) as (*mut f32) + } else { + 0i32 as (*mut std::os::raw::c_void) as (*mut f32) + }; + (*self).cost_dist_ = if (*dist).alphabet_size > 0i32 as (u32) { + BrotliAllocate( + m, + ((*dist).alphabet_size as (usize)).wrapping_mul( + std::mem::size_of::() + ) + ) as (*mut f32) + } else { + 0i32 as (*mut std::os::raw::c_void) as (*mut f32) + }; + (*self).distance_histogram_size = distance_histogram_size; + if !(0i32 == 0) { } +} + +unsafe extern fn FastLog2(mut v : usize) -> f64 { + if v < std::mem::size_of::<*const f32>().wrapping_div( + std::mem::size_of::() + ) { + return *kLog2Table.offset(v as (isize)) as (f64); + } + log2(v as (f64)) +} + +unsafe extern fn ZopfliCostModelSetFromLiteralCosts( + mut self : *mut ZopfliCostModel, + mut position : usize, + mut ringbuffer : *const u8, + mut ringbuffer_mask : usize +) { + let mut literal_costs : *mut f32 = (*self).literal_costs_; + let mut literal_carry : f32 = 0.0f64 as (f32); + let mut cost_dist : *mut f32 = (*self).cost_dist_; + let mut cost_cmd : *mut f32 = (*self).cost_cmd_; + let mut num_bytes : usize = (*self).num_bytes_; + let mut i : usize; + BrotliEstimateBitCostsForLiterals( + position, + num_bytes, + ringbuffer_mask, + ringbuffer, + &mut *literal_costs.offset(1i32 as (isize)) as (*mut f32) + ); + *literal_costs.offset(0i32 as (isize)) = 0.0f64 as (f32); + i = 0i32 as (usize); + while i < num_bytes { + { + literal_carry = literal_carry + *literal_costs.offset( + i.wrapping_add(1i32 as (usize)) as (isize) + ); + *literal_costs.offset( + i.wrapping_add(1i32 as (usize)) as (isize) + ) = *literal_costs.offset(i as (isize)) + literal_carry; + literal_carry = literal_carry - (*literal_costs.offset( + i.wrapping_add(1i32 as (usize)) as (isize) + ) - *literal_costs.offset(i as (isize))); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0i32 as (usize); + while i < 704i32 as (usize) { + { + *cost_cmd.offset(i as (isize)) = FastLog2( + (11i32 as (u32)).wrapping_add( + i as (u32) + ) as (usize) + ) as (f32); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0i32 as (usize); + while i < (*self).distance_histogram_size as (usize) { + { + *cost_dist.offset(i as (isize)) = FastLog2( + (20i32 as (u32)).wrapping_add( + i as (u32) + ) as (usize) + ) as (f32); + } + i = i.wrapping_add(1 as (usize)); + } + (*self).min_cost_cmd_ = FastLog2(11i32 as (usize)) as (f32); +} + +unsafe extern fn InitStartPosQueue(mut self : *mut StartPosQueue) { + (*self).idx_ = 0i32 as (usize); +} + +unsafe extern fn BrotliUnalignedRead64( + mut p : *const std::os::raw::c_void +) -> usize { + *(p as (*const usize)) +} + +unsafe extern fn FindMatchLengthWithLimit( + mut s1 : *const u8, mut s2 : *const u8, mut limit : usize +) -> usize { + let mut matched : usize = 0i32 as (usize); + let mut limit2 + : usize + = (limit >> 3i32).wrapping_add(1i32 as (usize)); + while { + limit2 = limit2.wrapping_sub(1 as (usize)); + limit2 + } != 0 { + if BrotliUnalignedRead64( + s2 as (*const std::os::raw::c_void) + ) == BrotliUnalignedRead64( + s1.offset(matched as (isize)) as (*const std::os::raw::c_void) + ) { + s2 = s2.offset(8i32 as (isize)); + matched = matched.wrapping_add(8i32 as (usize)); + } else { + let mut x + : usize + = BrotliUnalignedRead64( + s2 as (*const std::os::raw::c_void) + ) ^ BrotliUnalignedRead64( + s1.offset(matched as (isize)) as (*const std::os::raw::c_void) + ); + let mut matching_bits : usize = ctzll(x) as (usize); + matched = matched.wrapping_add(matching_bits >> 3i32); + return matched; + } + } + limit = (limit & 7i32 as (usize)).wrapping_add(1i32 as (usize)); + while { + limit = limit.wrapping_sub(1 as (usize)); + limit + } != 0 { + if *s1.offset(matched as (isize)) as (i32) == *s2 as (i32) { + s2 = s2.offset(1 as (isize)); + matched = matched.wrapping_add(1 as (usize)); + } else { + return matched; + } + } + matched +} + +unsafe extern fn InitBackwardMatch( + mut self : *mut BackwardMatch, mut dist : usize, mut len : usize +) { + (*self).distance = dist as (u32); + (*self).length_and_code = (len << 5i32) as (u32); +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct H10 { + pub window_mask_ : usize, + pub buckets_ : *mut u32, + pub invalid_pos_ : u32, +} + +unsafe extern fn BrotliUnalignedRead32( + mut p : *const std::os::raw::c_void +) -> u32 { + *(p as (*const u32)) +} + +unsafe extern fn HashBytesH10(mut data : *const u8) -> u32 { + let mut h + : u32 + = BrotliUnalignedRead32( + data as (*const std::os::raw::c_void) + ).wrapping_mul( + kHashMul32 + ); + h >> 32i32 - 17i32 +} + +unsafe extern fn ForestH10(mut self : *mut H10) -> *mut u32 { + &mut *self.offset(1i32 as (isize)) as (*mut H10) as (*mut u32) +} + +unsafe extern fn LeftChildIndexH10( + mut self : *mut H10, pos : usize +) -> usize { + (2i32 as (usize)).wrapping_mul(pos & (*self).window_mask_) +} + +unsafe extern fn RightChildIndexH10( + mut self : *mut H10, pos : usize +) -> usize { + (2i32 as (usize)).wrapping_mul( + pos & (*self).window_mask_ + ).wrapping_add( + 1i32 as (usize) + ) +} + +unsafe extern fn StoreAndFindMatchesH10( + mut self : *mut H10, + data : *const u8, + cur_ix : usize, + ring_buffer_mask : usize, + max_length : usize, + max_backward : usize, + best_len : *mut usize, + mut matches : *mut BackwardMatch +) -> *mut BackwardMatch { + let cur_ix_masked : usize = cur_ix & ring_buffer_mask; + let max_comp_len + : usize + = brotli_min_size_t(max_length,128i32 as (usize)); + let should_reroot_tree + : i32 + = if !!(max_length >= 128i32 as (usize)) { 1i32 } else { 0i32 }; + let key + : u32 + = HashBytesH10( + &*data.offset(cur_ix_masked as (isize)) as (*const u8) + ); + let mut forest : *mut u32 = ForestH10(self); + let mut prev_ix + : usize + = *(*self).buckets_.offset(key as (isize)) as (usize); + let mut node_left : usize = LeftChildIndexH10(self,cur_ix); + let mut node_right : usize = RightChildIndexH10(self,cur_ix); + let mut best_len_left : usize = 0i32 as (usize); + let mut best_len_right : usize = 0i32 as (usize); + let mut depth_remaining : usize; + if should_reroot_tree != 0 { + *(*self).buckets_.offset(key as (isize)) = cur_ix as (u32); + } + depth_remaining = 64i32 as (usize); + 'break16: loop { + { + let backward : usize = cur_ix.wrapping_sub(prev_ix); + let prev_ix_masked : usize = prev_ix & ring_buffer_mask; + if backward == 0i32 as (usize) || backward > max_backward || depth_remaining == 0i32 as (usize) { + if should_reroot_tree != 0 { + *forest.offset(node_left as (isize)) = (*self).invalid_pos_; + *forest.offset(node_right as (isize)) = (*self).invalid_pos_; + } + break 'break16; + } + { + let cur_len + : usize + = brotli_min_size_t(best_len_left,best_len_right); + let mut len : usize; + len = cur_len.wrapping_add( + FindMatchLengthWithLimit( + &*data.offset( + cur_ix_masked.wrapping_add(cur_len) as (isize) + ) as (*const u8), + &*data.offset( + prev_ix_masked.wrapping_add(cur_len) as (isize) + ) as (*const u8), + max_length.wrapping_sub(cur_len) + ) + ); + if !matches.is_null() && (len > *best_len) { + *best_len = len; + InitBackwardMatch( + { + let _old = matches; + matches = matches.offset(1 as (isize)); + _old + }, + backward, + len + ); + } + if len >= max_comp_len { + if should_reroot_tree != 0 { + *forest.offset(node_left as (isize)) = *forest.offset( + LeftChildIndexH10( + self, + prev_ix + ) as (isize) + ); + *forest.offset(node_right as (isize)) = *forest.offset( + RightChildIndexH10( + self, + prev_ix + ) as (isize) + ); + } + break 'break16; + } + if *data.offset( + cur_ix_masked.wrapping_add(len) as (isize) + ) as (i32) > *data.offset( + prev_ix_masked.wrapping_add(len) as (isize) + ) as (i32) { + best_len_left = len; + if should_reroot_tree != 0 { + *forest.offset(node_left as (isize)) = prev_ix as (u32); + } + node_left = RightChildIndexH10(self,prev_ix); + prev_ix = *forest.offset(node_left as (isize)) as (usize); + } else { + best_len_right = len; + if should_reroot_tree != 0 { + *forest.offset(node_right as (isize)) = prev_ix as (u32); + } + node_right = LeftChildIndexH10(self,prev_ix); + prev_ix = *forest.offset(node_right as (isize)) as (usize); + } + } + } + depth_remaining = depth_remaining.wrapping_sub(1 as (usize)); + } + matches +} + +#[derive(Clone, Copy)] +#[repr(C)] +pub struct Struct18 { + pub params : BrotliHasherParams, + pub is_prepared_ : i32, + pub dict_num_lookups : usize, + pub dict_num_matches : usize, +} + +unsafe extern fn GetHasherCommon( + mut handle : *mut u8 +) -> *mut Struct18 { + handle as (*mut Struct18) +} + +unsafe extern fn SelfH10(mut handle : *mut u8) -> *mut H10 { + &mut *GetHasherCommon(handle).offset( + 1i32 as (isize) + ) as (*mut Struct18) as (*mut H10) +} + +unsafe extern fn brotli_max_size_t( + mut a : usize, mut b : usize +) -> usize { + if a > b { a } else { b } +} + +unsafe extern fn InitDictionaryBackwardMatch( + mut self : *mut BackwardMatch, + mut dist : usize, + mut len : usize, + mut len_code : usize +) { + (*self).distance = dist as (u32); + (*self).length_and_code = (len << 5i32 | if len == len_code { + 0i32 as (usize) + } else { + len_code + }) as (u32); +} + +unsafe extern fn FindAllMatchesH10( + mut handle : *mut u8, + mut dictionary : *const BrotliEncoderDictionary, + mut data : *const u8, + ring_buffer_mask : usize, + cur_ix : usize, + max_length : usize, + max_backward : usize, + gap : usize, + mut params : *const BrotliEncoderParams, + mut matches : *mut BackwardMatch +) -> usize { + let orig_matches : *mut BackwardMatch = matches; + let cur_ix_masked : usize = cur_ix & ring_buffer_mask; + let mut best_len : usize = 1i32 as (usize); + let short_match_max_backward + : usize + = (if (*params).quality != 11i32 { + 16i32 + } else { + 64i32 + }) as (usize); + let mut stop + : usize + = cur_ix.wrapping_sub(short_match_max_backward); + let mut dict_matches : *mut u32; + let mut i : usize; + if cur_ix < short_match_max_backward { + stop = 0i32 as (usize); + } + i = cur_ix.wrapping_sub(1i32 as (usize)); + 'break14: while i > stop && (best_len <= 2i32 as (usize)) { + 'continue15: loop { + { + let mut prev_ix : usize = i; + let backward : usize = cur_ix.wrapping_sub(prev_ix); + if backward > max_backward { + break 'break14; + } + prev_ix = prev_ix & ring_buffer_mask; + if *data.offset(cur_ix_masked as (isize)) as (i32) != *data.offset( + prev_ix as (isize) + ) as (i32) || *data.offset( + cur_ix_masked.wrapping_add( + 1i32 as (usize) + ) as (isize) + ) as (i32) != *data.offset( + prev_ix.wrapping_add( + 1i32 as (usize) + ) as (isize) + ) as (i32) { + break 'continue15; + } + { + let len + : usize + = FindMatchLengthWithLimit( + &*data.offset(prev_ix as (isize)) as (*const u8), + &*data.offset(cur_ix_masked as (isize)) as (*const u8), + max_length + ); + if len > best_len { + best_len = len; + InitBackwardMatch( + { + let _old = matches; + matches = matches.offset(1 as (isize)); + _old + }, + backward, + len + ); + } + } + } + break; + } + i = i.wrapping_sub(1 as (usize)); + } + if best_len < max_length { + matches = StoreAndFindMatchesH10( + SelfH10(handle), + data, + cur_ix, + ring_buffer_mask, + max_length, + max_backward, + &mut best_len as (*mut usize), + matches + ); + } + i = 0i32 as (usize); + while i <= 37i32 as (usize) { + { + *dict_matches.offset(i as (isize)) = kInvalidMatch; + } + i = i.wrapping_add(1 as (usize)); + } + { + let mut minlen + : usize + = brotli_max_size_t( + 4i32 as (usize), + best_len.wrapping_add(1i32 as (usize)) + ); + if BrotliFindAllStaticDictionaryMatches( + dictionary, + &*data.offset(cur_ix_masked as (isize)) as (*const u8), + minlen, + max_length, + &mut *dict_matches.offset(0i32 as (isize)) as (*mut u32) + ) != 0 { + let mut maxlen + : usize + = brotli_min_size_t(37i32 as (usize),max_length); + let mut l : usize; + l = minlen; + while l <= maxlen { + { + let mut dict_id : u32 = *dict_matches.offset(l as (isize)); + if dict_id < kInvalidMatch { + let mut distance + : usize + = max_backward.wrapping_add(gap).wrapping_add( + (dict_id >> 5i32) as (usize) + ).wrapping_add( + 1i32 as (usize) + ); + if distance <= (*params).dist.max_distance { + InitDictionaryBackwardMatch( + { + let _old = matches; + matches = matches.offset(1 as (isize)); + _old + }, + distance, + l, + (dict_id & 31i32 as (u32)) as (usize) + ); + } + } + } + l = l.wrapping_add(1 as (usize)); + } + } + } + ((matches as (isize)).wrapping_sub( + orig_matches as (isize) + ) / std::mem::size_of::<*mut BackwardMatch>( + ) as (isize)) as (usize) +} + +unsafe extern fn BackwardMatchLength( + mut self : *const BackwardMatch +) -> usize { + ((*self).length_and_code >> 5i32) as (usize) +} + +unsafe extern fn MaxZopfliCandidates( + mut params : *const BrotliEncoderParams +) -> usize { + (if (*params).quality <= 10i32 { 1i32 } else { 5i32 }) as (usize) +} + +unsafe extern fn ComputeDistanceShortcut( + block_start : usize, + pos : usize, + max_backward : usize, + gap : usize, + mut nodes : *const ZopfliNode +) -> u32 { + let clen + : usize + = ZopfliNodeCopyLength( + &*nodes.offset(pos as (isize)) as (*const ZopfliNode) + ) as (usize); + let ilen + : usize + = ((*nodes.offset( + pos as (isize) + )).dcode_insert_length & 0x7ffffffi32 as (u32)) as (usize); + let dist + : usize + = ZopfliNodeCopyDistance( + &*nodes.offset(pos as (isize)) as (*const ZopfliNode) + ) as (usize); + if pos == 0i32 as (usize) { + 0i32 as (u32) + } else if dist.wrapping_add(clen) <= block_start.wrapping_add( + pos + ).wrapping_add( + gap + ) && (dist <= max_backward.wrapping_add( + gap + )) && (ZopfliNodeDistanceCode( + &*nodes.offset( + pos as (isize) + ) as (*const ZopfliNode) + ) > 0i32 as (u32)) { + pos as (u32) + } else { + (*nodes.offset( + pos.wrapping_sub(clen).wrapping_sub(ilen) as (isize) + )).u.shortcut + } +} + +unsafe extern fn ZopfliCostModelGetLiteralCosts( + mut self : *const ZopfliCostModel, mut from : usize, mut to : usize +) -> f32 { + *(*self).literal_costs_.offset( + to as (isize) + ) - *(*self).literal_costs_.offset(from as (isize)) +} + +unsafe extern fn ComputeDistanceCache( + pos : usize, + mut starting_dist_cache : *const i32, + mut nodes : *const ZopfliNode, + mut dist_cache : *mut i32 +) { + let mut idx : i32 = 0i32; + let mut p + : usize + = (*nodes.offset(pos as (isize))).u.shortcut as (usize); + while idx < 4i32 && (p > 0i32 as (usize)) { + let ilen + : usize + = ((*nodes.offset( + p as (isize) + )).dcode_insert_length & 0x7ffffffi32 as (u32)) as (usize); + let clen + : usize + = ZopfliNodeCopyLength( + &*nodes.offset(p as (isize)) as (*const ZopfliNode) + ) as (usize); + let dist + : usize + = ZopfliNodeCopyDistance( + &*nodes.offset(p as (isize)) as (*const ZopfliNode) + ) as (usize); + *dist_cache.offset( + { + let _old = idx; + idx = idx + 1; + _old + } as (isize) + ) = dist as (i32); + p = (*nodes.offset( + p.wrapping_sub(clen).wrapping_sub(ilen) as (isize) + )).u.shortcut as (usize); + } + while idx < 4i32 { + { + *dist_cache.offset(idx as (isize)) = *{ + let _old = starting_dist_cache; + starting_dist_cache = starting_dist_cache.offset( + 1 as (isize) + ); + _old + }; + } + idx = idx + 1; + } +} + +unsafe extern fn StartPosQueueSize( + mut self : *const StartPosQueue +) -> usize { + brotli_min_size_t((*self).idx_,8i32 as (usize)) +} + +unsafe extern fn StartPosQueuePush( + mut self : *mut StartPosQueue, mut posdata : *const PosData +) { + let mut offset + : usize + = !{ + let _old = (*self).idx_; + (*self).idx_ = (*self).idx_.wrapping_add(1 as (usize)); + _old + } & 7i32 as (usize); + let mut len + : usize + = StartPosQueueSize(self as (*const StartPosQueue)); + let mut i : usize; + let mut q : *mut PosData = (*self).q_; + *q.offset(offset as (isize)) = *posdata; + i = 1i32 as (usize); + while i < len { + { + if (*q.offset( + (offset & 7i32 as (usize)) as (isize) + )).costdiff > (*q.offset( + (offset.wrapping_add( + 1i32 as (usize) + ) & 7i32 as (usize)) as (isize) + )).costdiff { + let mut __brotli_swap_tmp + : PosData + = *q.offset((offset & 7i32 as (usize)) as (isize)); + *q.offset((offset & 7i32 as (usize)) as (isize)) = *q.offset( + (offset.wrapping_add( + 1i32 as (usize) + ) & 7i32 as (usize)) as (isize) + ); + *q.offset( + (offset.wrapping_add(1i32 as (usize)) & 7i32 as (usize)) as (isize) + ) = __brotli_swap_tmp; + } + offset = offset.wrapping_add(1 as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } +} + +unsafe extern fn EvaluateNode( + block_start : usize, + pos : usize, + max_backward_limit : usize, + gap : usize, + mut starting_dist_cache : *const i32, + mut model : *const ZopfliCostModel, + mut queue : *mut StartPosQueue, + mut nodes : *mut ZopfliNode +) { + let mut node_cost : f32 = (*nodes.offset(pos as (isize))).u.cost; + (*nodes.offset( + pos as (isize) + )).u.shortcut = ComputeDistanceShortcut( + block_start, + pos, + max_backward_limit, + gap, + nodes as (*const ZopfliNode) + ); + if node_cost <= ZopfliCostModelGetLiteralCosts( + model, + 0i32 as (usize), + pos + ) { + let mut posdata : PosData; + posdata.pos = pos; + posdata.cost = node_cost; + posdata.costdiff = node_cost - ZopfliCostModelGetLiteralCosts( + model, + 0i32 as (usize), + pos + ); + ComputeDistanceCache( + pos, + starting_dist_cache, + nodes as (*const ZopfliNode), + posdata.distance_cache + ); + StartPosQueuePush( + queue, + &mut posdata as (*mut PosData) as (*const PosData) + ); + } +} + +unsafe extern fn StartPosQueueAt( + mut self : *const StartPosQueue, mut k : usize +) -> *const PosData { + &mut *(*self).q_.offset( + (k.wrapping_sub((*self).idx_) & 7i32 as (usize)) as (isize) + ) as (*mut PosData) as (*const PosData) +} + +unsafe extern fn ZopfliCostModelGetMinCostCmd( + mut self : *const ZopfliCostModel +) -> f32 { + (*self).min_cost_cmd_ +} + +unsafe extern fn ComputeMinimumCopyLength( + start_cost : f32, + mut nodes : *const ZopfliNode, + num_bytes : usize, + pos : usize +) -> usize { + let mut min_cost : f32 = start_cost; + let mut len : usize = 2i32 as (usize); + let mut next_len_bucket : usize = 4i32 as (usize); + let mut next_len_offset : usize = 10i32 as (usize); + while pos.wrapping_add(len) <= num_bytes && ((*nodes.offset( + pos.wrapping_add(len) as (isize) + )).u.cost <= min_cost) { + len = len.wrapping_add(1 as (usize)); + if len == next_len_offset { + min_cost = min_cost + 1.0f32; + next_len_offset = next_len_offset.wrapping_add(next_len_bucket); + next_len_bucket = next_len_bucket.wrapping_mul(2i32 as (usize)); + } + } + len +} + +unsafe extern fn GetInsertExtra(mut inscode : u16) -> u32 { + *kInsExtra.offset(inscode as (isize)) +} + +unsafe extern fn ZopfliCostModelGetDistanceCost( + mut self : *const ZopfliCostModel, mut distcode : usize +) -> f32 { + *(*self).cost_dist_.offset(distcode as (isize)) +} + +unsafe extern fn GetCopyExtra(mut copycode : u16) -> u32 { + *kCopyExtra.offset(copycode as (isize)) +} + +unsafe extern fn ZopfliCostModelGetCommandCost( + mut self : *const ZopfliCostModel, mut cmdcode : u16 +) -> f32 { + *(*self).cost_cmd_.offset(cmdcode as (isize)) +} + +unsafe extern fn UpdateZopfliNode( + mut nodes : *mut ZopfliNode, + mut pos : usize, + mut start_pos : usize, + mut len : usize, + mut len_code : usize, + mut dist : usize, + mut short_code : usize, + mut cost : f32 +) { + let mut next + : *mut ZopfliNode + = &mut *nodes.offset( + pos.wrapping_add(len) as (isize) + ) as (*mut ZopfliNode); + (*next).length = (len | len.wrapping_add( + 9u32 as (usize) + ).wrapping_sub( + len_code + ) << 25i32) as (u32); + (*next).distance = dist as (u32); + (*next).dcode_insert_length = (short_code << 27i32 | pos.wrapping_sub( + start_pos + )) as (u32); + (*next).u.cost = cost; +} + +unsafe extern fn BackwardMatchLengthCode( + mut self : *const BackwardMatch +) -> usize { + let mut code + : usize + = ((*self).length_and_code & 31i32 as (u32)) as (usize); + if code != 0 { code } else { BackwardMatchLength(self) } +} + +unsafe extern fn UpdateNodes( + num_bytes : usize, + block_start : usize, + pos : usize, + mut ringbuffer : *const u8, + ringbuffer_mask : usize, + mut params : *const BrotliEncoderParams, + max_backward_limit : usize, + mut starting_dist_cache : *const i32, + num_matches : usize, + mut matches : *const BackwardMatch, + mut model : *const ZopfliCostModel, + mut queue : *mut StartPosQueue, + mut nodes : *mut ZopfliNode +) -> usize { + let cur_ix : usize = block_start.wrapping_add(pos); + let cur_ix_masked : usize = cur_ix & ringbuffer_mask; + let max_distance + : usize + = brotli_min_size_t(cur_ix,max_backward_limit); + let max_len : usize = num_bytes.wrapping_sub(pos); + let max_zopfli_len : usize = MaxZopfliLen(params); + let max_iters : usize = MaxZopfliCandidates(params); + let mut min_len : usize; + let mut result : usize = 0i32 as (usize); + let mut k : usize; + let mut gap : usize = 0i32 as (usize); + EvaluateNode( + block_start, + pos, + max_backward_limit, + gap, + starting_dist_cache, + model, + queue, + nodes + ); + { + let mut posdata + : *const PosData + = StartPosQueueAt(queue as (*const StartPosQueue),0i32 as (usize)); + let mut min_cost + : f32 + = (*posdata).cost + ZopfliCostModelGetMinCostCmd( + model + ) + ZopfliCostModelGetLiteralCosts(model,(*posdata).pos,pos); + min_len = ComputeMinimumCopyLength( + min_cost, + nodes as (*const ZopfliNode), + num_bytes, + pos + ); + } + k = 0i32 as (usize); + while k < max_iters && (k < StartPosQueueSize( + queue as (*const StartPosQueue) + )) { + 'continue28: loop { + { + let mut posdata + : *const PosData + = StartPosQueueAt(queue as (*const StartPosQueue),k); + let start : usize = (*posdata).pos; + let inscode : u16 = GetInsertLengthCode(pos.wrapping_sub(start)); + let start_costdiff : f32 = (*posdata).costdiff; + let base_cost + : f32 + = start_costdiff + GetInsertExtra( + inscode + ) as (f32) + ZopfliCostModelGetLiteralCosts( + model, + 0i32 as (usize), + pos + ); + let mut best_len : usize = min_len.wrapping_sub(1i32 as (usize)); + let mut j : usize = 0i32 as (usize); + 'break29: while j < 16i32 as (usize) && (best_len < max_len) { + 'continue30: loop { + { + let idx + : usize + = *kDistanceCacheIndex.offset(j as (isize)) as (usize); + let backward + : usize + = (*(*posdata).distance_cache.offset( + idx as (isize) + ) + *kDistanceCacheOffset.offset(j as (isize))) as (usize); + let mut prev_ix : usize = cur_ix.wrapping_sub(backward); + let mut len : usize = 0i32 as (usize); + let mut continuation + : u8 + = *ringbuffer.offset( + cur_ix_masked.wrapping_add(best_len) as (isize) + ); + if cur_ix_masked.wrapping_add(best_len) > ringbuffer_mask { + break 'break29; + } + if backward > max_distance.wrapping_add(gap) { + break 'continue30; + } + if backward <= max_distance { + if prev_ix >= cur_ix { + break 'continue30; + } + prev_ix = prev_ix & ringbuffer_mask; + if prev_ix.wrapping_add( + best_len + ) > ringbuffer_mask || continuation as (i32) != *ringbuffer.offset( + prev_ix.wrapping_add( + best_len + ) as (isize) + ) as (i32) { + break 'continue30; + } + len = FindMatchLengthWithLimit( + &*ringbuffer.offset(prev_ix as (isize)) as (*const u8), + &*ringbuffer.offset( + cur_ix_masked as (isize) + ) as (*const u8), + max_len + ); + } else { + break 'continue30; + } + { + let dist_cost + : f32 + = base_cost + ZopfliCostModelGetDistanceCost(model,j); + let mut l : usize; + l = best_len.wrapping_add(1i32 as (usize)); + while l <= len { + { + let copycode : u16 = GetCopyLengthCode(l); + let cmdcode + : u16 + = CombineLengthCodes( + inscode, + copycode, + (j == 0i32 as (usize)) as (i32) + ); + let cost + : f32 + = (if cmdcode as (i32) < 128i32 { + base_cost + } else { + dist_cost + }) + GetCopyExtra( + copycode + ) as (f32) + ZopfliCostModelGetCommandCost( + model, + cmdcode + ); + if cost < (*nodes.offset( + pos.wrapping_add(l) as (isize) + )).u.cost { + UpdateZopfliNode( + nodes, + pos, + start, + l, + l, + backward, + j.wrapping_add(1i32 as (usize)), + cost + ); + result = brotli_max_size_t(result,l); + } + best_len = l; + } + l = l.wrapping_add(1 as (usize)); + } + } + } + break; + } + j = j.wrapping_add(1 as (usize)); + } + if k >= 2i32 as (usize) { + break 'continue28; + } + { + let mut len : usize = min_len; + j = 0i32 as (usize); + while j < num_matches { + { + let mut match_ : BackwardMatch = *matches.offset(j as (isize)); + let mut dist : usize = match_.distance as (usize); + let mut is_dictionary_match + : i32 + = if !!(dist > max_distance.wrapping_add(gap)) { + 1i32 + } else { + 0i32 + }; + let mut dist_code + : usize + = dist.wrapping_add(16i32 as (usize)).wrapping_sub( + 1i32 as (usize) + ); + let mut dist_symbol : u16; + let mut distextra : u32; + let mut distnumextra : u32; + let mut dist_cost : f32; + let mut max_match_len : usize; + PrefixEncodeCopyDistance( + dist_code, + (*params).dist.num_direct_distance_codes as (usize), + (*params).dist.distance_postfix_bits as (usize), + &mut dist_symbol as (*mut u16), + &mut distextra as (*mut u32) + ); + distnumextra = (dist_symbol as (i32) >> 10i32) as (u32); + dist_cost = base_cost + distnumextra as (f32) + ZopfliCostModelGetDistanceCost( + model, + (dist_symbol as (i32) & 0x3ffi32) as (usize) + ); + max_match_len = BackwardMatchLength( + &mut match_ as (*mut BackwardMatch) as (*const BackwardMatch) + ); + if len < max_match_len && (is_dictionary_match != 0 || max_match_len > max_zopfli_len) { + len = max_match_len; + } + while len <= max_match_len { + { + let len_code + : usize + = if is_dictionary_match != 0 { + BackwardMatchLengthCode( + &mut match_ as (*mut BackwardMatch) as (*const BackwardMatch) + ) + } else { + len + }; + let copycode : u16 = GetCopyLengthCode(len_code); + let cmdcode : u16 = CombineLengthCodes(inscode,copycode,0i32); + let cost + : f32 + = dist_cost + GetCopyExtra( + copycode + ) as (f32) + ZopfliCostModelGetCommandCost( + model, + cmdcode + ); + if cost < (*nodes.offset( + pos.wrapping_add(len) as (isize) + )).u.cost { + UpdateZopfliNode( + nodes, + pos, + start, + len, + len_code, + dist, + 0i32 as (usize), + cost + ); + result = brotli_max_size_t(result,len); + } + } + len = len.wrapping_add(1 as (usize)); + } + } + j = j.wrapping_add(1 as (usize)); + } + } + } + break; + } + k = k.wrapping_add(1 as (usize)); + } + result +} + +unsafe extern fn StoreH10( + mut handle : *mut u8, + mut data : *const u8, + mask : usize, + ix : usize +) { + let mut self : *mut H10 = SelfH10(handle); + let max_backward + : usize + = (*self).window_mask_.wrapping_sub(16i32 as (usize)).wrapping_add( + 1i32 as (usize) + ); + StoreAndFindMatchesH10( + self, + data, + ix, + mask, + 128i32 as (usize), + max_backward, + 0i32 as (*mut std::os::raw::c_void) as (*mut usize), + 0i32 as (*mut std::os::raw::c_void) as (*mut BackwardMatch) + ); +} + +unsafe extern fn StoreRangeH10( + mut handle : *mut u8, + mut data : *const u8, + mask : usize, + ix_start : usize, + ix_end : usize +) { + let mut i : usize = ix_start; + let mut j : usize = ix_start; + if ix_start.wrapping_add(63i32 as (usize)) <= ix_end { + i = ix_end.wrapping_sub(63i32 as (usize)); + } + if ix_start.wrapping_add(512i32 as (usize)) <= i { + while j < i { + { + StoreH10(handle,data,mask,j); + } + j = j.wrapping_add(8i32 as (usize)); + } + } + while i < ix_end { + { + StoreH10(handle,data,mask,i); + } + i = i.wrapping_add(1 as (usize)); + } +} + +unsafe extern fn HashTypeLengthH10() -> usize { 4i32 as (usize) } + +unsafe extern fn CleanupZopfliCostModel( + mut m : *mut MemoryManager, mut self : *mut ZopfliCostModel +) { + { + BrotliFree( + m, + (*self).literal_costs_ as (*mut std::os::raw::c_void) + ); + (*self).literal_costs_ = 0i32 as (*mut std::os::raw::c_void) as (*mut f32); + } + { + BrotliFree(m,(*self).cost_dist_ as (*mut std::os::raw::c_void)); + (*self).cost_dist_ = 0i32 as (*mut std::os::raw::c_void) as (*mut f32); + } +} + +unsafe extern fn ZopfliNodeCommandLength( + mut self : *const ZopfliNode +) -> u32 { + ZopfliNodeCopyLength(self).wrapping_add( + (*self).dcode_insert_length & 0x7ffffffi32 as (u32) + ) +} + +unsafe extern fn ComputeShortestPathFromNodes( + mut num_bytes : usize, mut nodes : *mut ZopfliNode +) -> usize { + let mut index : usize = num_bytes; + let mut num_commands : usize = 0i32 as (usize); + while (*nodes.offset( + index as (isize) + )).dcode_insert_length & 0x7ffffffi32 as (u32) == 0i32 as (u32) && ((*nodes.offset( + index as (isize) + )).length == 1i32 as (u32)) { + index = index.wrapping_sub(1 as (usize)); + } + (*nodes.offset(index as (isize))).u.next = !(0i32 as (u32)); + while index != 0i32 as (usize) { + let mut len + : usize + = ZopfliNodeCommandLength( + &mut *nodes.offset( + index as (isize) + ) as (*mut ZopfliNode) as (*const ZopfliNode) + ) as (usize); + index = index.wrapping_sub(len); + (*nodes.offset(index as (isize))).u.next = len as (u32); + num_commands = num_commands.wrapping_add(1 as (usize)); + } + num_commands +} + +#[no_mangle] +pub unsafe extern fn BrotliZopfliComputeShortestPath( + mut m : *mut MemoryManager, + mut num_bytes : usize, + mut position : usize, + mut ringbuffer : *const u8, + mut ringbuffer_mask : usize, + mut params : *const BrotliEncoderParams, + max_backward_limit : usize, + mut dist_cache : *const i32, + mut hasher : *mut u8, + mut nodes : *mut ZopfliNode +) -> usize { + let max_zopfli_len : usize = MaxZopfliLen(params); + let mut model : ZopfliCostModel; + let mut queue : StartPosQueue; + let mut matches : *mut BackwardMatch; + let store_end + : usize + = if num_bytes >= StoreLookaheadH10() { + position.wrapping_add(num_bytes).wrapping_sub( + StoreLookaheadH10() + ).wrapping_add( + 1i32 as (usize) + ) + } else { + position + }; + let mut i : usize; + let mut gap : usize = 0i32 as (usize); + let mut lz_matches_offset : usize = 0i32 as (usize); + (*nodes.offset(0i32 as (isize))).length = 0i32 as (u32); + (*nodes.offset(0i32 as (isize))).u.cost = 0i32 as (f32); + InitZopfliCostModel( + m, + &mut model as (*mut ZopfliCostModel), + &(*params).dist as (*const BrotliDistanceParams), + num_bytes + ); + if !(0i32 == 0) { + return 0i32 as (usize); + } + ZopfliCostModelSetFromLiteralCosts( + &mut model as (*mut ZopfliCostModel), + position, + ringbuffer, + ringbuffer_mask + ); + InitStartPosQueue(&mut queue as (*mut StartPosQueue)); + i = 0i32 as (usize); + while i.wrapping_add(HashTypeLengthH10()).wrapping_sub( + 1i32 as (usize) + ) < num_bytes { + { + let pos : usize = position.wrapping_add(i); + let max_distance + : usize + = brotli_min_size_t(pos,max_backward_limit); + let mut skip : usize; + let mut num_matches + : usize + = FindAllMatchesH10( + hasher, + &(*params).dictionary as (*const BrotliEncoderDictionary), + ringbuffer, + ringbuffer_mask, + pos, + num_bytes.wrapping_sub(i), + max_distance, + gap, + params, + &mut *matches.offset( + lz_matches_offset as (isize) + ) as (*mut BackwardMatch) + ); + if num_matches > 0i32 as (usize) && (BackwardMatchLength( + &mut *matches.offset( + num_matches.wrapping_sub( + 1i32 as (usize) + ) as (isize) + ) as (*mut BackwardMatch) as (*const BackwardMatch) + ) > max_zopfli_len) { + *matches.offset(0i32 as (isize)) = *matches.offset( + num_matches.wrapping_sub( + 1i32 as (usize) + ) as (isize) + ); + num_matches = 1i32 as (usize); + } + skip = UpdateNodes( + num_bytes, + position, + i, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + dist_cache, + num_matches, + matches as (*const BackwardMatch), + &mut model as (*mut ZopfliCostModel) as (*const ZopfliCostModel), + &mut queue as (*mut StartPosQueue), + nodes + ); + if skip < 16384i32 as (usize) { + skip = 0i32 as (usize); + } + if num_matches == 1i32 as (usize) && (BackwardMatchLength( + &mut *matches.offset( + 0i32 as (isize) + ) as (*mut BackwardMatch) as (*const BackwardMatch) + ) > max_zopfli_len) { + skip = brotli_max_size_t( + BackwardMatchLength( + &mut *matches.offset( + 0i32 as (isize) + ) as (*mut BackwardMatch) as (*const BackwardMatch) + ), + skip + ); + } + if skip > 1i32 as (usize) { + StoreRangeH10( + hasher, + ringbuffer, + ringbuffer_mask, + pos.wrapping_add(1i32 as (usize)), + brotli_min_size_t(pos.wrapping_add(skip),store_end) + ); + skip = skip.wrapping_sub(1 as (usize)); + while skip != 0 { + i = i.wrapping_add(1 as (usize)); + if i.wrapping_add(HashTypeLengthH10()).wrapping_sub( + 1i32 as (usize) + ) >= num_bytes { + break; + } + EvaluateNode( + position, + i, + max_backward_limit, + gap, + dist_cache, + &mut model as (*mut ZopfliCostModel) as (*const ZopfliCostModel), + &mut queue as (*mut StartPosQueue), + nodes + ); + skip = skip.wrapping_sub(1 as (usize)); + } + } + } + i = i.wrapping_add(1 as (usize)); + } + CleanupZopfliCostModel(m,&mut model as (*mut ZopfliCostModel)); + ComputeShortestPathFromNodes(num_bytes,nodes) +} + +#[no_mangle] +pub unsafe extern fn BrotliCreateZopfliBackwardReferences( + mut m : *mut MemoryManager, + mut num_bytes : usize, + mut position : usize, + mut ringbuffer : *const u8, + mut ringbuffer_mask : usize, + mut params : *const BrotliEncoderParams, + mut hasher : *mut u8, + mut dist_cache : *mut i32, + mut last_insert_len : *mut usize, + mut commands : *mut Command, + mut num_commands : *mut usize, + mut num_literals : *mut usize +) { + let max_backward_limit + : usize + = (1i32 as (usize) << (*params).lgwin).wrapping_sub( + 16i32 as (usize) + ); + let mut nodes : *mut ZopfliNode; + nodes = if num_bytes.wrapping_add( + 1i32 as (usize) + ) > 0i32 as (usize) { + BrotliAllocate( + m, + num_bytes.wrapping_add(1i32 as (usize)).wrapping_mul( + std::mem::size_of::() + ) + ) as (*mut ZopfliNode) + } else { + 0i32 as (*mut std::os::raw::c_void) as (*mut ZopfliNode) + }; + if !(0i32 == 0) { + return; + } + BrotliInitZopfliNodes( + nodes, + num_bytes.wrapping_add(1i32 as (usize)) + ); + *num_commands = (*num_commands).wrapping_add( + BrotliZopfliComputeShortestPath( + m, + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + dist_cache as (*const i32), + hasher, + nodes + ) + ); + if !(0i32 == 0) { + return; + } + BrotliZopfliCreateCommands( + num_bytes, + position, + max_backward_limit, + nodes as (*const ZopfliNode), + dist_cache, + last_insert_len, + params, + commands, + num_literals + ); + { + BrotliFree(m,nodes as (*mut std::os::raw::c_void)); + nodes = 0i32 as (*mut std::os::raw::c_void) as (*mut ZopfliNode); + } +} + +unsafe extern fn CommandCopyLen(mut self : *const Command) -> u32 { + (*self).copy_len_ & 0x1ffffffi32 as (u32) +} + +unsafe extern fn SetCost( + mut histogram : *const u32, + mut histogram_size : usize, + mut literal_histogram : i32, + mut cost : *mut f32 +) { + let mut sum : usize = 0i32 as (usize); + let mut missing_symbol_sum : usize; + let mut log2sum : f32; + let mut missing_symbol_cost : f32; + let mut i : usize; + i = 0i32 as (usize); + while i < histogram_size { + { + sum = sum.wrapping_add(*histogram.offset(i as (isize)) as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } + log2sum = FastLog2(sum) as (f32); + missing_symbol_sum = sum; + if literal_histogram == 0 { + i = 0i32 as (usize); + while i < histogram_size { + { + if *histogram.offset(i as (isize)) == 0i32 as (u32) { + missing_symbol_sum = missing_symbol_sum.wrapping_add(1 as (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } + } + missing_symbol_cost = FastLog2( + missing_symbol_sum + ) as (f32) + 2i32 as (f32); + i = 0i32 as (usize); + while i < histogram_size { + 'continue56: loop { + { + if *histogram.offset(i as (isize)) == 0i32 as (u32) { + *cost.offset(i as (isize)) = missing_symbol_cost; + break 'continue56; + } + *cost.offset(i as (isize)) = log2sum - FastLog2( + *histogram.offset( + i as (isize) + ) as (usize) + ) as (f32); + if *cost.offset(i as (isize)) < 1i32 as (f32) { + *cost.offset(i as (isize)) = 1i32 as (f32); + } + } + break; + } + i = i.wrapping_add(1 as (usize)); + } +} + +unsafe extern fn brotli_min_float( + mut a : f32, mut b : f32 +) -> f32 { + if a < b { a } else { b } +} + +unsafe extern fn ZopfliCostModelSetFromCommands( + mut self : *mut ZopfliCostModel, + mut position : usize, + mut ringbuffer : *const u8, + mut ringbuffer_mask : usize, + mut commands : *const Command, + mut num_commands : usize, + mut last_insert_len : usize +) { + let mut histogram_literal : *mut u32; + let mut histogram_cmd : *mut u32; + let mut histogram_dist : *mut u32; + let mut cost_literal : *mut f32; + let mut pos : usize = position.wrapping_sub(last_insert_len); + let mut min_cost_cmd : f32 = kInfinity; + let mut i : usize; + let mut cost_cmd : *mut f32 = (*self).cost_cmd_; + memset( + histogram_literal as (*mut std::os::raw::c_void), + 0i32, + std::mem::size_of::<*mut u32>() + ); + memset( + histogram_cmd as (*mut std::os::raw::c_void), + 0i32, + std::mem::size_of::<*mut u32>() + ); + memset( + histogram_dist as (*mut std::os::raw::c_void), + 0i32, + std::mem::size_of::<*mut u32>() + ); + i = 0i32 as (usize); + while i < num_commands { + { + let mut inslength + : usize + = (*commands.offset(i as (isize))).insert_len_ as (usize); + let mut copylength + : usize + = CommandCopyLen( + &*commands.offset(i as (isize)) as (*const Command) + ) as (usize); + let mut distcode + : usize + = ((*commands.offset( + i as (isize) + )).dist_prefix_ as (i32) & 0x3ffi32) as (usize); + let mut cmdcode + : usize + = (*commands.offset(i as (isize))).cmd_prefix_ as (usize); + let mut j : usize; + { + let _rhs = 1; + let _lhs = &mut *histogram_cmd.offset(cmdcode as (isize)); + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + if cmdcode >= 128i32 as (usize) { + let _rhs = 1; + let _lhs = &mut *histogram_dist.offset(distcode as (isize)); + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + j = 0i32 as (usize); + while j < inslength { + { + let _rhs = 1; + let _lhs + = &mut *histogram_literal.offset( + *ringbuffer.offset( + (pos.wrapping_add(j) & ringbuffer_mask) as (isize) + ) as (isize) + ); + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + j = j.wrapping_add(1 as (usize)); + } + pos = pos.wrapping_add(inslength.wrapping_add(copylength)); + } + i = i.wrapping_add(1 as (usize)); + } + SetCost( + histogram_literal as (*const u32), + 256i32 as (usize), + 1i32, + cost_literal + ); + SetCost( + histogram_cmd as (*const u32), + 704i32 as (usize), + 0i32, + cost_cmd + ); + SetCost( + histogram_dist as (*const u32), + (*self).distance_histogram_size as (usize), + 0i32, + (*self).cost_dist_ + ); + i = 0i32 as (usize); + while i < 704i32 as (usize) { + { + min_cost_cmd = brotli_min_float( + min_cost_cmd, + *cost_cmd.offset(i as (isize)) + ); + } + i = i.wrapping_add(1 as (usize)); + } + (*self).min_cost_cmd_ = min_cost_cmd; + { + let mut literal_costs : *mut f32 = (*self).literal_costs_; + let mut literal_carry : f32 = 0.0f64 as (f32); + let mut num_bytes : usize = (*self).num_bytes_; + *literal_costs.offset(0i32 as (isize)) = 0.0f64 as (f32); + i = 0i32 as (usize); + while i < num_bytes { + { + literal_carry = literal_carry + *cost_literal.offset( + *ringbuffer.offset( + (position.wrapping_add( + i + ) & ringbuffer_mask) as (isize) + ) as (isize) + ); + *literal_costs.offset( + i.wrapping_add(1i32 as (usize)) as (isize) + ) = *literal_costs.offset(i as (isize)) + literal_carry; + literal_carry = literal_carry - (*literal_costs.offset( + i.wrapping_add(1i32 as (usize)) as (isize) + ) - *literal_costs.offset(i as (isize))); + } + i = i.wrapping_add(1 as (usize)); + } + } +} + +unsafe extern fn ZopfliIterate( + mut num_bytes : usize, + mut position : usize, + mut ringbuffer : *const u8, + mut ringbuffer_mask : usize, + mut params : *const BrotliEncoderParams, + max_backward_limit : usize, + gap : usize, + mut dist_cache : *const i32, + mut model : *const ZopfliCostModel, + mut num_matches : *const u32, + mut matches : *const BackwardMatch, + mut nodes : *mut ZopfliNode +) -> usize { + let max_zopfli_len : usize = MaxZopfliLen(params); + let mut queue : StartPosQueue; + let mut cur_match_pos : usize = 0i32 as (usize); + let mut i : usize; + (*nodes.offset(0i32 as (isize))).length = 0i32 as (u32); + (*nodes.offset(0i32 as (isize))).u.cost = 0i32 as (f32); + InitStartPosQueue(&mut queue as (*mut StartPosQueue)); + i = 0i32 as (usize); + while i.wrapping_add(3i32 as (usize)) < num_bytes { + { + let mut skip + : usize + = UpdateNodes( + num_bytes, + position, + i, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + dist_cache, + *num_matches.offset(i as (isize)) as (usize), + &*matches.offset( + cur_match_pos as (isize) + ) as (*const BackwardMatch), + model, + &mut queue as (*mut StartPosQueue), + nodes + ); + if skip < 16384i32 as (usize) { + skip = 0i32 as (usize); + } + cur_match_pos = cur_match_pos.wrapping_add( + *num_matches.offset(i as (isize)) as (usize) + ); + if *num_matches.offset( + i as (isize) + ) == 1i32 as (u32) && (BackwardMatchLength( + &*matches.offset( + cur_match_pos.wrapping_sub( + 1i32 as (usize) + ) as (isize) + ) as (*const BackwardMatch) + ) > max_zopfli_len) { + skip = brotli_max_size_t( + BackwardMatchLength( + &*matches.offset( + cur_match_pos.wrapping_sub(1i32 as (usize)) as (isize) + ) as (*const BackwardMatch) + ), + skip + ); + } + if skip > 1i32 as (usize) { + skip = skip.wrapping_sub(1 as (usize)); + while skip != 0 { + i = i.wrapping_add(1 as (usize)); + if i.wrapping_add(3i32 as (usize)) >= num_bytes { + break; + } + EvaluateNode( + position, + i, + max_backward_limit, + gap, + dist_cache, + model, + &mut queue as (*mut StartPosQueue), + nodes + ); + cur_match_pos = cur_match_pos.wrapping_add( + *num_matches.offset(i as (isize)) as (usize) + ); + skip = skip.wrapping_sub(1 as (usize)); + } + } + } + i = i.wrapping_add(1 as (usize)); + } + ComputeShortestPathFromNodes(num_bytes,nodes) +} + +#[no_mangle] +pub unsafe extern fn BrotliCreateHqZopfliBackwardReferences( + mut m : *mut MemoryManager, + mut num_bytes : usize, + mut position : usize, + mut ringbuffer : *const u8, + mut ringbuffer_mask : usize, + mut params : *const BrotliEncoderParams, + mut hasher : *mut u8, + mut dist_cache : *mut i32, + mut last_insert_len : *mut usize, + mut commands : *mut Command, + mut num_commands : *mut usize, + mut num_literals : *mut usize +) { + let max_backward_limit + : usize + = (1i32 as (usize) << (*params).lgwin).wrapping_sub( + 16i32 as (usize) + ); + let mut num_matches + : *mut u32 + = if num_bytes > 0i32 as (usize) { + BrotliAllocate( + m, + num_bytes.wrapping_mul(std::mem::size_of::()) + ) as (*mut u32) + } else { + 0i32 as (*mut std::os::raw::c_void) as (*mut u32) + }; + let mut matches_size + : usize + = (4i32 as (usize)).wrapping_mul(num_bytes); + let store_end + : usize + = if num_bytes >= StoreLookaheadH10() { + position.wrapping_add(num_bytes).wrapping_sub( + StoreLookaheadH10() + ).wrapping_add( + 1i32 as (usize) + ) + } else { + position + }; + let mut cur_match_pos : usize = 0i32 as (usize); + let mut i : usize; + let mut orig_num_literals : usize; + let mut orig_last_insert_len : usize; + let mut orig_dist_cache : *mut i32; + let mut orig_num_commands : usize; + let mut model : ZopfliCostModel; + let mut nodes : *mut ZopfliNode; + let mut matches + : *mut BackwardMatch + = if matches_size > 0i32 as (usize) { + BrotliAllocate( + m, + matches_size.wrapping_mul(std::mem::size_of::()) + ) as (*mut BackwardMatch) + } else { + 0i32 as (*mut std::os::raw::c_void) as (*mut BackwardMatch) + }; + let mut gap : usize = 0i32 as (usize); + let mut shadow_matches : usize = 0i32 as (usize); + if !(0i32 == 0) { + return; + } + i = 0i32 as (usize); + while i.wrapping_add(HashTypeLengthH10()).wrapping_sub( + 1i32 as (usize) + ) < num_bytes { + { + let pos : usize = position.wrapping_add(i); + let mut max_distance + : usize + = brotli_min_size_t(pos,max_backward_limit); + let mut max_length : usize = num_bytes.wrapping_sub(i); + let mut num_found_matches : usize; + let mut cur_match_end : usize; + let mut j : usize; + { + if matches_size < cur_match_pos.wrapping_add( + 128i32 as (usize) + ).wrapping_add( + shadow_matches + ) { + let mut _new_size + : usize + = if matches_size == 0i32 as (usize) { + cur_match_pos.wrapping_add(128i32 as (usize)).wrapping_add( + shadow_matches + ) + } else { + matches_size + }; + let mut new_array : *mut BackwardMatch; + while _new_size < cur_match_pos.wrapping_add( + 128i32 as (usize) + ).wrapping_add( + shadow_matches + ) { + _new_size = _new_size.wrapping_mul(2i32 as (usize)); + } + new_array = if _new_size > 0i32 as (usize) { + BrotliAllocate( + m, + _new_size.wrapping_mul(std::mem::size_of::()) + ) as (*mut BackwardMatch) + } else { + 0i32 as (*mut std::os::raw::c_void) as (*mut BackwardMatch) + }; + if !!(0i32 == 0) && (matches_size != 0i32 as (usize)) { + memcpy( + new_array as (*mut std::os::raw::c_void), + matches as (*const std::os::raw::c_void), + matches_size.wrapping_mul(std::mem::size_of::()) + ); + } + { + BrotliFree(m,matches as (*mut std::os::raw::c_void)); + matches = 0i32 as (*mut std::os::raw::c_void) as (*mut BackwardMatch); + } + matches = new_array; + matches_size = _new_size; + } + } + if !(0i32 == 0) { + return; + } + num_found_matches = FindAllMatchesH10( + hasher, + &(*params).dictionary as (*const BrotliEncoderDictionary), + ringbuffer, + ringbuffer_mask, + pos, + max_length, + max_distance, + gap, + params, + &mut *matches.offset( + cur_match_pos.wrapping_add(shadow_matches) as (isize) + ) as (*mut BackwardMatch) + ); + cur_match_end = cur_match_pos.wrapping_add(num_found_matches); + j = cur_match_pos; + while j.wrapping_add(1i32 as (usize)) < cur_match_end { + { } + j = j.wrapping_add(1 as (usize)); + } + *num_matches.offset(i as (isize)) = num_found_matches as (u32); + if num_found_matches > 0i32 as (usize) { + let match_len + : usize + = BackwardMatchLength( + &mut *matches.offset( + cur_match_end.wrapping_sub(1i32 as (usize)) as (isize) + ) as (*mut BackwardMatch) as (*const BackwardMatch) + ); + if match_len > 325i32 as (usize) { + let skip : usize = match_len.wrapping_sub(1i32 as (usize)); + *matches.offset( + { + let _old = cur_match_pos; + cur_match_pos = cur_match_pos.wrapping_add(1 as (usize)); + _old + } as (isize) + ) = *matches.offset( + cur_match_end.wrapping_sub(1i32 as (usize)) as (isize) + ); + *num_matches.offset(i as (isize)) = 1i32 as (u32); + StoreRangeH10( + hasher, + ringbuffer, + ringbuffer_mask, + pos.wrapping_add(1i32 as (usize)), + brotli_min_size_t(pos.wrapping_add(match_len),store_end) + ); + memset( + &mut *num_matches.offset( + i.wrapping_add(1i32 as (usize)) as (isize) + ) as (*mut u32) as (*mut std::os::raw::c_void), + 0i32, + skip.wrapping_mul(std::mem::size_of::()) + ); + i = i.wrapping_add(skip); + } else { + cur_match_pos = cur_match_end; + } + } + } + i = i.wrapping_add(1 as (usize)); + } + orig_num_literals = *num_literals; + orig_last_insert_len = *last_insert_len; + memcpy( + orig_dist_cache as (*mut std::os::raw::c_void), + dist_cache as (*const std::os::raw::c_void), + (4i32 as (usize)).wrapping_mul(std::mem::size_of::()) + ); + orig_num_commands = *num_commands; + nodes = if num_bytes.wrapping_add( + 1i32 as (usize) + ) > 0i32 as (usize) { + BrotliAllocate( + m, + num_bytes.wrapping_add(1i32 as (usize)).wrapping_mul( + std::mem::size_of::() + ) + ) as (*mut ZopfliNode) + } else { + 0i32 as (*mut std::os::raw::c_void) as (*mut ZopfliNode) + }; + if !(0i32 == 0) { + return; + } + InitZopfliCostModel( + m, + &mut model as (*mut ZopfliCostModel), + &(*params).dist as (*const BrotliDistanceParams), + num_bytes + ); + if !(0i32 == 0) { + return; + } + i = 0i32 as (usize); + while i < 2i32 as (usize) { + { + BrotliInitZopfliNodes( + nodes, + num_bytes.wrapping_add(1i32 as (usize)) + ); + if i == 0i32 as (usize) { + ZopfliCostModelSetFromLiteralCosts( + &mut model as (*mut ZopfliCostModel), + position, + ringbuffer, + ringbuffer_mask + ); + } else { + ZopfliCostModelSetFromCommands( + &mut model as (*mut ZopfliCostModel), + position, + ringbuffer, + ringbuffer_mask, + commands as (*const Command), + (*num_commands).wrapping_sub(orig_num_commands), + orig_last_insert_len + ); + } + *num_commands = orig_num_commands; + *num_literals = orig_num_literals; + *last_insert_len = orig_last_insert_len; + memcpy( + dist_cache as (*mut std::os::raw::c_void), + orig_dist_cache as (*const std::os::raw::c_void), + (4i32 as (usize)).wrapping_mul(std::mem::size_of::()) + ); + *num_commands = (*num_commands).wrapping_add( + ZopfliIterate( + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + gap, + dist_cache as (*const i32), + &mut model as (*mut ZopfliCostModel) as (*const ZopfliCostModel), + num_matches as (*const u32), + matches as (*const BackwardMatch), + nodes + ) + ); + BrotliZopfliCreateCommands( + num_bytes, + position, + max_backward_limit, + nodes as (*const ZopfliNode), + dist_cache, + last_insert_len, + params, + commands, + num_literals + ); + } + i = i.wrapping_add(1 as (usize)); + } + CleanupZopfliCostModel(m,&mut model as (*mut ZopfliCostModel)); + { + BrotliFree(m,nodes as (*mut std::os::raw::c_void)); + nodes = 0i32 as (*mut std::os::raw::c_void) as (*mut ZopfliNode); + } + { + BrotliFree(m,matches as (*mut std::os::raw::c_void)); + matches = 0i32 as (*mut std::os::raw::c_void) as (*mut BackwardMatch); + } + { + BrotliFree(m,num_matches as (*mut std::os::raw::c_void)); + num_matches = 0i32 as (*mut std::os::raw::c_void) as (*mut u32); + } +} diff --git a/rust/vendor/brotli/corrosion/backward_references_hq_safe.rs b/rust/vendor/brotli/corrosion/backward_references_hq_safe.rs new file mode 100644 index 0000000..87a10da --- /dev/null +++ b/rust/vendor/brotli/corrosion/backward_references_hq_safe.rs @@ -0,0 +1,2600 @@ +extern { + fn BrotliAllocate( + m : &mut [MemoryManager], n : usize + ) -> *mut std::os::raw::c_void; + fn BrotliEstimateBitCostsForLiterals( + pos : usize, + len : usize, + mask : usize, + data : & [u8], + cost : &mut [f32 + ]); + fn BrotliFindAllStaticDictionaryMatches( + dictionary : & [BrotliEncoderDictionary], + data : & [u8], + min_length : usize, + max_length : usize, + matches : &mut [u32 + ]) -> i32; + fn BrotliFree( + m : &mut [MemoryManager], p : &mut [std::os::raw::c_void + ]); + fn log2(__x : f64) -> f64; + fn memcpy( + __dest : &mut [std::os::raw::c_void], + __src : & [std::os::raw::c_void], + __n : usize + ) -> *mut std::os::raw::c_void; + fn memset( + __s : &mut [std::os::raw::c_void], __c : i32, __n : usize + ) -> *mut std::os::raw::c_void; +} + +static mut kLog2Table + : *const f32 + = 0.0000000000000000f32 ; + +static kDictNumBits : i32 = 15i32; + +static kDictHashMul32 : u32 = 0x1e35a7bdu32; + +static mut kStaticDictionaryBuckets + : *const u16 + = 1i32 ; + + + +pub struct DictWord { + pub len : u8, + pub transform : u8, + pub idx : u16, +} + +static mut kStaticDictionaryWords + : *const DictWord + = 0i32 ; + +static mut kInsBase : *mut u32 = 0i32 ; + +static mut kInsExtra : *mut u32 = 0i32 ; + +static mut kCopyBase : *mut u32 = 2i32 ; + +static mut kCopyExtra : *mut u32 = 0i32 ; + + +pub fn ctzll(mut x : usize) -> usize { + let mut count : u8 = 0i32 as (u8); + while x & 0usize != 0 { + count = (count as (i32) + 1i32) as (u8); + x = x >> 1i32; + } + count as (usize) +} + +static kInvalidMatch : u32 = 0xfffffffu32; + +static kCutoffTransformsCount : u32 = 10u32; + +static kCutoffTransforms + : usize + = 0x71b520ausize << 32i32 | 0xda2d3200u32 as (usize); + +static kHashMul32 : u32 = 0x1e35a7bdu32; + +static kHashMul64 + : usize + = 0x1e35a7bdusize << 32i32 | 0x1e35a7bdusize; + +static kHashMul64Long + : usize + = 0x1fe35a7bu32 as (usize) << 32i32 | 0xd3579bd3u32 as (usize); + +static kInfinity : f32 = 1.7e38f32; + +static mut kDistanceCacheIndex : *const u32 = 0i32 ; + +static mut kDistanceCacheOffset + : *const i32 + = 0i32 ; + + + +pub struct Struct1 { + pub cost : f32, + pub next : u32, + pub shortcut : u32, +} + + + +pub struct ZopfliNode { + pub length : u32, + pub distance : u32, + pub dcode_insert_length : u32, + pub u : Struct1, +} + + +pub fn BrotliInitZopfliNodes( + mut array : &mut [ZopfliNode], mut length : usize +) { + let mut stub : ZopfliNode; + let mut i : usize; + stub.length = 1u32; + stub.distance = 0u32; + stub.dcode_insert_length = 0u32; + stub.u.cost = kInfinity; + i = 0usize; + while i < length { + array[(i as (usize)) ]= stub; + i = i.wrapping_add(1 as (usize)); + } +} + + +#[repr(i32)] +pub enum BrotliEncoderMode { + BROTLI_MODE_GENERIC = 0i32, + BROTLI_MODE_TEXT = 1i32, + BROTLI_MODE_FONT = 2i32, +} + + + +pub struct BrotliHasherParams { + pub type_ : i32, + pub bucket_bits : i32, + pub block_bits : i32, + pub hash_len : i32, + pub num_last_distances_to_check : i32, +} + + + +pub struct BrotliDistanceParams { + pub distance_postfix_bits : u32, + pub num_direct_distance_codes : u32, + pub alphabet_size : u32, + pub max_distance : usize, +} + + + +pub struct BrotliDictionary { + pub size_bits_by_length : *mut u8, + pub offsets_by_length : *mut u32, + pub data_size : usize, + pub data : *const u8, +} + + + +pub struct BrotliEncoderDictionary { + pub words : *const BrotliDictionary, + pub cutoffTransformsCount : u32, + pub cutoffTransforms : usize, + pub hash_table : *const u16, + pub buckets : *const u16, + pub dict_words : *const DictWord, +} + + + +pub struct BrotliEncoderParams { + pub mode : BrotliEncoderMode, + pub quality : i32, + pub lgwin : i32, + pub lgblock : i32, + pub size_hint : usize, + pub disable_literal_context_modeling : i32, + pub large_window : i32, + pub hasher : BrotliHasherParams, + pub dist : BrotliDistanceParams, + pub dictionary : BrotliEncoderDictionary, +} + + + +pub struct Command { + pub insert_len_ : u32, + pub copy_len_ : u32, + pub dist_extra_ : u32, + pub cmd_prefix_ : u16, + pub dist_prefix_ : u16, +} + +fn ZopfliNodeCopyLength( + mut xself : & ZopfliNode +) -> u32 { + (*xself).length & 0x1ffffffu32 +} + +fn ZopfliNodeCopyDistance( + mut xself : & ZopfliNode +) -> u32 { + (*xself).distance +} + +fn ZopfliNodeLengthCode( + mut xself : & ZopfliNode +) -> u32 { + let modifier : u32 = (*xself).length >> 25i32; + ZopfliNodeCopyLength(xself).wrapping_add(9u32).wrapping_sub( + modifier + ) +} + +fn brotli_min_size_t( + mut a : usize, mut b : usize +) -> usize { + if a < b { a } else { b } +} + +fn ZopfliNodeDistanceCode( + mut xself : & ZopfliNode +) -> u32 { + let short_code : u32 = (*xself).dcode_insert_length >> 27i32; + if short_code == 0u32 { + ZopfliNodeCopyDistance(xself).wrapping_add( + 16u32 + ).wrapping_sub( + 1u32 + ) + } else { + short_code.wrapping_sub(1u32) + } +} + +fn Log2FloorNonZero(mut n : usize) -> u32 { + let mut result : u32 = 0u32; + while { + n = n >> 1i32; + n + } != 0 { + result = result.wrapping_add(1 as (u32)); + } + result +} + +fn PrefixEncodeCopyDistance( + mut distance_code : usize, + mut num_direct_codes : usize, + mut postfix_bits : usize, + mut code : &mut [u16], + mut extra_bits : &mut [u32 +]) { if distance_code < (16usize).wrapping_add( + num_direct_codes + ) { + *code = distance_code as (u16); + *extra_bits = 0u32; + } else { + let mut dist + : usize + = (1usize << postfix_bits.wrapping_add( + 2u32 as (usize) + )).wrapping_add( + distance_code.wrapping_sub(16usize).wrapping_sub( + num_direct_codes + ) + ); + let mut bucket + : usize + = Log2FloorNonZero(dist).wrapping_sub(1u32) as (usize); + let mut postfix_mask + : usize + = (1u32 << postfix_bits).wrapping_sub(1u32) as (usize); + let mut postfix : usize = dist & postfix_mask; + let mut prefix : usize = dist >> bucket & 1usize; + let mut offset + : usize + = (2usize).wrapping_add(prefix) << bucket; + let mut nbits : usize = bucket.wrapping_sub(postfix_bits); + *code = (nbits << 10i32 | (16usize).wrapping_add( + num_direct_codes + ).wrapping_add( + (2usize).wrapping_mul( + nbits.wrapping_sub(1usize) + ).wrapping_add( + prefix + ) << postfix_bits + ).wrapping_add( + postfix + )) as (u16); + *extra_bits = (dist.wrapping_sub(offset) >> postfix_bits) as (u32); + } +} + +fn GetInsertLengthCode( + mut insertlen : usize +) -> u16 { + if insertlen < 6usize { + insertlen as (u16) + } else if insertlen < 130usize { + let mut nbits + : u32 + = Log2FloorNonZero( + insertlen.wrapping_sub(2usize) + ).wrapping_sub( + 1u32 + ); + ((nbits << 1i32) as (usize)).wrapping_add( + insertlen.wrapping_sub(2usize) >> nbits + ).wrapping_add( + 2usize + ) as (u16) + } else if insertlen < 2114usize { + Log2FloorNonZero( + insertlen.wrapping_sub(66usize) + ).wrapping_add( + 10u32 + ) as (u16) + } else if insertlen < 6210usize { + 21u32 as (u16) + } else if insertlen < 22594usize { + 22u32 as (u16) + } else { + 23u32 as (u16) + } +} + +fn GetCopyLengthCode(mut copylen : usize) -> u16 { + if copylen < 10usize { + copylen.wrapping_sub(2usize) as (u16) + } else if copylen < 134usize { + let mut nbits + : u32 + = Log2FloorNonZero( + copylen.wrapping_sub(6usize) + ).wrapping_sub( + 1u32 + ); + ((nbits << 1i32) as (usize)).wrapping_add( + copylen.wrapping_sub(6usize) >> nbits + ).wrapping_add( + 4usize + ) as (u16) + } else if copylen < 2118usize { + Log2FloorNonZero( + copylen.wrapping_sub(70usize) + ).wrapping_add( + 12u32 + ) as (u16) + } else { + 23u32 as (u16) + } +} + +fn CombineLengthCodes( + mut inscode : u16, mut copycode : u16, mut use_last_distance : i32 +) -> u16 { + let mut bits64 + : u16 + = (copycode as (u32) & 0x7u32 | (inscode as (u32) & 0x7u32) << 3i32) as (u16); + if use_last_distance != 0 && (inscode as (i32) < 8i32) && (copycode as (i32) < 16i32) { + if copycode as (i32) < 8i32 { + bits64 as (i32) + } else { + bits64 as (i32) | 64i32 + } as (u16) + } else { + let mut offset + : i32 + = 2i32 * ((copycode as (i32) >> 3i32) + 3i32 * (inscode as (i32) >> 3i32)); + offset = (offset << 5i32) + 0x40i32 + (0x520d40i32 >> offset & 0xc0i32); + (offset as (u16) as (i32) | bits64 as (i32)) as (u16) + } +} + +fn GetLengthCode( + mut insertlen : usize, + mut copylen : usize, + mut use_last_distance : i32, + mut code : &mut [u16 +]) { + let mut inscode : u16 = GetInsertLengthCode(insertlen); + let mut copycode : u16 = GetCopyLengthCode(copylen); + *code = CombineLengthCodes(inscode,copycode,use_last_distance); +} + +fn InitCommand( + mut xself : &mut Command, + mut dist : & [BrotliDistanceParams], + mut insertlen : usize, + mut copylen : usize, + mut copylen_code_delta : i32, + mut distance_code : usize +) { + let mut delta : u32 = copylen_code_delta as (i8) as (u8) as (u32); + (*xself).insert_len_ = insertlen as (u32); + (*xself).copy_len_ = (copylen | (delta << 25i32) as (usize)) as (u32); + PrefixEncodeCopyDistance( + distance_code, + (*dist).num_direct_distance_codes as (usize), + (*dist).distance_postfix_bits as (usize), + &mut (*xself).dist_prefix_ , + &mut (*xself).dist_extra_ + ); + GetLengthCode( + insertlen, + (copylen as (i32) + copylen_code_delta) as (usize), + if !!((*xself).dist_prefix_ as (i32) & 0x3ffi32 == 0i32) { + 1i32 + } else { + 0i32 + }, + &mut (*xself).cmd_prefix_ + ); +} + + +pub fn BrotliZopfliCreateCommands( + num_bytes : usize, + block_start : usize, + max_backward_limit : usize, + mut nodes : & [ZopfliNode], + mut dist_cache : &mut [i32], + mut last_insert_len : &mut [usize], + mut params : & [BrotliEncoderParams], + mut commands : &mut [Command], + mut num_literals : &mut [usize +]) { + let mut pos : usize = 0usize; + let mut offset : u32 = (nodes[(0usize)]).u.next; + let mut i : usize; + let mut gap : usize = 0usize; + i = 0usize; + while offset != !(0u32) { + { + let mut next + : *const ZopfliNode + = &nodes[( + pos.wrapping_add(offset as (usize)) as (usize) + ) ]; + let mut copy_length + : usize + = ZopfliNodeCopyLength(next) as (usize); + let mut insert_length + : usize + = ((*next).dcode_insert_length & 0x7ffffffu32) as (usize); + pos = pos.wrapping_add(insert_length); + offset = (*next).u.next; + if i == 0usize { + insert_length = insert_length.wrapping_add(*last_insert_len); + *last_insert_len = 0usize; + } + { + let mut distance : usize = ZopfliNodeCopyDistance(next) as (usize); + let mut len_code : usize = ZopfliNodeLengthCode(next) as (usize); + let mut max_distance + : usize + = brotli_min_size_t( + block_start.wrapping_add(pos), + max_backward_limit + ); + let mut is_dictionary + : i32 + = if !!(distance > max_distance.wrapping_add(gap)) { + 1i32 + } else { + 0i32 + }; + let mut dist_code + : usize + = ZopfliNodeDistanceCode(next) as (usize); + InitCommand( + &mut commands[(i as (usize)) ], + &(*params).dist , + insert_length, + copy_length, + len_code as (i32) - copy_length as (i32), + dist_code + ); + if is_dictionary == 0 && (dist_code > 0usize) { + dist_cache[(3usize) ]= dist_cache[( + 2usize + )]; + dist_cache[(2usize) ]= dist_cache[( + 1usize + )]; + dist_cache[(1usize) ]= dist_cache[( + 0usize + )]; + dist_cache[(0usize) ]= distance as (i32); + } + } + *num_literals = (*num_literals).wrapping_add(insert_length); + pos = pos.wrapping_add(copy_length); + } + i = i.wrapping_add(1 as (usize)); + } + *last_insert_len = (*last_insert_len).wrapping_add( + num_bytes.wrapping_sub(pos) + ); +} + + + +pub struct MemoryManager { + pub alloc_func : fn(*mut std::os::raw::c_void, usize) -> *mut std::os::raw::c_void, + pub free_func : fn(*mut std::os::raw::c_void, *mut std::os::raw::c_void), + pub opaque : *mut std::os::raw::c_void, +} + +fn MaxZopfliLen( + mut params : & [BrotliEncoderParams +]) -> usize { + (if (*params).quality <= 10i32 { + 150i32 + } else { + 325i32 + }) as (usize) +} + + + +pub struct ZopfliCostModel { + pub cost_cmd_ : *mut f32, + pub cost_dist_ : *mut f32, + pub distance_histogram_size : u32, + pub literal_costs_ : *mut f32, + pub min_cost_cmd_ : f32, + pub num_bytes_ : usize, +} + + + +pub struct PosData { + pub pos : usize, + pub distance_cache : *mut i32, + pub costdiff : f32, + pub cost : f32, +} + + + +pub struct StartPosQueue { + pub q_ : *mut PosData, + pub idx_ : usize, +} + + + +pub struct BackwardMatch { + pub distance : u32, + pub length_and_code : u32, +} + +fn StoreLookaheadH10() -> usize { 128usize } + +fn InitZopfliCostModel( + mut m : &mut [MemoryManager], + mut xself : &mut ZopfliCostModel, + mut dist : & [BrotliDistanceParams], + mut num_bytes : usize +) { + let mut distance_histogram_size : u32 = (*dist).alphabet_size; + if distance_histogram_size > 544u32 { + distance_histogram_size = 544u32; + } + (*xself).num_bytes_ = num_bytes; + (*xself).literal_costs_ = if num_bytes.wrapping_add( + 2usize + ) > 0usize { + BrotliAllocate( + m, + num_bytes.wrapping_add(2usize).wrapping_mul( + std::mem::size_of::() + ) + ) + } else { + 0i32 + }; + (*xself).cost_dist_ = if (*dist).alphabet_size > 0u32 { + BrotliAllocate( + m, + ((*dist).alphabet_size as (usize)).wrapping_mul( + std::mem::size_of::() + ) + ) + } else { + 0i32 + }; + (*xself).distance_histogram_size = distance_histogram_size; + if !(0i32 == 0) { } +} + +fn FastLog2(mut v : usize) -> f64 { + if v < std::mem::size_of::<*const f32>().wrapping_div( + std::mem::size_of::() + ) { + return kLog2Table[(v as (usize)) ]as (f64); + } + log2(v as (f64)) +} + +fn ZopfliCostModelSetFromLiteralCosts( + mut xself : &mut ZopfliCostModel, + mut position : usize, + mut ringbuffer : & [u8], + mut ringbuffer_mask : usize +) { + let mut literal_costs : *mut f32 = (*xself).literal_costs_; + let mut literal_carry : f32 = 0.0f64 as (f32); + let mut cost_dist : *mut f32 = (*xself).cost_dist_; + let mut cost_cmd : *mut f32 = (*xself).cost_cmd_; + let mut num_bytes : usize = (*xself).num_bytes_; + let mut i : usize; + BrotliEstimateBitCostsForLiterals( + position, + num_bytes, + ringbuffer_mask, + ringbuffer, + &mut literal_costs[(1usize) ] + ); + literal_costs[(0usize) ]= 0.0f64 as (f32); + i = 0usize; + while i < num_bytes { + { + literal_carry = literal_carry + literal_costs[( + i.wrapping_add(1usize) as (usize) + )]; + literal_costs[( + i.wrapping_add(1usize) as (usize) + ) ]= literal_costs[(i as (usize)) ]+ literal_carry; + literal_carry = literal_carry - (literal_costs[( + i.wrapping_add(1usize) as (usize) + ) ]- literal_costs[(i as (usize))]); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < 704usize { + { + cost_cmd[(i as (usize)) ]= FastLog2( + (11u32).wrapping_add( + i as (u32) + ) as (usize) + ) as (f32); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < (*xself).distance_histogram_size as (usize) { + { + cost_dist[(i as (usize)) ]= FastLog2( + (20u32).wrapping_add( + i as (u32) + ) as (usize) + ) as (f32); + } + i = i.wrapping_add(1 as (usize)); + } + (*xself).min_cost_cmd_ = FastLog2(11usize) as (f32); +} + +fn InitStartPosQueue(mut xself : &mut StartPosQueue) { + (*xself).idx_ = 0usize; +} + +fn BrotliUnalignedRead64( + mut p : & [std::os::raw::c_void +]) -> usize { + *(p ) +} + +fn FindMatchLengthWithLimit( + mut s1 : & [u8], mut s2 : & [u8], mut limit : usize +) -> usize { + let mut matched : usize = 0usize; + let mut limit2 + : usize + = (limit >> 3i32).wrapping_add(1usize); + while { + limit2 = limit2.wrapping_sub(1 as (usize)); + limit2 + } != 0 { + if BrotliUnalignedRead64( + s2 + ) == BrotliUnalignedRead64( + s1[(matched as (usize)) ..] + ) { + s2 = s2[(8usize)..]; + matched = matched.wrapping_add(8usize); + } else { + let mut x + : usize + = BrotliUnalignedRead64( + s2 + ) ^ BrotliUnalignedRead64( + s1[(matched as (usize)) ..] + ); + let mut matching_bits : usize = ctzll(x) as (usize); + matched = matched.wrapping_add(matching_bits >> 3i32); + return matched; + } + } + limit = (limit & 7usize).wrapping_add(1usize); + while { + limit = limit.wrapping_sub(1 as (usize)); + limit + } != 0 { + if s1[(matched as (usize)) ]as (i32) == *s2 as (i32) { + s2 = s2[(1 as (usize))..]; + matched = matched.wrapping_add(1 as (usize)); + } else { + return matched; + } + } + matched +} + +fn InitBackwardMatch( + mut xself : &mut BackwardMatch, mut dist : usize, mut len : usize +) { + (*xself).distance = dist as (u32); + (*xself).length_and_code = (len << 5i32) as (u32); +} + + + +pub struct H10 { + pub window_mask_ : usize, + pub buckets_ : *mut u32, + pub invalid_pos_ : u32, +} + +fn BrotliUnalignedRead32( + mut p : & [std::os::raw::c_void +]) -> u32 { + *(p ) +} + +fn HashBytesH10(mut data : & [u8]) -> u32 { + let mut h + : u32 + = BrotliUnalignedRead32( + data + ).wrapping_mul( + kHashMul32 + ); + h >> 32i32 - 17i32 +} + +fn ForestH10(mut xself : &mut H10) -> *mut u32 { + &mut xself[(1usize) ] +} + +fn LeftChildIndexH10( + mut xself : &mut H10, pos : usize +) -> usize { + (2usize).wrapping_mul(pos & (*xself).window_mask_) +} + +fn RightChildIndexH10( + mut xself : &mut H10, pos : usize +) -> usize { + (2usize).wrapping_mul( + pos & (*xself).window_mask_ + ).wrapping_add( + 1usize + ) +} + +fn StoreAndFindMatchesH10( + mut xself : &mut H10, + data : & [u8], + cur_ix : usize, + ring_buffer_mask : usize, + max_length : usize, + max_backward : usize, + best_len : &mut [usize], + mut matches : &mut [BackwardMatch +]) -> *mut BackwardMatch { + let cur_ix_masked : usize = cur_ix & ring_buffer_mask; + let max_comp_len + : usize + = brotli_min_size_t(max_length,128usize); + let should_reroot_tree + : i32 + = if !!(max_length >= 128usize) { 1i32 } else { 0i32 }; + let key + : u32 + = HashBytesH10( + &data[(cur_ix_masked as (usize)) ] + ); + let mut forest : *mut u32 = ForestH10(xself); + let mut prev_ix + : usize + = *(*xself).buckets_[(key as (usize)) ..]as (usize); + let mut node_left : usize = LeftChildIndexH10(xself,cur_ix); + let mut node_right : usize = RightChildIndexH10(xself,cur_ix); + let mut best_len_left : usize = 0usize; + let mut best_len_right : usize = 0usize; + let mut depth_remaining : usize; + if should_reroot_tree != 0 { + *(*xself).buckets_[(key as (usize)) ..]= cur_ix as (u32); + } + depth_remaining = 64usize; + 'break16: loop { + { + let backward : usize = cur_ix.wrapping_sub(prev_ix); + let prev_ix_masked : usize = prev_ix & ring_buffer_mask; + if backward == 0usize || backward > max_backward || depth_remaining == 0usize { + if should_reroot_tree != 0 { + forest[(node_left as (usize)) ]= (*xself).invalid_pos_; + forest[(node_right as (usize)) ]= (*xself).invalid_pos_; + } + break 'break16; + } + { + let cur_len + : usize + = brotli_min_size_t(best_len_left,best_len_right); + let mut len : usize; + len = cur_len.wrapping_add( + FindMatchLengthWithLimit( + &data[( + cur_ix_masked.wrapping_add(cur_len) as (usize) + ) ], + &data[( + prev_ix_masked.wrapping_add(cur_len) as (usize) + ) ], + max_length.wrapping_sub(cur_len) + ) + ); + if !matches.is_null() && (len > *best_len) { + *best_len = len; + InitBackwardMatch( + { + let _old = matches; + matches = matches[(1 as (usize))..]; + _old + }, + backward, + len + ); + } + if len >= max_comp_len { + if should_reroot_tree != 0 { + forest[(node_left as (usize)) ]= forest[( + LeftChildIndexH10( + xself, + prev_ix + ) as (usize) + )]; + forest[(node_right as (usize)) ]= forest[( + RightChildIndexH10( + xself, + prev_ix + ) as (usize) + )]; + } + break 'break16; + } + if data[( + cur_ix_masked.wrapping_add(len) as (usize) + ) ]as (i32) > data[( + prev_ix_masked.wrapping_add(len) as (usize) + ) ]as (i32) { + best_len_left = len; + if should_reroot_tree != 0 { + forest[(node_left as (usize)) ]= prev_ix as (u32); + } + node_left = RightChildIndexH10(xself,prev_ix); + prev_ix = forest[(node_left as (usize)) ]as (usize); + } else { + best_len_right = len; + if should_reroot_tree != 0 { + forest[(node_right as (usize)) ]= prev_ix as (u32); + } + node_right = LeftChildIndexH10(xself,prev_ix); + prev_ix = forest[(node_right as (usize)) ]as (usize); + } + } + } + depth_remaining = depth_remaining.wrapping_sub(1 as (usize)); + } + matches +} + + + +pub struct Struct18 { + pub params : BrotliHasherParams, + pub is_prepared_ : i32, + pub dict_num_lookups : usize, + pub dict_num_matches : usize, +} + +fn GetHasherCommon( + mut handle : &mut [u8 +]) -> *mut Struct18 { + handle +} + +fn SelfH10(mut handle : &mut [u8]) -> *mut H10 { + &mut *GetHasherCommon(handle).offset( + 1i32 as (isize) + ) +} + +fn brotli_max_size_t( + mut a : usize, mut b : usize +) -> usize { + if a > b { a } else { b } +} + +fn InitDictionaryBackwardMatch( + mut xself : &mut BackwardMatch, + mut dist : usize, + mut len : usize, + mut len_code : usize +) { + (*xself).distance = dist as (u32); + (*xself).length_and_code = (len << 5i32 | if len == len_code { + 0usize + } else { + len_code + }) as (u32); +} + +fn FindAllMatchesH10( + mut handle : &mut [u8], + mut dictionary : & [BrotliEncoderDictionary], + mut data : & [u8], + ring_buffer_mask : usize, + cur_ix : usize, + max_length : usize, + max_backward : usize, + gap : usize, + mut params : & [BrotliEncoderParams], + mut matches : &mut [BackwardMatch +]) -> usize { + let orig_matches : *mut BackwardMatch = matches; + let cur_ix_masked : usize = cur_ix & ring_buffer_mask; + let mut best_len : usize = 1usize; + let short_match_max_backward + : usize + = (if (*params).quality != 11i32 { + 16i32 + } else { + 64i32 + }) as (usize); + let mut stop + : usize + = cur_ix.wrapping_sub(short_match_max_backward); + let mut dict_matches : *mut u32; + let mut i : usize; + if cur_ix < short_match_max_backward { + stop = 0usize; + } + i = cur_ix.wrapping_sub(1usize); + 'break14: while i > stop && (best_len <= 2usize) { + 'continue15: loop { + { + let mut prev_ix : usize = i; + let backward : usize = cur_ix.wrapping_sub(prev_ix); + if backward > max_backward { + break 'break14; + } + prev_ix = prev_ix & ring_buffer_mask; + if data[(cur_ix_masked as (usize)) ]as (i32) != data[( + prev_ix as (usize) + ) ]as (i32) || data[( + cur_ix_masked.wrapping_add( + 1usize + ) as (usize) + ) ]as (i32) != data[( + prev_ix.wrapping_add( + 1usize + ) as (usize) + ) ]as (i32) { + break 'continue15; + } + { + let len + : usize + = FindMatchLengthWithLimit( + &data[(prev_ix as (usize)) ], + &data[(cur_ix_masked as (usize)) ], + max_length + ); + if len > best_len { + best_len = len; + InitBackwardMatch( + { + let _old = matches; + matches = matches[(1 as (usize))..]; + _old + }, + backward, + len + ); + } + } + } + break; + } + i = i.wrapping_sub(1 as (usize)); + } + if best_len < max_length { + matches = StoreAndFindMatchesH10( + SelfH10(handle), + data, + cur_ix, + ring_buffer_mask, + max_length, + max_backward, + &mut best_len , + matches + ); + } + i = 0usize; + while i <= 37usize { + { + dict_matches[(i as (usize)) ]= kInvalidMatch; + } + i = i.wrapping_add(1 as (usize)); + } + { + let mut minlen + : usize + = brotli_max_size_t( + 4usize, + best_len.wrapping_add(1usize) + ); + if BrotliFindAllStaticDictionaryMatches( + dictionary, + &data[(cur_ix_masked as (usize)) ], + minlen, + max_length, + &mut dict_matches[(0usize) ] + ) != 0 { + let mut maxlen + : usize + = brotli_min_size_t(37usize,max_length); + let mut l : usize; + l = minlen; + while l <= maxlen { + { + let mut dict_id : u32 = dict_matches[(l as (usize))]; + if dict_id < kInvalidMatch { + let mut distance + : usize + = max_backward.wrapping_add(gap).wrapping_add( + (dict_id >> 5i32) as (usize) + ).wrapping_add( + 1usize + ); + if distance <= (*params).dist.max_distance { + InitDictionaryBackwardMatch( + { + let _old = matches; + matches = matches[(1 as (usize))..]; + _old + }, + distance, + l, + (dict_id & 31u32) as (usize) + ); + } + } + } + l = l.wrapping_add(1 as (usize)); + } + } + } + ((matches as (isize)).wrapping_sub( + orig_matches as (isize) + ) / std::mem::size_of::<*mut BackwardMatch>( + ) as (isize)) as (usize) +} + +fn BackwardMatchLength( + mut xself : & BackwardMatch +) -> usize { + ((*xself).length_and_code >> 5i32) as (usize) +} + +fn MaxZopfliCandidates( + mut params : & [BrotliEncoderParams +]) -> usize { + (if (*params).quality <= 10i32 { 1i32 } else { 5i32 }) as (usize) +} + +fn ComputeDistanceShortcut( + block_start : usize, + pos : usize, + max_backward : usize, + gap : usize, + mut nodes : & [ZopfliNode +]) -> u32 { + let clen + : usize + = ZopfliNodeCopyLength( + &nodes[(pos as (usize)) ] + ) as (usize); + let ilen + : usize + = ((nodes[( + pos as (usize) + )]).dcode_insert_length & 0x7ffffffu32) as (usize); + let dist + : usize + = ZopfliNodeCopyDistance( + &nodes[(pos as (usize)) ] + ) as (usize); + if pos == 0usize { + 0u32 + } else if dist.wrapping_add(clen) <= block_start.wrapping_add( + pos + ).wrapping_add( + gap + ) && (dist <= max_backward.wrapping_add( + gap + )) && (ZopfliNodeDistanceCode( + &nodes[( + pos as (usize) + ) ] + ) > 0u32) { + pos as (u32) + } else { + (nodes[( + pos.wrapping_sub(clen).wrapping_sub(ilen) as (usize) + )]).u.shortcut + } +} + +fn ZopfliCostModelGetLiteralCosts( + mut xself : & ZopfliCostModel, mut from : usize, mut to : usize +) -> f32 { + *(*xself).literal_costs_[( + to as (usize) + ) ..]- *(*xself).literal_costs_[(from as (usize)) + +..]}fn ComputeDistanceCache( + pos : usize, + mut starting_dist_cache : & [i32], + mut nodes : & [ZopfliNode], + mut dist_cache : &mut [i32 +]) { + let mut idx : i32 = 0i32; + let mut p + : usize + = (nodes[(pos as (usize))]).u.shortcut as (usize); + while idx < 4i32 && (p > 0usize) { + let ilen + : usize + = ((nodes[( + p as (usize) + )]).dcode_insert_length & 0x7ffffffu32) as (usize); + let clen + : usize + = ZopfliNodeCopyLength( + &nodes[(p as (usize)) ] + ) as (usize); + let dist + : usize + = ZopfliNodeCopyDistance( + &nodes[(p as (usize)) ] + ) as (usize); + dist_cache[( + { + let _old = idx; + idx = idx + 1; + _old + } as (usize) + ) ]= dist as (i32); + p = (nodes[( + p.wrapping_sub(clen).wrapping_sub(ilen) as (usize) + )]).u.shortcut as (usize); + } + while idx < 4i32 { + { + dist_cache[(idx as (usize)) ]= *{ + let _old = starting_dist_cache; + starting_dist_cache = starting_dist_cache[( + 1 as (usize) + )..]; + _old + }; + } + idx = idx + 1; + } +} + +fn StartPosQueueSize( + mut xself : & StartPosQueue +) -> usize { + brotli_min_size_t((*xself).idx_,8usize) +} + +fn StartPosQueuePush( + mut xself : &mut StartPosQueue, mut posdata : & [PosData +]) { + let mut offset + : usize + = !{ + let _old = (*xself).idx_; + (*xself).idx_ = (*xself).idx_.wrapping_add(1 as (usize)); + _old + } & 7usize; + let mut len + : usize + = StartPosQueueSize(xself ); + let mut i : usize; + let mut q : *mut PosData = (*xself).q_; + q[(offset as (usize)) ]= *posdata; + i = 1usize; + while i < len { + { + if (q[( + (offset & 7usize) as (usize) + )]).costdiff > (q[( + (offset.wrapping_add( + 1usize + ) & 7usize) as (usize) + )]).costdiff { + let mut __brotli_swap_tmp + : PosData + = q[((offset & 7usize) as (usize))]; + q[((offset & 7usize) as (usize)) ]= q[( + (offset.wrapping_add( + 1usize + ) & 7usize) as (usize) + )]; + q[( + (offset.wrapping_add(1usize) & 7usize) as (usize) + ) ]= __brotli_swap_tmp; + } + offset = offset.wrapping_add(1 as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } +} + +fn EvaluateNode( + block_start : usize, + pos : usize, + max_backward_limit : usize, + gap : usize, + mut starting_dist_cache : & [i32], + mut model : & [ZopfliCostModel], + mut queue : &mut [StartPosQueue], + mut nodes : &mut [ZopfliNode +]) { + let mut node_cost : f32 = (nodes[(pos as (usize))]).u.cost; + (nodes[( + pos as (usize) + )]).u.shortcut = ComputeDistanceShortcut( + block_start, + pos, + max_backward_limit, + gap, + nodes + ); + if node_cost <= ZopfliCostModelGetLiteralCosts( + model, + 0usize, + pos + ) { + let mut posdata : PosData; + posdata.pos = pos; + posdata.cost = node_cost; + posdata.costdiff = node_cost - ZopfliCostModelGetLiteralCosts( + model, + 0usize, + pos + ); + ComputeDistanceCache( + pos, + starting_dist_cache, + nodes , + posdata.distance_cache + ); + StartPosQueuePush( + queue, + &mut posdata + ); + } +} + +fn StartPosQueueAt( + mut xself : & StartPosQueue, mut k : usize +) -> *const PosData { + &mut *(*xself).q_[( + (k.wrapping_sub((*xself).idx_) & 7usize) as (usize) + ) ..] +} + +fn ZopfliCostModelGetMinCostCmd( + mut xself : & ZopfliCostModel +) -> f32 { + (*xself).min_cost_cmd_ +} + +fn ComputeMinimumCopyLength( + start_cost : f32, + mut nodes : & [ZopfliNode], + num_bytes : usize, + pos : usize +) -> usize { + let mut min_cost : f32 = start_cost; + let mut len : usize = 2usize; + let mut next_len_bucket : usize = 4usize; + let mut next_len_offset : usize = 10usize; + while pos.wrapping_add(len) <= num_bytes && ((nodes[( + pos.wrapping_add(len) as (usize) + )]).u.cost <= min_cost) { + len = len.wrapping_add(1 as (usize)); + if len == next_len_offset { + min_cost = min_cost + 1.0f32; + next_len_offset = next_len_offset.wrapping_add(next_len_bucket); + next_len_bucket = next_len_bucket.wrapping_mul(2usize); + } + } + len +} + +fn GetInsertExtra(mut inscode : u16) -> u32 { + kInsExtra[(inscode as (usize)) + +]}fn ZopfliCostModelGetDistanceCost( + mut xself : & ZopfliCostModel, mut distcode : usize +) -> f32 { + *(*xself).cost_dist_[(distcode as (usize)) + +..]}fn GetCopyExtra(mut copycode : u16) -> u32 { + kCopyExtra[(copycode as (usize)) + +]}fn ZopfliCostModelGetCommandCost( + mut xself : & ZopfliCostModel, mut cmdcode : u16 +) -> f32 { + *(*xself).cost_cmd_[(cmdcode as (usize)) + +..]}fn UpdateZopfliNode( + mut nodes : &mut [ZopfliNode], + mut pos : usize, + mut start_pos : usize, + mut len : usize, + mut len_code : usize, + mut dist : usize, + mut short_code : usize, + mut cost : f32 +) { + let mut next + : *mut ZopfliNode + = &mut nodes[( + pos.wrapping_add(len) as (usize) + ) ]; + (*next).length = (len | len.wrapping_add( + 9u32 as (usize) + ).wrapping_sub( + len_code + ) << 25i32) as (u32); + (*next).distance = dist as (u32); + (*next).dcode_insert_length = (short_code << 27i32 | pos.wrapping_sub( + start_pos + )) as (u32); + (*next).u.cost = cost; +} + +fn BackwardMatchLengthCode( + mut xself : & BackwardMatch +) -> usize { + let mut code + : usize + = ((*xself).length_and_code & 31u32) as (usize); + if code != 0 { code } else { BackwardMatchLength(xself) } +} + +fn UpdateNodes( + num_bytes : usize, + block_start : usize, + pos : usize, + mut ringbuffer : & [u8], + ringbuffer_mask : usize, + mut params : & [BrotliEncoderParams], + max_backward_limit : usize, + mut starting_dist_cache : & [i32], + num_matches : usize, + mut matches : & [BackwardMatch], + mut model : & [ZopfliCostModel], + mut queue : &mut [StartPosQueue], + mut nodes : &mut [ZopfliNode +]) -> usize { + let cur_ix : usize = block_start.wrapping_add(pos); + let cur_ix_masked : usize = cur_ix & ringbuffer_mask; + let max_distance + : usize + = brotli_min_size_t(cur_ix,max_backward_limit); + let max_len : usize = num_bytes.wrapping_sub(pos); + let max_zopfli_len : usize = MaxZopfliLen(params); + let max_iters : usize = MaxZopfliCandidates(params); + let mut min_len : usize; + let mut result : usize = 0usize; + let mut k : usize; + let mut gap : usize = 0usize; + EvaluateNode( + block_start, + pos, + max_backward_limit, + gap, + starting_dist_cache, + model, + queue, + nodes + ); + { + let mut posdata + : *const PosData + = StartPosQueueAt(queue ,0usize); + let mut min_cost + : f32 + = (*posdata).cost + ZopfliCostModelGetMinCostCmd( + model + ) + ZopfliCostModelGetLiteralCosts(model,(*posdata).pos,pos); + min_len = ComputeMinimumCopyLength( + min_cost, + nodes , + num_bytes, + pos + ); + } + k = 0usize; + while k < max_iters && (k < StartPosQueueSize( + queue + )) { + 'continue28: loop { + { + let mut posdata + : *const PosData + = StartPosQueueAt(queue ,k); + let start : usize = (*posdata).pos; + let inscode : u16 = GetInsertLengthCode(pos.wrapping_sub(start)); + let start_costdiff : f32 = (*posdata).costdiff; + let base_cost + : f32 + = start_costdiff + GetInsertExtra( + inscode + ) as (f32) + ZopfliCostModelGetLiteralCosts( + model, + 0usize, + pos + ); + let mut best_len : usize = min_len.wrapping_sub(1usize); + let mut j : usize = 0usize; + 'break29: while j < 16usize && (best_len < max_len) { + 'continue30: loop { + { + let idx + : usize + = kDistanceCacheIndex[(j as (usize)) ]as (usize); + let backward + : usize + = (*(*posdata).distance_cache[( + idx as (usize) + ) ..]+ kDistanceCacheOffset[(j as (usize)) ])as (usize); + let mut prev_ix : usize = cur_ix.wrapping_sub(backward); + let mut len : usize = 0usize; + let mut continuation + : u8 + = ringbuffer[( + cur_ix_masked.wrapping_add(best_len) as (usize) + )]; + if cur_ix_masked.wrapping_add(best_len) > ringbuffer_mask { + break 'break29; + } + if backward > max_distance.wrapping_add(gap) { + break 'continue30; + } + if backward <= max_distance { + if prev_ix >= cur_ix { + break 'continue30; + } + prev_ix = prev_ix & ringbuffer_mask; + if prev_ix.wrapping_add( + best_len + ) > ringbuffer_mask || continuation as (i32) != ringbuffer[( + prev_ix.wrapping_add( + best_len + ) as (usize) + ) ]as (i32) { + break 'continue30; + } + len = FindMatchLengthWithLimit( + &ringbuffer[(prev_ix as (usize)) ], + &ringbuffer[( + cur_ix_masked as (usize) + ) ], + max_len + ); + } else { + break 'continue30; + } + { + let dist_cost + : f32 + = base_cost + ZopfliCostModelGetDistanceCost(model,j); + let mut l : usize; + l = best_len.wrapping_add(1usize); + while l <= len { + { + let copycode : u16 = GetCopyLengthCode(l); + let cmdcode + : u16 + = CombineLengthCodes( + inscode, + copycode, + (j == 0usize) as (i32) + ); + let cost + : f32 + = (if cmdcode as (i32) < 128i32 { + base_cost + } else { + dist_cost + }) + GetCopyExtra( + copycode + ) as (f32) + ZopfliCostModelGetCommandCost( + model, + cmdcode + ); + if cost < (nodes[( + pos.wrapping_add(l) as (usize) + )]).u.cost { + UpdateZopfliNode( + nodes, + pos, + start, + l, + l, + backward, + j.wrapping_add(1usize), + cost + ); + result = brotli_max_size_t(result,l); + } + best_len = l; + } + l = l.wrapping_add(1 as (usize)); + } + } + } + break; + } + j = j.wrapping_add(1 as (usize)); + } + if k >= 2usize { + break 'continue28; + } + { + let mut len : usize = min_len; + j = 0usize; + while j < num_matches { + { + let mut match_ : BackwardMatch = matches[(j as (usize))]; + let mut dist : usize = match_.distance as (usize); + let mut is_dictionary_match + : i32 + = if !!(dist > max_distance.wrapping_add(gap)) { + 1i32 + } else { + 0i32 + }; + let mut dist_code + : usize + = dist.wrapping_add(16usize).wrapping_sub( + 1usize + ); + let mut dist_symbol : u16; + let mut distextra : u32; + let mut distnumextra : u32; + let mut dist_cost : f32; + let mut max_match_len : usize; + PrefixEncodeCopyDistance( + dist_code, + (*params).dist.num_direct_distance_codes as (usize), + (*params).dist.distance_postfix_bits as (usize), + &mut dist_symbol , + &mut distextra + ); + distnumextra = (dist_symbol as (i32) >> 10i32) as (u32); + dist_cost = base_cost + distnumextra as (f32) + ZopfliCostModelGetDistanceCost( + model, + (dist_symbol as (i32) & 0x3ffi32) as (usize) + ); + max_match_len = BackwardMatchLength( + &mut match_ + ); + if len < max_match_len && (is_dictionary_match != 0 || max_match_len > max_zopfli_len) { + len = max_match_len; + } + while len <= max_match_len { + { + let len_code + : usize + = if is_dictionary_match != 0 { + BackwardMatchLengthCode( + &mut match_ + ) + } else { + len + }; + let copycode : u16 = GetCopyLengthCode(len_code); + let cmdcode : u16 = CombineLengthCodes(inscode,copycode,0i32); + let cost + : f32 + = dist_cost + GetCopyExtra( + copycode + ) as (f32) + ZopfliCostModelGetCommandCost( + model, + cmdcode + ); + if cost < (nodes[( + pos.wrapping_add(len) as (usize) + )]).u.cost { + UpdateZopfliNode( + nodes, + pos, + start, + len, + len_code, + dist, + 0usize, + cost + ); + result = brotli_max_size_t(result,len); + } + } + len = len.wrapping_add(1 as (usize)); + } + } + j = j.wrapping_add(1 as (usize)); + } + } + } + break; + } + k = k.wrapping_add(1 as (usize)); + } + result +} + +fn StoreH10( + mut handle : &mut [u8], + mut data : & [u8], + mask : usize, + ix : usize +) { + let mut xself : *mut H10 = SelfH10(handle); + let max_backward + : usize + = (*xself).window_mask_.wrapping_sub(16usize).wrapping_add( + 1usize + ); + StoreAndFindMatchesH10( + xself, + data, + ix, + mask, + 128usize, + max_backward, + 0i32 , + 0i32 + ); +} + +fn StoreRangeH10( + mut handle : &mut [u8], + mut data : & [u8], + mask : usize, + ix_start : usize, + ix_end : usize +) { + let mut i : usize = ix_start; + let mut j : usize = ix_start; + if ix_start.wrapping_add(63usize) <= ix_end { + i = ix_end.wrapping_sub(63usize); + } + if ix_start.wrapping_add(512usize) <= i { + while j < i { + { + StoreH10(handle,data,mask,j); + } + j = j.wrapping_add(8usize); + } + } + while i < ix_end { + { + StoreH10(handle,data,mask,i); + } + i = i.wrapping_add(1 as (usize)); + } +} + +fn HashTypeLengthH10() -> usize { 4usize } + +fn CleanupZopfliCostModel( + mut m : &mut [MemoryManager], mut xself : &mut ZopfliCostModel +) { + { + BrotliFree( + m, + (*xself).literal_costs_ + ); + (*xself).literal_costs_ = 0i32 ; + } + { + BrotliFree(m,(*xself).cost_dist_ ); + (*xself).cost_dist_ = 0i32 ; + } +} + +fn ZopfliNodeCommandLength( + mut xself : & ZopfliNode +) -> u32 { + ZopfliNodeCopyLength(xself).wrapping_add( + (*xself).dcode_insert_length & 0x7ffffffu32 + ) +} + +fn ComputeShortestPathFromNodes( + mut num_bytes : usize, mut nodes : &mut [ZopfliNode +]) -> usize { + let mut index : usize = num_bytes; + let mut num_commands : usize = 0usize; + while (nodes[( + index as (usize) + )]).dcode_insert_length & 0x7ffffffu32 == 0u32 && ((nodes[( + index as (usize) + )]).length == 1u32) { + index = index.wrapping_sub(1 as (usize)); + } + (nodes[(index as (usize))]).u.next = !(0u32); + while index != 0usize { + let mut len + : usize + = ZopfliNodeCommandLength( + &mut nodes[( + index as (usize) + ) ] + ) as (usize); + index = index.wrapping_sub(len); + (nodes[(index as (usize))]).u.next = len as (u32); + num_commands = num_commands.wrapping_add(1 as (usize)); + } + num_commands +} + + +pub fn BrotliZopfliComputeShortestPath( + mut m : &mut [MemoryManager], + mut num_bytes : usize, + mut position : usize, + mut ringbuffer : & [u8], + mut ringbuffer_mask : usize, + mut params : & [BrotliEncoderParams], + max_backward_limit : usize, + mut dist_cache : & [i32], + mut hasher : &mut [u8], + mut nodes : &mut [ZopfliNode +]) -> usize { + let max_zopfli_len : usize = MaxZopfliLen(params); + let mut model : ZopfliCostModel; + let mut queue : StartPosQueue; + let mut matches : *mut BackwardMatch; + let store_end + : usize + = if num_bytes >= StoreLookaheadH10() { + position.wrapping_add(num_bytes).wrapping_sub( + StoreLookaheadH10() + ).wrapping_add( + 1usize + ) + } else { + position + }; + let mut i : usize; + let mut gap : usize = 0usize; + let mut lz_matches_offset : usize = 0usize; + (nodes[(0usize)]).length = 0u32; + (nodes[(0usize)]).u.cost = 0i32 as (f32); + InitZopfliCostModel( + m, + &mut model , + &(*params).dist , + num_bytes + ); + if !(0i32 == 0) { + return 0usize; + } + ZopfliCostModelSetFromLiteralCosts( + &mut model , + position, + ringbuffer, + ringbuffer_mask + ); + InitStartPosQueue(&mut queue ); + i = 0usize; + while i.wrapping_add(HashTypeLengthH10()).wrapping_sub( + 1usize + ) < num_bytes { + { + let pos : usize = position.wrapping_add(i); + let max_distance + : usize + = brotli_min_size_t(pos,max_backward_limit); + let mut skip : usize; + let mut num_matches + : usize + = FindAllMatchesH10( + hasher, + &(*params).dictionary , + ringbuffer, + ringbuffer_mask, + pos, + num_bytes.wrapping_sub(i), + max_distance, + gap, + params, + &mut matches[( + lz_matches_offset as (usize) + ) ] + ); + if num_matches > 0usize && (BackwardMatchLength( + &mut matches[( + num_matches.wrapping_sub( + 1usize + ) as (usize) + ) ] + ) > max_zopfli_len) { + matches[(0usize) ]= matches[( + num_matches.wrapping_sub( + 1usize + ) as (usize) + )]; + num_matches = 1usize; + } + skip = UpdateNodes( + num_bytes, + position, + i, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + dist_cache, + num_matches, + matches , + &mut model , + &mut queue , + nodes + ); + if skip < 16384usize { + skip = 0usize; + } + if num_matches == 1usize && (BackwardMatchLength( + &mut matches[( + 0usize + ) ] + ) > max_zopfli_len) { + skip = brotli_max_size_t( + BackwardMatchLength( + &mut matches[( + 0usize + ) ] + ), + skip + ); + } + if skip > 1usize { + StoreRangeH10( + hasher, + ringbuffer, + ringbuffer_mask, + pos.wrapping_add(1usize), + brotli_min_size_t(pos.wrapping_add(skip),store_end) + ); + skip = skip.wrapping_sub(1 as (usize)); + while skip != 0 { + i = i.wrapping_add(1 as (usize)); + if i.wrapping_add(HashTypeLengthH10()).wrapping_sub( + 1usize + ) >= num_bytes { + break; + } + EvaluateNode( + position, + i, + max_backward_limit, + gap, + dist_cache, + &mut model , + &mut queue , + nodes + ); + skip = skip.wrapping_sub(1 as (usize)); + } + } + } + i = i.wrapping_add(1 as (usize)); + } + CleanupZopfliCostModel(m,&mut model ); + ComputeShortestPathFromNodes(num_bytes,nodes) +} + + +pub fn BrotliCreateZopfliBackwardReferences( + mut m : &mut [MemoryManager], + mut num_bytes : usize, + mut position : usize, + mut ringbuffer : & [u8], + mut ringbuffer_mask : usize, + mut params : & [BrotliEncoderParams], + mut hasher : &mut [u8], + mut dist_cache : &mut [i32], + mut last_insert_len : &mut [usize], + mut commands : &mut [Command], + mut num_commands : &mut [usize], + mut num_literals : &mut [usize +]) { + let max_backward_limit + : usize + = (1usize << (*params).lgwin).wrapping_sub( + 16usize + ); + let mut nodes : *mut ZopfliNode; + nodes = if num_bytes.wrapping_add( + 1usize + ) > 0usize { + BrotliAllocate( + m, + num_bytes.wrapping_add(1usize).wrapping_mul( + std::mem::size_of::() + ) + ) + } else { + 0i32 + }; + if !(0i32 == 0) { + return; + } + BrotliInitZopfliNodes( + nodes, + num_bytes.wrapping_add(1usize) + ); + *num_commands = (*num_commands).wrapping_add( + BrotliZopfliComputeShortestPath( + m, + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + dist_cache , + hasher, + nodes + ) + ); + if !(0i32 == 0) { + return; + } + BrotliZopfliCreateCommands( + num_bytes, + position, + max_backward_limit, + nodes , + dist_cache, + last_insert_len, + params, + commands, + num_literals + ); + { + BrotliFree(m,nodes ); + nodes = 0i32 ; + } +} + +fn CommandCopyLen(mut xself : & Command) -> u32 { + (*xself).copy_len_ & 0x1ffffffu32 +} + +fn SetCost( + mut histogram : & [u32], + mut histogram_size : usize, + mut literal_histogram : i32, + mut cost : &mut [f32 +]) { + let mut sum : usize = 0usize; + let mut missing_symbol_sum : usize; + let mut log2sum : f32; + let mut missing_symbol_cost : f32; + let mut i : usize; + i = 0usize; + while i < histogram_size { + { + sum = sum.wrapping_add(histogram[(i as (usize)) ]as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } + log2sum = FastLog2(sum) as (f32); + missing_symbol_sum = sum; + if literal_histogram == 0 { + i = 0usize; + while i < histogram_size { + { + if histogram[(i as (usize)) ]== 0u32 { + missing_symbol_sum = missing_symbol_sum.wrapping_add(1 as (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } + } + missing_symbol_cost = FastLog2( + missing_symbol_sum + ) as (f32) + 2i32 as (f32); + i = 0usize; + while i < histogram_size { + 'continue56: loop { + { + if histogram[(i as (usize)) ]== 0u32 { + cost[(i as (usize)) ]= missing_symbol_cost; + break 'continue56; + } + cost[(i as (usize)) ]= log2sum - FastLog2( + histogram[( + i as (usize) + ) ]as (usize) + ) as (f32); + if cost[(i as (usize)) ]< 1i32 as (f32) { + cost[(i as (usize)) ]= 1i32 as (f32); + } + } + break; + } + i = i.wrapping_add(1 as (usize)); + } +} + +fn brotli_min_float( + mut a : f32, mut b : f32 +) -> f32 { + if a < b { a } else { b } +} + +fn ZopfliCostModelSetFromCommands( + mut xself : &mut ZopfliCostModel, + mut position : usize, + mut ringbuffer : & [u8], + mut ringbuffer_mask : usize, + mut commands : & [Command], + mut num_commands : usize, + mut last_insert_len : usize +) { + let mut histogram_literal : *mut u32; + let mut histogram_cmd : *mut u32; + let mut histogram_dist : *mut u32; + let mut cost_literal : *mut f32; + let mut pos : usize = position.wrapping_sub(last_insert_len); + let mut min_cost_cmd : f32 = kInfinity; + let mut i : usize; + let mut cost_cmd : *mut f32 = (*xself).cost_cmd_; + memset( + histogram_literal , + 0i32, + std::mem::size_of::<*mut u32>() + ); + memset( + histogram_cmd , + 0i32, + std::mem::size_of::<*mut u32>() + ); + memset( + histogram_dist , + 0i32, + std::mem::size_of::<*mut u32>() + ); + i = 0usize; + while i < num_commands { + { + let mut inslength + : usize + = (commands[(i as (usize))]).insert_len_ as (usize); + let mut copylength + : usize + = CommandCopyLen( + &commands[(i as (usize)) ] + ) as (usize); + let mut distcode + : usize + = ((commands[( + i as (usize) + )]).dist_prefix_ as (i32) & 0x3ffi32) as (usize); + let mut cmdcode + : usize + = (commands[(i as (usize))]).cmd_prefix_ as (usize); + let mut j : usize; + { + let _rhs = 1; + let _lhs = &mut histogram_cmd[(cmdcode as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + if cmdcode >= 128usize { + let _rhs = 1; + let _lhs = &mut histogram_dist[(distcode as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + j = 0usize; + while j < inslength { + { + let _rhs = 1; + let _lhs + = &mut histogram_literal[( + ringbuffer[( + (pos.wrapping_add(j) & ringbuffer_mask) as (usize) + ) ]as (usize) + )]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + j = j.wrapping_add(1 as (usize)); + } + pos = pos.wrapping_add(inslength.wrapping_add(copylength)); + } + i = i.wrapping_add(1 as (usize)); + } + SetCost( + histogram_literal , + 256usize, + 1i32, + cost_literal + ); + SetCost( + histogram_cmd , + 704usize, + 0i32, + cost_cmd + ); + SetCost( + histogram_dist , + (*xself).distance_histogram_size as (usize), + 0i32, + (*xself).cost_dist_ + ); + i = 0usize; + while i < 704usize { + { + min_cost_cmd = brotli_min_float( + min_cost_cmd, + cost_cmd[(i as (usize))]); + } + i = i.wrapping_add(1 as (usize)); + } + (*xself).min_cost_cmd_ = min_cost_cmd; + { + let mut literal_costs : *mut f32 = (*xself).literal_costs_; + let mut literal_carry : f32 = 0.0f64 as (f32); + let mut num_bytes : usize = (*xself).num_bytes_; + literal_costs[(0usize) ]= 0.0f64 as (f32); + i = 0usize; + while i < num_bytes { + { + literal_carry = literal_carry + cost_literal[( + ringbuffer[( + (position.wrapping_add( + i + ) & ringbuffer_mask) as (usize) + ) ]as (usize) + )]; + literal_costs[( + i.wrapping_add(1usize) as (usize) + ) ]= literal_costs[(i as (usize)) ]+ literal_carry; + literal_carry = literal_carry - (literal_costs[( + i.wrapping_add(1usize) as (usize) + ) ]- literal_costs[(i as (usize))]); + } + i = i.wrapping_add(1 as (usize)); + } + } +} + +fn ZopfliIterate( + mut num_bytes : usize, + mut position : usize, + mut ringbuffer : & [u8], + mut ringbuffer_mask : usize, + mut params : & [BrotliEncoderParams], + max_backward_limit : usize, + gap : usize, + mut dist_cache : & [i32], + mut model : & [ZopfliCostModel], + mut num_matches : & [u32], + mut matches : & [BackwardMatch], + mut nodes : &mut [ZopfliNode +]) -> usize { + let max_zopfli_len : usize = MaxZopfliLen(params); + let mut queue : StartPosQueue; + let mut cur_match_pos : usize = 0usize; + let mut i : usize; + (nodes[(0usize)]).length = 0u32; + (nodes[(0usize)]).u.cost = 0i32 as (f32); + InitStartPosQueue(&mut queue ); + i = 0usize; + while i.wrapping_add(3usize) < num_bytes { + { + let mut skip + : usize + = UpdateNodes( + num_bytes, + position, + i, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + dist_cache, + num_matches[(i as (usize)) ]as (usize), + &matches[( + cur_match_pos as (usize) + ) ], + model, + &mut queue , + nodes + ); + if skip < 16384usize { + skip = 0usize; + } + cur_match_pos = cur_match_pos.wrapping_add( + num_matches[(i as (usize)) ]as (usize) + ); + if num_matches[( + i as (usize) + ) ]== 1u32 && (BackwardMatchLength( + &matches[( + cur_match_pos.wrapping_sub( + 1usize + ) as (usize) + ) ] + ) > max_zopfli_len) { + skip = brotli_max_size_t( + BackwardMatchLength( + &matches[( + cur_match_pos.wrapping_sub(1usize) as (usize) + ) ] + ), + skip + ); + } + if skip > 1usize { + skip = skip.wrapping_sub(1 as (usize)); + while skip != 0 { + i = i.wrapping_add(1 as (usize)); + if i.wrapping_add(3usize) >= num_bytes { + break; + } + EvaluateNode( + position, + i, + max_backward_limit, + gap, + dist_cache, + model, + &mut queue , + nodes + ); + cur_match_pos = cur_match_pos.wrapping_add( + num_matches[(i as (usize)) ]as (usize) + ); + skip = skip.wrapping_sub(1 as (usize)); + } + } + } + i = i.wrapping_add(1 as (usize)); + } + ComputeShortestPathFromNodes(num_bytes,nodes) +} + + +pub fn BrotliCreateHqZopfliBackwardReferences( + mut m : &mut [MemoryManager], + mut num_bytes : usize, + mut position : usize, + mut ringbuffer : & [u8], + mut ringbuffer_mask : usize, + mut params : & [BrotliEncoderParams], + mut hasher : &mut [u8], + mut dist_cache : &mut [i32], + mut last_insert_len : &mut [usize], + mut commands : &mut [Command], + mut num_commands : &mut [usize], + mut num_literals : &mut [usize +]) { + let max_backward_limit + : usize + = (1usize << (*params).lgwin).wrapping_sub( + 16usize + ); + let mut num_matches + : *mut u32 + = if num_bytes > 0usize { + BrotliAllocate( + m, + num_bytes.wrapping_mul(std::mem::size_of::()) + ) + } else { + 0i32 + }; + let mut matches_size + : usize + = (4usize).wrapping_mul(num_bytes); + let store_end + : usize + = if num_bytes >= StoreLookaheadH10() { + position.wrapping_add(num_bytes).wrapping_sub( + StoreLookaheadH10() + ).wrapping_add( + 1usize + ) + } else { + position + }; + let mut cur_match_pos : usize = 0usize; + let mut i : usize; + let mut orig_num_literals : usize; + let mut orig_last_insert_len : usize; + let mut orig_dist_cache : *mut i32; + let mut orig_num_commands : usize; + let mut model : ZopfliCostModel; + let mut nodes : *mut ZopfliNode; + let mut matches + : *mut BackwardMatch + = if matches_size > 0usize { + BrotliAllocate( + m, + matches_size.wrapping_mul(std::mem::size_of::()) + ) + } else { + 0i32 + }; + let mut gap : usize = 0usize; + let mut shadow_matches : usize = 0usize; + if !(0i32 == 0) { + return; + } + i = 0usize; + while i.wrapping_add(HashTypeLengthH10()).wrapping_sub( + 1usize + ) < num_bytes { + { + let pos : usize = position.wrapping_add(i); + let mut max_distance + : usize + = brotli_min_size_t(pos,max_backward_limit); + let mut max_length : usize = num_bytes.wrapping_sub(i); + let mut num_found_matches : usize; + let mut cur_match_end : usize; + let mut j : usize; + { + if matches_size < cur_match_pos.wrapping_add( + 128usize + ).wrapping_add( + shadow_matches + ) { + let mut _new_size + : usize + = if matches_size == 0usize { + cur_match_pos.wrapping_add(128usize).wrapping_add( + shadow_matches + ) + } else { + matches_size + }; + let mut new_array : *mut BackwardMatch; + while _new_size < cur_match_pos.wrapping_add( + 128usize + ).wrapping_add( + shadow_matches + ) { + _new_size = _new_size.wrapping_mul(2usize); + } + new_array = if _new_size > 0usize { + BrotliAllocate( + m, + _new_size.wrapping_mul(std::mem::size_of::()) + ) + } else { + 0i32 + }; + if !!(0i32 == 0) && (matches_size != 0usize) { + memcpy( + new_array , + matches , + matches_size.wrapping_mul(std::mem::size_of::()) + ); + } + { + BrotliFree(m,matches ); + matches = 0i32 ; + } + matches = new_array; + matches_size = _new_size; + } + } + if !(0i32 == 0) { + return; + } + num_found_matches = FindAllMatchesH10( + hasher, + &(*params).dictionary , + ringbuffer, + ringbuffer_mask, + pos, + max_length, + max_distance, + gap, + params, + &mut matches[( + cur_match_pos.wrapping_add(shadow_matches) as (usize) + ) ] + ); + cur_match_end = cur_match_pos.wrapping_add(num_found_matches); + j = cur_match_pos; + while j.wrapping_add(1usize) < cur_match_end { + { } + j = j.wrapping_add(1 as (usize)); + } + num_matches[(i as (usize)) ]= num_found_matches as (u32); + if num_found_matches > 0usize { + let match_len + : usize + = BackwardMatchLength( + &mut matches[( + cur_match_end.wrapping_sub(1usize) as (usize) + ) ] + ); + if match_len > 325usize { + let skip : usize = match_len.wrapping_sub(1usize); + matches[( + { + let _old = cur_match_pos; + cur_match_pos = cur_match_pos.wrapping_add(1 as (usize)); + _old + } as (usize) + ) ]= matches[( + cur_match_end.wrapping_sub(1usize) as (usize) + )]; + num_matches[(i as (usize)) ]= 1u32; + StoreRangeH10( + hasher, + ringbuffer, + ringbuffer_mask, + pos.wrapping_add(1usize), + brotli_min_size_t(pos.wrapping_add(match_len),store_end) + ); + memset( + &mut num_matches[( + i.wrapping_add(1usize) as (usize) + ) ] , + 0i32, + skip.wrapping_mul(std::mem::size_of::()) + ); + i = i.wrapping_add(skip); + } else { + cur_match_pos = cur_match_end; + } + } + } + i = i.wrapping_add(1 as (usize)); + } + orig_num_literals = *num_literals; + orig_last_insert_len = *last_insert_len; + memcpy( + orig_dist_cache , + dist_cache , + (4usize).wrapping_mul(std::mem::size_of::()) + ); + orig_num_commands = *num_commands; + nodes = if num_bytes.wrapping_add( + 1usize + ) > 0usize { + BrotliAllocate( + m, + num_bytes.wrapping_add(1usize).wrapping_mul( + std::mem::size_of::() + ) + ) + } else { + 0i32 + }; + if !(0i32 == 0) { + return; + } + InitZopfliCostModel( + m, + &mut model , + &(*params).dist , + num_bytes + ); + if !(0i32 == 0) { + return; + } + i = 0usize; + while i < 2usize { + { + BrotliInitZopfliNodes( + nodes, + num_bytes.wrapping_add(1usize) + ); + if i == 0usize { + ZopfliCostModelSetFromLiteralCosts( + &mut model , + position, + ringbuffer, + ringbuffer_mask + ); + } else { + ZopfliCostModelSetFromCommands( + &mut model , + position, + ringbuffer, + ringbuffer_mask, + commands , + (*num_commands).wrapping_sub(orig_num_commands), + orig_last_insert_len + ); + } + *num_commands = orig_num_commands; + *num_literals = orig_num_literals; + *last_insert_len = orig_last_insert_len; + memcpy( + dist_cache , + orig_dist_cache , + (4usize).wrapping_mul(std::mem::size_of::()) + ); + *num_commands = (*num_commands).wrapping_add( + ZopfliIterate( + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + gap, + dist_cache , + &mut model , + num_matches , + matches , + nodes + ) + ); + BrotliZopfliCreateCommands( + num_bytes, + position, + max_backward_limit, + nodes , + dist_cache, + last_insert_len, + params, + commands, + num_literals + ); + } + i = i.wrapping_add(1 as (usize)); + } + CleanupZopfliCostModel(m,&mut model ); + { + BrotliFree(m,nodes ); + nodes = 0i32 ; + } + { + BrotliFree(m,matches ); + matches = 0i32 ; + } + { + BrotliFree(m,num_matches ); + num_matches = 0i32 ; + } +} diff --git a/rust/vendor/brotli/examples/compress.rs b/rust/vendor/brotli/examples/compress.rs new file mode 100644 index 0000000..55eefc2 --- /dev/null +++ b/rust/vendor/brotli/examples/compress.rs @@ -0,0 +1,46 @@ +extern crate brotli; +#[cfg(not(feature="std"))] +fn main() { + panic!("For no-stdlib examples please see the tests") +} +#[cfg(feature="std")] +fn main() { + use std::io; + use std::io::{Read, Write}; + let stdout = &mut io::stdout(); + { + let mut writer = brotli::CompressorWriter::new( + stdout, + 4096, + 11, + 22); + let mut buf = [0u8; 4096]; + loop { + match io::stdin().read(&mut buf[..]) { + Err(e) => { + if let io::ErrorKind::Interrupted = e.kind() { + continue; + } + panic!("{}", e); + } + Ok(size) => { + if size == 0 { + match writer.flush() { + Err(e) => { + if let io::ErrorKind::Interrupted = e.kind() { + continue; + } + panic!("{}", e) + } + Ok(_) => break, + } + } + match writer.write_all(&buf[..size]) { + Err(e) => panic!("{}", e), + Ok(_) => {}, + } + } + } + } + } +} diff --git a/rust/vendor/brotli/examples/decompress.rs b/rust/vendor/brotli/examples/decompress.rs new file mode 100644 index 0000000..9dc810c --- /dev/null +++ b/rust/vendor/brotli/examples/decompress.rs @@ -0,0 +1,37 @@ +extern crate brotli; +#[cfg(not(feature="std"))] +fn main() { + panic!("For no-stdlib examples please see the tests") +} +#[cfg(feature="std")] +fn main() { + use std::io; + let stdin = &mut io::stdin(); + { + use std::io::{Read, Write}; + let mut reader = brotli::Decompressor::new( + stdin, + 4096, // buffer size + ); + let mut buf = [0u8; 4096]; + loop { + match reader.read(&mut buf[..]) { + Err(e) => { + if let io::ErrorKind::Interrupted = e.kind() { + continue; + } + panic!("{}", e); + } + Ok(size) => { + if size == 0 { + break; + } + match io::stdout().write_all(&buf[..size]) { + Err(e) => panic!("{}", e), + Ok(_) => {}, + } + } + } + } + } +} diff --git a/rust/vendor/brotli/research/concatenate_some.py b/rust/vendor/brotli/research/concatenate_some.py new file mode 100644 index 0000000..1c3838c --- /dev/null +++ b/rust/vendor/brotli/research/concatenate_some.py @@ -0,0 +1,137 @@ +import sys +import os +import random as insecure_random +import subprocess +import hashlib +import traceback + +def get_goal(): + ret = insecure_random.randrange(1,16) + if ret == 15: + ret = insecure_random.randrange(15,64) + return ret + +def shasum(work): + sha = hashlib.sha256() + for file in work: + with open(file) as ff: + while True: + r = ff.read(65536) + if r: + sha.update(r) + else: + break + return sha.digest() +def file_size(filename): + return os.stat(filename).st_size +uncatable_stats = 0 +catable_stats = 0 +def process(work, brotli, cat, prefix): + sys.stdout.flush() + global uncatable_stats + global catable_stats + work = [filename for filename in work if filename.find(".jpg") != -1 or filename.find(".avi") != -1 or filename.find(".mp4") != -1 or filename.find(".mov") != -1 or insecure_random.randrange(1,17) == 16] + if len(work) == 0: + return + try: + fullsum = shasum(work) + except Exception: + traceback.print_exc() + print 'ok early exit' + return + quality = "-q" + str(insecure_random.randrange(2,12 if len(work) < 8 else 10)) + if insecure_random.randrange(0,16) == 0: + quality = '-q9.5' + append = insecure_random.randrange(0,2) == 0 + frivolous_procs = [] + procs = [] + print 'processing',work,'at',quality,append + for index, filename in enumerate(work): + thread_count = insecure_random.randrange(1,17) + if quality > 8 and thread_count == 1: + thread_count = 2 + magic = insecure_random.randrange(0,2) == 0 + buffer_size = insecure_random.randrange(1,18) + if buffer_size == 17: + buffer_size = 65536 + elif buffer_size > 3: + buffer_size *= 1024 + bs = "-bs" + str(buffer_size) + args = [brotli, "-c", bs, quality] + if magic: + args.append("-magic") + frivolous_procs.append(subprocess.Popen(args + [filename, prefix + quality+"-" + str(index)+".compressed"])) + if append and index == 0: + args.append("-appendable") + else: + args.append("-catable") + args.append('-j' + str(thread_count)) + args.append(filename) + args.append(prefix + quality+"-" + str(index)+".br") + procs.append(subprocess.Popen(args)) + for index, proc in enumerate(procs): + ret = proc.wait() + if ret: + print 'failure at ' + work[index],quality,append, bs + assert not ret + buffer_size = insecure_random.randrange(1,18) + if buffer_size == 17: + buffer_size = 65536 + elif buffer_size > 3: + buffer_size *= 1024 + bs = "-bs" + str(buffer_size) + args = [cat, bs] + for index, filename in enumerate(work): + args.append(prefix + quality+"-" + str(index)+".br") + stdout, _stderr = subprocess.Popen(args, stdout=subprocess.PIPE).communicate() + with open(prefix+".br", 'w') as f: + f.write(stdout) + procs[0] = subprocess.Popen([brotli, prefix +'.br', prefix]) + ret = procs[0].wait() + if ret: + print 'failure at ',work,quality,append + assert not ret + rtsum = shasum([prefix]) + if rtsum != fullsum: + print 'failure at ',work,quality,append + assert rtsum == fullsum + print 'ok',rtsum.encode('hex') + for (index,proc) in enumerate(frivolous_procs): + ret = proc.wait() + assert not ret + uncatable_stats += file_size(prefix + quality+"-" + str(index)+".compressed") + + catable_stats += len(stdout) + print uncatable_stats,'/',catable_stats,(10000*uncatable_stats/catable_stats)/100.0 + try: + for index, filename in enumerate(work): + os.remove(prefix + quality+"-" + str(index)+".br") + os.remove(prefix + quality+"-" + str(index)+".compressed") + os.remove(prefix + ".br") + os.remove(prefix) + except Exception: + traceback.print_exc() + +def main(): + start = sys.argv[1] + brotli = sys.argv[2] + catbrotli = sys.argv[3] + goal = get_goal() + work =[] + prefix="/tmp/cat-" + os.urandom(16).encode('hex') + for root, dirnames, filenames in os.walk(start): + for filename in filenames: + try: + if file_size(os.path.join(root,filename)): + work.append(os.path.join(root,filename)) + except Exception: + continue + if len(work) >= goal: + goal = get_goal() + process(work, brotli, catbrotli, prefix) + work = [] + if len(work): + process(work, brotli, catbrotli, prefix) +if __name__=="__main__": + main() + diff --git a/rust/vendor/brotli/research/frombase2.py b/rust/vendor/brotli/research/frombase2.py new file mode 100644 index 0000000..b81cb9b --- /dev/null +++ b/rust/vendor/brotli/research/frombase2.py @@ -0,0 +1,18 @@ +import sys + +result = [] +cur_count = 0 +cur_val = 0 +for byte in sys.stdin.read(): + if byte == '1': + cur_val |= (1< { + b: Box<[T]>, +} + +impl From> for Rebox { + fn from(data: Vec) -> Self { + Rebox:: { + b:data.into_boxed_slice(), + } + } +} + +impl core::default::Default for Rebox { + fn default() -> Self { + let v: Vec = Vec::new(); + let b = v.into_boxed_slice(); + Rebox:: { b: b } + } +} + +impl ops::Index for Rebox { + type Output = T; + fn index(&self, index: usize) -> &T { + &(*self.b)[index] + } +} + +impl ops::IndexMut for Rebox { + fn index_mut(&mut self, index: usize) -> &mut T { + &mut (*self.b)[index] + } +} + +impl alloc_no_stdlib::SliceWrapper for Rebox { + fn slice(&self) -> &[T] { + &*self.b + } +} + +impl alloc_no_stdlib::SliceWrapperMut for Rebox { + fn slice_mut(&mut self) -> &mut [T] { + &mut *self.b + } +} +#[derive(Clone, Copy, Default)] +pub struct HeapAllocator { +} + + + +impl alloc_no_stdlib::Allocator for HeapAllocator { + type AllocatedMemory = Rebox; + fn alloc_cell(self: &mut HeapAllocator, len: usize) -> Rebox { + let v: Vec = vec![T::default();len]; + let b = v.into_boxed_slice(); + Rebox:: { b: b } + } + fn free_cell(self: &mut HeapAllocator, _data: Rebox) {} +} + +/* +type HeapBrotliAlloc = brotli::CombiningAllocator< + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + HeapAllocator, + >; +*/ + +macro_rules! println_stderr( + ($($val:tt)*) => { { + writeln!(&mut ::std::io::stderr(), $($val)*).unwrap(); + } } +); + +use std::path::Path; + + +// declare_stack_allocator_struct!(MemPool, 4096, global); + + + +pub struct IoWriterWrapper<'a, OutputType: Write + 'a>(&'a mut OutputType); + + +pub struct IoReaderWrapper<'a, OutputType: Read + 'a>(&'a mut OutputType); + +impl<'a, OutputType: Write> brotli::CustomWrite for IoWriterWrapper<'a, OutputType> { + fn flush(self: &mut Self) -> Result<(), io::Error> { + loop { + match self.0.flush() { + Err(e) => { + match e.kind() { + ErrorKind::Interrupted => continue, + _ => return Err(e), + } + } + Ok(_) => return Ok(()), + } + } + } + fn write(self: &mut Self, buf: &[u8]) -> Result { + loop { + match self.0.write(buf) { + Err(e) => { + match e.kind() { + ErrorKind::Interrupted => continue, + _ => return Err(e), + } + } + Ok(cur_written) => return Ok(cur_written), + } + } + } +} + + +impl<'a, InputType: Read> brotli::CustomRead for IoReaderWrapper<'a, InputType> { + fn read(self: &mut Self, buf: &mut [u8]) -> Result { + loop { + match self.0.read(buf) { + Err(e) => { + match e.kind() { + ErrorKind::Interrupted => continue, + _ => return Err(e), + } + } + Ok(cur_read) => return Ok(cur_read), + } + } + } +} + +struct IntoIoReader(OutputType); + +impl brotli::CustomRead for IntoIoReader { + fn read(self: &mut Self, buf: &mut [u8]) -> Result { + loop { + match self.0.read(buf) { + Err(e) => { + match e.kind() { + ErrorKind::Interrupted => continue, + _ => return Err(e), + } + } + Ok(cur_read) => return Ok(cur_read), + } + } + } +} +#[cfg(not(feature="seccomp"))] +pub fn decompress(r: &mut InputType, + w: &mut OutputType, + buffer_size: usize, + custom_dictionary:Rebox) + -> Result<(), io::Error> + where InputType: Read, + OutputType: Write +{ + let mut alloc_u8 = HeapAllocator::default(); + let mut input_buffer = alloc_u8.alloc_cell(buffer_size); + let mut output_buffer = alloc_u8.alloc_cell(buffer_size); + brotli::BrotliDecompressCustomIoCustomDict( + &mut IoReaderWrapper::(r), + &mut IoWriterWrapper::(w), + input_buffer.slice_mut(), + output_buffer.slice_mut(), + alloc_u8, + HeapAllocator::default(), + HeapAllocator::default(), + custom_dictionary, + Error::new(ErrorKind::UnexpectedEof, "Unexpected EOF")) +} +#[cfg(feature="seccomp")] +extern "C" { + fn calloc(n_elem: usize, el_size: usize) -> *mut u8; + fn free(ptr: *mut u8); + fn syscall(value: i32) -> i32; + fn prctl(operation: i32, flags: u32) -> i32; +} +#[cfg(feature="seccomp")] +const PR_SET_SECCOMP: i32 = 22; +#[cfg(feature="seccomp")] +const SECCOMP_MODE_STRICT: u32 = 1; + +#[cfg(feature="seccomp")] +declare_stack_allocator_struct!(CallocAllocatedFreelist, 8192, calloc); + +#[cfg(feature="seccomp")] +pub fn decompress(r: &mut InputType, + w: &mut OutputType, + buffer_size: usize, + custom_dictionary:Rebox) + -> Result<(), io::Error> + where InputType: Read, + OutputType: Write +{ + if custom_dictionary.len() != 0 { + return Err(io::Error::new(ErrorKind::InvalidData, + "Not allowed to have a custom_dictionary with SECCOMP")) + + } + core::mem::drop(custom_dictionary); + let u8_buffer = + unsafe { define_allocator_memory_pool!(4, u8, [0; 1024 * 1024 * 200], calloc) }; + let u32_buffer = unsafe { define_allocator_memory_pool!(4, u32, [0; 16384], calloc) }; + let hc_buffer = + unsafe { define_allocator_memory_pool!(4, HuffmanCode, [0; 1024 * 1024 * 16], calloc) }; + let mut alloc_u8 = CallocAllocatedFreelist::::new_allocator(u8_buffer.data, bzero); + let alloc_u32 = CallocAllocatedFreelist::::new_allocator(u32_buffer.data, bzero); + let alloc_hc = CallocAllocatedFreelist::::new_allocator(hc_buffer.data, bzero); + let ret = unsafe { prctl(PR_SET_SECCOMP, SECCOMP_MODE_STRICT) }; + if ret != 0 { + panic!("Unable to activate seccomp"); + } + match brotli::BrotliDecompressCustomIo(&mut IoReaderWrapper::(r), + &mut IoWriterWrapper::(w), + &mut alloc_u8.alloc_cell(buffer_size).slice_mut(), + &mut alloc_u8.alloc_cell(buffer_size).slice_mut(), + alloc_u8, + alloc_u32, + alloc_hc, + Error::new(ErrorKind::UnexpectedEof, "Unexpected EOF")) { + Err(e) => Err(e), + Ok(()) => { + unsafe{syscall(60);}; + unreachable!() + } + } +} +pub fn new_brotli_heap_alloc() -> HeapAllocator { + HeapAllocator::default() +} +impl brotli::enc::BrotliAlloc for HeapAllocator { +} +pub fn compress_multi_nostd( + input: Vec, + output: &mut [u8], + params:&BrotliEncoderParams, + mut num_threads: usize, +) -> Result { + let mut alloc_array = [ + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + ]; + if num_threads > alloc_array.len() { + num_threads = alloc_array.len(); + } + CompressMulti(params, &mut Owned::new(Rebox::from(input)), output, &mut alloc_array[..num_threads], &mut util::MTSpawner::default()) +} +pub fn compress_multi( + r: &mut InputType, + w: &mut OutputType, + params:&BrotliEncoderParams, + mut num_threads: usize, + work_pool: Option<&mut WorkerPool, + UnionHasher, + HeapAllocator, + (Rebox, BrotliEncoderParams)>>, +) -> Result { + let mut input: Vec = Vec::::new(); + if let Err(err) = r.read_to_end(&mut input) { + return Err(err); + } + let mut output = Rebox::from(vec![0u8;BrotliEncoderMaxCompressedSizeMulti(input.len(), num_threads)]); + let res = if let Some(worker_pool) = work_pool { + let mut alloc_array = [ + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + SendAlloc::new(HeapAllocator::default(), UnionHasher::Uninit), + ]; + if num_threads > alloc_array.len() { + num_threads = alloc_array.len(); + } + compress_worker_pool( + params, + &mut Owned::new(Rebox::from(input)), + output.slice_mut(), + &mut alloc_array[..num_threads], + worker_pool, + ) + } else { + compress_multi_nostd(input, output.slice_mut(), params, num_threads) + }; + + match res { + Ok(size) => { + if let Err(err) = w.write_all(&output.slice()[..size]) { + Err(err) + } else { + Ok(size) + } + }, + Err(err) => Err(io::Error::new(ErrorKind::Other, + format!("{:?}", err))), + } +} + +pub fn compress(r: &mut InputType, + w: &mut OutputType, + buffer_size: usize, + params:&brotli::enc::BrotliEncoderParams, + custom_dictionary: &[u8], + num_threads: usize) -> Result + where InputType: Read, + OutputType: Write { + if num_threads > 1 && custom_dictionary.len() ==0 && !params.log_meta_block { + if has_stdlib() { + return compress_multi(r, w, params, num_threads, Some(&mut new_work_pool(num_threads - 1))); + } else { + return compress_multi(r, w, params, num_threads, None); + } + } + let mut alloc_u8 = HeapAllocator::default(); + let mut input_buffer = alloc_u8.alloc_cell(buffer_size); + let mut output_buffer = alloc_u8.alloc_cell(buffer_size); + let mut log = |pm:&mut brotli::interface::PredictionModeContextMap, + data:&mut [brotli::interface::Command], + mb:brotli::InputPair, + _mfv: &mut HeapAllocator| { + let tmp = brotli::interface::Command::PredictionMode( + brotli::interface::PredictionModeContextMap::{ + literal_context_map:brotli::InputReference::from(&pm.literal_context_map), + predmode_speed_and_distance_context_map:brotli::InputReference::from(&pm.predmode_speed_and_distance_context_map), + }); + util::write_one(&tmp); + for cmd in data.iter() { + util::write_one(&brotli::thaw_pair(cmd, &mb)); + } + }; + if params.log_meta_block { + println_stderr!("window {} 0 0 0", params.lgwin); + } + brotli::BrotliCompressCustomIoCustomDict(&mut IoReaderWrapper::(r), + &mut IoWriterWrapper::(w), + &mut input_buffer.slice_mut(), + &mut output_buffer.slice_mut(), + params, + new_brotli_heap_alloc(), + &mut log, + custom_dictionary, + Error::new(ErrorKind::UnexpectedEof, "Unexpected EOF")) +} + +// This decompressor is defined unconditionally on whether std is defined +// so we can exercise the code in any case +pub struct BrotliDecompressor(brotli::DecompressorCustomIo, + Rebox, + HeapAllocator, + HeapAllocator, + HeapAllocator>); + + + +impl BrotliDecompressor { + pub fn new(r: R, buffer_size: usize) -> Self { + let mut alloc_u8 = HeapAllocator::default(); + let buffer = alloc_u8.alloc_cell(buffer_size); + let alloc_u32 = HeapAllocator::default(); + let alloc_hc = HeapAllocator::default(); + BrotliDecompressor::( + brotli::DecompressorCustomIo::, + Rebox, + HeapAllocator, HeapAllocator, HeapAllocator> + ::new(IntoIoReader::(r), + buffer, + alloc_u8, alloc_u32, alloc_hc, + io::Error::new(ErrorKind::InvalidData, + "Invalid Data"))) + } +} + +impl Read for BrotliDecompressor { + fn read(&mut self, buf: &mut [u8]) -> Result { + self.0.read(buf) + } +} + +#[cfg(test)] +fn writeln0(strm: &mut OutputType, + data: &str) + -> core::result::Result<(), io::Error> { + writeln!(strm, "{:}", data) +} +#[cfg(test)] +fn writeln_time(strm: &mut OutputType, + data: &str, + v0: u64, + v1: u64, + v2: u32) + -> core::result::Result<(), io::Error> { + writeln!(strm, "{:} {:} {:}.{:09}", v0, data, v1, v2) +} + + +fn read_custom_dictionary(filename :&str) -> Vec { + let mut dict = match File::open(&Path::new(&filename)) { + Err(why) => panic!("couldn't open custom dictionary {:}\n{:}", filename, why), + Ok(file) => file, + }; + let mut ret = Vec::::new(); + dict.read_to_end(&mut ret).unwrap(); + ret +} + +#[cfg(feature="std")] +fn has_stdlib() -> bool { + true +} +#[cfg(not(feature="std"))] +fn has_stdlib() -> bool { + false +} + +fn main() { + let mut buffer_size = 65536; + let mut do_compress = false; + let mut do_validate = false; + let mut params = brotli::enc::BrotliEncoderInitParams(); + let mut custom_dictionary = Vec::::new(); + let mut use_work_pool = has_stdlib(); + params.quality = 11; // default + let mut filenames = [std::string::String::new(), std::string::String::new()]; + let mut num_benchmarks = 1; + let mut double_dash = false; + let mut num_threads = 1; + if env::args_os().len() > 1 { + let mut first = true; + for argument in env::args() { + if first { + first = false; + continue; + } + if argument == "--" { + double_dash = true; + continue; + } + if (argument == "-catable" || argument == "--catable") && !double_dash { + params.catable = true; + params.use_dictionary = false; + params.appendable = true; + continue; + } + if (argument == "-nothreadpool" || argument == "--nothreadpool") && !double_dash { + use_work_pool = false; + continue; + } + + if (argument == "-appendable" || argument == "--appendable") && !double_dash { + params.appendable = true; + continue; + } + if (argument.starts_with("-magic") || argument.starts_with("--magic")) && !double_dash { + params.magic_number = true; + continue; + } + if argument.starts_with("-customdictionary=") && !double_dash { + for item in argument.splitn(2, |c| c== '=').skip(1) { + custom_dictionary = read_custom_dictionary(item); + } + continue; + } + if argument == "--dump-dictionary" && !double_dash { + util::print_dictionary(util::permute_dictionary()); + return + } + if argument == "-utf8" && !double_dash { + params.mode = BrotliEncoderMode::BROTLI_FORCE_UTF8_PRIOR; + continue; + } + if argument == "-msb" && !double_dash { + params.mode = BrotliEncoderMode::BROTLI_FORCE_MSB_PRIOR; + continue; + } + if argument == "-lsb" && !double_dash { + params.mode = BrotliEncoderMode::BROTLI_FORCE_LSB_PRIOR; + continue; + } + if argument == "-signed" && !double_dash { + params.mode = BrotliEncoderMode::BROTLI_FORCE_SIGNED_PRIOR; + continue; + } + if argument == "-efficient" && !double_dash { + params.favor_cpu_efficiency = true; + continue; + } + if argument == "-lowlatency" && !double_dash { + params.favor_cpu_efficiency = false; + continue; + } + if argument == "-i" && !double_dash { + // display the intermediate representation of metablocks + params.log_meta_block = true; + continue; + } + if (argument == "-0" || argument == "-q0") && !double_dash { + params.quality = 0; + continue; + } + if (argument == "-1" || argument == "-q1") && !double_dash { + params.quality = 1; + continue; + } + if (argument == "-2" || argument == "-q2") && !double_dash { + params.quality = 2; + continue; + } + if (argument == "-3" || argument == "-q3") && !double_dash { + params.quality = 3; + continue; + } + if (argument == "-4" || argument == "-q4") && !double_dash { + params.quality = 4; + continue; + } + if (argument == "-5" || argument == "-q5") && !double_dash { + params.quality = 5; + continue; + } + if (argument == "-6" || argument == "-q6") && !double_dash { + params.quality = 6; + continue; + } + if (argument == "-7" || argument == "-q7") && !double_dash { + params.quality = 7; + continue; + } + if (argument == "-8" || argument == "-q8") && !double_dash { + params.quality = 8; + continue; + } + if (argument == "-9" || argument == "-q9") && !double_dash { + params.quality = 9; + continue; + } + if (argument == "-9.5" || argument == "-q9.5") && !double_dash { + params.quality = 10; + params.q9_5 = true; + continue; + } + if (argument == "-9.5x" || argument == "-q9.5x") && !double_dash { + params.quality = 11; + params.q9_5 = true; + continue; + } + if (argument == "-10" || argument == "-q10") && !double_dash { + params.quality = 10; + continue; + } + if (argument == "-11" || argument == "-q11") && !double_dash { + params.quality = 11; + continue; + } + if (argument == "-q9.5y") && !double_dash { + params.quality = 12; + params.q9_5 = true; + continue; + } + if argument.starts_with("-l") && !double_dash { + params.lgblock = argument.trim_matches('-').trim_matches('l').parse::().unwrap(); + continue; + } + if argument.starts_with("-j") && !double_dash { + num_threads = core::cmp::min( + core::cmp::max( + 1, + argument.trim_matches('-').trim_matches('j').parse::().unwrap() as usize), + MAX_THREADS); + continue; + } + if argument.starts_with("-bytescore=") && !double_dash { + params.hasher.literal_byte_score = argument.trim_matches('-').trim_matches('b').trim_matches('y').trim_matches('t').trim_matches('e').trim_matches('s').trim_matches('c').trim_matches('o').trim_matches('r').trim_matches('e').trim_matches('=').parse::().unwrap(); + continue; + } + if argument.starts_with("-w") && !double_dash { + params.lgwin = argument.trim_matches('-').trim_matches('w').parse::().unwrap(); + continue; + } + if (argument == "-validate" || argument == "--validate") && !double_dash { + do_validate = true; + continue; + } + if argument.starts_with("-bs") && !double_dash { + buffer_size = argument.trim_matches('-').trim_matches('b').trim_matches('s').trim_matches('=').parse::().unwrap(); + continue; + } + if argument.starts_with("-findprior") && !double_dash { + params.prior_bitmask_detection = 1; + continue; + } + if argument.starts_with("-findspeed=") && !double_dash { + params.cdf_adaptation_detection = argument.trim_matches('-').trim_matches('f').trim_matches('i').trim_matches('n').trim_matches('d').trim_matches('r').trim_matches('a').trim_matches('n').trim_matches('d').trim_matches('o').trim_matches('m').trim_matches('=').parse::().unwrap() as u8; + continue; + } else if argument == "-findspeed" && !double_dash { + params.cdf_adaptation_detection = 1; + continue; + } + if argument == "-basicstride" && !double_dash { + params.stride_detection_quality = 1; + continue; + } else if argument == "-advstride" && !double_dash { + params.stride_detection_quality = 3; + continue; + } else { + if argument == "-stride" && !double_dash { + params.stride_detection_quality = 2; + continue; + } else { + if (argument.starts_with("-s") && !argument.starts_with("-speed=")) && !double_dash { + params.size_hint = argument.trim_matches('-').trim_matches('s').parse::().unwrap(); + continue; + } + } + } + if argument.starts_with("-speed=") && !double_dash { + let comma_string = argument.trim_matches('-').trim_matches('s').trim_matches('p').trim_matches('e').trim_matches('e').trim_matches('d').trim_matches('='); + let split = comma_string.split(","); + for (index, s) in split.enumerate() { + let data = s.parse::().unwrap(); + if data > 16384 { + println_stderr!("Speed must be <= 16384, not {}", data); + } + if index == 0 { + for item in params.literal_adaptation.iter_mut() { + item.0 = data; + } + } else if index == 1 { + for item in params.literal_adaptation.iter_mut() { + item.1 = data; + } + } else { + if (index & 1) == 0 { + params.literal_adaptation[index / 2].0 = data; + }else { + params.literal_adaptation[index / 2].1 = data; + } + } + } + continue; + } + if argument == "-avoiddistanceprefixsearch" && !double_dash { + params.avoid_distance_prefix_search = true; + } + if argument.starts_with("-b") && !double_dash { + num_benchmarks = argument.trim_matches('-').trim_matches('b').parse::().unwrap(); + continue; + } + if argument == "-c" && !double_dash { + do_compress = true; + continue; + } + if argument == "-h" || argument == "-help" || argument == "--help" && !double_dash { + println_stderr!("Decompression:\nbrotli [input_file] [output_file]\nCompression:brotli -c -q9.5 -w22 [input_file] [output_file]\nQuality may be one of -q9.5 -q9.5x -q9.5y or -q[0-11] for standard brotli settings.\nOptional size hint -s to direct better compression\n\nThe -i parameter produces a cross human readdable IR representation of the file.\nThis can be ingested by other compressors.\nIR-specific options include:\n-findprior\n-speed="); + return; + } + if filenames[0] == "" { + filenames[0] = argument.clone(); + continue; + } + if filenames[1] == "" { + filenames[1] = argument.clone(); + continue; + } + panic!("Unknown Argument {:}", argument); + } + if filenames[0] != "" { + let mut input = match File::open(&Path::new(&filenames[0])) { + Err(why) => panic!("couldn't open {:}\n{:}", filenames[0], why), + Ok(file) => file, + }; + if filenames[1] != "" { + let mut output = match File::create(&Path::new(&filenames[1])) { + Err(why) => panic!("couldn't open file for writing: {:}\n{:}", filenames[1], why), + Ok(file) => file, + }; + let mut worker_pool = if num_threads != 1 && do_compress && use_work_pool && !do_validate { + Some(new_work_pool(num_threads - 1)) + } else { + None + }; + for i in 0..num_benchmarks { + if do_validate { + let dict = core::mem::replace(&mut custom_dictionary, Vec::new()); + if num_benchmarks > 0 { + custom_dictionary = dict.clone(); + } + match validate::compress_validate(&mut input, &mut output, buffer_size, ¶ms, dict.into(), num_threads) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } else if do_compress { + if let Some(ref mut work_pool) = worker_pool { + match compress_multi(&mut input, &mut output, ¶ms, num_threads, Some(work_pool)) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } else { + if num_threads != 1 { + match compress_multi(&mut input, &mut output, ¶ms, num_threads, None) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } else { + match compress(&mut input, &mut output, buffer_size, ¶ms, &custom_dictionary[..], num_threads) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } + } + } else { + let dict = core::mem::replace(&mut custom_dictionary, Vec::new()); + if num_benchmarks > 0 { + custom_dictionary = dict.clone(); + } + match decompress(&mut input, &mut output, buffer_size, dict.into()) { + Ok(_) => {} + Err(e) => panic!("Error: {:} during brotli decompress\nTo compress with Brotli, specify the -c flag.", e), + } + } + if i + 1 != num_benchmarks { + input.seek(SeekFrom::Start(0)).unwrap(); + output.seek(SeekFrom::Start(0)).unwrap(); + } + } + drop(output); + } else { + assert_eq!(num_benchmarks, 1); + if do_validate { + if do_compress { + match validate::compress_validate(&mut input, &mut io::stdout(), buffer_size, ¶ms, custom_dictionary.into(), num_threads) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } else { + match validate::compress_validate(&mut input, &mut io::sink(), buffer_size, ¶ms, custom_dictionary.into(), num_threads) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } + } else if do_compress { + match compress(&mut input, &mut io::stdout(), buffer_size, ¶ms, &custom_dictionary[..], num_threads) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } else { + match decompress(&mut input, &mut io::stdout(), buffer_size, custom_dictionary.into()) { + Ok(_) => {} + Err(e) => panic!("Error: {:} during brotli decompress\nTo compress with Brotli, specify the -c flag.", e), + } + } + } + drop(input); + } else { + assert_eq!(num_benchmarks, 1); + if do_validate { + if do_compress { + match validate::compress_validate(&mut io::stdin(), &mut io::stdout(), buffer_size, ¶ms, custom_dictionary.into(), num_threads) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } else { + match validate::compress_validate(&mut io::stdin(), &mut io::sink(), buffer_size, ¶ms, custom_dictionary.into(), num_threads) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } + } else if do_compress { + match compress(&mut io::stdin(), &mut io::stdout(), buffer_size, ¶ms, &custom_dictionary[..], num_threads) { + Ok(_) => return, + Err(e) => panic!("Error {:?}", e), + } + } else { + match decompress(&mut io::stdin(), &mut io::stdout(), buffer_size, custom_dictionary.into()) { + Ok(_) => return, + Err(e) => panic!("Error: {:} during brotli decompress\nTo compress with Brotli, specify the -c flag.", e), + } + } + } + } else { + assert_eq!(num_benchmarks, 1); + match decompress(&mut io::stdin(), &mut io::stdout(), buffer_size, custom_dictionary.into()) { + Ok(_) => return, + Err(e) => panic!("Error: {:} during brotli decompress\nTo compress with Brotli, specify the -c flag.", e), + } + } +} diff --git a/rust/vendor/brotli/src/bin/catbrotli.rs b/rust/vendor/brotli/src/bin/catbrotli.rs new file mode 100644 index 0000000..f378e74 --- /dev/null +++ b/rust/vendor/brotli/src/bin/catbrotli.rs @@ -0,0 +1,149 @@ +extern crate brotli; +extern crate core; +use std::env; +use std::io; +use std::io::{Read, Write}; +use std::path::Path; +use std::fs::File; + +use brotli::concat::{BroCatli, BroCatliResult}; +fn usage() { + writeln!(&mut ::std::io::stderr(), "Usage: [-w] filename0 filename1 filename2...").unwrap(); +} +fn read_no_interrupt(r: &mut R, buf: &mut [u8]) -> Result { + loop { + match r.read(buf) { + Err(e) => { + match e.kind() { + io::ErrorKind::Interrupted => continue, + _ => return Err(e), + } + } + Ok(cur_read) => return Ok(cur_read), + } + } +} + +fn write_no_interrupt(w: &mut W, mut buf: &[u8]) -> Result { + let mut total_read = 0usize; + loop { + match w.write(buf) { + Err(e) => { + match e.kind() { + io::ErrorKind::Interrupted => continue, + _ => return Err(e), + } + }, + Ok(cur_read) => { + buf = &buf[cur_read..]; + total_read += cur_read; + if buf.len() == 0 { + return Ok(total_read); + } + }, + } + } +} + + +fn main() { + let mut window_size: Option = None; + let mut double_dash = false; + let mut buffer_size = 4096usize; + let mut filenames = Vec::::new(); + let mut ostream = io::stdout(); + if env::args_os().len() > 1 { + for argument in env::args().skip(1) { + if argument.starts_with("-w") && !double_dash { + window_size = Some(argument.trim_matches('-').trim_matches('w').parse::().unwrap() as u8); + continue; + } + if argument.starts_with("-bs") && !double_dash { + buffer_size = argument.trim_matches('-').trim_matches('b').trim_matches('s').parse::().unwrap(); + continue; + } + if argument == "--" { + double_dash = true; + continue; + } + filenames.push(argument); + } + } else { + usage(); + return; + } + let mut ibuffer = vec![0u8; buffer_size]; + let mut obuffer = vec![0u8; buffer_size]; + let mut ooffset = 0; + let mut ioffset; + let mut bro_cat_li = match window_size { + Some(ws) => BroCatli::new_with_window_size(ws), + None => BroCatli::new(), + }; + for filename in filenames { + bro_cat_li.new_brotli_file(); + let mut input_file = match File::open(&Path::new(&filename)) { + Err(why) => panic!("couldn't open {:}\n{:}", filename, why), + Ok(file) => file, + }; + loop { + ioffset = 0; + match read_no_interrupt(&mut input_file, &mut ibuffer[..]) { + Err(e) => panic!("{}", e), + Ok(cur_read) => { + if cur_read == 0 { + break; + } + loop { + match bro_cat_li.stream(&ibuffer[..cur_read], &mut ioffset, + &mut obuffer[..], &mut ooffset) { + BroCatliResult::NeedsMoreOutput => { + match write_no_interrupt(&mut ostream, &obuffer[..ooffset]) { + Err(why) => panic!("couldn't write: {:}", why), + Ok(count) => {assert_eq!(count, ooffset);}, + } + ooffset = 0; + }, + BroCatliResult::NeedsMoreInput => { + break; + }, + BroCatliResult::Success => { + panic!("Unexpected state: Success when streaming before finish"); + } + failure => { + panic!("Failed to concatenate files on {:} {:?}", filename, failure); + }, + } + + } + } + } + } + } + loop { + match bro_cat_li.finish(&mut obuffer[..], &mut ooffset) { + BroCatliResult::NeedsMoreOutput => { + match write_no_interrupt(&mut ostream, &obuffer[..ooffset]) { + Err(why) => panic!("couldn't write: {:}", why), + Ok(count) => {assert_eq!(count, ooffset);}, + } + ooffset = 0; + }, + BroCatliResult::NeedsMoreInput => { + panic!("Unexpected EOF"); + }, + BroCatliResult::Success => { + if ooffset != 0 { + match write_no_interrupt(&mut ostream, &obuffer[..ooffset]) { + Err(why) => panic!("couldn't write: {:}", why), + Ok(count) => {assert_eq!(count, ooffset);}, + } + } + break; + } + failure => { + panic!("{:?}", failure) + } + } + } +} diff --git a/rust/vendor/brotli/src/bin/integration_tests.rs b/rust/vendor/brotli/src/bin/integration_tests.rs new file mode 100755 index 0000000..28e6fc8 --- /dev/null +++ b/rust/vendor/brotli/src/bin/integration_tests.rs @@ -0,0 +1,1317 @@ +#![cfg(test)] +#![allow(non_upper_case_globals)] +#![allow(dead_code)] +extern crate core; +extern crate brotli_decompressor; +use super::HeapAllocator; +#[allow(unused_imports)] +use super::alloc_no_stdlib::{Allocator, SliceWrapper, SliceWrapperMut}; +use super::brotli::BrotliResult; +use super::brotli::BrotliState; +use super::Rebox; +#[cfg(feature="std")] +use super::brotli::{CompressorReader, CompressorWriter}; +#[cfg(feature="std")] +use super::brotli_decompressor::{Decompressor, DecompressorWriter}; +use core::cmp; +use std::io; +#[cfg(feature="std")] +use std::io::{Read, Write}; +use std::time::Duration; +#[cfg(not(feature="disable-timer"))] +use std::time::SystemTime; +use brotli::BrotliDecompressStream; + + +#[cfg(feature="benchmark")] +extern crate test; +#[cfg(feature="benchmark")] +use self::test::Bencher; + + +pub struct Buffer { + data: Vec, + read_offset: usize, +} + +pub struct UnlimitedBuffer { + data: Vec, + read_offset: usize, +} + + +#[cfg(feature="disable-timer")] +fn now() -> Duration { + return Duration::new(0, 0); +} +#[cfg(not(feature="disable-timer"))] +fn now() -> SystemTime { + return SystemTime::now(); +} + +#[cfg(not(feature="disable-timer"))] +fn elapsed(start: SystemTime) -> (Duration, bool) { + match start.elapsed() { + Ok(delta) => return (delta, false), + _ => return (Duration::new(0, 0), true), + } +} + +#[cfg(feature="disable-timer")] +fn elapsed(_start: Duration) -> (Duration, bool) { + return (Duration::new(0, 0), true); +} + + +fn _write_all(w: &mut OutputType, buf: &[u8]) -> Result<(), io::Error> + where OutputType: io::Write +{ + let mut total_written: usize = 0; + while total_written < buf.len() { + match w.write(&buf[total_written..]) { + Err(e) => { + match e.kind() { + io::ErrorKind::Interrupted => continue, + _ => return Err(e), + } + } + Ok(cur_written) => { + if cur_written == 0 { + return Err(io::Error::new(io::ErrorKind::UnexpectedEof, "Write EOF")); + } + total_written += cur_written; + } + } + } + Ok(()) +} +trait Runner { + fn iter (&mut self, cb: &mut Fn); +} + +struct Passthrough { +} +impl Runner for Passthrough { + fn iter (&mut self, cb: &mut Fn) { + cb() + } +} + +#[cfg(feature="benchmark")] +struct BenchmarkPassthrough<'a> (pub &'a mut Bencher); +#[cfg(feature="benchmark")] +impl<'a> Runner for BenchmarkPassthrough<'a>{ + fn iter (&mut self, cb: &mut Fn) { + self.0.iter(cb) + } + +} +// option_env!("BENCHMARK_MODE").is_some() + +fn decompress_internal(r: &mut InputType, + mut w: &mut OutputType, + input_buffer_limit: usize, + output_buffer_limit: usize, + runner: &mut Run) + -> Result<(), io::Error> + where InputType: io::Read, + OutputType: io::Write +{ + let mut total = Duration::new(0, 0); + let mut range: usize = 0; + let mut timing_error: bool = false; + runner.iter(&mut || { + range += 1; + let mut brotli_state = + BrotliState::new(HeapAllocator::default(), + HeapAllocator::default(), + HeapAllocator::default()); + let mut input = brotli_state.alloc_u8.alloc_cell(input_buffer_limit); + let mut output = brotli_state.alloc_u8.alloc_cell(output_buffer_limit); + let mut available_out: usize = output.slice().len(); + + // let amount = try!(r.read(&mut buf)); + let mut available_in: usize = 0; + let mut input_offset: usize = 0; + let mut output_offset: usize = 0; + let mut result: BrotliResult = BrotliResult::NeedsMoreInput; + loop { + match result { + BrotliResult::NeedsMoreInput => { + input_offset = 0; + match r.read(input.slice_mut()) { + Err(e) => { + match e.kind() { + io::ErrorKind::Interrupted => continue, + _ => panic!("{}", e), + } + } + Ok(size) => { + if size == 0 { + panic!("{:?}", io::Error::new(io::ErrorKind::UnexpectedEof, "Read EOF")); + } + available_in = size; + } + } + } + BrotliResult::NeedsMoreOutput => { + _write_all(&mut w, &output.slice()[..output_offset]).unwrap(); + output_offset = 0; + } + BrotliResult::ResultSuccess => break, + BrotliResult::ResultFailure => panic!("FAILURE"), + } + let mut written: usize = 0; + let start = now(); + result = BrotliDecompressStream(&mut available_in, + &mut input_offset, + &input.slice(), + &mut available_out, + &mut output_offset, + &mut output.slice_mut(), + &mut written, + &mut brotli_state); + + let (delta, err) = elapsed(start); + if err { + timing_error = true; + } + total = total + delta; + if output_offset != 0 { + _write_all(&mut w, &output.slice()[..output_offset]).unwrap(); + output_offset = 0; + available_out = output.slice().len() + } + } + }); + if timing_error { + let _r = super::writeln0(&mut io::stderr(), "Timing error"); + } else { + let _r = super::writeln_time(&mut io::stderr(), + "Iterations; Time", + range as u64, + total.as_secs(), + total.subsec_nanos()); + } + Ok(()) +} + +impl Buffer { + pub fn new(buf: &[u8]) -> Buffer { + let mut ret = Buffer { + data: Vec::::new(), + read_offset: 0, + }; + ret.data.extend(buf); + return ret; + } +} +impl UnlimitedBuffer { + pub fn new(buf: &[u8]) -> Self { + let mut ret = UnlimitedBuffer { + data: Vec::::new(), + read_offset: 0, + }; + ret.data.extend(buf); + return ret; + } + pub fn reset_read(&mut self) { + self.read_offset = 0; + } + pub fn data(&self) -> &[u8] { + &self.data[..] + } +} +impl io::Read for Buffer { + fn read(self: &mut Self, buf: &mut [u8]) -> io::Result { + if self.read_offset == self.data.len() { + self.read_offset = 0; + } + let bytes_to_read = cmp::min(buf.len(), self.data.len() - self.read_offset); + if bytes_to_read > 0 { + buf[0..bytes_to_read].clone_from_slice(&self.data[self.read_offset.. + self.read_offset + bytes_to_read]); + } + self.read_offset += bytes_to_read; + return Ok(bytes_to_read); + } +} +impl io::Write for Buffer { + fn write(self: &mut Self, buf: &[u8]) -> io::Result { + if self.read_offset == self.data.len() { + return Ok(buf.len()); + } + self.data.extend(buf); + return Ok(buf.len()); + } + fn flush(self: &mut Self) -> io::Result<()> { + return Ok(()); + } +} +impl io::Read for UnlimitedBuffer { + fn read(self: &mut Self, buf: &mut [u8]) -> io::Result { + let bytes_to_read = cmp::min(buf.len(), self.data.len() - self.read_offset); + if bytes_to_read > 0 { + buf[0..bytes_to_read].clone_from_slice(&self.data[self.read_offset.. + self.read_offset + bytes_to_read]); + } + self.read_offset += bytes_to_read; + return Ok(bytes_to_read); + } +} + +impl io::Write for UnlimitedBuffer { + fn write(self: &mut Self, buf: &[u8]) -> io::Result { + self.data.extend(buf); + return Ok(buf.len()); + } + fn flush(self: &mut Self) -> io::Result<()> { + return Ok(()); + } +} + +#[allow(non_snake_case)] +#[test] +fn test_roundtrip_64x() { + let X = 'X' as u8; + let in_buf: [u8; 64] = [X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, + X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, + X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X]; + + let mut input = UnlimitedBuffer::new(&in_buf); + let mut compressed = UnlimitedBuffer::new(&[]); + let mut output = UnlimitedBuffer::new(&[]); + let q: i32 = 9; + let lgwin: i32 = 16; + let mut params = super::brotli::enc::BrotliEncoderInitParams(); + params.quality = q; + params.lgwin = lgwin; + match super::compress(&mut input, &mut compressed, 65536, ¶ms, &[], 1) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + let mut compressed_in = UnlimitedBuffer::new(&compressed.data[..]); + match super::decompress(&mut compressed_in, &mut output, 65536, Rebox::default()) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + for i in 0..input.data.len() { + assert_eq!(output.data[i], input.data[i]); + } + assert_eq!(output.data.len(), input.data.len()); + assert_eq!(input.read_offset, in_buf.len()); +} + +fn roundtrip_helper(in_buf: &[u8], q: i32, lgwin: i32, q9_5: bool) -> usize { + let mut params = super::brotli::enc::BrotliEncoderInitParams(); + params.quality = q; + params.q9_5 = q9_5; + params.lgwin = lgwin; + params.size_hint = if in_buf.len() > 100000 { 2048 * 1024} else {in_buf.len()}; + let mut input = UnlimitedBuffer::new(&in_buf); + let mut compressed = UnlimitedBuffer::new(&[]); + let mut output = UnlimitedBuffer::new(&[]); + match super::compress(&mut input, &mut compressed, 4096, ¶ms, &[], 1) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + let mut compressed_in = UnlimitedBuffer::new(&compressed.data[..]); + match super::decompress(&mut compressed_in, &mut output, 4096, Rebox::default()) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + for i in 0..input.data.len() { + assert_eq!(output.data[i], input.data[i]); + } + assert_eq!(output.data.len(), input.data.len()); + assert_eq!(input.read_offset, in_buf.len()); + return compressed.data[..].len() +} + +fn total_roundtrip_helper(data: &[u8]) { + for q in 0..10 { + roundtrip_helper(data, q as i32, (q + 13) as i32, false); + } + roundtrip_helper(data, 10, 23, true); +} +static RANDOM_THEN_UNICODE : &'static [u8] = include_bytes!("../../testdata/random_then_unicode"); +#[test] +fn test_random_then_unicode_0() { + roundtrip_helper(RANDOM_THEN_UNICODE, 0, 13, false); +} + +#[test] +fn test_random_then_unicode_1() { + roundtrip_helper(RANDOM_THEN_UNICODE, 1, 14, false); +} + +#[test] +fn test_random_then_unicode_2() { + roundtrip_helper(RANDOM_THEN_UNICODE, 2, 15, false); +} + +#[test] +fn test_random_then_unicode_3() { + roundtrip_helper(RANDOM_THEN_UNICODE, 3, 16, false); +} + +#[test] +fn test_random_then_unicode_4() { + roundtrip_helper(RANDOM_THEN_UNICODE, 4, 17, false); +} + +#[test] +fn test_random_then_unicode_5() { + roundtrip_helper(RANDOM_THEN_UNICODE, 5, 18, false); +} + +#[test] +fn test_random_then_unicode_6() { + roundtrip_helper(RANDOM_THEN_UNICODE, 6, 19, false); +} + +#[test] +fn test_random_then_unicode_7() { + roundtrip_helper(RANDOM_THEN_UNICODE, 7, 20, false); +} + +#[test] +fn test_random_then_unicode_8() { + roundtrip_helper(RANDOM_THEN_UNICODE, 8, 21, false); +} + +#[test] +fn test_random_then_unicode_9() { + roundtrip_helper(RANDOM_THEN_UNICODE, 9, 22, false); +} +#[cfg(feature="std")] +const random_then_unicode_compressed_size_9_5 : usize = 130036; +#[cfg(feature="std")] +const random_then_unicode_compressed_size_9_5x : usize = 129715; + + +#[cfg(not(feature="std"))] +const alice_compressed_size_10 : usize = 47490; +#[cfg(not(feature="std"))] +const alice_compressed_size_11 : usize = 46496; + +#[cfg(feature="std")] +#[cfg(not(feature="float64"))] +const alice_compressed_size_10 : usize = 47488; +#[cfg(feature="std")] +#[cfg(not(feature="float64"))] +const alice_compressed_size_11 : usize = 46493; + +#[cfg(feature="std")] +#[cfg(feature="float64")] +const alice_compressed_size_10 : usize = 47515; +#[cfg(feature="std")] +#[cfg(feature="float64")] +const alice_compressed_size_11 : usize = 46510; + + + +#[cfg(not(feature="std"))] // approx log +const random_then_unicode_compressed_size_9_5 : usize = 136699; +#[cfg(not(feature="std"))] // approx log +const random_then_unicode_compressed_size_9_5x : usize = 136095; + +#[test] +fn test_random_then_unicode_9_5() { + let c_size = roundtrip_helper(RANDOM_THEN_UNICODE, 10, 28, true); + assert_eq!(c_size, random_then_unicode_compressed_size_9_5); +} + +#[test] +fn test_random_then_unicode_9x5() { + let c_size = roundtrip_helper(RANDOM_THEN_UNICODE, 11, 22, true); + assert_eq!(c_size, random_then_unicode_compressed_size_9_5x); +} + +#[test] +fn test_alice29_11() { + let c_size = roundtrip_helper(include_bytes!("../../testdata/alice29.txt"), 11, 22, false); + if c_size != 46492 { // depends on log2 impl + assert_eq!(c_size, alice_compressed_size_11); + } +} + +#[test] +fn test_alice29_10() { + let c_size = roundtrip_helper(include_bytes!("../../testdata/alice29.txt"), 10, 22, false); + assert_eq!(c_size, alice_compressed_size_10); +} + +#[test] +fn test_roundtrip_quickfox_repeated() { + total_roundtrip_helper(include_bytes!("../../testdata/quickfox_repeated")); +} + +#[test] +fn test_roundtrip_alice29() { + total_roundtrip_helper(include_bytes!("../../testdata/alice29.txt")); +} + +#[test] +fn test_roundtrip_as_you_lik() { + total_roundtrip_helper(include_bytes!("../../testdata/asyoulik.txt")); +} + +#[cfg(feature="std")] +fn reader_helper(mut in_buf: &[u8], q: u32, lgwin: u32) { + let original_buf = in_buf; + let mut cmp = [0u8; 259]; + let mut input = UnlimitedBuffer::new(&in_buf); + { + let renc = CompressorReader::new(&mut input, 255, q, lgwin); + let mut rdec = Decompressor::new(renc, 257); + loop { + match rdec.read(&mut cmp[..]) { + Ok(size) => { + if size == 0 { + break; + } + assert_eq!(cmp[..size], in_buf[..size]); + in_buf = &in_buf[size..]; + } + Err(e) => panic!("Error {:?}", e), + } + } + let inner_item = rdec.into_inner(); + let _inner_inner_item = inner_item.into_inner(); + } + in_buf = original_buf; + input = UnlimitedBuffer::new(&in_buf); + let mut r2enc = CompressorReader::new(&mut input, 255, q, lgwin); + let mut compressed_size = 0usize; + loop { + match r2enc.read(&mut cmp[..]) { + Ok(size) => { + if size == 0 { + break; + } + compressed_size += size; + } + Err(e) => panic!("Error {:?}", e), + } + } + let pct_ratio = 90usize; + assert!(compressed_size < original_buf.len() * pct_ratio / 100); +} + + + + + + + +/* + +#[cfg(feature="std")] +fn simple_reader_helper(mut in_buf: &[u8], q: u32, lgwin: u32) { + let mut xinput = UnlimitedBuffer::new(&in_buf); + let xenc; + let mut buf = HeapAllocator::default().alloc_cell(1024); + xenc = SimpleReader::new(xinput, buf, 1, 16); + return; + + let original_buf = in_buf; + let mut cmp = [0u8; 259]; + let mut buf = HeapAllocator::default().alloc_cell(1024); + let mut input = UnlimitedBuffer::new(&in_buf); + { + let renc = SimpleReader::new(&mut input, buf, q, lgwin).unwrap(); + let mut rdec = Decompressor::new(renc, 257); + loop { + match rdec.read(&mut cmp[..]) { + Ok(size) => { + if size == 0 { + break; + } + assert_eq!(cmp[..size], in_buf[..size]); + in_buf = &in_buf[size..]; + } + Err(e) => panic!("Error {:?}", e), + } + } + } + in_buf = original_buf; + input = UnlimitedBuffer::new(&in_buf); + let mut r2enc = CompressorReader::new(&mut input, 255, q, lgwin); + let mut compressed_size = 0usize; + loop { + match r2enc.read(&mut cmp[..]) { + Ok(size) => { + if size == 0 { + break; + } + compressed_size += size; + } + Err(e) => panic!("Error {:?}", e), + } + } + let pct_ratio = 90usize; + assert!(compressed_size < original_buf.len() * pct_ratio / 100); +} +*/ +#[cfg(feature="std")] +#[test] +fn test_reader_64x() { + reader_helper(include_bytes!("../../testdata/64x"), 9, 20); +} +/* +#[cfg(feature="std")] +#[test] +fn test_simple_64x() { + bogus_reader_helper(include_bytes!("../../testdata/64x"), 9, 20); +}*/ + +#[cfg(feature="std")] +#[test] +fn test_reader_as_you_lik() { + reader_helper(include_bytes!("../../testdata/asyoulik.txt"), 9, 20); +} +#[cfg(feature="std")] +#[test] +fn test_reader_quickfox_repeated() { + reader_helper(include_bytes!("../../testdata/quickfox_repeated"), 9, 20); +} +#[cfg(feature="std")] +#[test] +fn test_reader_random_then_unicode() { + reader_helper(include_bytes!("../../testdata/random_then_unicode"), 9, 20); +} + +#[cfg(feature="std")] +#[test] +fn test_reader_alice() { + reader_helper(include_bytes!("../../testdata/alice29.txt"), 9, 22); +} + +#[cfg(feature="std")] +fn writer_helper(mut in_buf: &[u8], buf_size: usize, q: u32, lgwin: u32, do_flush: bool) { + let original_buf = in_buf; + let mut output = UnlimitedBuffer::new(&[]); + { + {let wdec = DecompressorWriter::new(&mut output, 257); + {let mut wenc = CompressorWriter::new(wdec, 255, q, lgwin); + while in_buf.len() > 0 { + match wenc.write(&in_buf[..cmp::min(in_buf.len(), buf_size)]) { + Ok(size) => { + if size == 0 { + break; + } + in_buf = &in_buf[size..]; + } + Err(e) => panic!("Error {:?}", e), + } + if do_flush { + if let Err(e) = wenc.flush() { + panic!("Error {:?}", e); + } + } + } + } + } + assert_eq!(output.data.len(), original_buf.len()); + for i in 0..cmp::min(original_buf.len(), output.data.len()) { + assert_eq!(output.data[i], original_buf[i]); + } + in_buf = original_buf; + let mut compressed = UnlimitedBuffer::new(&[]); + { + let mut wenc = CompressorWriter::new(&mut compressed, 255, q, lgwin); + while in_buf.len() > 0 { + match wenc.write(&in_buf[..cmp::min(in_buf.len(), buf_size)]) { + Ok(size) => { + if size == 0 { + break; + } + in_buf = &in_buf[size..]; + } + Err(e) => panic!("Error {:?}", e), + } + } + } + let pct_ratio = 90usize; + assert!(compressed.data.len() < original_buf.len() * pct_ratio / 100); + } +} + + +#[cfg(feature="std")] +fn into_inner_writer_helper(mut in_buf: &[u8], buf_size: usize, q: u32, lgwin: u32) { + let orig_buf = in_buf; + let mut compressed = UnlimitedBuffer::new(&[]); + let mut wenc = CompressorWriter::new(&mut compressed, 255, q, lgwin); + while in_buf.len() > 0 { + match wenc.write(&in_buf[..cmp::min(in_buf.len(), buf_size)]) { + Ok(size) => { + if size == 0 { + break; + } + in_buf = &in_buf[size..]; + } + Err(e) => panic!("Error {:?}", e), + } + } + let c2 = wenc.into_inner(); + + let pct_ratio = 95usize; + assert!(c2.data.len() > 0); + assert!(c2.data.len() < orig_buf.len() * pct_ratio / 100); + let mut compressed_in = UnlimitedBuffer::new(&c2.data[..]); + let mut output = UnlimitedBuffer::new(&[]); + match super::decompress(&mut compressed_in, &mut output, 65536, Rebox::default()) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + for i in 0..orig_buf.len() { + assert_eq!(output.data[i], orig_buf[i]); + } + assert_eq!(output.data.len(), orig_buf.len()); + +} + +#[cfg(feature="std")] +#[test] +fn test_writer_as_you_lik() { + writer_helper(include_bytes!("../../testdata/asyoulik.txt"), 17, 9, 20, false); +} +#[cfg(feature="std")] +#[test] +fn test_writer_as_you_lik_into_inner() { + into_inner_writer_helper(include_bytes!("../../testdata/asyoulik.txt"), 256, 4, 16); +} +#[cfg(feature="std")] +#[test] +fn test_writer_64x() { + writer_helper(include_bytes!("../../testdata/64x"), 17, 9, 20, false); +} +#[cfg(feature="std")] +#[test] +fn test_writer_quickfox_repeated() { + writer_helper(include_bytes!("../../testdata/quickfox_repeated"), 251, 9, 20, false); +} +#[cfg(feature="std")] +#[test] +fn test_writer_random_then_unicode() { + writer_helper(include_bytes!("../../testdata/random_then_unicode"), 277, 9, 20, false); +} + +#[cfg(feature="std")] +#[test] +fn test_writer_alice() { + writer_helper(include_bytes!("../../testdata/alice29.txt"), 299, 9, 22, true); +} + + +#[test] +fn test_10x_10y() { + let in_buf: [u8; 12] = [0x1b, 0x13, 0x00, 0x00, 0xa4, 0xb0, 0xb2, 0xea, 0x81, 0x47, 0x02, 0x8a]; + let mut input = Buffer::new(&in_buf); + let mut output = Buffer::new(&[]); + output.read_offset = 20; + match super::decompress(&mut input, &mut output, 65536, Rebox::default()) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + let mut i: usize = 0; + while i < 10 { + assert_eq!(output.data[i], 'X' as u8); + assert_eq!(output.data[i + 10], 'Y' as u8); + i += 1; + } + assert_eq!(output.data.len(), 20); + assert_eq!(input.read_offset, in_buf.len()); +} + +#[test] +fn test_10x_10y_one_out_byte() { + let in_buf: [u8; 12] = [0x1b, 0x13, 0x00, 0x00, 0xa4, 0xb0, 0xb2, 0xea, 0x81, 0x47, 0x02, 0x8a]; + let mut input = Buffer::new(&in_buf); + let mut output = Buffer::new(&[]); + output.read_offset = 20; + match decompress_internal(&mut input, &mut output, 12, 1, &mut Passthrough{}) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + let mut i: usize = 0; + while i < 10 { + assert_eq!(output.data[i], 'X' as u8); + assert_eq!(output.data[i + 10], 'Y' as u8); + i += 1; + } + assert_eq!(output.data.len(), 20); + assert_eq!(input.read_offset, in_buf.len()); +} + +#[test] +fn test_10x_10y_byte_by_byte() { + let in_buf: [u8; 12] = [0x1b, 0x13, 0x00, 0x00, 0xa4, 0xb0, 0xb2, 0xea, 0x81, 0x47, 0x02, 0x8a]; + let mut input = Buffer::new(&in_buf); + let mut output = Buffer::new(&[]); + output.read_offset = 20; + match decompress_internal(&mut input, &mut output, 1, 1, &mut Passthrough{}) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + let mut i: usize = 0; + while i < 10 { + assert_eq!(output.data[i], 'X' as u8); + assert_eq!(output.data[i + 10], 'Y' as u8); + i += 1; + } + assert_eq!(output.data.len(), 20); + assert_eq!(input.read_offset, in_buf.len()); +} + + +fn assert_decompressed_input_matches_output(input_slice: &[u8], + output_slice: &[u8], + input_buffer_size: usize, + output_buffer_size: usize) { + let mut input = Buffer::new(input_slice); + let mut output = Buffer::new(&[]); + output.read_offset = output_slice.len(); + if input_buffer_size == output_buffer_size { + match super::decompress(&mut input, &mut output, input_buffer_size, Rebox::default()) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } else { + match decompress_internal(&mut input, + &mut output, + input_buffer_size, + output_buffer_size, + &mut Passthrough{}) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } + assert_eq!(output.data.len(), output_slice.len()); + assert_eq!(output.data, output_slice) +} + +#[cfg(feature="benchmark")] +fn benchmark_decompressed_input(input_slice: &[u8], + output_slice: &[u8], + input_buffer_size: usize, + output_buffer_size: usize, + bench: &mut Bencher) { + let mut input = Buffer::new(input_slice); + let mut output = Buffer::new(&[]); + output.read_offset = output_slice.len(); + match decompress_internal(&mut input, + &mut output, + input_buffer_size, + output_buffer_size, + &mut BenchmarkPassthrough(bench), + ) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + assert_eq!(output.data.len(), output_slice.len()); + assert_eq!(output.data, output_slice) +} +pub struct LimitedBuffer<'a> { + pub data: &'a mut [u8], + pub write_offset: usize, + pub read_offset: usize, +} + +impl<'a> LimitedBuffer<'a> { + pub fn new(buf: &'a mut [u8]) -> Self { + LimitedBuffer { + data: buf, + write_offset: 0, + read_offset: 0, + } + } +} +impl<'a> LimitedBuffer<'a> { + fn reset(&mut self) { + self.write_offset = 0; + self.read_offset = 0; + self.data.split_at_mut(32).0.clone_from_slice(&[0u8;32]); // clear the first 256 bits + } + fn reset_read(&mut self) { + self.read_offset = 0; + } + fn written(&self) -> &[u8] { + &self.data[..self.write_offset] + } +} +impl<'a> io::Read for LimitedBuffer<'a> { + fn read(self: &mut Self, buf: &mut [u8]) -> io::Result { + let bytes_to_read = cmp::min(buf.len(), self.data.len() - self.read_offset); + if bytes_to_read > 0 { + buf[0..bytes_to_read].clone_from_slice(&self.data[self.read_offset.. + self.read_offset + bytes_to_read]); + } + self.read_offset += bytes_to_read; + return Ok(bytes_to_read); + } +} + +impl<'a> io::Write for LimitedBuffer<'a> { + fn write(self: &mut Self, buf: &[u8]) -> io::Result { + let bytes_to_write = cmp::min(buf.len(), self.data.len() - self.write_offset); + if bytes_to_write > 0 { + self.data[self.write_offset..self.write_offset + bytes_to_write].clone_from_slice( + &buf[..bytes_to_write]); + } else { + return Err(io::Error::new(io::ErrorKind::WriteZero, "OutOfBufferSpace")); + } + self.write_offset += bytes_to_write; + Ok(bytes_to_write) + } + fn flush(self: &mut Self) -> io::Result<()> { + return Ok(()); + } +} + + +fn benchmark_helper(input_slice: &[u8], + compress_buffer_size: usize, + decompress_buffer_size: usize, + bench_compress: bool, + bench_decompress: bool, + bench: &mut Run, + quality: i32, + q9_5: bool, +) { + let mut params = super::brotli::enc::BrotliEncoderInitParams(); + params.quality = quality; + params.q9_5 = q9_5; + params.large_window= true; + let mut input = UnlimitedBuffer::new(&input_slice[..]); + let mut compressed_array = vec![0;input_slice.len() * 100/99]; + let mut rt_array = vec![0;input_slice.len() + 1]; + let mut compressed = LimitedBuffer::new(&mut compressed_array[..]); + let mut rt = LimitedBuffer::new(&mut rt_array[..]); + if !bench_compress { + match super::compress(&mut input, &mut compressed, compress_buffer_size, ¶ms, &[], 1) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } + bench.iter(&mut || { + input.reset_read(); + if bench_compress { + compressed.reset(); + match super::compress(&mut input, &mut compressed, compress_buffer_size, ¶ms, &[], 1) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } + if bench_decompress { + compressed.reset_read(); + rt.reset(); + match super::decompress(&mut compressed, &mut rt, decompress_buffer_size, Rebox::default()) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } + }); + if !bench_decompress { + compressed.reset_read(); + rt.reset(); + match super::decompress(&mut compressed, &mut rt, decompress_buffer_size, Rebox::default()) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + } + assert_eq!(rt.write_offset, input_slice.len()); + assert_eq!(&rt.data[..input_slice.len()], + input_slice); +} + + +fn expand_test_data(size: usize) -> Vec { + let mut ret = vec![0u8; size]; + let original_data = include_bytes!("../../testdata/random_then_unicode"); + let mut count = 0; + let mut iter = 0usize; + while count < size { + let to_copy = core::cmp::min(size - count, original_data.len()); + let target = &mut ret[count..(count + to_copy)]; + for (dst, src) in target.iter_mut().zip(original_data[..to_copy].iter()) { + *dst = src.wrapping_add(iter as u8); + } + count += to_copy; + iter += 1; + } + ret +} + +#[test] +fn test_1024k() { + let td = expand_test_data(1024 * 1024); + benchmark_helper(&td[..], + 65536, + 65536, + true, + true, + &mut Passthrough{}, + 2, + false); +} + +static UKKONOOA: &'static[u8] = include_bytes!("../../testdata/ukkonooa"); +#[test] +fn test_ukkonooa() { + let td = UKKONOOA; + benchmark_helper(&td[..], + 65536, + 65536, + true, + true, + &mut Passthrough{}, + 11, + false); +} + +#[cfg(feature="benchmark")] +#[bench] +fn bench_e2e_decode_q9_5_1024k(bench: &mut Bencher) { + let td = expand_test_data(1024 * 1024); + benchmark_helper(&td[..], + 65536, + 65536, + false, + true, + &mut BenchmarkPassthrough(bench), + 11, + true); +} + +#[cfg(feature="benchmark")] +#[bench] +fn bench_e2e_decode_q11_1024k(bench: &mut Bencher) { + let td = expand_test_data(1024 * 1024); + benchmark_helper(&td[..], + 65536, + 65536, + false, + true, + &mut BenchmarkPassthrough(bench), + 11, + false); +} + +#[cfg(feature="benchmark")] +#[bench] +fn bench_e2e_decode_q5_1024k(bench: &mut Bencher) { + let td = expand_test_data(1024 * 1024); + benchmark_helper(&td[..], + 65536, + 65536, + false, + true, + &mut BenchmarkPassthrough(bench), + 5, + false); +} + +#[cfg(feature="benchmark")] +#[bench] +fn bench_e2e_rt_q9_5_1024k(bench: &mut Bencher) { + let td = expand_test_data(1024 * 1024); + benchmark_helper(&td[..], + 65536, + 65536, + true, + true, + &mut BenchmarkPassthrough(bench), + 11, + true); +} + +#[cfg(feature="benchmark")] +#[bench] +fn bench_e2e_rt_q11_1024k(bench: &mut Bencher) { + let td = expand_test_data(1024 * 1024); + benchmark_helper(&td[..], + 65536, + 65536, + true, + true, + &mut BenchmarkPassthrough(bench), + 11, + false); +} + +#[cfg(feature="benchmark")] +#[bench] +fn bench_e2e_rt_q9_1024k(bench: &mut Bencher) { + let td = expand_test_data(1024 * 1024); + benchmark_helper(&td[..], + 65536, + 65536, + true, + true, + &mut BenchmarkPassthrough(bench), + 9, + false); +} + +#[cfg(feature="benchmark")] +#[bench] +fn bench_e2e_rt_q5_1024k(bench: &mut Bencher) { + let td = expand_test_data(1024 * 1024); + benchmark_helper(&td[..], + 65536, + 65536, + true, + true, + &mut BenchmarkPassthrough(bench), + 5, + false); +} + + +#[test] +fn test_64x() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/64x.compressed"), + include_bytes!("../../testdata/64x"), + 3, + 3); +} + +#[test] +fn test_as_you_like_it() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/asyoulik.txt.compressed"), + include_bytes!("../../testdata/asyoulik.txt"), + 65536, + 65536); +} + + +#[test] +#[should_panic] +fn test_negative_hypothesis() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/64x"), + include_bytes!("../../testdata/64x"), + 3, + 3); +} +static ALICE29_BR: &'static [u8] = include_bytes!("../../testdata/alice29.txt.compressed"); +static ALICE29: &'static [u8] = include_bytes!("../../testdata/alice29.txt"); +#[test] +fn test_alice29() { + assert_decompressed_input_matches_output(ALICE29_BR, ALICE29, 65536, 65536); +} + +#[cfg(feature="benchmark")] +#[bench] +fn benchmark_alice29(bench: &mut Bencher) { + benchmark_decompressed_input(ALICE29_BR, ALICE29, 65536, 65536, bench); +} + +#[test] +fn test_alice1() { + assert_decompressed_input_matches_output(ALICE29_BR, ALICE29, 1, 65536); +} + +#[test] +fn test_backward65536() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/backward65536.compressed"), + include_bytes!("../../testdata/backward65536"), + 65536, + 65536); +} + + +#[test] +fn test_compressed_file() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/compressed_file.compressed"), + include_bytes!("../../testdata/compressed_file"), + 65536, + 65536); +} + +#[test] +fn test_compressed_repeated() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/compressed_repeated.\ + compressed"), + include_bytes!("../../testdata/compressed_repeated"), + 65536, + 65536); +} + +#[test] +fn test_empty() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty0() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.00"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty1() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.01"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty2() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.02"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty3() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.03"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty4() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.04"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty5() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.05"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty6() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.06"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty7() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.07"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty8() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.08"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty9() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.09"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty10() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.10"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty11() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.11"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty12() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.12"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty13() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.13"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty14() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.14"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty15() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.15"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty16() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.16"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty17() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.17"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} +#[test] +fn test_empty18() { + assert_decompressed_input_matches_output(include_bytes!("../../testdata/empty.compressed.18"), + include_bytes!("../../testdata/empty"), + 65536, + 65536); +} + +pub struct SoonErrorReader(&'static[u8], bool); +impl io::Read for SoonErrorReader { + fn read(&mut self, data:&mut [u8]) -> io::Result { + let first = self.1; + self.1 = false; + if first { + let len = core::cmp::min(self.0.len(),data.len()); + data[..len].clone_from_slice(&self.0[..len]); + return Ok(len); + } + Err(io::Error::new(io::ErrorKind::PermissionDenied, "err")) + } +} +#[test] +fn test_error_returned() { + static onetwothreefourfive: [u8;5] = [1,2,3,4,5]; + let params = super::brotli::enc::BrotliEncoderParams::default(); + let mut erroring = SoonErrorReader(&onetwothreefourfive[..], true); + let mut br = UnlimitedBuffer::new(&[]); + let dict = &[]; + let err = super::compress(&mut erroring, &mut br, 4096, ¶ms, dict, 1); + if let Ok(_x) = err { + panic!("Should have errored {:?}\n", err); + } + let mut output = UnlimitedBuffer::new(&[]); + let mut br_copy = Buffer::new(&br.data[..]); + assert_eq!(br.data.len(),9); + match decompress_internal(&mut br_copy, &mut output, 1, 1, &mut Passthrough{}) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + assert_eq!(output.data, &onetwothreefourfive[..]); +} + diff --git a/rust/vendor/brotli/src/bin/test_broccoli.rs b/rust/vendor/brotli/src/bin/test_broccoli.rs new file mode 100755 index 0000000..ba49ad7 --- /dev/null +++ b/rust/vendor/brotli/src/bin/test_broccoli.rs @@ -0,0 +1,424 @@ +#![cfg(test)] +#![allow(non_upper_case_globals)] +#![allow(dead_code)] +extern crate core; +extern crate brotli_decompressor; +use brotli_decompressor::{CustomRead, CustomWrite}; +use super::brotli::enc::BrotliEncoderParams; +use super::brotli::concat::{BroCatli, BroCatliResult}; +use super::integration_tests::UnlimitedBuffer; +static RANDOM_THEN_UNICODE : &'static [u8] = include_bytes!("../../testdata/random_then_unicode"); +static ALICE: &'static[u8] = include_bytes!("../../testdata/alice29.txt"); +static UKKONOOA: &'static[u8] = include_bytes!("../../testdata/ukkonooa"); +static ASYOULIKE: &'static[u8] = include_bytes!("../../testdata/asyoulik.txt"); +static BACKWARD65536: &'static [u8] = include_bytes!("../../testdata/backward65536"); +static DICTWORD: &'static [u8] = include_bytes!("../../testdata/ends_with_truncated_dictionary"); +static RANDOM10K: &'static [u8] = include_bytes!("../../testdata/random_org_10k.bin"); +static RANDOMTHENUNICODE: &'static [u8] = include_bytes!("../../testdata/random_then_unicode"); +static QUICKFOX: &'static [u8] = include_bytes!("../../testdata/quickfox_repeated"); +static EMPTY: &'static [u8] = &[]; +use super::Rebox; +fn concat(files:&mut [UnlimitedBuffer], + brotli_files:&mut [UnlimitedBuffer], + window_override:Option, + bs: usize) { + let mut obuffer = vec![0u8; bs]; + let mut ibuffer = vec![0u8; bs]; + let mut ooffset = 0usize; + let mut ioffset; + let mut uboutput = UnlimitedBuffer::new(&[]); + { + let mut output = super::IoWriterWrapper(&mut uboutput); + let mut bro_cat_li = match window_override { + Some(ws) => BroCatli::new_with_window_size(ws), + None => BroCatli::new(), + }; + for brotli in brotli_files.iter_mut() { + bro_cat_li.new_brotli_file(); + { + let mut input = super::IoReaderWrapper(brotli); + loop { + ioffset = 0; + match input.read(&mut ibuffer[..]) { + Err(e) => panic!("{}", e), + Ok(cur_read) => { + if cur_read == 0 { + break; + } + loop { + match bro_cat_li.stream(&ibuffer[..cur_read], &mut ioffset, + &mut obuffer[..], &mut ooffset) { + BroCatliResult::NeedsMoreOutput => { + match output.write(&obuffer[..ooffset]) { + Err(why) => panic!("couldn't write: {:}", why), + Ok(count) => {assert_eq!(count, ooffset);}, + } + ooffset = 0; + }, + BroCatliResult::NeedsMoreInput => { + break; + }, + BroCatliResult::Success => { + panic!("Unexpected state: Success when streaming before finish"); + }, + failure => { + panic!("{:?}", failure); + }, + } + } + } + } + } + } + brotli.reset_read(); + } + loop { + match bro_cat_li.finish(&mut obuffer[..], &mut ooffset) { + BroCatliResult::NeedsMoreOutput => { + match output.write(&obuffer[..ooffset]) { + Err(why) => panic!("couldn't write\n{:}", why), + Ok(count) => {assert_eq!(count, ooffset);}, + } + ooffset = 0; + }, + BroCatliResult::NeedsMoreInput => { + panic!("Unexpected EOF"); + }, + BroCatliResult::Success => { + if ooffset != 0 { + match output.write(&obuffer[..ooffset]) { + Err(why) => panic!("couldn't write\n{:}", why), + Ok(count) => {assert_eq!(count, ooffset);}, + } + } + break; + } + failure => { + panic!("{:?}", failure) + } + } + } + } + let mut rt = UnlimitedBuffer::new(&[]); + match super::decompress(&mut uboutput, &mut rt, 65536, Rebox::default()) { + Ok(_) => {}, + Err(e) => panic!("Error {:?}", e), + } + let mut offset = 0; + for file in files { + assert_eq!(&rt.data()[offset..offset+file.data().len()], + file.data()); + offset += file.data().len(); + } + assert_eq!(offset, rt.data().len()); +} + +fn concat_many_subsets(files:&mut [UnlimitedBuffer], + brotli_files:&mut [UnlimitedBuffer], + window_override:Option) { + let test_plans:[(usize,usize);4] = [(brotli_files.len(), 4096 * 1024), (4, 1), (3, 3), (2, 4096)]; + for plan_bs in test_plans.iter() { + let files_len = files.len(); + for index in 0..(brotli_files.len() - core::cmp::min(plan_bs.0 - 1, files_len)) { + let file_subset = &mut files[index..core::cmp::min(index+plan_bs.0, files_len)]; + let brotli_subset = &mut brotli_files[index..core::cmp::min(index+plan_bs.0, files_len)]; + concat(file_subset, brotli_subset, window_override, plan_bs.1); + } + } +} + +#[cfg(debug_assertions)] +fn light_debug_test(params: &mut BrotliEncoderParams) { + params.quality = 5; +} + +#[cfg(not(debug_assertions))] +fn light_debug_test(_params: &mut BrotliEncoderParams) { +} + +#[cfg(debug_assertions)] +fn medium_debug_test(params: &mut BrotliEncoderParams) { + params.quality = 9; + params.q9_5 = false; +} + +#[cfg(not(debug_assertions))] +fn medium_debug_test(_params: &mut BrotliEncoderParams) { +} + +#[test] +#[should_panic] +fn test_appendonly_twice_fails() { + let mut files = [ + UnlimitedBuffer::new(UKKONOOA), + UnlimitedBuffer::new(QUICKFOX), + ]; + let mut ufiles = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { + let mut params0 = BrotliEncoderParams::default(); + params0.appendable = true; + super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); + } + concat(&mut files[..], &mut ufiles[..], None, 2); +} + +#[test] +fn test_append_then_empty_works() { + let mut files = [ + UnlimitedBuffer::new(UKKONOOA), + UnlimitedBuffer::new(&[]), + ]; + let mut ufiles = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + let mut first = true; + for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { + let mut params0 = BrotliEncoderParams::default(); + params0.appendable = first; + params0.catable = !first; + params0.use_dictionary = first; + super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); + first = false; + } + concat(&mut files[..], &mut ufiles[..], None, 2); +} + +#[test] +fn test_append_then_cat_works() { + let mut files = [ + UnlimitedBuffer::new(UKKONOOA), + UnlimitedBuffer::new(QUICKFOX), + ]; + let mut ufiles = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + let mut first = true; + for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { + let mut params0 = BrotliEncoderParams::default(); + params0.appendable = first; + params0.catable = !first; + params0.use_dictionary = first; + super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); + first = false; + } + concat(&mut files[..], &mut ufiles[..], None, 2); +} + +#[test] +fn test_one_byte_works() { + let mut files = [ + UnlimitedBuffer::new(UKKONOOA), + UnlimitedBuffer::new(&[8]), + ]; + let mut ufiles = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + let mut first = true; + for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { + let mut params0 = BrotliEncoderParams::default(); + params0.appendable = first; + params0.catable = !first; + params0.use_dictionary = first; + super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); + first = false; + } + concat(&mut files[..], &mut ufiles[..], None, 2); +} + +#[test] +fn test_one_byte_before_works() { + let mut files = [ + UnlimitedBuffer::new(&[8]), + UnlimitedBuffer::new(UKKONOOA), + ]; + let mut ufiles = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + let mut first = true; + for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { + let mut params0 = BrotliEncoderParams::default(); + params0.appendable = first; + params0.catable = !first; + params0.use_dictionary = first; + super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); + first = false; + } + concat(&mut files[..], &mut ufiles[..], None, 2); +} + +#[test] +fn test_two_byte_works() { + let mut files = [ + UnlimitedBuffer::new(UKKONOOA), + UnlimitedBuffer::new(&[8, 9]), + ]; + let mut ufiles = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + let mut first = true; + for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { + let mut params0 = BrotliEncoderParams::default(); + params0.appendable = first; + params0.catable = !first; + params0.use_dictionary = first; + super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); + first = false; + } + concat(&mut files[..], &mut ufiles[..], None, 2); +} + +#[test] +fn test_two_byte_before_works() { + let mut files = [ + UnlimitedBuffer::new(&[8, 9]), + UnlimitedBuffer::new(UKKONOOA), + ]; + let mut ufiles = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + let mut first = true; + for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { + let mut params0 = BrotliEncoderParams::default(); + params0.appendable = first; + params0.catable = !first; + params0.use_dictionary = first; + super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); + first = false; + } + concat(&mut files[..], &mut ufiles[..], None, 2); +} + + + +#[test] +fn test_empty_then_cat_works() { + let mut files = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(QUICKFOX), + ]; + let mut ufiles = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + let mut first = true; + for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { + let mut params0 = BrotliEncoderParams::default(); + params0.appendable = first; + params0.catable = !first; + params0.use_dictionary = first; + super::compress(src, dst, 4096, ¶ms0, &[], 1).unwrap(); + first = false; + } + concat(&mut files[..], &mut ufiles[..], None, 2); +} + +#[test] +fn test_concat() { + let mut files = [ + UnlimitedBuffer::new(ALICE), + UnlimitedBuffer::new(RANDOMTHENUNICODE), + UnlimitedBuffer::new(UKKONOOA), + UnlimitedBuffer::new(ASYOULIKE), + UnlimitedBuffer::new(BACKWARD65536), + UnlimitedBuffer::new(EMPTY), + UnlimitedBuffer::new(DICTWORD), + UnlimitedBuffer::new(RANDOM10K), + UnlimitedBuffer::new(QUICKFOX), + ]; + let mut params0 = BrotliEncoderParams::default(); + light_debug_test(&mut params0); + let mut params1 = params0.clone(); + params1.quality = 9; + params1.q9_5 = true; + params1.lgwin=22; + params1.magic_number = true; + medium_debug_test(&mut params1); + let mut params2 = params0.clone(); + params2.quality = if params1.q9_5 || params1.quality > 9 {9} else {8}; + params2.lgwin=19; + let mut params3 = params0.clone(); + params3.quality = 8; + params3.lgwin = 16; + params3.magic_number = true; + let mut params4 = params0.clone(); + params4.quality = 7; + params4.lgwin = 14; + let mut params4 = params0.clone(); + params4.quality = 1; + params4.lgwin = 10; + let mut params5 = params0.clone(); + params5.quality = 0; + params5.lgwin = 10; + params5.magic_number = true; + params0.lgwin = 26; + params0.large_window = true; + + let mut options = [ + params0, + params1, + params2, + params3, + params4, + params5, + ]; + for option in options.iter_mut().skip(3) { + let mut ufiles = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + let mut first = true; + for (src, dst) in files.iter_mut().zip(ufiles.iter_mut()) { + if first { + option.appendable = true; + } else { + option.appendable = false; + option.catable = true; + option.use_dictionary = false; + } + super::compress(src, dst, 4096, option, &[], 1).unwrap(); + src.reset_read(); + first = false; + } + concat_many_subsets(&mut files[..], &mut ufiles[..], None); + return; + } + let mut ufiles = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + let options_len = options.len(); + for (index, (src, dst)) in files.iter_mut().zip(ufiles.iter_mut()).enumerate() { + options[core::cmp::min(index, options_len - 1)].catable = true; + options[core::cmp::min(index, options_len - 1)].use_dictionary = false; + options[core::cmp::min(index, options_len - 1)].appendable = false; + options[core::cmp::min(index, options_len - 1)].quality = core::cmp::max( + 2, options[core::cmp::min(index, options_len - 1)].quality); + // ^^^ there's an artificial limitation of using 18 as the minimum window size for quality 0,1 + // since this test depends on different window sizes for each stream, exclude q={0,1} + super::compress(src, dst, 4096, &options[core::cmp::min(index, options_len - 1)], &[], 1).unwrap(); + src.reset_read(); + } + concat_many_subsets(&mut files[..], &mut ufiles[..], None); + concat_many_subsets(&mut files[..], &mut ufiles[..], Some(28)); // FIXME: make this 28 +} diff --git a/rust/vendor/brotli/src/bin/test_custom_dict.rs b/rust/vendor/brotli/src/bin/test_custom_dict.rs new file mode 100755 index 0000000..2cb7913 --- /dev/null +++ b/rust/vendor/brotli/src/bin/test_custom_dict.rs @@ -0,0 +1,186 @@ +#![cfg(test)] +#![allow(non_upper_case_globals)] +#![allow(dead_code)] +extern crate core; +extern crate brotli_decompressor; +use super::brotli::enc::BrotliEncoderParams; +use super::brotli::concat::{BroCatli, BroCatliResult}; +use std::io::{Read, Write}; +use super::integration_tests::UnlimitedBuffer; +static RANDOM_THEN_UNICODE : &'static [u8] = include_bytes!("../../testdata/random_then_unicode"); +static ALICE: &'static[u8] = include_bytes!("../../testdata/alice29.txt"); +use super::Rebox; + + +#[test] +fn test_custom_dict() { + let mut raw = UnlimitedBuffer::new(ALICE); + let mut params = BrotliEncoderParams::default(); + params.quality = 10; + let mut br = UnlimitedBuffer::new(&[]); + let mut rt = UnlimitedBuffer::new(&[]); + let dict = &ALICE[12515..23411]; + super::compress(&mut raw, &mut br, 4096, ¶ms, dict, 1).unwrap(); + raw.reset_read(); + let mut vec = Vec::::new(); + vec.extend(dict); + super::decompress(&mut br, &mut rt, 4096, Rebox::from(vec)).unwrap(); + assert_eq!(rt.data(), raw.data()); + if br.data().len() != 43654 { + assert_eq!(br.data().len(), 43636); + } +} + +#[test] +fn test_custom_wrong_dict_fails() { + let mut raw = UnlimitedBuffer::new(ALICE); + let mut params = BrotliEncoderParams::default(); + params.quality = 10; + let mut br = UnlimitedBuffer::new(&[]); + let mut rt = UnlimitedBuffer::new(&[]); + let dict = &ALICE[12515..19515]; + super::compress(&mut raw, &mut br, 4096, ¶ms, dict, 1).unwrap(); + raw.reset_read(); + let mut vec = Vec::::new(); + vec.extend(&dict[1..]); // slightly offset dictionary to be wrong, and ensure the dict was being used above + match super::decompress(&mut br, &mut rt, 4096, Rebox::from(vec)) { + Ok(_) => panic!("Decompression should have failed"), + Err(_) => {}, + } + if rt.data() == raw.data() { + panic!("they should be unequal"); + } +} + +#[test] +fn test_custom_wrong_dict_fails_but_doesnt_disrupt_compression_strategy() { + let mut raw = UnlimitedBuffer::new(ALICE); + let mut params = BrotliEncoderParams::default(); + params.quality = 6; + let mut br = UnlimitedBuffer::new(&[]); + let mut rt = UnlimitedBuffer::new(&[]); + let dict = &ALICE[12515..19515]; + super::compress(&mut raw, &mut br, 4096, ¶ms, dict, 1).unwrap(); + raw.reset_read(); + let mut vec = Vec::::new(); + vec.extend(&dict[1..]); // slightly offset dictionary to be wrong, and ensure the dict was being used above + super::decompress(&mut br, &mut rt, 4096, Rebox::from(vec)).unwrap(); + if rt.data() == raw.data() { + panic!("they should be unequal"); + } +} + + +#[test] +fn test_custom_dict_for_multithreading() { + let mut raws = [UnlimitedBuffer::new(&ALICE[..ALICE.len()/3]), + UnlimitedBuffer::new(&ALICE[ALICE.len()/3..2*ALICE.len()/3]), + UnlimitedBuffer::new(&ALICE[2 * ALICE.len()/3..]), + ]; + let mut params = BrotliEncoderParams::default(); + params.quality = 10; + params.appendable = true; + let mut brs = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + let mut rts = [ + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + UnlimitedBuffer::new(&[]), + ]; + let dicts = [ + &ALICE[..0], + &ALICE[..ALICE.len()/3], + &ALICE[..2*ALICE.len()/3], + ]; + for (raw, (br, (rt, dict))) in raws.iter_mut().zip(brs.iter_mut().zip(rts.iter_mut().zip(dicts.iter()))) { + super::compress(raw, br, 4096, ¶ms, dict, 1).unwrap(); + raw.reset_read(); + let mut vec = Vec::::new(); + vec.extend(*dict); + super::decompress(br, rt, 4096, Rebox::from(vec)).unwrap(); + assert_eq!(rt.data(), raw.data()); + params.catable = true; + params.use_dictionary = false; + } + let mut bro_cat_li = BroCatli::new(); + let mut output = UnlimitedBuffer::new(&[]); + let mut ibuffer = vec![0u8; 1]; + let mut obuffer = vec![0u8; 1]; + let mut ooffset = 0usize; + for brotli in brs.iter_mut() { + brotli.reset_read(); + bro_cat_li.new_brotli_file(); + let input = brotli; + loop { + let mut ioffset = 0usize; + match input.read(&mut ibuffer[..]) { + Err(e) => panic!("{:?}", e), + Ok(cur_read) => { + if cur_read == 0 { + break; + } + loop { + match bro_cat_li.stream(&ibuffer[..cur_read], &mut ioffset, + &mut obuffer[..], &mut ooffset) { + BroCatliResult::NeedsMoreOutput => { + match output.write(&obuffer[..ooffset]) { + Err(why) => panic!("couldn't write: {:}", why), + Ok(count) => {assert_eq!(count, ooffset);}, + } + ooffset = 0; + }, + BroCatliResult::NeedsMoreInput => { + break; + }, + BroCatliResult::Success => { + panic!("Unexpected state: Success when streaming before finish"); + }, + failure => { + panic!("{:?}", failure); + }, + } + } + } + } + } + } + loop { + match bro_cat_li.finish(&mut obuffer[..], &mut ooffset) { + BroCatliResult::NeedsMoreOutput => { + match output.write(&obuffer[..ooffset]) { + Err(why) => panic!("couldn't write\n{:}", why), + Ok(count) => {assert_eq!(count, ooffset);}, + } + ooffset = 0; + }, + BroCatliResult::NeedsMoreInput => { + panic!("Unexpected EOF"); + }, + BroCatliResult::Success => { + if ooffset != 0 { + match output.write(&obuffer[..ooffset]) { + Err(why) => panic!("couldn't write\n{:}", why), + Ok(count) => {assert_eq!(count, ooffset);}, + } + } + break; + } + failure => { + panic!("{}", failure as i32) + } + } + } + let mut rt = UnlimitedBuffer::new(&[]); + output.reset_read(); + super::decompress(&mut output, &mut rt, 4096, Rebox::default()).unwrap(); + assert_eq!(rt.data(), ALICE); + // without setting std flag: approximation make it 4 bytes bigger + if output.data().len() != 48568 { + assert_eq!(output.data().len(), 48563); // as opposed to 46487 with standard settings + } +} + + diff --git a/rust/vendor/brotli/src/bin/test_threading.rs b/rust/vendor/brotli/src/bin/test_threading.rs new file mode 100755 index 0000000..db8a711 --- /dev/null +++ b/rust/vendor/brotli/src/bin/test_threading.rs @@ -0,0 +1,181 @@ +#![cfg(test)] +#![allow(non_upper_case_globals)] +#![allow(dead_code)] +extern crate core; +extern crate brotli_decompressor; +use super::new_brotli_heap_alloc; +use brotli_decompressor::{SliceWrapperMut, SliceWrapper}; +use super::brotli::enc::{UnionHasher, BrotliEncoderParams, BrotliEncoderMaxCompressedSizeMulti, compress_multi, compress_multi_no_threadpool}; +use brotli::enc::threading::{SendAlloc,Owned}; + +use super::integration_tests::UnlimitedBuffer; +static RANDOM_THEN_UNICODE : &'static [u8] = include_bytes!("../../testdata/random_then_unicode"); +static ALICE: &'static[u8] = include_bytes!("../../testdata/alice29.txt"); +use super::Rebox; + +struct SliceRef<'a> (&'a [u8]); +impl<'a> SliceWrapper for SliceRef<'a> { + fn slice(&self) -> &[u8] { self.0 } +} + +fn multi_threaded_split_compression_test(input_data: &'static[u8], num_threads: usize, quality: i32, catable: bool, expected_size: usize) { + let mut params = BrotliEncoderParams::default(); + params.quality = quality; + params.magic_number = true; + if catable { + params.catable = true; + params.use_dictionary = false; + } + let mut output = Rebox::from(vec![0u8;BrotliEncoderMaxCompressedSizeMulti(input_data.len(), num_threads)]); + let mut alloc_per_thread = [ + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + ]; + if num_threads > alloc_per_thread.len() { + panic!("Too many threads requested {} > {}", num_threads, alloc_per_thread.len()); + } + let res = compress_multi( + ¶ms, + &mut Owned::new(SliceRef(input_data)), + output.slice_mut(), + &mut alloc_per_thread[..num_threads], + ); + let observed_size = res.unwrap(); + if observed_size > expected_size { + assert_eq!(observed_size, expected_size); + } + assert!(observed_size != 0); + let mut compressed_version = UnlimitedBuffer::new(&output.slice()[..observed_size]); + let mut rt = UnlimitedBuffer::new(&[]); + match super::decompress(&mut compressed_version, &mut rt, 65536, Rebox::default()) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + assert_eq!(rt.data(), input_data); +} +#[test] +fn multi_threaded_split_compression_test_1() { + multi_threaded_split_compression_test(&RANDOM_THEN_UNICODE[..], 1, 3, false, 155808) +} +#[test] +fn multi_threaded_split_compression_test_2() { + multi_threaded_split_compression_test(&RANDOM_THEN_UNICODE[..], 2, 4, false, 151857) +} +#[test] +fn multi_threaded_split_compression_test_3() { + multi_threaded_split_compression_test(&RANDOM_THEN_UNICODE[..], 3, 5, false, 144325) +} +#[test] +fn multi_threaded_split_compression_test_4() { + multi_threaded_split_compression_test(&RANDOM_THEN_UNICODE[..], 4, 10, true, 136812) +} +#[test] +fn multi_threaded_split_compression_test_5() { + multi_threaded_split_compression_test(&RANDOM_THEN_UNICODE[..], 5, 9, false, 139126) +} +#[test] +fn multi_threaded_split_compression_test_1b1() { + multi_threaded_split_compression_test(&RANDOM_THEN_UNICODE[..1], 5, 9, false, 139126) +} +#[test] +fn multi_threaded_split_compression_test_1b5() { + multi_threaded_split_compression_test(&RANDOM_THEN_UNICODE[..1], 5, 9, false, 139125) +} + + +#[test] +fn multi_threaded_split_compression_test_0b1() { + multi_threaded_split_compression_test(&[], 5, 9, false, 139125) +} +#[test] +fn multi_threaded_split_compression_test_0b5() { + multi_threaded_split_compression_test(&[], 5, 9, false, 139125) +} + + + + +fn thread_spawn_per_job_split_compression_test(input_data: &'static[u8], num_threads: usize, quality: i32, catable: bool, expected_size: usize) { + let mut params = BrotliEncoderParams::default(); + params.quality = quality; + params.magic_number = true; + if catable { + params.catable = true; + params.use_dictionary = false; + } + params.favor_cpu_efficiency = true; // this should test both paths + let mut output = Rebox::from(vec![0u8;BrotliEncoderMaxCompressedSizeMulti(input_data.len(), num_threads)]); + let mut alloc_per_thread = [ + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + SendAlloc::new(new_brotli_heap_alloc(), UnionHasher::Uninit), + ]; + if num_threads > alloc_per_thread.len() { + panic!("Too many threads requested {} > {}", num_threads, alloc_per_thread.len()); + } + let res = compress_multi_no_threadpool( + ¶ms, + &mut Owned::new(SliceRef(input_data)), + output.slice_mut(), + &mut alloc_per_thread[..num_threads], + ); + let observed_size = res.unwrap(); + if observed_size > expected_size { + assert_eq!(observed_size, expected_size); + } + assert!(observed_size != 0); + let mut compressed_version = UnlimitedBuffer::new(&output.slice()[..observed_size]); + let mut rt = UnlimitedBuffer::new(&[]); + match super::decompress(&mut compressed_version, &mut rt, 65536, Rebox::default()) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + assert_eq!(rt.data(), input_data); +} +#[test] +fn thread_spawn_per_job_split_compression_test_1() { + thread_spawn_per_job_split_compression_test(&RANDOM_THEN_UNICODE[..], 1, 3, false, 155808) +} +#[test] +fn thread_spawn_per_job_split_compression_test_3() { + thread_spawn_per_job_split_compression_test(&RANDOM_THEN_UNICODE[..], 3, 5, false, 144325) +} +#[test] +fn thread_spawn_per_job_split_compression_test_1b1() { + thread_spawn_per_job_split_compression_test(&RANDOM_THEN_UNICODE[..1], 1, 3, false, 155808) +} +#[test] +fn thread_spawn_per_job_split_compression_test_1b3() { + thread_spawn_per_job_split_compression_test(&RANDOM_THEN_UNICODE[..1], 3, 5, false, 144325) +} +#[test] +fn thread_spawn_per_job_split_compression_test_0b1() { + thread_spawn_per_job_split_compression_test(&[], 1, 3, false, 155808) +} +#[test] +fn thread_spawn_per_job_split_compression_test_0b3() { + thread_spawn_per_job_split_compression_test(&[], 3, 5, false, 144325) +} diff --git a/rust/vendor/brotli/src/bin/tests.rs b/rust/vendor/brotli/src/bin/tests.rs new file mode 100755 index 0000000..878a3c5 --- /dev/null +++ b/rust/vendor/brotli/src/bin/tests.rs @@ -0,0 +1,113 @@ +#![cfg(test)] +extern crate core; +use core::cmp; +use std::io; + +struct Buffer { + data: Vec, + read_offset: usize, +} +impl Buffer { + pub fn new(buf: &[u8]) -> Buffer { + let mut ret = Buffer { + data: Vec::::new(), + read_offset: 0, + }; + ret.data.extend(buf); + return ret; + } +} +impl io::Read for Buffer { + fn read(self: &mut Self, buf: &mut [u8]) -> io::Result { + let bytes_to_read = cmp::min(buf.len(), self.data.len() - self.read_offset); + if bytes_to_read > 0 { + buf[0..bytes_to_read].clone_from_slice(&self.data[self.read_offset.. + self.read_offset + bytes_to_read]); + } + self.read_offset += bytes_to_read; + return Ok(bytes_to_read); + } +} +impl io::Write for Buffer { + fn write(self: &mut Self, buf: &[u8]) -> io::Result { + self.data.extend(buf); + return Ok(buf.len()); + } + fn flush(self: &mut Self) -> io::Result<()> { + return Ok(()); + } +} + +fn copy_from_to(mut r: R, mut w: W) -> io::Result { + let mut buffer: [u8; 65536] = [0; 65536]; + let mut out_size: usize = 0; + loop { + match r.read(&mut buffer[..]) { + Err(e) => { + match e.kind() { + io::ErrorKind::Interrupted => continue, + _ => {} + } + return Err(e); + } + Ok(size) => { + if size == 0 { + break; + } else { + match w.write_all(&buffer[..size]) { + Err(e) => { + match e.kind() { + io::ErrorKind::Interrupted => continue, + _ => {} + } + return Err(e); + } + Ok(_) => out_size += size, + } + } + } + } + } + return Ok(out_size); +} + + + +#[test] +fn test_10x_10y() { + let in_buf: [u8; 12] = [0x1b, 0x13, 0x00, 0x00, 0xa4, 0xb0, 0xb2, 0xea, 0x81, 0x47, 0x02, 0x8a]; + + let mut output = Buffer::new(&[]); + let mut input = super::BrotliDecompressor::new(Buffer::new(&in_buf), 4096); + match copy_from_to(&mut input, &mut output) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + let mut i: usize = 0; + while i < 10 { + assert_eq!(output.data[i], 'X' as u8); + assert_eq!(output.data[i + 10], 'Y' as u8); + i += 1; + } + assert_eq!(output.data.len(), 20); +} + + +#[test] +fn test_alice() { + let in_buf = include_bytes!("../../testdata/alice29.txt.compressed"); + + let mut output = Buffer::new(&[]); + let mut input = super::BrotliDecompressor::new(Buffer::new(in_buf), 1); + match copy_from_to(&mut input, &mut output) { + Ok(_) => {} + Err(e) => panic!("Error {:?}", e), + } + let mut i: usize = 0; + let truth = include_bytes!("../../testdata/alice29.txt"); + while i < truth.len() { + assert_eq!(output.data[i], truth[i]); + i += 1; + } + assert_eq!(truth.len(), output.data.len()); +} diff --git a/rust/vendor/brotli/src/bin/util.rs b/rust/vendor/brotli/src/bin/util.rs new file mode 100644 index 0000000..8a23915 --- /dev/null +++ b/rust/vendor/brotli/src/bin/util.rs @@ -0,0 +1,300 @@ +use core::mem; +use std; +use core::marker::PhantomData; +use std::thread::{ + JoinHandle, +}; + +use brotli::dictionary::{kBrotliDictionary, kBrotliDictionarySizeBitsByLength, + kBrotliDictionaryOffsetsByLength}; +use brotli::transform::{TransformDictionaryWord}; +use brotli::interface; +use std::collections::BTreeMap; +use std::fmt; +use alloc_no_stdlib::{SliceWrapper, Allocator}; +use brotli::enc::BrotliAlloc; +use brotli::enc::threading::{ + SendAlloc, + InternalSendAlloc, + BatchSpawnable, + BatchSpawnableLite, + Joinable, + Owned, + OwnedRetriever, + InternalOwned, + BrotliEncoderThreadError, + AnyBoxConstructor, + PoisonedThreadError, +}; + +struct HexSlice<'a>(&'a [u8]); + +impl<'a> fmt::Display for HexSlice<'a> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + for byte in self.0 { + if let Err(e) = write!(f, "{:02X}", byte) { + return Err(e); + } + } + Ok(()) + } +} +pub fn permute_dictionary() -> BTreeMap, ()> { + let mut ret = BTreeMap::, ()>::new(); + let mut transformed = [0u8;38]; + for wordlen in 4..kBrotliDictionaryOffsetsByLength.len() { + let offset = kBrotliDictionaryOffsetsByLength[wordlen] as usize; + for index in 0..(1 << kBrotliDictionarySizeBitsByLength[wordlen]) { + let word = &kBrotliDictionary[offset + index..offset + index + wordlen]; + for transform in 0..121 { + let final_size = TransformDictionaryWord(&mut transformed[..], + word, + wordlen as i32, + transform as i32) as usize; + let vec : Vec = transformed[..final_size].to_vec(); + ret.insert(vec, ()); + } + } + } + ret +} + +pub fn print_dictionary(dict :BTreeMap, ()>) { + for (key, _) in dict { + println!("{}", HexSlice(&key[..])); + } +} +macro_rules! println_stderr( + ($($val:tt)*) => { { + writeln!(&mut ::std::io::stderr(), $($val)*).unwrap(); + } } +); + +fn prediction_mode_str(prediction_mode_nibble:interface::LiteralPredictionModeNibble) -> &'static str { + match prediction_mode_nibble.prediction_mode() { + interface::LITERAL_PREDICTION_MODE_SIGN => "sign", + interface::LITERAL_PREDICTION_MODE_LSB6 => "lsb6", + interface::LITERAL_PREDICTION_MODE_MSB6 => "msb6", + interface::LITERAL_PREDICTION_MODE_UTF8 => "utf8", + _ => "unknown", + } +} + +struct SliceU8Ref<'a>(pub &'a[u8]); + +impl<'a> fmt::LowerHex for SliceU8Ref<'a> { + fn fmt(&self, fmtr: &mut fmt::Formatter) -> Result<(), fmt::Error> { + for item in self.0 { + if let Err(e) = fmtr.write_fmt(format_args!("{:02x}", item)) { + return Err(e); + } + } + Ok(()) + } +} + +pub fn write_one>(cmd: &interface::Command) { + use std::io::Write; + match cmd { + &interface::Command::BlockSwitchLiteral(ref bsl) => { + println_stderr!("ltype {} {}", bsl.0.block_type(), bsl.1); + }, + &interface::Command::BlockSwitchCommand(ref bsc) => { + println_stderr!("ctype {}", bsc.0); + }, + &interface::Command::BlockSwitchDistance(ref bsd) => { + println_stderr!("dtype {}", bsd.0); + }, + &interface::Command::PredictionMode(ref prediction) => { + let prediction_mode = prediction_mode_str(prediction.literal_prediction_mode()); + let lit_cm = prediction.literal_context_map.slice().iter().fold(::std::string::String::new(), + |res, &val| res + " " + &val.to_string()); + let dist_cm = prediction.distance_context_map().iter().fold(::std::string::String::new(), + |res, &val| res + " " + &val.to_string()); + let mixing_values = prediction.get_mixing_values().iter().fold(::std::string::String::new(), + |res, &val| res + " " + &val.to_string()); + if prediction.has_context_speeds() { + println_stderr!("prediction {} lcontextmap{} dcontextmap{} mixingvalues{} cmspeedinc {} {} cmspeedmax {} {} stspeedinc {} {} stspeedmax {} {} mxspeedinc {} {} mxspeedmax {} {}", + prediction_mode, + lit_cm, + dist_cm, + mixing_values, + prediction.context_map_speed()[0].0, + prediction.context_map_speed()[1].0, + prediction.context_map_speed()[0].1, + prediction.context_map_speed()[1].1, + prediction.stride_context_speed()[0].0, + prediction.stride_context_speed()[1].0, + prediction.stride_context_speed()[0].1, + prediction.stride_context_speed()[1].1, + prediction.combined_stride_context_speed()[0].0, + prediction.combined_stride_context_speed()[1].0, + prediction.combined_stride_context_speed()[0].1, + prediction.combined_stride_context_speed()[0].1, + ); + }else { + println_stderr!("prediction {} lcontextmap{} dcontextmap{} mixingvalues{}", + prediction_mode, + lit_cm, + dist_cm, + mixing_values, + ); + } + }, + &interface::Command::Copy(ref copy) => { + println_stderr!("copy {} from {}", copy.num_bytes, copy.distance); + }, + &interface::Command::Dict(ref dict) => { + let mut transformed_word = [0u8;38]; + let word_index = dict.word_id as usize * dict.word_size as usize + + kBrotliDictionaryOffsetsByLength[dict.word_size as usize] as usize; + let raw_word = &kBrotliDictionary[word_index..(word_index + dict.word_size as usize)]; + let actual_copy_len = TransformDictionaryWord(&mut transformed_word[..], + raw_word, + dict.word_size as i32, + dict.transform as i32) as usize; + + transformed_word.split_at(actual_copy_len).0; + assert_eq!(dict.final_size as usize, actual_copy_len); + println_stderr!("dict {} word {},{} {:x} func {} {:x}", + actual_copy_len, + dict.word_size, + dict.word_id, + SliceU8Ref(raw_word), + dict.transform, + SliceU8Ref(transformed_word.split_at(actual_copy_len).0)); + }, + &interface::Command::Literal(ref lit) => { + println_stderr!("{} {} {:x}", + if lit.high_entropy {"rndins"} else {"insert"}, + lit.data.slice().len(), + SliceU8Ref(lit.data.slice())); + }, + } +} + + + +// in-place thread create + +use std::sync::RwLock; + + +pub struct MTJoinable(JoinHandle, PhantomData); +#[cfg(not(feature="std"))] +impl Joinable for MTJoinable { + fn join(self) -> Result { + match self.0.join() { + Ok(t) => Ok(t), + Err(_e) => Err(::new(())), + } + } +} +#[cfg(feature="std")] +impl Joinable for MTJoinable { + fn join(self) -> Result { + match self.0.join() { + Ok(t) => Ok(t), + Err(e) => Err(::new(e)), + } + } +} +pub struct MTOwnedRetriever(std::sync::Arc>); +impl Clone for MTOwnedRetriever { + fn clone(&self) -> Self { + MTOwnedRetriever(self.0.clone()) + } +} +impl OwnedRetriever for MTOwnedRetriever { + fn view T>(&self, f:F) -> Result { + match self.0.read() { + Ok(u) => Ok(f(&*u)), + Err(_) => Err(PoisonedThreadError::default()), + } + } + fn unwrap(self) -> Result { + match std::sync::Arc::try_unwrap(self.0) { + Ok(rwlock) => match rwlock.into_inner() { + Ok(u) => Ok(u), + Err(_) => Err(PoisonedThreadError::default()), + }, + Err(_) => Err(PoisonedThreadError::default()), + } + } +} + + +#[derive(Default)] +pub struct MTSpawner{} + + +fn spawn_work T+Send+'static, + Alloc:BrotliAlloc+Send+'static, + U:Send+'static+Sync>( + extra_input: ExtraInput, + index: usize, + num_threads: usize, + locked_input:MTOwnedRetriever, alloc:Alloc, f:F) -> std::thread::JoinHandle +where >::AllocatedMemory:Send+'static { + std::thread::spawn(move || { + locked_input.view(move |guard:&U|->T { + f(extra_input, index, num_threads, guard, alloc) + }).unwrap() + }) +} + +impl BatchSpawnable for MTSpawner +where >::AllocatedMemory:Send+'static { + type JoinHandle = MTJoinable; + type FinalJoinHandle = MTOwnedRetriever; + fn make_spawner( + &mut self, + input: &mut Owned, + ) -> Self::FinalJoinHandle { + MTOwnedRetriever(std::sync::Arc::>::new(RwLock::new(mem::replace(input, Owned(InternalOwned::Borrowed)).unwrap()))) + } + fn spawn T+Send+'static+Copy>( + &mut self, + locked_input: &mut Self::FinalJoinHandle, + work:&mut SendAlloc, + index: usize, + num_threads: usize, + f: F, + ) { + let (alloc, extra_input) = work.replace_with_default(); + let ret = spawn_work(extra_input, index, num_threads, locked_input.clone(), alloc, f); + *work = SendAlloc(InternalSendAlloc::Join(MTJoinable(ret, PhantomData::default()))); + } +} +impl + BatchSpawnableLite for MTSpawner + where >::AllocatedMemory:Send+'static { + type JoinHandle = >::JoinHandle; + type FinalJoinHandle = >::FinalJoinHandle; + fn make_spawner( + &mut self, + input: &mut Owned, + ) -> Self::FinalJoinHandle { + >::make_spawner(self, input) + } + fn spawn( + &mut self, + handle:&mut Self::FinalJoinHandle, + alloc_per_thread:&mut SendAlloc, + index: usize, + num_threads: usize, + f: fn(ExtraInput, usize, usize, &U, Alloc) -> T, + ) { + >::spawn(self, handle, alloc_per_thread, index, num_threads, f) + } +} + diff --git a/rust/vendor/brotli/src/bin/validate.rs b/rust/vendor/brotli/src/bin/validate.rs new file mode 100644 index 0000000..23ca1e5 --- /dev/null +++ b/rust/vendor/brotli/src/bin/validate.rs @@ -0,0 +1,167 @@ +#[cfg(feature="validation")] +use core; +use std::io::{self, Error, ErrorKind, Read, Write}; +use super::{Rebox, HeapAllocator, IoWriterWrapper}; +use brotli::{DecompressorWriterCustomIo, CustomWrite}; +use alloc_no_stdlib::{Allocator, SliceWrapper}; +use brotli::enc::BrotliEncoderParams; +#[cfg(feature="validation")] +use sha2::{Sha256, Digest}; +#[cfg(feature="validation")] +type Checksum = Sha256; + +struct Tee(OutputA, OutputB); +impl Write for Tee { + fn write(&mut self, data:&[u8]) -> Result { + match self.0.write(data) { + Err(err) => return Err(err), + Ok(size) => match self.1.write_all(&data[..size]) { + Ok(_) => Ok(size), + Err(err) => Err(err), + } + } + } + fn flush(&mut self) -> Result<(), io::Error> { + match self.0.flush() { + Err(err) => return Err(err), + Ok(_) => { + loop { + match self.1.flush() { + Err(e) => match e.kind() { + ErrorKind::Interrupted => continue, + _ => return Err(e), + }, + Ok(e) => return Ok(e), + } + } + }, + } + } +} + +struct DecompressAndValidate<'a, OutputType:Write+'a>( + DecompressorWriterCustomIo, + Rebox, // buffer type + HeapAllocator, + HeapAllocator, + HeapAllocator> +); + +impl<'a, OutputType:Write> Write for DecompressAndValidate<'a, OutputType> { + fn write(&mut self, data:&[u8]) -> Result { + self.0.write(data) + } + fn flush(&mut self) -> Result<(), io::Error> { + self.0.flush() + } +} + +#[cfg(not(feature="validation"))] +fn make_sha_writer() -> io::Sink { + io::sink() +} +#[cfg(not(feature="validation"))] +fn make_sha_reader(r:&mut InputType) -> &mut InputType { + r +} + +#[cfg(not(feature="validation"))] +fn sha_ok(_writer: &mut io::Sink, _reader: &mut InputType) -> bool { + false +} + +#[cfg(feature="validation")] +struct ShaReader<'a, InputType:Read+'a> { + reader:&'a mut InputType, + checksum:Checksum, +} +#[cfg(feature="validation")] +impl<'a, InputType:Read+'a> Read for ShaReader<'a, InputType> { + fn read(&mut self, data: &mut [u8]) -> Result { + match self.reader.read(data) { + Err(e) => Err(e), + Ok(size) => { + self.checksum.update(&data[..size]); + Ok(size) + }, + } + } +} +#[cfg(feature="validation")] +fn make_sha_reader(r:&mut InputType) -> ShaReader { + ShaReader{ + reader:r, + checksum:Checksum::default(), + } +} + +#[cfg(feature="validation")] +fn sha_ok(writer: &mut ShaWriter, reader: &mut ShaReader) -> bool { + core::mem::replace(&mut writer.0, + Checksum::default()).finalize() == core::mem::replace(&mut reader.checksum, + Checksum::default()).finalize() +} +#[cfg(feature="validation")] +#[derive(Default)] +struct ShaWriter(Checksum); +#[cfg(feature="validation")] +impl Write for ShaWriter { + fn write(&mut self, data:&[u8]) -> Result { + self.0.update(data); + Ok(data.len()) + } + fn flush(&mut self) -> Result<(), io::Error> { + Ok(()) + } +} +#[cfg(feature="validation")] +fn make_sha_writer() -> ShaWriter { + ShaWriter::default() +} +#[cfg(feature="validation")] +const VALIDATION_FAILED: &'static str = "Validation failed"; +#[cfg(not(feature="validation"))] +const VALIDATION_FAILED: &'static str = "Validation module not enabled: build with cargo build --features=validation"; + +pub fn compress_validate(r: &mut InputType, + w: &mut OutputType, + buffer_size: usize, + params: &BrotliEncoderParams, + custom_dictionary:Rebox, + num_threads: usize) -> Result<(), io::Error> { + let mut m8 = HeapAllocator::default(); + let buffer = >::alloc_cell(&mut m8, buffer_size); + // FIXME: could reuse the dictionary to seed the compressor, but that violates the abstraction right now + // also dictionaries are not very popular since they are mostly an internal concept, given their deprecation in + // the standard brotli spec + let mut dict = Vec::::new(); + + dict.extend_from_slice(custom_dictionary.slice()); + let mut sha_writer = make_sha_writer(); + let mut sha_reader = make_sha_reader(r); + let ret; + { + let validate_writer = DecompressAndValidate(DecompressorWriterCustomIo::new_with_custom_dictionary( + IoWriterWrapper(&mut sha_writer), + buffer, + m8, + HeapAllocator::default(), + HeapAllocator::default(), + custom_dictionary, + Error::new(ErrorKind::InvalidData, + "Invalid Data"))); + let mut overarching_writer = Tee(validate_writer, w); + ret = super::compress(&mut sha_reader, &mut overarching_writer, buffer_size, params, &dict[..], num_threads); + } + match ret { + Ok(_ret) => { + if sha_ok(&mut sha_writer, &mut sha_reader) { + return Ok(()); + } else { + return Err(Error::new(ErrorKind::InvalidData, VALIDATION_FAILED)); + } + }, + Err(e) => Err(e), + } +} diff --git a/rust/vendor/brotli/src/concat/mod.rs b/rust/vendor/brotli/src/concat/mod.rs new file mode 100644 index 0000000..b5fd759 --- /dev/null +++ b/rust/vendor/brotli/src/concat/mod.rs @@ -0,0 +1,623 @@ +use core; + +#[repr(C)] +#[derive(Debug,Clone,Copy, PartialEq)] +pub enum BroCatliResult { + Success = 0, + NeedsMoreInput = 1, + NeedsMoreOutput = 2, + BrotliFileNotCraftedForAppend = 124, + InvalidWindowSize = 125, + WindowSizeLargerThanPreviousFile = 126, + BrotliFileNotCraftedForConcatenation = 127, +} + +const NUM_STREAM_HEADER_BYTES: usize = 5; + +#[derive(Clone,Copy)] +struct NewStreamData { + bytes_so_far: [u8;NUM_STREAM_HEADER_BYTES], + num_bytes_read: u8, + num_bytes_written: Option, +} +impl NewStreamData { + pub fn new() -> NewStreamData{ + NewStreamData{ + bytes_so_far:[0,0,0,0,0], + num_bytes_read:0, + num_bytes_written:None, + } + } + fn sufficient(&self) -> bool { + if self.num_bytes_read == 4 && (127&self.bytes_so_far[0]) != 17 { + return true; + } + self.num_bytes_read == 5 + } +} + +fn parse_window_size(bytes_so_far:&[u8]) -> Result<(u8, usize), ()> { // returns window_size and offset in stream in bits + if bytes_so_far[0] & 1 == 0 { + return Ok((16, 1)); + } + match bytes_so_far[0] & 15 { + 0x3 => return Ok((18, 4)), + 0x5 => return Ok((19, 4)), + 0x7 => return Ok((20, 4)), + 0x9 => return Ok((21, 4)), + 0xb => return Ok((22, 4)), + 0xd => return Ok((23, 4)), + 0xf => return Ok((24, 4)), + _ => match bytes_so_far[0] & 127 { + 0x71 => return Ok((15, 7)), + 0x61 => return Ok((14, 7)), + 0x51 => return Ok((13, 7)), + 0x41 => return Ok((12, 7)), + 0x31 => return Ok((11, 7)), + 0x21 => return Ok((10, 7)), + 0x1 => return Ok((17, 7)), + _ => {}, + } + } + if (bytes_so_far[0] & 0x80) != 0 { + return Err(()); + } + let ret = bytes_so_far[1] & 0x3f; + if ret < 10 || ret > 30 { + return Err(()); + } + Ok((ret, 14)) +} + +fn detect_varlen_offset(bytes_so_far:&[u8]) -> Result<(usize), ()> { // returns offfset in bits + let (_, mut offset) = match parse_window_size(bytes_so_far) { + Ok(x) => x, + Err(_) => return Err(()), + }; + let mut bytes = 0u64; + for (index, item) in bytes_so_far.iter().enumerate() { + bytes |= u64::from(*item) << (index * 8); + } + bytes >>= offset; + offset += 1; + if (bytes & 1) != 0 { // ISLAST + bytes >>= 1; + offset += 1; + if (bytes & 1) != 0 { // ISLASTEMPTY + return Ok(offset); + } + } + bytes >>= 1; + let mut mnibbles = bytes & 3; + bytes >>= 2; + offset += 2; + if mnibbles == 3 { // metadata block + if (bytes & 1) != 0 { + return Err(()); // reserved, must be zero + } + bytes >>= 1; + offset += 1; + let mskipbytes = bytes & ((1 << 2) - 1); + offset += 2; + offset += usize::from(mskipbytes as usize) * 8; // next item is byte aligned + return Ok(offset); + } + mnibbles += 4; + offset += usize::from(mnibbles as usize) * 4; + bytes >>= mnibbles * 4; + offset += 1; + if (bytes & 1) == 0 { // not UNCOMPRESSED + Err(()) // not valid bitstream for concatenation + } else { // UNCOMPRESSED: now things are aligend + Ok(offset) + } +} + +// eat your vegetables +pub struct BroCatli { + last_bytes: [u8; 2], + last_bytes_len: u8, + last_byte_sanitized: bool, + any_bytes_emitted: bool, + last_byte_bit_offset: u8, + // need to make sure that window sizes stay similar or get smaller + window_size: u8, + new_stream_pending: Option, +} +impl Default for BroCatli { + fn default() -> BroCatli { + BroCatli::new() + } +} +impl BroCatli { + pub fn new() -> BroCatli { + BroCatli { + last_bytes: [0,0], + last_bytes_len: 0, + last_byte_bit_offset: 0, + last_byte_sanitized: false, + any_bytes_emitted: false, + new_stream_pending: None, + window_size:0, + } + } + pub fn deserialize_from_buffer(buffer: &[u8]) -> Result { + if 16+NUM_STREAM_HEADER_BYTES > buffer.len() { + return Err(()); + } + let mut possible_new_stream_pending = NewStreamData{ + num_bytes_read: buffer[12], + num_bytes_written: if (buffer[9] & (1<<7)) != 0 {Some(buffer[13])} else {None}, + bytes_so_far: [0;NUM_STREAM_HEADER_BYTES], + }; + let xlen = possible_new_stream_pending.bytes_so_far.len(); + possible_new_stream_pending.bytes_so_far.clone_from_slice( + &buffer[16..16+xlen]); + let new_stream_pending: Option = if (buffer[9] & (1 << 6)) != 0 { + Some(possible_new_stream_pending) + } else { + None + }; + let mut ret = BroCatli { + last_bytes: [0,0], + last_bytes_len: buffer[8], + last_byte_sanitized: (buffer[9] & 0x1) != 0, + last_byte_bit_offset: buffer[10], + any_bytes_emitted: (buffer[9] & (1 << 5)) != 0, + window_size: buffer[11], + new_stream_pending:new_stream_pending, + }; + if ret.last_bytes.len() > 8 { + return Err(()); + } + let xlen = ret.last_bytes.len(); + ret.last_bytes.clone_from_slice(&buffer[..xlen]); + Ok(ret) + } + #[inline(always)] + pub fn serialize_to_buffer(&self, buffer: &mut [u8]) -> Result<(), ()> { + if 16+NUM_STREAM_HEADER_BYTES > buffer.len() { + return Err(()); + } + buffer[..self.last_bytes.len()].clone_from_slice( + &self.last_bytes[..]); + buffer[8] = self.last_bytes_len; + buffer[9] = (self.last_byte_sanitized as u8) | ((self.new_stream_pending.is_some() as u8) << 6) | ((self.any_bytes_emitted as u8) << 5); + buffer[10] = self.last_byte_bit_offset; + buffer[11] = self.window_size; + if let Some(new_stream_pending) = self.new_stream_pending { + if new_stream_pending.num_bytes_written.is_some() { + buffer[9] |= (1<<7); + } + buffer[12] = new_stream_pending.num_bytes_read; + buffer[13] = new_stream_pending.num_bytes_written.unwrap_or(0); + // 14, 15 reserved + buffer[16..16+new_stream_pending.bytes_so_far.len()].clone_from_slice( + &new_stream_pending.bytes_so_far[..]); + } + Ok(()) + } + pub fn new_with_window_size(log_window_size: u8) -> BroCatli { + // in this case setup the last_bytes of the stream to perfectly mimic what would + // appear in an empty stream with the selected window size... + // this means the window size followed by 2 sequential 1 bits (LAST_METABLOCK, EMPTY) + // the new_stream code should naturally find the sequential 1 bits and mask them + // out and then prepend the window size... then the following window sizes should + // be checked to be shorter + let last_bytes_len; + let last_bytes; + + if log_window_size > 24 { + last_bytes = [17u8, log_window_size | 64 | 128]; + last_bytes_len = 2; + } else if log_window_size == 16 { + last_bytes = [1 | 2 | 4, 0]; + last_bytes_len = 1; + } else if log_window_size > 17 { + last_bytes = [(3 + (log_window_size - 18) * 2) | (16 | 32), 0]; + last_bytes_len = 1; + } else { + match log_window_size { + 15 => last_bytes = [0x71 | 0x80, 1], + 14 => last_bytes = [0x61 | 0x80, 1], + 13 => last_bytes = [0x51 | 0x80, 1], + 12 => last_bytes = [0x41 | 0x80, 1], + 11 => last_bytes = [0x31 | 0x80, 1], + 10 => last_bytes = [0x21 | 0x80, 1], + _ => {assert_eq!(log_window_size, 17); last_bytes = [0x1 | 0x80, 1];} // 17 + } + last_bytes_len = 2; + } + BroCatli { + last_bytes: last_bytes, + last_bytes_len: last_bytes_len, + last_byte_bit_offset: 0, + last_byte_sanitized: false, + any_bytes_emitted: false, + new_stream_pending: None, + window_size:log_window_size, + } + } + + pub fn new_brotli_file(&mut self) { + self.new_stream_pending = Some(NewStreamData::new()); + } + fn flush_previous_stream(&mut self, out_bytes: &mut [u8], out_offset: &mut usize) -> BroCatliResult { + if !self.last_byte_sanitized { // if the previous stream hasn't had the last metablock (bit 1,1) sanitized + if self.last_bytes_len == 0 { // first stream or otherwise sanitized + self.last_byte_sanitized = true; + return BroCatliResult::Success; + } + // create a 16 bit integer with the last 2 bytes of data + let mut last_bytes = self.last_bytes[0] as u16 + ((self.last_bytes[1] as u16) << 8); + let max = self.last_bytes_len * 8; + let mut index = max - 1; + for i in 0..max { + index = max - 1 - i; + if ((1<> (index - 1)) != 3 { // last two bits need to be set for the final metablock + return BroCatliResult::BrotliFileNotCraftedForAppend; + } + index -= 1; // discard the final two bits + last_bytes &= (1 << index) - 1; // mask them out + self.last_bytes[0] = last_bytes as u8 & 0xff; // reset the last_bytes pair + self.last_bytes[1] = (last_bytes >> 8) as u8 & 0xff; + if index >= 8 { // if both bits and one useful bit were in the second block, then write that + if out_bytes.len() > *out_offset { + out_bytes[*out_offset] = self.last_bytes[0]; + self.last_bytes[0] = self.last_bytes[1]; + *out_offset += 1; + self.any_bytes_emitted = true; + index -= 8; + self.last_bytes_len -= 1; + } else { + return BroCatliResult::NeedsMoreOutput; + } + } + self.last_byte_bit_offset = index; + assert!(index < 8); + self.last_byte_sanitized = true; + } + BroCatliResult::Success + } + + fn shift_and_check_new_stream_header(&mut self, mut new_stream_pending: NewStreamData, out_bytes: &mut [u8], out_offset: &mut usize) -> BroCatliResult { + if new_stream_pending.num_bytes_written.is_none() { + let (window_size, window_offset) = if let Ok(results) = parse_window_size( + &new_stream_pending.bytes_so_far[..usize::from(new_stream_pending.num_bytes_read)], + ) { + results + } else { + return BroCatliResult::InvalidWindowSize; + }; + if self.window_size == 0 { // parse window size and just copy everything + self.window_size = window_size; + assert_eq!(self.last_byte_bit_offset, 0); // we are first stream + out_bytes[*out_offset] = new_stream_pending.bytes_so_far[0]; + new_stream_pending.num_bytes_written = Some(1); + self.any_bytes_emitted = true; + *out_offset += 1; + } else { + if window_size > self.window_size { + return BroCatliResult::WindowSizeLargerThanPreviousFile; + } + let mut realigned_header:[u8;NUM_STREAM_HEADER_BYTES + 1] = [self.last_bytes[0], + 0,0,0,0,0, + ]; + let varlen_offset = if let Ok(voffset) = detect_varlen_offset( + &new_stream_pending.bytes_so_far[..usize::from(new_stream_pending.num_bytes_read)], + ) { + voffset + } else { + return BroCatliResult::BrotliFileNotCraftedForConcatenation; + }; + let mut bytes_so_far = 0u64; + for index in 0..usize::from(new_stream_pending.num_bytes_read) { + bytes_so_far |= u64::from(new_stream_pending.bytes_so_far[index]) << (index * 8); + } + bytes_so_far >>= window_offset; // mask out the window size + bytes_so_far &= (1u64 << (varlen_offset - window_offset)) - 1; + let var_len_bytes = ((usize::from(varlen_offset - window_offset) + 7) / 8); + for byte_index in 0..var_len_bytes { + let cur_byte = (bytes_so_far >> (byte_index *8)); + realigned_header[byte_index] |= ((cur_byte & ((1 << (8 - self.last_byte_bit_offset)) - 1)) << self.last_byte_bit_offset) as u8; + realigned_header[byte_index + 1] = (cur_byte >> (8 - self.last_byte_bit_offset)) as u8; + } + let whole_byte_destination = ((usize::from(self.last_byte_bit_offset) + varlen_offset - window_offset) + 7) / 8; + let whole_byte_source = (varlen_offset + 7) / 8; + let num_whole_bytes_to_copy = usize::from(new_stream_pending.num_bytes_read) - whole_byte_source; + for aligned_index in 0..num_whole_bytes_to_copy { + realigned_header[whole_byte_destination + aligned_index] = new_stream_pending.bytes_so_far[whole_byte_source + aligned_index]; + } + out_bytes[*out_offset] = realigned_header[0]; + self.any_bytes_emitted = true; + *out_offset += 1; + // subtract one since that has just been written out and we're only copying realigned_header[1..] + new_stream_pending.num_bytes_read = (whole_byte_destination + num_whole_bytes_to_copy) as u8 - 1; + new_stream_pending.num_bytes_written = Some(0); + new_stream_pending.bytes_so_far.clone_from_slice(&realigned_header[1..]); + } + } else { + assert!(self.window_size != 0); + } + let to_copy = core::cmp::min(out_bytes.len() - *out_offset, + usize::from(new_stream_pending.num_bytes_read - new_stream_pending.num_bytes_written.unwrap())); + out_bytes.split_at_mut(*out_offset).1.split_at_mut(to_copy).0.clone_from_slice( + &new_stream_pending.bytes_so_far.split_at(usize::from(new_stream_pending.num_bytes_written.unwrap())).1.split_at(to_copy).0); + *out_offset += to_copy; + if to_copy != 0 { + self.any_bytes_emitted = true; + } + new_stream_pending.num_bytes_written = Some((new_stream_pending.num_bytes_written.unwrap() + to_copy as u8)); + if new_stream_pending.num_bytes_written.unwrap() != new_stream_pending.num_bytes_read { + self.new_stream_pending = Some(new_stream_pending); + return BroCatliResult::NeedsMoreOutput; + } + self.new_stream_pending = None; + self.last_byte_sanitized = false; + self.last_byte_bit_offset = 0; + self.last_bytes_len = 0; + self.last_bytes = [0,0]; + //now unwrite from the stream, since the last byte may need to be adjusted to be EOF + *out_offset -= 1; + self.last_bytes[0] = out_bytes[*out_offset]; + self.last_bytes_len = 1; + BroCatliResult::Success + } + pub fn stream(&mut self, in_bytes: &[u8], in_offset: &mut usize, out_bytes: &mut [u8], out_offset: &mut usize) -> BroCatliResult { + if let Some(mut new_stream_pending) = self.new_stream_pending.clone() { + let flush_result = self.flush_previous_stream(out_bytes, out_offset); + if let BroCatliResult::Success = flush_result { + if usize::from(new_stream_pending.num_bytes_read) < new_stream_pending.bytes_so_far.len() { + { + let dst = &mut new_stream_pending.bytes_so_far[usize::from(new_stream_pending.num_bytes_read)..]; + let to_copy = core::cmp::min(dst.len(), in_bytes.len() - *in_offset); + dst[..to_copy].clone_from_slice(in_bytes.split_at(*in_offset).1.split_at(to_copy).0); + *in_offset += to_copy; + new_stream_pending.num_bytes_read += to_copy as u8; + } + self.new_stream_pending = Some(new_stream_pending); // write back changes + } + if !new_stream_pending.sufficient() { + return BroCatliResult::NeedsMoreInput; + } + if out_bytes.len() == *out_offset { + return BroCatliResult::NeedsMoreOutput; + } + let shift_result = self.shift_and_check_new_stream_header(new_stream_pending, out_bytes, out_offset); + if let BroCatliResult::Success = shift_result { + } else { + return shift_result; + } + } else { + return flush_result; + } + if *out_offset == out_bytes.len() { + return BroCatliResult::NeedsMoreOutput; // need to be able to write at least one byte of data to make progress + } + } + assert!(self.new_stream_pending.is_none());// this should have been handled above + if self.last_bytes_len != 2 { + if out_bytes.len() == *out_offset{ + return BroCatliResult::NeedsMoreOutput; + } + if in_bytes.len() == *in_offset { + return BroCatliResult::NeedsMoreInput; + } + self.last_bytes[usize::from(self.last_bytes_len)] = in_bytes[*in_offset]; + *in_offset += 1; + self.last_bytes_len += 1; + if self.last_bytes_len != 2 { + if out_bytes.len() == *out_offset{ + return BroCatliResult::NeedsMoreOutput; + } + if in_bytes.len() == *in_offset { + return BroCatliResult::NeedsMoreInput; + } + self.last_bytes[usize::from(self.last_bytes_len)] = in_bytes[*in_offset]; + self.last_bytes_len += 1; + *in_offset += 1; + } + } + if out_bytes.len() == *out_offset{ + return BroCatliResult::NeedsMoreOutput; + } + if in_bytes.len() == *in_offset{ + return BroCatliResult::NeedsMoreInput; + } + let mut to_copy = core::cmp::min(out_bytes.len() - *out_offset, + in_bytes.len() - *in_offset); + assert!(to_copy != 0); + if to_copy == 1 { + out_bytes[*out_offset] = self.last_bytes[0]; + self.last_bytes[0] = self.last_bytes[1]; + self.last_bytes[1] = in_bytes[*in_offset]; + *in_offset += 1; + *out_offset += 1; + if *out_offset == out_bytes.len() { + return BroCatliResult::NeedsMoreOutput; + } + return BroCatliResult::NeedsMoreInput; + } + out_bytes.split_at_mut(*out_offset).1.split_at_mut(2).0.clone_from_slice(&self.last_bytes[..]); + *out_offset += 2; + let (new_in_offset, last_two) = in_bytes.split_at(*in_offset).1.split_at(to_copy).0.split_at(to_copy-2); + self.last_bytes.clone_from_slice(last_two); + *in_offset += 2; // add this after the clone since we grab the last 2 bytes, not the first + to_copy -= 2; + out_bytes.split_at_mut(*out_offset).1.split_at_mut(to_copy).0.clone_from_slice( + new_in_offset); + *out_offset += to_copy; + *in_offset += to_copy; + if *out_offset == out_bytes.len() { + return BroCatliResult::NeedsMoreOutput; + } + return BroCatliResult::NeedsMoreInput; + } + fn append_eof_metablock_to_last_bytes(&mut self) { + assert!(self.last_byte_sanitized); + let mut last_bytes = self.last_bytes[0] as u16 | ((self.last_bytes[1] as u16) << 8); + let bit_end = (self.last_bytes_len - 1) * 8 + self.last_byte_bit_offset; + last_bytes |= 3 << bit_end; + self.last_bytes[0] = last_bytes as u8 & 0xff; + self.last_bytes[1] = (last_bytes >> 8) as u8 & 0xff; + self.last_byte_sanitized = false; + self.last_byte_bit_offset += 2; + if self.last_byte_bit_offset >= 8 { + self.last_byte_bit_offset -= 8; + self.last_bytes_len += 1; + } + } + pub fn finish(&mut self, out_bytes: &mut [u8], out_offset: &mut usize) -> BroCatliResult { + if self.last_byte_sanitized && self.last_bytes_len != 0 { + self.append_eof_metablock_to_last_bytes(); + } + while self.last_bytes_len != 0 { + if *out_offset == out_bytes.len() { + + return BroCatliResult::NeedsMoreOutput; + } + out_bytes[*out_offset] = self.last_bytes[0]; + *out_offset += 1; + self.last_bytes_len -= 1; + self.last_bytes[0] = self.last_bytes[1]; + self.any_bytes_emitted = true; + } + if !self.any_bytes_emitted { + if out_bytes.len() == *out_offset{ + return BroCatliResult::NeedsMoreOutput; + } + self.any_bytes_emitted = true; + out_bytes[*out_offset] = b';'; + *out_offset += 1; + } + BroCatliResult::Success + } +} + +mod test { + #[cfg(test)] + use super::{BroCatli}; + #[test] + fn test_deserialization() { + let broccoli = BroCatli{ + new_stream_pending:Some(super::NewStreamData { + bytes_so_far: [0x33; super::NUM_STREAM_HEADER_BYTES], + num_bytes_read: 16, + num_bytes_written: Some(3), + }), + last_bytes: [0x45, 0x46], + last_bytes_len: 1, + last_byte_sanitized: true, + any_bytes_emitted: false, + last_byte_bit_offset: 7, + window_size:22, + }; + let mut buffer = [0u8;248]; + broccoli.serialize_to_buffer(&mut buffer[..]).unwrap(); + let bc = BroCatli::deserialize_from_buffer(&buffer[..]).unwrap(); + assert_eq!(broccoli.last_bytes, bc.last_bytes); + assert_eq!(broccoli.last_bytes_len, bc.last_bytes_len); + assert_eq!(broccoli.last_byte_sanitized, bc.last_byte_sanitized); + assert_eq!(broccoli.last_byte_bit_offset, bc.last_byte_bit_offset); + assert_eq!(broccoli.window_size, bc.window_size); + assert_eq!(broccoli.new_stream_pending.unwrap().bytes_so_far, + bc.new_stream_pending.unwrap().bytes_so_far); + assert_eq!(broccoli.new_stream_pending.unwrap().num_bytes_read, + bc.new_stream_pending.unwrap().num_bytes_read); + assert_eq!(broccoli.new_stream_pending.unwrap().num_bytes_written, + bc.new_stream_pending.unwrap().num_bytes_written); + } + #[test] + fn test_deserialization_any_written() { + let broccoli = BroCatli{ + new_stream_pending:Some(super::NewStreamData { + bytes_so_far: [0x33; super::NUM_STREAM_HEADER_BYTES], + num_bytes_read: 16, + num_bytes_written: Some(3), + }), + last_bytes: [0x45, 0x46], + last_bytes_len: 1, + last_byte_sanitized: true, + any_bytes_emitted: true, + last_byte_bit_offset: 7, + window_size:22, + }; + let mut buffer = [0u8;248]; + broccoli.serialize_to_buffer(&mut buffer[..]).unwrap(); + let bc = BroCatli::deserialize_from_buffer(&buffer[..]).unwrap(); + assert_eq!(broccoli.last_bytes, bc.last_bytes); + assert_eq!(broccoli.last_bytes_len, bc.last_bytes_len); + assert_eq!(broccoli.last_byte_sanitized, bc.last_byte_sanitized); + assert_eq!(broccoli.last_byte_bit_offset, bc.last_byte_bit_offset); + assert_eq!(broccoli.window_size, bc.window_size); + assert_eq!(broccoli.new_stream_pending.unwrap().bytes_so_far, + bc.new_stream_pending.unwrap().bytes_so_far); + assert_eq!(broccoli.new_stream_pending.unwrap().num_bytes_read, + bc.new_stream_pending.unwrap().num_bytes_read); + assert_eq!(broccoli.new_stream_pending.unwrap().num_bytes_written, + bc.new_stream_pending.unwrap().num_bytes_written); + } + #[test] + fn test_serialization() { + let mut buffer = [0u8;248]; + let mut broccoli = BroCatli::deserialize_from_buffer(&buffer).unwrap(); + let mut buffer2 = [0u8;248]; + broccoli.serialize_to_buffer(&mut buffer2[..]).unwrap(); + assert_eq!(&buffer[..], &buffer2[..]); + for (index, item) in buffer.iter_mut().enumerate() { + *item = index as u8; + } + broccoli = BroCatli::deserialize_from_buffer(&buffer).unwrap(); + broccoli.serialize_to_buffer(&mut buffer2[..]).unwrap(); + broccoli = BroCatli::deserialize_from_buffer(&buffer2).unwrap(); + for (_index, item) in buffer.iter_mut().enumerate() { + *item = 0; + } + broccoli.serialize_to_buffer(&mut buffer[..]).unwrap(); + assert_eq!(&buffer[..], &buffer2[..]); + for (index, item) in buffer.iter_mut().enumerate() { + *item = 0xff ^ index as u8; + } + broccoli = BroCatli::deserialize_from_buffer(&buffer).unwrap(); + broccoli.serialize_to_buffer(&mut buffer2[..]).unwrap(); + broccoli = BroCatli::deserialize_from_buffer(&buffer2).unwrap(); + for (_index, item) in buffer.iter_mut().enumerate() { + *item = 0; + } + broccoli.serialize_to_buffer(&mut buffer[..]).unwrap(); + assert_eq!(&buffer[..], &buffer2[..]); + } + #[test] + fn test_cat_empty_stream() { + let empty_catable = [b';']; + let mut bcat = super::BroCatli::default(); + let mut in_offset = 0usize; + let mut out_bytes = [0u8;32]; + let mut out_offset = 0usize; + bcat.new_brotli_file(); + let mut res = bcat.stream(&empty_catable[..], + &mut in_offset, + &mut out_bytes[..], + &mut out_offset); + assert_eq!(res, super::BroCatliResult::NeedsMoreInput); + bcat.new_brotli_file(); + in_offset = 0; + res = bcat.stream(&empty_catable[..], + &mut in_offset, + &mut out_bytes[..], + &mut out_offset); + assert_eq!(res, super::BroCatliResult::NeedsMoreInput); + res = bcat.finish(&mut out_bytes[..], + &mut out_offset); + assert_eq!(res, super::BroCatliResult::Success); + assert!(out_offset != 0); + assert_eq!(&out_bytes[..out_offset], &[b';']); + } +} diff --git a/rust/vendor/brotli/src/enc/backward_references/benchmark.rs b/rust/vendor/brotli/src/enc/backward_references/benchmark.rs new file mode 100755 index 0000000..50cb179 --- /dev/null +++ b/rust/vendor/brotli/src/enc/backward_references/benchmark.rs @@ -0,0 +1,321 @@ +#![cfg(feature="benchmark")] +#![cfg(feature="std")] +extern crate test; +use super::*; +use alloc_stdlib::StandardAlloc; +static RANDOM_THEN_UNICODE: &'static [u8] = include_bytes!("../../../testdata/random_then_unicode"); +static FINALIZE_DATA: &'static [u8] = &[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,20, + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,20, + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,20]; +const TEST_LEN:usize = 256 * 1024; +const DISTANCE_CACHE: &'static [i32] = &[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; // distance cache +fn make_generic_hasher() -> AdvHasher { + let params_hasher = BrotliHasherParams { + type_: 5, + block_bits: 6, + bucket_bits: 15, + num_last_distances_to_check:10, + hash_len: 4, + literal_byte_score: 540, + }; + let block_size = 1u64 << params_hasher.block_bits; + let bucket_size = 1u64 << params_hasher.bucket_bits; + let mut alloc = StandardAlloc::default(); + let buckets = >::alloc_cell(&mut alloc, (bucket_size * block_size) as usize); + let num = >::alloc_cell(&mut alloc, bucket_size as usize); + + AdvHasher::{ + buckets: buckets, + h9_opts: H9Opts::new(¶ms_hasher), + num: num, + GetHasherCommon: Struct1 { + params: params_hasher, + is_prepared_: 1, + dict_num_lookups: 0, + dict_num_matches: 0, + }, + specialization: H5Sub { + hash_shift_: 32i32 - params_hasher.bucket_bits, + bucket_size_: bucket_size as u32, + block_bits_: params_hasher.block_bits as i32, + block_mask_: block_size.wrapping_sub(1u64) as u32, + } + } +} +fn make_specialized_hasher() -> AdvHasher { + let params_hasher = BrotliHasherParams { + type_: 5, + block_bits: 6, + bucket_bits: 15, + num_last_distances_to_check:10, + hash_len: 4, + literal_byte_score: 540, + }; + let block_size = 1u64 << params_hasher.block_bits; + let bucket_size = 1u64 << params_hasher.bucket_bits; + let mut alloc = StandardAlloc::default(); + let buckets = >::alloc_cell(&mut alloc, (bucket_size * block_size) as usize); + let num = >::alloc_cell(&mut alloc, bucket_size as usize); + + AdvHasher::{ + buckets: buckets, + h9_opts: H9Opts::new(¶ms_hasher), + num: num, + GetHasherCommon: Struct1 { + params: params_hasher, + is_prepared_: 1, + dict_num_lookups: 0, + dict_num_matches: 0, + }, + specialization: HQ7Sub {} + } +} +#[bench] +fn bench_256k_basic_generic(bench: &mut test::Bencher) { + let mut hasher = make_generic_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + for i in 0..TEST_LEN { + hasher.Store(testdata, !0usize, i); + } + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} + +#[bench] +fn bench_256k_basic_specialized(bench: &mut test::Bencher) { + let mut hasher = make_specialized_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + for i in 0..TEST_LEN { + hasher.Store(testdata, !0usize, i); + } + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} + +#[bench] +fn bench_256k_opt_generic(bench: &mut test::Bencher) { + let mut hasher = make_generic_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + hasher.BulkStoreRangeOptBatch(testdata, !0usize, 0, TEST_LEN); + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} + +#[bench] +fn bench_256k_opt_specialized(bench: &mut test::Bencher) { + let mut hasher = make_specialized_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + hasher.BulkStoreRangeOptBatch(testdata, !0usize, 0, TEST_LEN); + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} + + +#[bench] +fn bench_256k_mem_fetch_generic(bench: &mut test::Bencher) { + let mut hasher = make_generic_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + hasher.BulkStoreRangeOptMemFetch(testdata, !0usize, 0, TEST_LEN); + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} + +#[bench] +fn bench_256k_mem_fetch_specialized(bench: &mut test::Bencher) { + let mut hasher = make_specialized_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + hasher.BulkStoreRangeOptMemFetch(testdata, !0usize, 0, TEST_LEN); + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} + + +#[bench] +fn bench_256k_mem_lazy_dupe_generic(bench: &mut test::Bencher) { + let mut hasher = make_generic_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + hasher.BulkStoreRangeOptMemFetchLazyDupeUpdate(testdata, !0usize, 0, TEST_LEN); + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} +#[bench] +fn bench_256k_mem_lazy_dupe_specialized(bench: &mut test::Bencher) { + let mut hasher = make_specialized_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + hasher.BulkStoreRangeOptMemFetchLazyDupeUpdate(testdata, !0usize, 0, TEST_LEN); + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} + + + + + +#[bench] +fn bench_256k_mem_random_dupe_generic(bench: &mut test::Bencher) { + let mut hasher = make_generic_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + hasher.BulkStoreRangeOptRandomDupeUpdate(testdata, !0usize, 0, TEST_LEN); + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} + +#[bench] +fn bench_256k_mem_random_dupe_specialized(bench: &mut test::Bencher) { + let mut hasher = make_specialized_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + hasher.BulkStoreRangeOptRandomDupeUpdate(testdata, !0usize, 0, TEST_LEN); + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} + + +#[bench] +fn bench_256k_cur_generic(bench: &mut test::Bencher) { + let mut hasher = make_generic_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + hasher.BulkStoreRange(testdata, !0usize, 0, TEST_LEN); + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} + +#[bench] +fn bench_256k_cur_specialized(bench: &mut test::Bencher) { + let mut hasher = make_specialized_hasher(); + bench.iter(|| { + let testdata = test::black_box(RANDOM_THEN_UNICODE.split_at(TEST_LEN + 8).0); + hasher.BulkStoreRange(testdata, !0usize, 0, TEST_LEN); + let mut output = super::HasherSearchResult{len:0,len_x_code:0,distance:0,score:0}; + hasher.FindLongestMatch(None, &[], + test::black_box(FINALIZE_DATA), // data + 15,// ring mask + DISTANCE_CACHE, + 8, // cur_x + 8, + 4, + 4, + 4, + &mut output); + }); +} diff --git a/rust/vendor/brotli/src/enc/backward_references/hash_to_binary_tree.rs b/rust/vendor/brotli/src/enc/backward_references/hash_to_binary_tree.rs new file mode 100755 index 0000000..1eb41a3 --- /dev/null +++ b/rust/vendor/brotli/src/enc/backward_references/hash_to_binary_tree.rs @@ -0,0 +1,497 @@ +#![allow(dead_code, unused_imports)] +use enc::command::{Command, ComputeDistanceCode, InitCommand, GetInsertLengthCode, GetCopyLengthCode, CombineLengthCodes, PrefixEncodeCopyDistance, CommandCopyLen}; +use super::{BrotliEncoderParams, kHashMul32,kHashMul64, kHashMul64Long, BrotliHasherParams, kInvalidMatch, kDistanceCacheIndex, kDistanceCacheOffset, Struct1, H9Opts, HowPrepared, AnyHasher, CloneWithAlloc, HasherSearchResult}; +use enc::dictionary_hash::kStaticDictionaryHash; +use enc::static_dict::{BROTLI_UNALIGNED_LOAD32, BROTLI_UNALIGNED_LOAD64, FindMatchLengthWithLimit}; +use enc::static_dict::{BrotliDictionary, kBrotliEncDictionary, BrotliFindAllStaticDictionaryMatches}; +use enc::literal_cost::BrotliEstimateBitCostsForLiterals; +use enc::constants::{kInsExtra, kCopyExtra}; +use alloc; +use alloc::{SliceWrapper, SliceWrapperMut, Allocator}; +use enc::util::{Log2FloorNonZero, brotli_max_size_t,FastLog2, floatX}; +use core; + +pub const kInfinity: floatX = 1.7e38 as floatX; +#[derive(Clone,Copy,Debug)] +pub enum Union1 { + cost(floatX), + next(u32), + shortcut(u32), +} + +#[derive(Clone,Copy,Debug)] +pub struct ZopfliNode { + //highest 7 bit is used to reconstruct the length code + pub length : u32, + // distance associated with the length + pub distance : u32, + // number of literal inserts before the copy; highest 5 bits contain distance short code + 1 (or zero if no short code) + pub dcode_insert_length : u32, + pub u : Union1, +} +impl Default for ZopfliNode { + fn default() -> Self { + ZopfliNode{ + length: 1, + distance: 0, + dcode_insert_length: 0, + u: Union1::cost(kInfinity), + } + } +} + +pub trait Allocable> { + fn new(m: &mut AllocT, init:T) -> Self; + fn new_uninit(m: &mut AllocT) -> Self; + fn free(&mut self, m: &mut AllocT); +} +pub trait H10Params { + fn max_tree_search_depth() -> u32; + fn max_tree_comp_length() -> u32; +} + +pub struct H10DefaultParams{} +impl H10Params for H10DefaultParams { + #[inline(always)] + fn max_tree_search_depth() -> u32 { + 64 + } + #[inline(always)] + fn max_tree_comp_length() -> u32 { + 128 + } +} + +const BUCKET_BITS:usize = 17; + +pub struct H10Buckets>(AllocU32::AllocatedMemory); + + +impl> Allocable for H10Buckets { + fn new(m:&mut AllocU32, initializer: u32) -> H10Buckets { + let mut ret = m.alloc_cell(1 <(ret) + } + fn new_uninit(m:&mut AllocU32) -> H10Buckets { + H10Buckets::(m.alloc_cell(1 <> PartialEq> for H10Buckets { + fn eq(&self, other: &H10Buckets) -> bool { + return self.0.slice() == other.0.slice() + } +} + +impl> SliceWrapper for H10Buckets { + #[inline(always)] + fn slice(&self) -> &[u32] { + self.0.slice() + } +} +impl> SliceWrapperMut for H10Buckets { + #[inline(always)] + fn slice_mut(&mut self) -> &mut [u32] { + self.0.slice_mut() + } +} + + +pub struct H10, Buckets: Allocable+SliceWrapperMut+SliceWrapper, Params:H10Params> +where Buckets:PartialEq +{ + pub window_mask_: usize, + pub common: Struct1, + pub buckets_: Buckets, + pub invalid_pos_:u32, + pub forest: AllocU32::AllocatedMemory, + pub _params: core::marker::PhantomData, +} + +impl , Buckets: Allocable+SliceWrapperMut+SliceWrapper, Params:H10Params> + PartialEq> for H10 + where Buckets:PartialEq +{ + fn eq(&self, other: &H10) -> bool { + self.window_mask_ == other.window_mask_ + && self.common == other.common + && self.buckets_ == other.buckets_ + && self.invalid_pos_ == other.invalid_pos_ + && self.forest.slice() == other.forest.slice() + && self._params == other._params + } +} + +pub fn InitializeH10>( + m32: &mut AllocU32, one_shot: bool, params: &BrotliEncoderParams, input_size: usize + ) -> H10, H10DefaultParams> { + initialize_h10::>(m32, one_shot, params, input_size) +} +fn initialize_h10, Buckets:SliceWrapperMut+SliceWrapper+Allocable >( + m32: &mut AllocU32, one_shot: bool, params: &BrotliEncoderParams, input_size: usize +) -> H10 where Buckets:PartialEq { + let mut num_nodes = 1 << params.lgwin; + if one_shot && input_size < num_nodes { + num_nodes = input_size; + } + let window_mask = (1<>::new(m32, invalid_pos); + H10:: { + common:Struct1{ + params:params.hasher, + is_prepared_:1, + dict_num_lookups:0, + dict_num_matches:0, + }, + _params: core::marker::PhantomData::::default(), + window_mask_: window_mask as usize, + invalid_pos_: invalid_pos, + buckets_: buckets, + forest: m32.alloc_cell(num_nodes * 2), + } +} + +impl, + Buckets: Allocable+SliceWrapperMut+SliceWrapper, + Params:H10Params> H10 where Buckets:PartialEq { + pub fn free(&mut self, m32: &mut AllocU32) { + m32.free_cell(core::mem::replace(&mut self.forest, AllocU32::AllocatedMemory::default())); + self.buckets_.free(m32); + } +} +impl + alloc::Allocator, Buckets:Allocable+SliceWrapperMut+SliceWrapper, Params:H10Params, + > CloneWithAlloc for H10 where Buckets:PartialEq { + fn clone_with_alloc(&self, m: &mut Alloc) -> Self { + let mut ret = H10:: { + window_mask_: self.window_mask_, + common: self.common.clone(), + buckets_:Buckets::new_uninit(m), + invalid_pos_:self.invalid_pos_, + forest:>::alloc_cell(m, self.forest.len()), + _params: core::marker::PhantomData::::default(), + }; + ret.buckets_.slice_mut().clone_from_slice(self.buckets_.slice()); + ret.forest.slice_mut().clone_from_slice(self.forest.slice()); + ret + } +} + +impl, + Buckets: Allocable+SliceWrapperMut+SliceWrapper, + Params:H10Params> AnyHasher for H10 where Buckets:PartialEq { +/* fn GetH10Tree(&mut self) -> Option<&mut H10> { + Some(self) + }*/ + #[inline(always)] + fn Opts(&self) -> H9Opts { + H9Opts{literal_byte_score:340} + } + #[inline(always)] + fn PrepareDistanceCache(&self, _distance_cache: &mut [i32]) {} + #[inline(always)] + fn HashTypeLength(&self) -> usize { + 4 + } + #[inline(always)] + fn StoreLookahead(&self) -> usize { + Params::max_tree_comp_length() as usize + } + fn StitchToPreviousBlock(&mut self, + num_bytes: usize, + position: usize, + ringbuffer: &[u8], + ringbuffer_mask: usize) { + super::hq::StitchToPreviousBlockH10(self, num_bytes, position, ringbuffer, ringbuffer_mask) + } + #[inline(always)] + fn GetHasherCommon(&mut self) -> &mut Struct1 { + &mut self.common + } + #[inline(always)] + fn HashBytes(&self, data: &[u8]) -> usize { + let h = BROTLI_UNALIGNED_LOAD32( + data + ).wrapping_mul( + kHashMul32 + ); + (h >> 32i32 - BUCKET_BITS as i32) as usize + } + #[inline(always)] + fn Store(&mut self, data: &[u8], mask: usize, ix: usize) { + let max_backward + : usize + = (*self).window_mask_.wrapping_sub(16usize).wrapping_add( + 1usize + ); + StoreAndFindMatchesH10( + self, + data, + ix, + mask, + Params::max_tree_comp_length() as usize, + max_backward, + &mut 0, + &mut[], + ); + } + fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { + let mut i : usize = ix_start; + let mut j : usize = ix_start; + if ix_start.wrapping_add(63usize) <= ix_end { + i = ix_end.wrapping_sub(63usize); + } + if ix_start.wrapping_add(512usize) <= i { + while j < i { + { + self.Store(data,mask,j); + } + j = j.wrapping_add(8usize); + } + } + while i < ix_end { + { + self.Store(data,mask,i); + } + i = i.wrapping_add(1 as (usize)); + } + } + fn BulkStoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { + for i in ix_start..ix_end { + self.Store(data, mask, i); + } + } + fn Prepare(&mut self, _one_shot: bool, _input_size: usize, _data: &[u8]) -> HowPrepared { + if self.common.is_prepared_ != 0 { + return HowPrepared::ALREADY_PREPARED; + } + let invalid_pos = self.invalid_pos_; + for bucket in self.buckets_.slice_mut().iter_mut() { + *bucket = invalid_pos; + } + self.common.is_prepared_ = 1; + HowPrepared::NEWLY_PREPARED + } + + fn FindLongestMatch(&mut self, + _dictionary: Option<&BrotliDictionary>, + _dictionary_hash: &[u16], + _data: &[u8], + _ring_buffer_mask: usize, + _distance_cache: &[i32], + _cur_ix: usize, + _max_length: usize, + _max_backward: usize, + _gap: usize, + _max_distance: usize, + _out: &mut HasherSearchResult) + -> bool { + unimplemented!(); + } +} + +pub struct BackwardMatch(pub u64); + +// pub distance : u32, +// pub length_and_code : u32, +impl BackwardMatch { + #[inline(always)] + pub fn distance(&self) -> u32 { + self.0 as u32 + } + #[inline(always)] + pub fn length_and_code(&self) -> u32 { + (self.0 >> 32) as u32 + } +} +pub struct BackwardMatchMut<'a>(pub &'a mut u64); + +// pub distance : u32, +// pub length_and_code : u32, +impl<'a> BackwardMatchMut<'a> { + #[inline(always)] + pub fn distance(&self) -> u32 { + *self.0 as u32 + } + #[inline(always)] + pub fn length_and_code(&self) -> u32 { + (*self.0 >> 32) as u32 + } + #[inline(always)] + pub fn set_distance(&mut self, data: u32) { + *self.0 &= 0xffffffff00000000; + *self.0 |= u64::from(data) + } + #[inline(always)] + pub fn set_length_and_code(&mut self, data: u32) { + *self.0 = u64::from((*self.0) as u32) | (u64::from(data) << 32); + } +} + +#[inline(always)] +pub fn InitBackwardMatch( + xself : &mut BackwardMatchMut, dist : usize, len : usize +) { + (*xself).set_distance(dist as (u32)); + (*xself).set_length_and_code((len << 5i32) as (u32)); +} + + +macro_rules! LeftChildIndexH10 { + ($xself: expr, $pos: expr) => { + (2usize).wrapping_mul($pos & (*$xself).window_mask_) + }; +} +macro_rules! RightChildIndexH10 { + ($xself: expr, $pos: expr) => { + (2usize).wrapping_mul( + $pos & (*$xself).window_mask_ + ).wrapping_add( + 1usize + ) + } +} +/* +fn LeftChildIndexH10, + Buckets: Allocable+SliceWrapperMut+SliceWrapper, + Params:H10Params>( + mut xself : &mut H10, pos : usize +) -> usize { + (2usize).wrapping_mul(pos & (*xself).window_mask_) +} + +fn RightChildIndexH10, + Buckets: Allocable+SliceWrapperMut+SliceWrapper, + Params:H10Params>( + mut xself : &mut H10, pos : usize +) -> usize { + (2usize).wrapping_mul( + pos & (*xself).window_mask_ + ).wrapping_add( + 1usize + ) +} +*/ + +pub fn StoreAndFindMatchesH10, + Buckets: Allocable+SliceWrapperMut+SliceWrapper, + Params:H10Params>( + xself : &mut H10, + data : & [u8], + cur_ix : usize, + ring_buffer_mask : usize, + max_length : usize, + max_backward : usize, + best_len : &mut usize, + matches : &mut [u64]) -> usize where Buckets:PartialEq { + let mut matches_offset = 0usize; + let cur_ix_masked : usize = cur_ix & ring_buffer_mask; + let max_comp_len + : usize + = core::cmp::min(max_length,128usize); + let should_reroot_tree + : i32 + = if !!(max_length >= 128usize) { 1i32 } else { 0i32 }; + let key + = xself.HashBytes( + &data[(cur_ix_masked as (usize)).. ] + ); + let forest : &mut [u32] = xself.forest.slice_mut(); + let mut prev_ix + : usize + = (*xself).buckets_.slice()[key] as (usize); + let mut node_left : usize = LeftChildIndexH10!(xself,cur_ix); + let mut node_right : usize = RightChildIndexH10!(xself,cur_ix); + let mut best_len_left : usize = 0usize; + let mut best_len_right : usize = 0usize; + let mut depth_remaining : usize; + if should_reroot_tree != 0 { + (*xself).buckets_.slice_mut()[(key as (usize))]= cur_ix as (u32); + } + depth_remaining = 64usize; + 'break16: loop { + { + let backward : usize = cur_ix.wrapping_sub(prev_ix); + let prev_ix_masked : usize = prev_ix & ring_buffer_mask; + if backward == 0usize || backward > max_backward || depth_remaining == 0usize { + if should_reroot_tree != 0 { + forest[(node_left as (usize)) ]= (*xself).invalid_pos_; + forest[(node_right as (usize)) ]= (*xself).invalid_pos_; + } + break 'break16; + } + { + let cur_len + : usize + = core::cmp::min(best_len_left,best_len_right); + let len : usize; + len = cur_len.wrapping_add( + FindMatchLengthWithLimit( + &data[( + cur_ix_masked.wrapping_add(cur_len) as (usize) + )..], + &data[( + prev_ix_masked.wrapping_add(cur_len) as (usize) + )..], + max_length.wrapping_sub(cur_len) + ) + ); + if matches_offset != matches.len() && (len > *best_len) { + *best_len = len; + InitBackwardMatch( + &mut BackwardMatchMut(&mut matches[matches_offset]), + backward, + len + ); + matches_offset += 1; + } + if len >= max_comp_len { + if should_reroot_tree != 0 { + forest[(node_left as (usize)) ]= forest[( + LeftChildIndexH10!( + xself, + prev_ix + ) as (usize) + )]; + forest[(node_right as (usize)) ]= forest[( + RightChildIndexH10!( + xself, + prev_ix + ) as (usize) + )]; + } + break 'break16; + } + if data[( + cur_ix_masked.wrapping_add(len) as (usize) + ) ]as (i32) > data[( + prev_ix_masked.wrapping_add(len) as (usize) + ) ]as (i32) { + best_len_left = len; + if should_reroot_tree != 0 { + forest[(node_left as (usize)) ]= prev_ix as (u32); + } + node_left = RightChildIndexH10!(xself,prev_ix); + prev_ix = forest[(node_left as (usize)) ]as (usize); + } else { + best_len_right = len; + if should_reroot_tree != 0 { + forest[(node_right as (usize)) ]= prev_ix as (u32); + } + node_right = LeftChildIndexH10!(xself,prev_ix); + prev_ix = forest[(node_right as (usize)) ]as (usize); + } + } + } + depth_remaining = depth_remaining.wrapping_sub(1 as (usize)); + } + matches_offset +} + + diff --git a/rust/vendor/brotli/src/enc/backward_references/hq.rs b/rust/vendor/brotli/src/enc/backward_references/hq.rs new file mode 100755 index 0000000..2b5b132 --- /dev/null +++ b/rust/vendor/brotli/src/enc/backward_references/hq.rs @@ -0,0 +1,1956 @@ +#![allow(dead_code, unused_imports)] +use enc::command::{Command, ComputeDistanceCode, InitCommand, GetInsertLengthCode, GetCopyLengthCode, CombineLengthCodes, PrefixEncodeCopyDistance, CommandCopyLen, BrotliDistanceParams}; +use super::{BrotliEncoderParams, kHashMul32,kHashMul64, kHashMul64Long, BrotliHasherParams, kInvalidMatch, kDistanceCacheIndex, kDistanceCacheOffset, AnyHasher}; +use enc::dictionary_hash::kStaticDictionaryHash; +use enc::static_dict::{BROTLI_UNALIGNED_LOAD32, BROTLI_UNALIGNED_LOAD64, FindMatchLengthWithLimit}; +use enc::static_dict::{BrotliDictionary, kBrotliEncDictionary, BrotliFindAllStaticDictionaryMatches}; +use enc::literal_cost::BrotliEstimateBitCostsForLiterals; +use enc::constants::{kInsExtra, kCopyExtra}; +use ::alloc; +use alloc::{SliceWrapper, SliceWrapperMut, Allocator}; +use enc::util::{Log2FloorNonZero, brotli_max_size_t,FastLog2, FastLog2f64, floatX}; +use super::hash_to_binary_tree::{InitBackwardMatch, BackwardMatch, BackwardMatchMut, StoreAndFindMatchesH10, Allocable, H10Params, H10, ZopfliNode, Union1, kInfinity}; +use core; +use enc::encode; + +const BROTLI_WINDOW_GAP:usize = 16; +const BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN:usize = 37; + +/* +static kBrotliMinWindowBits: i32 = 10i32; + +static kBrotliMaxWindowBits: i32 = 24i32; + +static kInvalidMatch: u32 = 0xfffffffu32; + +static kCutoffTransformsCount: u32 = 10u32; + +static kCutoffTransforms: u64 = 0x71b520au64 << 32i32 | 0xda2d3200u32 as (u64); + +pub static kHashMul32: u32 = 0x1e35a7bdu32; + +pub static kHashMul64: u64 = 0x1e35a7bdu64 << 32i32 | 0x1e35a7bdu64; + +pub static kHashMul64Long: u64 = 0x1fe35a7bu32 as (u64) << 32i32 | 0xd3579bd3u32 as (u64); + +*/ +pub const BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE:usize = 544; +pub const BROTLI_NUM_LITERAL_SYMBOLS:usize = 256; +pub const BROTLI_NUM_COMMAND_SYMBOLS:usize = 704; + + +pub const BROTLI_SIMPLE_DISTANCE_ALPHABET_SIZE: usize = encode::BROTLI_NUM_DISTANCE_SHORT_CODES as usize + + (2 * encode::BROTLI_LARGE_MAX_DISTANCE_BITS as usize); + +#[inline(always)] +pub fn BrotliInitZopfliNodes( + array : &mut [ZopfliNode], length : usize +) { + let stub = ZopfliNode::default(); + let mut i : usize; + i = 0usize; + while i < length { + array[(i as (usize)) ]= stub; + i = i.wrapping_add(1 as (usize)); + } +} + + +#[inline(always)] +fn ZopfliNodeCopyLength( + xself : & ZopfliNode +) -> u32 { + (*xself).length & 0x1ffffffu32 +} + +#[inline(always)] +fn ZopfliNodeCopyDistance( + xself : & ZopfliNode +) -> u32 { + (*xself).distance +} + +#[inline(always)] +fn ZopfliNodeLengthCode( + xself : & ZopfliNode +) -> u32 { + let modifier : u32 = (*xself).length >> 25i32; + ZopfliNodeCopyLength(xself).wrapping_add(9u32).wrapping_sub( + modifier + ) +} + +#[inline(always)] +fn brotli_min_size_t( + a : usize, b : usize +) -> usize { + core::cmp::min(a, b) +} + +#[inline(always)] +fn ZopfliNodeDistanceCode( + xself : & ZopfliNode +) -> u32 { + let short_code : u32 = (*xself).dcode_insert_length >> 27i32; + if short_code == 0u32 { + ZopfliNodeCopyDistance(xself).wrapping_add( + 16u32 + ).wrapping_sub( + 1u32 + ) + } else { + short_code.wrapping_sub(1u32) + } +} + + +pub fn BrotliZopfliCreateCommands( + num_bytes : usize, + block_start : usize, + max_backward_limit : usize, + nodes : & [ZopfliNode], + dist_cache : &mut [i32], + last_insert_len : &mut usize, + params : &BrotliEncoderParams, + commands : &mut [Command], + num_literals : &mut usize) { + let mut pos : usize = 0usize; + let mut offset : u32 = match (nodes[(0usize)]).u { Union1::next(off) => off, _ => 0}; + let mut i : usize; + let gap : usize = 0usize; + i = 0usize; + while offset != !(0u32) { + { + let next + : &ZopfliNode + = &nodes[( + pos.wrapping_add(offset as (usize)) as (usize) + ) ]; + let copy_length + : usize + = ZopfliNodeCopyLength(next) as (usize); + let mut insert_length + : usize + = ((*next).dcode_insert_length & 0x7ffffff) as (usize); + pos = pos.wrapping_add(insert_length); + offset = match (*next).u { Union1::next(off) => off, _ => 0}; + if i == 0usize { + insert_length = insert_length.wrapping_add(*last_insert_len); + *last_insert_len = 0usize; + } + { + let distance : usize = ZopfliNodeCopyDistance(next) as (usize); + let len_code : usize = ZopfliNodeLengthCode(next) as (usize); + let max_distance + : usize + = brotli_min_size_t( + block_start.wrapping_add(pos), + max_backward_limit + ); + let is_dictionary + : i32 + = if !!(distance > max_distance.wrapping_add(gap)) { + 1i32 + } else { + 0i32 + }; + let dist_code + : usize + = ZopfliNodeDistanceCode(next) as (usize); + InitCommand( + &mut commands[(i as (usize)) ], + &(*params).dist , + insert_length, + copy_length, + len_code, + dist_code + ); + if is_dictionary == 0 && (dist_code > 0usize) { + dist_cache[(3usize) ]= dist_cache[( + 2usize + )]; + dist_cache[(2usize) ]= dist_cache[( + 1usize + )]; + dist_cache[(1usize) ]= dist_cache[( + 0usize + )]; + dist_cache[(0usize) ]= distance as (i32); + } + } + *num_literals = (*num_literals).wrapping_add(insert_length); + pos = pos.wrapping_add(copy_length); + } + i = i.wrapping_add(1 as (usize)); + } + *last_insert_len = (*last_insert_len).wrapping_add( + num_bytes.wrapping_sub(pos) + ); +} + + +#[inline(always)] +fn MaxZopfliLen( + params : &BrotliEncoderParams, +) -> usize { + (if (*params).quality <= 10i32 { + 150i32 + } else { + 325i32 + }) as (usize) +} + + + +pub struct ZopfliCostModel> { + pub cost_cmd_ : [floatX; BROTLI_NUM_COMMAND_SYMBOLS], + pub cost_dist_ : AllocF::AllocatedMemory, + pub distance_histogram_size : u32, + pub literal_costs_ : AllocF::AllocatedMemory, + pub min_cost_cmd_ : floatX, + pub num_bytes_ : usize, +} + + + +#[derive(Copy,Clone,Debug)] +pub struct PosData { + pub pos : usize, + pub distance_cache : [i32;4], + pub costdiff : floatX, + pub cost : floatX, +} + + +#[derive(Copy,Clone,Debug)] +pub struct StartPosQueue { + pub q_ : [PosData;8], + pub idx_ : usize, +} +impl Default for StartPosQueue { + #[inline(always)] + fn default() -> Self { + StartPosQueue { + q_: [PosData{pos:0,distance_cache:[0;4],costdiff:0.0, cost:0.0};8], + idx_: 0, + } + } +} + + + +#[inline(always)] +fn StoreLookaheadH10() -> usize { 128usize } + +fn InitZopfliCostModel> ( + m : &mut AllocF, + dist : & BrotliDistanceParams, + num_bytes : usize +) -> ZopfliCostModel { + ZopfliCostModel::{ + num_bytes_: num_bytes, + cost_cmd_: [0.0;704], + min_cost_cmd_: 0.0, + literal_costs_: if num_bytes.wrapping_add( + 2usize + ) > 0usize { + m.alloc_cell(num_bytes.wrapping_add(2usize)) + } else { + AllocF::AllocatedMemory::default() + }, + cost_dist_: if (*dist).alphabet_size > 0u32 { + m.alloc_cell(num_bytes.wrapping_add(dist.alphabet_size as usize)) + } else { + AllocF::AllocatedMemory::default() + }, + distance_histogram_size: core::cmp::min((*dist).alphabet_size, 544), + } +} +fn ZopfliCostModelSetFromLiteralCosts>( + xself : &mut ZopfliCostModel, + position : usize, + ringbuffer : & [u8], + ringbuffer_mask : usize +) { + let literal_costs = (*xself).literal_costs_.slice_mut(); + let mut literal_carry : floatX = 0.0; + let cost_dist = (*xself).cost_dist_.slice_mut(); + let cost_cmd = &mut (*xself).cost_cmd_[..]; + let num_bytes : usize = (*xself).num_bytes_; + let mut i : usize; + BrotliEstimateBitCostsForLiterals( + position, + num_bytes, + ringbuffer_mask, + ringbuffer, + &mut literal_costs[(1usize)..] + ); + literal_costs[(0usize) ]= 0.0 as (floatX); + i = 0usize; + while i < num_bytes { + { + literal_carry = literal_carry as floatX + literal_costs[( + i.wrapping_add(1usize) as (usize) + )] as floatX; + literal_costs[( + i.wrapping_add(1usize) as (usize) + ) ]= (literal_costs[(i as (usize)) ] as floatX + literal_carry) as floatX; + literal_carry = literal_carry - (literal_costs[( + i.wrapping_add(1usize) as (usize) + ) ] as floatX - literal_costs[(i as (usize))] as floatX); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < BROTLI_NUM_COMMAND_SYMBOLS { + { + cost_cmd[(i as (usize)) ]= FastLog2( + (11u64).wrapping_add( + i as (u64)) + ) as (floatX); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < (*xself).distance_histogram_size as (usize) { + { + cost_dist[(i as (usize)) ]= FastLog2( + (20u64).wrapping_add( + i as (u64)) + ) as (floatX); + } + i = i.wrapping_add(1 as (usize)); + } + (*xself).min_cost_cmd_ = FastLog2(11) as (floatX); +} + +#[inline(always)] +fn InitStartPosQueue() -> StartPosQueue { + StartPosQueue::default() +} + + + + +#[inline(always)] +fn HashBytesH10(data : & [u8]) -> u32 { + let h + : u32 + = BROTLI_UNALIGNED_LOAD32( + data + ).wrapping_mul( + kHashMul32 + ); + h >> 32i32 - 17i32 +} + +#[inline(always)] +fn InitDictionaryBackwardMatch( + xself : &mut BackwardMatchMut, + dist : usize, + len : usize, + len_code : usize +) { + (*xself).set_distance(dist as (u32)); + (*xself).set_length_and_code((len << 5i32 | if len == len_code { + 0usize + } else { + len_code + }) as (u32)); +} + +pub fn StitchToPreviousBlockH10, + Buckets: Allocable+SliceWrapperMut+SliceWrapper, + Params:H10Params>(handle: &mut H10, + num_bytes: usize, position: usize, ringbuffer: &[u8], + ringbuffer_mask: usize) where Buckets:PartialEq { + if (num_bytes >= handle.HashTypeLength() - 1 && + position >= Params::max_tree_comp_length() as usize) { + /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + let i_start = position - Params::max_tree_comp_length() as usize; + let i_end = core::cmp::min(position, i_start.wrapping_add(num_bytes)); + for i in i_start..i_end { + /* Maximum distance is window size - 16, see section 9.1. of the spec. + Furthermore, we have to make sure that we don't look further back + from the start of the next block than the window size, otherwise we + could access already overwritten areas of the ring-buffer. */ + let max_backward = + handle.window_mask_ - core::cmp::max( + BROTLI_WINDOW_GAP - 1, + position - i); + let mut _best_len = 0; + /* We know that i + MAX_TREE_COMP_LENGTH <= position + num_bytes, i.e. the + end of the current block and that we have at least + MAX_TREE_COMP_LENGTH tail in the ring-buffer. */ + StoreAndFindMatchesH10(handle, ringbuffer, i, ringbuffer_mask, + ::max_tree_comp_length() as usize, max_backward, &mut _best_len, &mut []); + } + } +} +fn FindAllMatchesH10, Buckets: Allocable+SliceWrapperMut+SliceWrapper, Params:H10Params>( + handle : &mut H10, + dictionary : Option<&BrotliDictionary>, + data : & [u8], + ring_buffer_mask : usize, + cur_ix : usize, + max_length : usize, + max_backward : usize, + gap : usize, + params : & BrotliEncoderParams, + matches : &mut [u64]) -> usize where Buckets:PartialEq { + let mut matches_offset = 0usize; + let cur_ix_masked : usize = cur_ix & ring_buffer_mask; + let mut best_len : usize = 1usize; + let short_match_max_backward + : usize + = (if (*params).quality != 11i32 { + 16i32 + } else { + 64i32 + }) as (usize); + let mut stop + : usize + = cur_ix.wrapping_sub(short_match_max_backward); + let mut dict_matches = [kInvalidMatch;BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1]; + let mut i : usize; + if cur_ix < short_match_max_backward { + stop = 0usize; + } + i = cur_ix.wrapping_sub(1usize); + 'break14: while i > stop && (best_len <= 2usize) { + 'continue15: loop { + { + let mut prev_ix : usize = i; + let backward : usize = cur_ix.wrapping_sub(prev_ix); + if backward > max_backward { + break 'break14; + } + prev_ix = prev_ix & ring_buffer_mask; + if data[(cur_ix_masked as (usize)) ]as (i32) != data[( + prev_ix as (usize) + ) ]as (i32) || data[( + cur_ix_masked.wrapping_add( + 1usize + ) as (usize) + ) ]as (i32) != data[( + prev_ix.wrapping_add( + 1usize + ) as (usize) + ) ]as (i32) { + break 'continue15; + } + { + let len + : usize + = FindMatchLengthWithLimit( + &data[(prev_ix as (usize))..], + &data[(cur_ix_masked as (usize))..], + max_length + ); + if len > best_len { + best_len = len; + InitBackwardMatch( + &mut BackwardMatchMut(&mut matches[matches_offset]), + backward, + len + ); + matches_offset += 1; + } + } + } + break; + } + i = i.wrapping_sub(1 as (usize)); + } + if best_len < max_length { + let loc_offset = StoreAndFindMatchesH10( + handle, + data, + cur_ix, + ring_buffer_mask, + max_length, + max_backward, + &mut best_len , + matches.split_at_mut(matches_offset).1 + ); + matches_offset += loc_offset; + } + i = 0usize; + while i <= 37usize { + { + dict_matches[(i as (usize)) ]= kInvalidMatch; + } + i = i.wrapping_add(1 as (usize)); + } + { + let minlen + : usize + = brotli_max_size_t( + 4usize, + best_len.wrapping_add(1usize) + ); + if dictionary.is_some() && BrotliFindAllStaticDictionaryMatches( + dictionary.unwrap(), + &data[(cur_ix_masked as (usize))..], + minlen, + max_length, + &mut dict_matches[..], + ) != 0 { + assert_eq!(params.use_dictionary, true); + let maxlen + : usize + = brotli_min_size_t(37usize,max_length); + let mut l : usize; + l = minlen; + while l <= maxlen { + { + let dict_id : u32 = dict_matches[(l as (usize))]; + if dict_id < kInvalidMatch { + let distance + : usize + = max_backward.wrapping_add(gap).wrapping_add( + (dict_id >> 5i32) as (usize) + ).wrapping_add( + 1usize + ); + if distance <= (*params).dist.max_distance { + InitDictionaryBackwardMatch( + &mut BackwardMatchMut(&mut matches[matches_offset]), + distance, + l, + (dict_id & 31u32) as (usize) + ); + matches_offset += 1; + } + } + } + l = l.wrapping_add(1 as (usize)); + } + } + } + matches_offset +} + +#[inline(always)] +fn BackwardMatchLength( + xself : & BackwardMatch +) -> usize { + ((*xself).length_and_code() >> 5i32) as (usize) +} + +#[inline(always)] +fn MaxZopfliCandidates( + params : & BrotliEncoderParams) -> usize { + (if (*params).quality <= 10i32 { 1i32 } else { 5i32 }) as (usize) +} + +#[inline(always)] +fn ComputeDistanceShortcut( + block_start : usize, + pos : usize, + max_backward : usize, + gap : usize, + nodes : & [ZopfliNode +]) -> u32 { + let clen + : usize + = ZopfliNodeCopyLength( + &nodes[(pos as (usize)) ] + ) as (usize); + let ilen + : usize + = ((nodes[( + pos as (usize) + )]).dcode_insert_length) as (usize) & 0x7ffffff; + let dist + : usize + = ZopfliNodeCopyDistance( + &nodes[(pos as (usize)) ] + ) as (usize); + if pos == 0usize { + 0u32 + } else if dist.wrapping_add(clen) <= block_start.wrapping_add( + pos + ).wrapping_add( + gap + ) && (dist <= max_backward.wrapping_add( + gap + )) && (ZopfliNodeDistanceCode( + &nodes[( + pos as (usize) + ) ] + ) > 0u32) { + pos as (u32) + } else { + match (nodes[( + pos.wrapping_sub(clen).wrapping_sub(ilen) as (usize) + )]).u { Union1::shortcut(shrt) => shrt, _ => 0 } + } +} + +#[inline(always)] +fn ZopfliCostModelGetLiteralCosts>( + xself : & ZopfliCostModel, from : usize, to : usize +) -> floatX { + (*xself).literal_costs_.slice()[( + to as (usize) + )]- (*xself).literal_costs_.slice()[(from as (usize))]} +fn ComputeDistanceCache( + pos : usize, + mut starting_dist_cache : & [i32], + nodes : & [ZopfliNode], + dist_cache : &mut [i32 +]) { + let mut idx : i32 = 0i32; + let mut p + : usize + = match (nodes[(pos as (usize))]).u{Union1::shortcut(shrt) => shrt, _ => 0} as (usize); + while idx < 4i32 && (p > 0usize) { + let ilen + : usize + = ((nodes[( + p as (usize) + )]).dcode_insert_length) as (usize) & 0x7ffffff; + let clen + : usize + = ZopfliNodeCopyLength( + &nodes[(p as (usize)) ] + ) as (usize); + let dist + : usize + = ZopfliNodeCopyDistance( + &nodes[(p as (usize)) ] + ) as (usize); + dist_cache[( + { + let _old = idx; + idx = idx + 1; + _old + } as (usize) + ) ]= dist as (i32); + p = match (nodes[( + p.wrapping_sub(clen).wrapping_sub(ilen) as (usize) + )]).u { Union1::shortcut(shrt) => shrt, _ => 0} as (usize); + } + while idx < 4i32 { + { + dist_cache[(idx as (usize)) ]= { + let (_old, _upper) = starting_dist_cache.split_at(1); + starting_dist_cache = _upper; + _old[0] + }; + } + idx = idx + 1; + } +} + +#[inline(always)] +fn StartPosQueueSize( + xself : & StartPosQueue +) -> usize { + brotli_min_size_t((*xself).idx_,8usize) +} + + +fn StartPosQueuePush( + xself : &mut StartPosQueue, posdata : &PosData) { + let mut offset + : usize + = !{ + let _old = (*xself).idx_; + (*xself).idx_ = (*xself).idx_.wrapping_add(1 as (usize)); + _old + } & 7usize; + let len + : usize + = StartPosQueueSize(xself ); + let mut i : usize; + let q : &mut [PosData;8] = &mut (*xself).q_; + q[(offset as (usize)) ]= *posdata; + i = 1usize; + while i < len { + { + if (q[( + (offset & 7usize) as (usize) + )]).costdiff > (q[( + (offset.wrapping_add( + 1usize + ) & 7usize) as (usize) + )]).costdiff { + let mut __brotli_swap_tmp + : PosData + = q[((offset & 7usize) as (usize))]; + q[((offset & 7usize) as (usize)) ]= q[( + (offset.wrapping_add( + 1usize + ) & 7usize) as (usize) + )]; + q[( + (offset.wrapping_add(1usize) & 7usize) as (usize) + ) ]= __brotli_swap_tmp; + } + offset = offset.wrapping_add(1 as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } +} + +fn EvaluateNode>( + block_start : usize, + pos : usize, + max_backward_limit : usize, + gap : usize, + starting_dist_cache : & [i32], + model : &ZopfliCostModel, + queue : &mut StartPosQueue, + nodes : &mut [ZopfliNode]) { + let node_cost : floatX = match (nodes[(pos as (usize))]).u {Union1::cost(cst) => cst, _ => 0.0}; + (nodes[( + pos as (usize) + )]).u = Union1::shortcut(ComputeDistanceShortcut( + block_start, + pos, + max_backward_limit, + gap, + nodes + )); + if node_cost <= ZopfliCostModelGetLiteralCosts( + model, + 0usize, + pos + ) { + let mut posdata = PosData { + pos:pos, + cost:node_cost, + costdiff:node_cost - ZopfliCostModelGetLiteralCosts( + model, + 0usize, + pos + ), + distance_cache:[0;4], + }; + ComputeDistanceCache( + pos, + starting_dist_cache, + nodes , + &mut posdata.distance_cache[..] + ); + StartPosQueuePush( + queue, + &mut posdata + ); + } +} + +#[inline(always)] +fn StartPosQueueAt( + xself : & StartPosQueue, k : usize +) -> &PosData { + &(*xself).q_[( + (k.wrapping_sub((*xself).idx_) & 7usize) as (usize) + )] +} + +#[inline(always)] +fn ZopfliCostModelGetMinCostCmd>( + xself : & ZopfliCostModel +) -> floatX { + (*xself).min_cost_cmd_ +} + +#[inline(always)] +fn ComputeMinimumCopyLength( + start_cost : floatX, + nodes : & [ZopfliNode], + num_bytes : usize, + pos : usize +) -> usize { + let mut min_cost : floatX = start_cost; + let mut len : usize = 2usize; + let mut next_len_bucket : usize = 4usize; + let mut next_len_offset : usize = 10usize; + while pos.wrapping_add(len) <= num_bytes && (match (nodes[( + pos.wrapping_add(len) as (usize) + )]).u{Union1::cost(cst) => cst, _ => 0.0} <= min_cost) { + len = len.wrapping_add(1 as (usize)); + if len == next_len_offset { + min_cost = min_cost + 1.0 as floatX; + next_len_offset = next_len_offset.wrapping_add(next_len_bucket); + next_len_bucket = next_len_bucket.wrapping_mul(2usize); + } + } + len +} +#[inline(always)] +fn GetInsertExtra(inscode : u16) -> u32 { + kInsExtra[(inscode as (usize))] +} + +#[inline(always)] +fn ZopfliCostModelGetDistanceCost>( + xself : & ZopfliCostModel, distcode : usize +) -> floatX { + (*xself).cost_dist_.slice()[(distcode as (usize))] +} + +#[inline(always)] +fn GetCopyExtra(copycode : u16) -> u32 { + kCopyExtra[(copycode as (usize))] +} + +#[inline(always)] +fn ZopfliCostModelGetCommandCost>( + xself : & ZopfliCostModel, cmdcode : u16 +) -> floatX { + (*xself).cost_cmd_[(cmdcode as (usize))] +} + +#[inline(always)] +fn UpdateZopfliNode( + nodes : &mut [ZopfliNode], + pos : usize, + start_pos : usize, + len : usize, + len_code : usize, + dist : usize, + short_code : usize, + cost : floatX +) { + let next + = &mut nodes[( + pos.wrapping_add(len) as (usize) + ) ]; + (*next).length = (len | len.wrapping_add( + 9u32 as (usize) + ).wrapping_sub( + len_code + ) << 25i32) as (u32); + (*next).distance = dist as (u32); + (*next).dcode_insert_length = pos.wrapping_sub(start_pos) as (u32) | (short_code << 27) as u32; + (*next).u = Union1::cost(cost); +} + +#[inline(always)] +fn BackwardMatchLengthCode( + xself : & BackwardMatch +) -> usize { + let code + : usize + = ((*xself).length_and_code() & 31u32) as (usize); + if code != 0 { code } else { BackwardMatchLength(xself) } +} + +fn UpdateNodes>( + num_bytes : usize, + block_start : usize, + pos : usize, + ringbuffer : & [u8], + ringbuffer_mask : usize, + params : & BrotliEncoderParams, + max_backward_limit : usize, + starting_dist_cache : & [i32], + num_matches : usize, + matches : & [u64], + model : & ZopfliCostModel, + queue : &mut StartPosQueue, + nodes : &mut [ZopfliNode +]) -> usize { + let cur_ix : usize = block_start.wrapping_add(pos); + let cur_ix_masked : usize = cur_ix & ringbuffer_mask; + let max_distance + : usize + = brotli_min_size_t(cur_ix,max_backward_limit); + let max_len : usize = num_bytes.wrapping_sub(pos); + let max_zopfli_len : usize = MaxZopfliLen(params); + let max_iters : usize = MaxZopfliCandidates(params); + let min_len : usize; + let mut result : usize = 0usize; + let mut k : usize; + let gap : usize = 0usize; + EvaluateNode( + block_start, + pos, + max_backward_limit, + gap, + starting_dist_cache, + model, + queue, + nodes + ); + { + let posdata + = StartPosQueueAt(queue ,0usize); + let min_cost + : floatX + = (*posdata).cost + ZopfliCostModelGetMinCostCmd( + model + ) + ZopfliCostModelGetLiteralCosts(model,(*posdata).pos,pos); + min_len = ComputeMinimumCopyLength( + min_cost, + nodes , + num_bytes, + pos + ); + } + k = 0usize; + while k < max_iters && (k < StartPosQueueSize( + queue + )) { + 'continue28: loop { + { + let posdata + = StartPosQueueAt(queue ,k); + let start : usize = (*posdata).pos; + let inscode : u16 = GetInsertLengthCode(pos.wrapping_sub(start)); + let start_costdiff : floatX = (*posdata).costdiff; + let base_cost + : floatX + = start_costdiff + GetInsertExtra( + inscode + ) as (floatX) + ZopfliCostModelGetLiteralCosts( + model, + 0usize, + pos + ); + let mut best_len : usize = min_len.wrapping_sub(1usize); + let mut j : usize = 0usize; + 'break29: while j < 16usize && (best_len < max_len) { + 'continue30: loop { + { + let idx + : usize + = kDistanceCacheIndex[(j as (usize)) ]as (usize); + let distance_cache_len_minus_1 = 3; + debug_assert_eq!(distance_cache_len_minus_1 + 1, posdata.distance_cache.len()); + let backward + : usize + = ((*posdata).distance_cache[( + idx as (usize) & distance_cache_len_minus_1 + )]+ i32::from(kDistanceCacheOffset[(j as (usize)) ]))as (usize); + let mut prev_ix : usize = cur_ix.wrapping_sub(backward); + let len : usize; + let continuation + : u8 + = ringbuffer[( + cur_ix_masked.wrapping_add(best_len) as (usize) + )]; + if cur_ix_masked.wrapping_add(best_len) > ringbuffer_mask { + break 'break29; + } + if backward > max_distance.wrapping_add(gap) { + break 'continue30; + } + if backward <= max_distance { + if prev_ix >= cur_ix { + break 'continue30; + } + prev_ix = prev_ix & ringbuffer_mask; + if prev_ix.wrapping_add( + best_len + ) > ringbuffer_mask || continuation as (i32) != ringbuffer[( + prev_ix.wrapping_add( + best_len + ) as (usize) + ) ]as (i32) { + break 'continue30; + } + len = FindMatchLengthWithLimit( + &ringbuffer[(prev_ix as (usize))..], + &ringbuffer[( + cur_ix_masked as (usize) + ).. ], + max_len + ); + } else { + break 'continue30; + } + { + let dist_cost + : floatX + = base_cost + ZopfliCostModelGetDistanceCost(model,j); + let mut l : usize; + l = best_len.wrapping_add(1usize); + while l <= len { + { + let copycode : u16 = GetCopyLengthCode(l); + let cmdcode + : u16 + = CombineLengthCodes( + inscode, + copycode, + (j == 0usize) as (i32) + ); + let cost + : floatX + = (if cmdcode as (i32) < 128i32 { + base_cost + } else { + dist_cost + }) + GetCopyExtra( + copycode + ) as (floatX) + ZopfliCostModelGetCommandCost( + model, + cmdcode + ); + if cost < match (nodes[( + pos.wrapping_add(l) as (usize) + )]).u { Union1::cost(cost) => cost, _ => 0.0} { + UpdateZopfliNode( + nodes, + pos, + start, + l, + l, + backward, + j.wrapping_add(1usize), + cost + ); + result = brotli_max_size_t(result,l); + } + best_len = l; + } + l = l.wrapping_add(1 as (usize)); + } + } + } + break; + } + j = j.wrapping_add(1 as (usize)); + } + if k >= 2usize { + break 'continue28; + } + { + let mut len : usize = min_len; + j = 0usize; + while j < num_matches { + { + let mut match_ : BackwardMatch = BackwardMatch(matches[(j as (usize))]); + let dist : usize = match_.distance() as (usize); + let is_dictionary_match + : i32 + = if !!(dist > max_distance.wrapping_add(gap)) { + 1i32 + } else { + 0i32 + }; + let dist_code + : usize + = dist.wrapping_add(16usize).wrapping_sub( + 1usize + ); + let mut dist_symbol : u16 = 0; + let mut distextra : u32 = 0; + let distnumextra : u32; + let dist_cost : floatX; + let max_match_len : usize; + PrefixEncodeCopyDistance( + dist_code, + (*params).dist.num_direct_distance_codes as (usize), + u64::from((*params).dist.distance_postfix_bits), + &mut dist_symbol , + &mut distextra + ); + distnumextra = u32::from(dist_symbol) >> 10; + dist_cost = base_cost + distnumextra as (floatX) + ZopfliCostModelGetDistanceCost( + model, + (dist_symbol as (i32) & 0x3ff) as (usize) + ); + max_match_len = BackwardMatchLength( + &mut match_ + ); + if len < max_match_len && (is_dictionary_match != 0 || max_match_len > max_zopfli_len) { + len = max_match_len; + } + while len <= max_match_len { + { + let len_code + : usize + = if is_dictionary_match != 0 { + BackwardMatchLengthCode( + &mut match_ + ) + } else { + len + }; + let copycode : u16 = GetCopyLengthCode(len_code); + let cmdcode : u16 = CombineLengthCodes(inscode,copycode,0i32); + let cost + : floatX + = dist_cost + GetCopyExtra( + copycode + ) as (floatX) + ZopfliCostModelGetCommandCost( + model, + cmdcode + ); + if let Union1::cost(nodeCost) = (nodes[( + pos.wrapping_add(len) as (usize))]).u { + if cost < nodeCost { + UpdateZopfliNode( + nodes, + pos, + start, + len, + len_code, + dist, + 0usize, + cost + ); + result = brotli_max_size_t(result,len); + } + } + } + len = len.wrapping_add(1 as (usize)); + } + } + j = j.wrapping_add(1 as (usize)); + } + } + } + break; + } + k = k.wrapping_add(1 as (usize)); + } + result +} + +#[inline(always)] +fn CleanupZopfliCostModel> ( + m : &mut AllocF, xself : &mut ZopfliCostModel +) { + { + m.free_cell(core::mem::replace(&mut xself.literal_costs_, + AllocF::AllocatedMemory::default())); + } + { + m.free_cell(core::mem::replace(&mut xself.cost_dist_, + AllocF::AllocatedMemory::default())); + } +} + +#[inline(always)] +fn ZopfliNodeCommandLength( + xself : & ZopfliNode +) -> u32 { + ZopfliNodeCopyLength(xself).wrapping_add( + (*xself).dcode_insert_length & 0x7ffffff + ) +} + +#[inline(always)] +fn ComputeShortestPathFromNodes( + num_bytes : usize, nodes : &mut [ZopfliNode]) -> usize { + let mut index : usize = num_bytes; + let mut num_commands : usize = 0usize; + while ((nodes[( + index as (usize) + )]).dcode_insert_length & 0x7ffffff) == 0 && ((nodes[( + index as (usize) + )]).length == 1u32) { + index = index.wrapping_sub(1 as (usize)); + } + nodes[(index as (usize))].u = Union1::next(!(0u32)); + while index != 0usize { + let len + : usize + = ZopfliNodeCommandLength( + &mut nodes[( + index as (usize) + ) ] + ) as (usize); + index = index.wrapping_sub(len); + (nodes[(index as (usize))]).u = Union1::next(len as (u32)); + num_commands = num_commands.wrapping_add(1 as (usize)); + } + num_commands +} + +const MAX_NUM_MATCHES_H10:usize = 128; +pub fn BrotliZopfliComputeShortestPath, + Buckets: Allocable+SliceWrapperMut+SliceWrapper, + Params:H10Params, + AllocF:Allocator>( + m : &mut AllocF, + dictionary: Option<&BrotliDictionary>, + num_bytes : usize, + position : usize, + ringbuffer : & [u8], + ringbuffer_mask : usize, + params : &BrotliEncoderParams, + max_backward_limit : usize, + dist_cache : & [i32], + handle : &mut H10, + nodes : &mut [ZopfliNode +]) -> usize where Buckets:PartialEq { + let max_zopfli_len : usize = MaxZopfliLen(params); + let mut model : ZopfliCostModel; + let mut queue : StartPosQueue; + let mut matches = [0;MAX_NUM_MATCHES_H10]; + let store_end + : usize + = if num_bytes >= StoreLookaheadH10() { + position.wrapping_add(num_bytes).wrapping_sub( + StoreLookaheadH10() + ).wrapping_add( + 1usize + ) + } else { + position + }; + let mut i : usize; + let gap : usize = 0usize; + let lz_matches_offset : usize = 0usize; + (nodes[(0usize)]).length = 0u32; + (nodes[(0usize)]).u = Union1::cost(0.0); + model = InitZopfliCostModel( + m, + &(*params).dist , + num_bytes + ); + if !(0i32 == 0) { + return 0usize; + } + ZopfliCostModelSetFromLiteralCosts( + &mut model , + position, + ringbuffer, + ringbuffer_mask + ); + queue = InitStartPosQueue(); + i = 0usize; + while i.wrapping_add(handle.HashTypeLength()).wrapping_sub( + 1usize + ) < num_bytes { + { + let pos : usize = position.wrapping_add(i); + let max_distance + : usize + = brotli_min_size_t(pos,max_backward_limit); + let mut skip : usize; + let mut num_matches + : usize + = FindAllMatchesH10( + handle, + dictionary, + ringbuffer, + ringbuffer_mask, + pos, + num_bytes.wrapping_sub(i), + max_distance, + gap, + params, + &mut matches[( + lz_matches_offset as (usize) + ).. ] + ); + if num_matches > 0usize && (BackwardMatchLength( + &BackwardMatch(matches[( + num_matches.wrapping_sub( + 1usize + ) as (usize) + ) ]) + ) > max_zopfli_len) { + matches[(0usize) ]= matches[( + num_matches.wrapping_sub( + 1usize + ) as (usize) + )]; + num_matches = 1usize; + } + skip = UpdateNodes( + num_bytes, + position, + i, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + dist_cache, + num_matches, + &matches[..], + &mut model , + &mut queue , + nodes + ); + if skip < 16384usize { + skip = 0usize; + } + if num_matches == 1usize && (BackwardMatchLength( + &BackwardMatch(matches[( + 0usize + ) ]) + ) > max_zopfli_len) { + skip = brotli_max_size_t( + BackwardMatchLength( + &BackwardMatch(matches[( + 0usize + ) ]) + ), + skip + ); + } + if skip > 1usize { + handle.StoreRange( + ringbuffer, + ringbuffer_mask, + pos.wrapping_add(1usize), + brotli_min_size_t(pos.wrapping_add(skip),store_end) + ); + skip = skip.wrapping_sub(1 as (usize)); + while skip != 0 { + i = i.wrapping_add(1 as (usize)); + if i.wrapping_add(handle.HashTypeLength()).wrapping_sub( + 1usize + ) >= num_bytes { + break; + } + EvaluateNode( + position, + i, + max_backward_limit, + gap, + dist_cache, + &mut model , + &mut queue , + nodes + ); + skip = skip.wrapping_sub(1 as (usize)); + } + } + } + i = i.wrapping_add(1 as (usize)); + } + + + CleanupZopfliCostModel(m,&mut model ); + + ComputeShortestPathFromNodes(num_bytes,nodes) +} + + +pub fn BrotliCreateZopfliBackwardReferences + Allocator + Allocator, + Buckets: Allocable+SliceWrapperMut+SliceWrapper, + Params:H10Params>( + alloc : &mut Alloc, + dictionary: Option<&BrotliDictionary>, + num_bytes : usize, + position : usize, + ringbuffer : & [u8], + ringbuffer_mask : usize, + params : &BrotliEncoderParams, + hasher : &mut H10, + dist_cache : &mut [i32], + last_insert_len : &mut usize, + commands : &mut [Command], + num_commands : &mut usize, + num_literals : &mut usize) where Buckets:PartialEq { + let max_backward_limit + : usize + = (1usize << (*params).lgwin).wrapping_sub( + 16usize + ); + let mut nodes : >::AllocatedMemory; + nodes = if num_bytes.wrapping_add( + 1usize + ) > 0usize { + >::alloc_cell(alloc, num_bytes.wrapping_add(1)) + } else { + >::AllocatedMemory::default() + }; + if !(0i32 == 0) { + return; + } + BrotliInitZopfliNodes( + nodes.slice_mut(), + num_bytes.wrapping_add(1usize) + ); + *num_commands = (*num_commands).wrapping_add( + BrotliZopfliComputeShortestPath( + alloc, + dictionary, + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + dist_cache , + hasher, + nodes.slice_mut() + ) + ); + if !(0i32 == 0) { + return; + } + BrotliZopfliCreateCommands( + num_bytes, + position, + max_backward_limit, + nodes.slice(), + dist_cache, + last_insert_len, + params, + commands, + num_literals + ); + { + >::free_cell(alloc, core::mem::replace(&mut nodes, >::AllocatedMemory::default())); + } +} + +fn SetCost( + histogram : & [u32], + histogram_size : usize, + literal_histogram : i32, + cost : &mut [floatX]) { + let mut sum : u64 = 0; + let mut missing_symbol_sum : u64; + let log2sum : floatX; + let missing_symbol_cost : floatX; + let mut i : usize; + i = 0usize; + while i < histogram_size { + { + sum = sum.wrapping_add(u64::from(histogram[(i as (usize)) ])); + } + i = i.wrapping_add(1 as (usize)); + } + log2sum = FastLog2(sum) as (floatX); + missing_symbol_sum = sum; + if literal_histogram == 0 { + i = 0usize; + while i < histogram_size { + { + if histogram[(i as (usize)) ]== 0u32 { + missing_symbol_sum = missing_symbol_sum.wrapping_add(1); + } + } + i = i.wrapping_add(1 as (usize)); + } + } + missing_symbol_cost = FastLog2f64( + missing_symbol_sum + ) as (floatX) + 2i32 as (floatX); + i = 0usize; + while i < histogram_size { + 'continue56: loop { + { + if histogram[(i as (usize)) ]== 0u32 { + cost[(i as (usize)) ]= missing_symbol_cost; + break 'continue56; + } + cost[(i as (usize)) ]= log2sum - FastLog2( + u64::from(histogram[( + i as (usize) + ) ]) + ) as (floatX); + if cost[(i as (usize)) ]< 1i32 as (floatX) { + cost[(i as (usize)) ]= 1i32 as (floatX); + } + } + break; + } + i = i.wrapping_add(1 as (usize)); + } +} + +#[inline(always)] +fn brotli_min_float( + a : floatX, b : floatX +) -> floatX { + if a < b { a } else { b } +} + +fn ZopfliCostModelSetFromCommands>( + xself : &mut ZopfliCostModel, + position : usize, + ringbuffer : & [u8], + ringbuffer_mask : usize, + commands : & [Command], + num_commands : usize, + last_insert_len : usize +) { + let mut histogram_literal = [0u32; BROTLI_NUM_LITERAL_SYMBOLS]; + let mut histogram_cmd = [0u32; BROTLI_NUM_COMMAND_SYMBOLS]; + let mut histogram_dist = [0u32; BROTLI_SIMPLE_DISTANCE_ALPHABET_SIZE]; + let mut cost_literal = [0.0 as floatX; BROTLI_NUM_LITERAL_SYMBOLS]; + let mut pos : usize = position.wrapping_sub(last_insert_len); + let mut min_cost_cmd : floatX = kInfinity; + let mut i : usize; + let cost_cmd :&mut [floatX] = &mut (*xself).cost_cmd_[..]; + i = 0usize; + while i < num_commands { + { + let inslength + : usize + = (commands[(i as (usize))]).insert_len_ as (usize); + let copylength + : usize + = CommandCopyLen( + &commands[(i as (usize)) ] + ) as (usize); + let distcode + : usize + = ((commands[( + i as (usize) + )]).dist_prefix_ as (i32) & 0x3ff) as (usize); + let cmdcode + : usize + = (commands[(i as (usize))]).cmd_prefix_ as (usize); + let mut j : usize; + { + let _rhs = 1; + let _lhs = &mut histogram_cmd[(cmdcode as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + if cmdcode >= 128usize { + let _rhs = 1; + let _lhs = &mut histogram_dist[(distcode as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + j = 0usize; + while j < inslength { + { + let _rhs = 1; + let _lhs + = &mut histogram_literal[( + ringbuffer[( + (pos.wrapping_add(j) & ringbuffer_mask) as (usize) + ) ]as (usize) + )]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + j = j.wrapping_add(1 as (usize)); + } + pos = pos.wrapping_add(inslength.wrapping_add(copylength)); + } + i = i.wrapping_add(1 as (usize)); + } + SetCost( + &histogram_literal[..], + BROTLI_NUM_LITERAL_SYMBOLS, + 1i32, + &mut cost_literal + ); + SetCost( + &histogram_cmd[..], + BROTLI_NUM_COMMAND_SYMBOLS, + 0i32, + &mut cost_cmd[..] + ); + SetCost( + &histogram_dist[..], + (*xself).distance_histogram_size as (usize), + 0i32, + (*xself).cost_dist_.slice_mut() + ); + i = 0usize; + while i < 704usize { + { + min_cost_cmd = brotli_min_float( + min_cost_cmd, + cost_cmd[(i as (usize))]); + } + i = i.wrapping_add(1 as (usize)); + } + (*xself).min_cost_cmd_ = min_cost_cmd; + { + let literal_costs : &mut [floatX] = (*xself).literal_costs_.slice_mut(); + let mut literal_carry : floatX = 0.0; + let num_bytes : usize = (*xself).num_bytes_; + literal_costs[(0usize) ]= 0.0 as (floatX); + i = 0usize; + while i < num_bytes { + { + literal_carry = literal_carry + cost_literal[( + ringbuffer[( + (position.wrapping_add( + i + ) & ringbuffer_mask) as (usize) + ) ]as (usize) + )] as floatX; + literal_costs[( + i.wrapping_add(1usize) as (usize) + ) ]= (literal_costs[(i as (usize)) ] as floatX + literal_carry) as floatX; + literal_carry = literal_carry - (literal_costs[( + i.wrapping_add(1usize) as (usize) + ) ] as floatX - literal_costs[(i as (usize))] as floatX); + } + i = i.wrapping_add(1 as (usize)); + } + } +} + +fn ZopfliIterate>( + num_bytes : usize, + position : usize, + ringbuffer : & [u8], + ringbuffer_mask : usize, + params : & BrotliEncoderParams, + max_backward_limit : usize, + gap : usize, + dist_cache : & [i32], + model : &ZopfliCostModel, + num_matches : & [u32], + matches : &[u64], + nodes : &mut [ZopfliNode] +) -> usize { + let max_zopfli_len : usize = MaxZopfliLen(params); + let mut queue : StartPosQueue; + let mut cur_match_pos : usize = 0usize; + let mut i : usize; + (nodes[(0usize)]).length = 0u32; + (nodes[(0usize)]).u = Union1::cost(0.0); + queue = InitStartPosQueue(); + i = 0usize; + while i.wrapping_add(3usize) < num_bytes { + { + let mut skip + : usize + = UpdateNodes( + num_bytes, + position, + i, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + dist_cache, + num_matches[(i as (usize)) ]as (usize), + &matches[( + cur_match_pos as (usize) + )..], + model, + &mut queue , + nodes + ); + if skip < 16384usize { + skip = 0usize; + } + cur_match_pos = cur_match_pos.wrapping_add( + num_matches[(i as (usize)) ]as (usize) + ); + if num_matches[( + i as (usize) + ) ]== 1u32 && (BackwardMatchLength( + &BackwardMatch(matches[( + cur_match_pos.wrapping_sub( + 1usize + ) as (usize) + )]) + ) > max_zopfli_len) { + skip = brotli_max_size_t( + BackwardMatchLength( + &BackwardMatch(matches[( + cur_match_pos.wrapping_sub(1usize) as (usize) + )]) + ), + skip + ); + } + if skip > 1usize { + skip = skip.wrapping_sub(1 as (usize)); + while skip != 0 { + i = i.wrapping_add(1 as (usize)); + if i.wrapping_add(3usize) >= num_bytes { + break; + } + EvaluateNode( + position, + i, + max_backward_limit, + gap, + dist_cache, + model, + &mut queue , + nodes + ); + cur_match_pos = cur_match_pos.wrapping_add( + num_matches[(i as (usize)) ]as (usize) + ); + skip = skip.wrapping_sub(1 as (usize)); + } + } + } + i = i.wrapping_add(1 as (usize)); + } + ComputeShortestPathFromNodes(num_bytes,nodes) +} + + +pub fn BrotliCreateHqZopfliBackwardReferences + Allocator + Allocator + Allocator, + Buckets:Allocable+SliceWrapperMut+SliceWrapper, + Params: H10Params>( + alloc : &mut Alloc, + dictionary: Option<&BrotliDictionary>, + num_bytes : usize, + position : usize, + ringbuffer : & [u8], + ringbuffer_mask : usize, + params : &BrotliEncoderParams, + hasher : &mut H10, + dist_cache : &mut [i32], + last_insert_len : &mut usize, + commands : &mut [Command], + num_commands : &mut usize, + num_literals : &mut usize, +) where Buckets:PartialEq { + let max_backward_limit + : usize + = (1usize << (*params).lgwin).wrapping_sub( + 16usize + ); + let mut num_matches + : >::AllocatedMemory + = if num_bytes > 0usize { + >::alloc_cell(alloc, num_bytes) + } else { + >::AllocatedMemory::default() + }; + let mut matches_size + : usize + = (4usize).wrapping_mul(num_bytes); + let store_end + : usize + = if num_bytes >= StoreLookaheadH10() { + position.wrapping_add(num_bytes).wrapping_sub( + StoreLookaheadH10() + ).wrapping_add( + 1usize + ) + } else { + position + }; + let mut cur_match_pos : usize = 0usize; + let mut i : usize; + let orig_num_literals : usize; + let orig_last_insert_len : usize; + let mut orig_dist_cache = [0i32;4]; + let orig_num_commands : usize; + let mut model : ZopfliCostModel; + let mut nodes : >::AllocatedMemory; + let mut matches + : >::AllocatedMemory + = if matches_size > 0usize { + >::alloc_cell(alloc, matches_size) + } else { + >::AllocatedMemory::default() + }; + let gap : usize = 0usize; + let shadow_matches : usize = 0usize; + i = 0usize; + while i.wrapping_add(hasher.HashTypeLength()).wrapping_sub( + 1usize + ) < num_bytes { + { + let pos : usize = position.wrapping_add(i); + let max_distance + : usize + = brotli_min_size_t(pos,max_backward_limit); + let max_length : usize = num_bytes.wrapping_sub(i); + let num_found_matches : usize; + let cur_match_end : usize; + let mut j : usize; + { + if matches_size < cur_match_pos.wrapping_add( + 128usize + ).wrapping_add( + shadow_matches + ) { + let mut new_size + : usize + = if matches_size == 0usize { + cur_match_pos.wrapping_add(128usize).wrapping_add( + shadow_matches + ) + } else { + matches_size + }; + let mut new_array : >::AllocatedMemory; + while new_size < cur_match_pos.wrapping_add( + 128usize + ).wrapping_add( + shadow_matches + ) { + new_size = new_size.wrapping_mul(2usize); + } + new_array = if new_size > 0usize { + >::alloc_cell(alloc, new_size) + } else { + >::AllocatedMemory::default() + }; + if !!(0i32 == 0) && (matches_size != 0usize) { + for (dst, src) in new_array.slice_mut().split_at_mut(matches_size).0.iter_mut().zip( + matches.slice().split_at(matches_size).0.iter()) { + *dst = *src; + } + } + { + >::free_cell(alloc, + core::mem::replace(&mut matches, + >::AllocatedMemory::default())); + } + matches = new_array; + matches_size = new_size; + } + } + if !(0i32 == 0) { + return; + } + num_found_matches = FindAllMatchesH10( + hasher, + dictionary,//&(*params).dictionary , + ringbuffer, + ringbuffer_mask, + pos, + max_length, + max_distance, + gap, + params, + &mut matches.slice_mut()[( + cur_match_pos.wrapping_add(shadow_matches) as (usize) + )..] + ); + cur_match_end = cur_match_pos.wrapping_add(num_found_matches); + j = cur_match_pos; + while j.wrapping_add(1usize) < cur_match_end { + { } + j = j.wrapping_add(1 as (usize)); + } + num_matches.slice_mut()[(i as (usize)) ]= num_found_matches as (u32); + if num_found_matches > 0usize { + let match_len + : usize + = BackwardMatchLength( + &BackwardMatch(matches.slice()[( + cur_match_end.wrapping_sub(1usize) as (usize) + ) ]) + ); + if match_len > 325usize { + let skip : usize = match_len.wrapping_sub(1usize); + let tmp = matches.slice()[( + cur_match_end.wrapping_sub(1usize) as (usize) + )]; + matches.slice_mut()[( + { + let _old = cur_match_pos; + cur_match_pos = cur_match_pos.wrapping_add(1 as (usize)); + _old + } as (usize) + ) ]= tmp; + num_matches.slice_mut()[(i as (usize)) ]= 1u32; + hasher.StoreRange( + ringbuffer, + ringbuffer_mask, + pos.wrapping_add(1usize), + brotli_min_size_t(pos.wrapping_add(match_len),store_end) + ); + for item in num_matches.slice_mut().split_at_mut(i.wrapping_add(1)).1.split_at_mut(skip).0.iter_mut() { + *item = 0; + } + i = i.wrapping_add(skip); + } else { + cur_match_pos = cur_match_end; + } + } + } + i = i.wrapping_add(1 as (usize)); + } + orig_num_literals = *num_literals; + orig_last_insert_len = *last_insert_len; + for (i, j) in orig_dist_cache.split_at_mut(4).0.iter_mut().zip(dist_cache.split_at(4).0) { + *i = *j; + } + orig_num_commands = *num_commands; + nodes = if num_bytes.wrapping_add( + 1usize + ) > 0usize { + >::alloc_cell(alloc, num_bytes.wrapping_add(1)) + } else { + >::AllocatedMemory::default() + }; + if !(0i32 == 0) { + return; + } + model = InitZopfliCostModel( + alloc, + &(*params).dist , + num_bytes + ); + if !(0i32 == 0) { + return; + } + i = 0usize; + while i < 2usize { + { + BrotliInitZopfliNodes( + nodes.slice_mut(), + num_bytes.wrapping_add(1usize) + ); + if i == 0usize { + ZopfliCostModelSetFromLiteralCosts( + &mut model , + position, + ringbuffer, + ringbuffer_mask + ); + } else { + ZopfliCostModelSetFromCommands( + &mut model , + position, + ringbuffer, + ringbuffer_mask, + commands , + (*num_commands).wrapping_sub(orig_num_commands), + orig_last_insert_len + ); + } + *num_commands = orig_num_commands; + *num_literals = orig_num_literals; + *last_insert_len = orig_last_insert_len; + for (i, j) in dist_cache.split_at_mut(4).0.iter_mut().zip(orig_dist_cache.split_at(4).0) { + *i = *j; + } + *num_commands = (*num_commands).wrapping_add( + ZopfliIterate( + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + max_backward_limit, + gap, + dist_cache , + &mut model , + num_matches.slice() , + matches.slice(), + nodes.slice_mut() + ) + ); + BrotliZopfliCreateCommands( + num_bytes, + position, + max_backward_limit, + nodes.slice(), + dist_cache, + last_insert_len, + params, + commands, + num_literals + ); + } + i = i.wrapping_add(1 as (usize)); + } + CleanupZopfliCostModel(alloc,&mut model ); + { + >::free_cell(alloc, nodes); + } + { + >::free_cell(alloc, matches); + } + { + >::free_cell(alloc, num_matches); + } +} diff --git a/rust/vendor/brotli/src/enc/backward_references/mod.rs b/rust/vendor/brotli/src/enc/backward_references/mod.rs new file mode 100755 index 0000000..d381473 --- /dev/null +++ b/rust/vendor/brotli/src/enc/backward_references/mod.rs @@ -0,0 +1,2493 @@ +#![allow(dead_code)] +pub mod hq; +pub mod hash_to_binary_tree; +mod test; +mod benchmark; +use super::command::{Command, ComputeDistanceCode, InitCommand, BrotliDistanceParams}; +use super::hash_to_binary_tree::{H10, H10Buckets, H10DefaultParams, ZopfliNode}; +use super::dictionary_hash::kStaticDictionaryHash; +use super::static_dict::{BROTLI_UNALIGNED_LOAD32, BROTLI_UNALIGNED_LOAD64, FindMatchLengthWithLimit, FindMatchLengthWithLimitMin4}; +use super::static_dict::BrotliDictionary; +use super::super::alloc; +use super::super::alloc::{SliceWrapper, SliceWrapperMut, Allocator}; +use super::util::{Log2FloorNonZero, brotli_max_size_t, floatX}; +use core; +static kBrotliMinWindowBits: i32 = 10i32; + +static kBrotliMaxWindowBits: i32 = 24i32; + +pub static kInvalidMatch: u32 = 0xfffffffu32; + +static kCutoffTransformsCount: u32 = 10u32; + +static kCutoffTransforms: u64 = 0x71b520au64 << 32i32 | 0xda2d3200u32 as (u64); + +pub static kHashMul32: u32 = 0x1e35a7bdu32; + +pub static kHashMul64: u64 = 0x1e35a7bdu64 << 32i32 | 0x1e35a7bdu64; + +pub static kHashMul64Long: u64 = 0x1fe35a7bu32 as (u64) << 32i32 | 0xd3579bd3u32 as (u64); + + +#[derive(PartialEq, Eq, Copy, Clone, Debug)] +#[repr(C)] +pub enum BrotliEncoderMode { + BROTLI_MODE_GENERIC = 0, + BROTLI_MODE_TEXT = 1, + BROTLI_MODE_FONT = 2, + BROTLI_FORCE_LSB_PRIOR = 3, + BROTLI_FORCE_MSB_PRIOR = 4, + BROTLI_FORCE_UTF8_PRIOR = 5, + BROTLI_FORCE_SIGNED_PRIOR = 6, +} + +#[derive(Clone,Copy, Debug, PartialEq)] +pub struct BrotliHasherParams { + /// type of hasher to use (default: type 6, but others have tradeoffs of speed/memory) + pub type_: i32, + /// number of the number of buckets to have in the hash table (defaults to quality - 1) + pub bucket_bits: i32, + /// number of potential matches to hold per bucket (hash collisions) + pub block_bits: i32, + /// number of bytes of a potential match to hash + pub hash_len: i32, + /// number of previous distance matches to check for future matches (defaults to 16) + pub num_last_distances_to_check: i32, + /// how much to weigh distance vs an extra byte of copy match when comparing possible copy srcs + pub literal_byte_score: i32, +} + + +#[derive(Clone, Debug)] +pub struct BrotliEncoderParams { + pub dist: BrotliDistanceParams, + /// if this brotli file is generic, font or specifically text + pub mode: BrotliEncoderMode, + /// quality param between 0 and 11 (11 is smallest but takes longest to encode) + pub quality: i32, + pub q9_5: bool, + /// log of how big the ring buffer should be for copying prior data + pub lgwin: i32, + /// log of how often metablocks should be serialized + pub lgblock: i32, + /// how big the source file is (or 0 if no hint is provided) + pub size_hint: usize, + /// avoid serializing out priors for literal sections in the favor of decode speed + pub disable_literal_context_modeling: i32, + pub hasher: BrotliHasherParams, + /// produce an IR of the compression file + pub log_meta_block: bool, + /// attempt to detect how many bytes before the current byte generates the best prediction of it + /// * 0 = off (stride 1 always) + /// * 1 = on per 16th of a file + /// * 2 = on per block type switch + pub stride_detection_quality: u8, + /// if nonzero, will search for high entropy strings and log them differently to the IR + pub high_entropy_detection_quality: u8, + /// if nonzero it will search for the temporal locality and effectiveness of the priors + /// for literals. The best adaptation and forgetfulness will be logged per metablock to the IR + pub cdf_adaptation_detection: u8, + /// whether to search for whether the previous byte or the context_map are better predictors on a per-context-map basis + pub prior_bitmask_detection: u8, + /// for prior bitmask detection: stride_low, stride_speed, cm_low, cm_speed + pub literal_adaptation:[(u16, u16); 4], + pub large_window: bool, + /// avoid search for the best ndirect vs npostfix parameters for distance + pub avoid_distance_prefix_search: bool, + /// construct brotli in such a way that it may be concatenated with another brotli file using appropriate bit ops + pub catable: bool, + /// can use the dictionary (default yes unless catable is set) + pub use_dictionary: bool, + /// construct brotli in such a way that another concatable brotli file may be appended + pub appendable: bool, + /// include a magic number and version number and size_hint at the beginning + pub magic_number: bool, + /// prefer to compute the map of previously seen strings + /// just once for all the threads at the beginning, since they overlap significantly + pub favor_cpu_efficiency: bool, +} + +impl Default for BrotliEncoderParams { + fn default() -> BrotliEncoderParams { + super::encode::BrotliEncoderInitParams() + } +} + +#[derive(Clone,Copy,Default,PartialEq)] +pub struct H9Opts{ + pub literal_byte_score: u32, +} +pub enum HowPrepared { + ALREADY_PREPARED, + NEWLY_PREPARED, +} +#[derive(Clone, PartialEq)] +pub struct Struct1 { + pub params: BrotliHasherParams, + pub is_prepared_: i32, + pub dict_num_lookups: usize, + pub dict_num_matches: usize, +} + +fn LiteralSpreeLengthForSparseSearch(params: &BrotliEncoderParams) -> usize { + (if (*params).quality < 9 { + 64i32 + } else { + 512i32 + }) as (usize) +} + +fn brotli_min_size_t(a: usize, b: usize) -> usize { + if a < b { a } else { b } +} + + +pub struct HasherSearchResult { + pub len: usize, + pub len_x_code: usize, + pub distance: usize, + pub score: u64, +} + +pub trait CloneWithAlloc + alloc::Allocator> { + fn clone_with_alloc(&self, m: &mut Alloc) -> Self; +} + +pub trait AnyHasher { + fn Opts(&self) -> H9Opts; + fn GetHasherCommon(&mut self) -> &mut Struct1; + fn HashBytes(&self, data: &[u8]) -> usize; + fn HashTypeLength(&self) -> usize; + fn StoreLookahead(&self) -> usize; + fn PrepareDistanceCache(&self, distance_cache: &mut [i32]); + fn FindLongestMatch(&mut self, + dictionary: Option<&BrotliDictionary>, + dictionary_hash: &[u16], + data: &[u8], + ring_buffer_mask: usize, + distance_cache: &[i32], + cur_ix: usize, + max_length: usize, + max_backward: usize, + gap: usize, + max_distance: usize, + out: &mut HasherSearchResult) + -> bool; + fn Store(&mut self, data: &[u8], mask: usize, ix: usize); + fn Store4Vec4(&mut self, data: &[u8], mask: usize, ix: usize) { + for i in 0..4 { + self.Store(data, mask, ix + i * 4); + } + } + fn StoreEvenVec4(&mut self, data: &[u8], mask: usize, ix: usize) { + for i in 0..4 { + self.Store(data, mask, ix + i * 2); + } + } + fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize); + fn BulkStoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize); + fn Prepare(&mut self, one_shot: bool, input_size: usize, data: &[u8]) -> HowPrepared; + fn StitchToPreviousBlock(&mut self, + num_bytes: usize, + position: usize, + ringbuffer: &[u8], + ringbuffer_mask: usize); +} + + +pub fn StitchToPreviousBlockInternal(handle: &mut T, + num_bytes: usize, + position: usize, + ringbuffer: &[u8], + ringbuffer_mask: usize) { + if num_bytes >= handle.HashTypeLength().wrapping_sub(1) && (position >= 3) { + handle.Store(ringbuffer, ringbuffer_mask, position.wrapping_sub(3)); + handle.Store(ringbuffer, ringbuffer_mask, position.wrapping_sub(2)); + handle.Store(ringbuffer, ringbuffer_mask, position.wrapping_sub(1)); + } +} + +pub fn StoreLookaheadThenStore(hasher: &mut T, size: usize, dict: &[u8]) { + let overlap = hasher.StoreLookahead().wrapping_sub(1usize); + if size > overlap { + hasher.BulkStoreRange(dict, !(0usize), 0, size - overlap); + } +} + +pub trait BasicHashComputer { + fn HashBytes(&self, data: &[u8]) -> u32; + fn BUCKET_BITS(&self) -> i32; + fn USE_DICTIONARY(&self) -> i32; + fn BUCKET_SWEEP(&self) -> i32; +} +pub struct BasicHasher + SliceWrapper + BasicHashComputer> { + pub GetHasherCommon: Struct1, + pub buckets_: Buckets, + pub h9_opts: H9Opts, +} + +impl + SliceWrapper + BasicHashComputer> PartialEq> for BasicHasher { + fn eq(&self, other: &BasicHasher) -> bool { + self.GetHasherCommon == other.GetHasherCommon && self.h9_opts == other.h9_opts && self.buckets_.slice() == other.buckets_.slice() + } +} + +impl + SliceWrapper + BasicHashComputer> BasicHasher { + fn StoreRangeOptBasic(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) -> usize { + let lookahead = 8; + if ix_end >= ix_start + lookahead * 2{ + let chunk_count = (ix_end - ix_start) / 4; + for chunk_id in 0..chunk_count { + let i = (ix_start + chunk_id * 4) & mask; + let word11 = data.split_at(i).1.split_at(11).0; + let mixed0 = self.HashBytes(word11); + let mixed1 = self.HashBytes(word11.split_at(1).1); + let mixed2 = self.HashBytes(word11.split_at(2).1); + let mixed3 = self.HashBytes(word11.split_at(3).1); + let off: u32 = (i >> 3i32).wrapping_rem(self.buckets_.BUCKET_SWEEP() as usize) as (u32); + let offset0: usize = mixed0 + off as usize; + let offset1: usize = mixed1 + off as usize; + let offset2: usize = mixed2 + off as usize; + let offset3: usize = mixed3 + off as usize; + self.buckets_.slice_mut()[offset0] = i as u32; + self.buckets_.slice_mut()[offset1] = i as u32 + 1; + self.buckets_.slice_mut()[offset2] = i as u32 + 2; + self.buckets_.slice_mut()[offset3] = i as u32 + 3; + } + return ix_start + chunk_count * 4; + } + ix_start + } + +} +pub struct H2Sub> { + pub buckets_: AllocU32::AllocatedMemory, // 65537 +} +impl + SliceWrapper + BasicHashComputer> AnyHasher for BasicHasher { + #[inline(always)] + fn Opts(&self) -> H9Opts { + self.h9_opts + } + #[allow(unused_variables)] + fn PrepareDistanceCache(&self, distance_cache: &mut [i32]) {} + #[inline(always)] + fn HashTypeLength(&self) -> usize { + 8 + } + #[inline(always)] + fn StoreLookahead(&self) -> usize { + 8 + } + fn StitchToPreviousBlock(&mut self, + num_bytes: usize, + position: usize, + ringbuffer: &[u8], + ringbuffer_mask: usize) { + StitchToPreviousBlockInternal(self, num_bytes, position, ringbuffer, ringbuffer_mask); + } + #[inline(always)] + fn GetHasherCommon(&mut self) -> &mut Struct1 { + return &mut self.GetHasherCommon; + } + #[inline(always)] + fn HashBytes(&self, data: &[u8]) -> usize { + self.buckets_.HashBytes(data) as usize + } + fn Store(&mut self, data: &[u8], mask: usize, ix: usize) { + let (_, data_window) = data.split_at((ix & mask) as (usize)); + let key: u32 = self.HashBytes(data_window) as u32; + let off: u32 = (ix >> 3i32).wrapping_rem(self.buckets_.BUCKET_SWEEP() as usize) as (u32); + self.buckets_.slice_mut()[key.wrapping_add(off) as (usize)] = ix as (u32); + } + fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { + for i in self.StoreRangeOptBasic(data, mask, ix_start, ix_end)..ix_end { + self.Store(data, mask, i); + } + } + fn BulkStoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { + self.StoreRange(data, mask, ix_start, ix_end); + } + fn Prepare(&mut self, one_shot: bool, input_size: usize, data: &[u8]) -> HowPrepared { + if self.GetHasherCommon.is_prepared_ != 0 { + return HowPrepared::ALREADY_PREPARED; + } + let partial_prepare_threshold = (4 << self.buckets_.BUCKET_BITS()) >> 7; + if one_shot && input_size <= partial_prepare_threshold { + for i in 0..input_size { + let key = self.HashBytes(&data[i..]) as usize; + let bs = self.buckets_.BUCKET_SWEEP() as usize; + for item in self.buckets_.slice_mut()[key..(key + bs)].iter_mut() { + *item = 0; + } + } + } else { + for item in self.buckets_.slice_mut().iter_mut() { + *item = 0; + } + } + self.GetHasherCommon.is_prepared_ = 1; + HowPrepared::NEWLY_PREPARED + } + + fn FindLongestMatch(&mut self, + dictionary: Option<&BrotliDictionary>, + dictionary_hash: &[u16], + data: &[u8], + ring_buffer_mask: usize, + distance_cache: &[i32], + cur_ix: usize, + max_length: usize, + max_backward: usize, + gap: usize, + max_distance: usize, + out: &mut HasherSearchResult) + -> bool { + let opts = self.Opts(); + let best_len_in: usize = (*out).len; + let cur_ix_masked: usize = cur_ix & ring_buffer_mask; + let key: u32 = self.HashBytes(&data[(cur_ix_masked as (usize))..]) as u32; + let mut compare_char: i32 = data[(cur_ix_masked.wrapping_add(best_len_in) as (usize))] as (i32); + let mut best_score: u64 = (*out).score; + let mut best_len: usize = best_len_in; + let cached_backward: usize = distance_cache[(0usize)] as (usize); + let mut prev_ix: usize = cur_ix.wrapping_sub(cached_backward); + let mut is_match_found: i32 = 0i32; + (*out).len_x_code = 0usize; + if prev_ix < cur_ix { + prev_ix = prev_ix & ring_buffer_mask as (u32) as (usize); + if compare_char == data[(prev_ix.wrapping_add(best_len) as (usize))] as (i32) { + let len: usize = FindMatchLengthWithLimitMin4(&data[(prev_ix as (usize))..], + &data[(cur_ix_masked as (usize))..], + max_length); + if len != 0 { + best_score = BackwardReferenceScoreUsingLastDistance(len, opts); + best_len = len; + (*out).len = len; + (*out).distance = cached_backward; + (*out).score = best_score; + compare_char = data[(cur_ix_masked.wrapping_add(best_len) as (usize))] as (i32); + if self.buckets_.BUCKET_SWEEP() == 1i32 { + (*self).buckets_.slice_mut()[key as (usize)] = cur_ix as (u32); + return true; + } else { + is_match_found = 1i32; + } + } + } + } + let bucket_sweep = self.buckets_.BUCKET_SWEEP(); + if bucket_sweep == 1i32 { + let backward: usize; + let len: usize; + prev_ix = (*self).buckets_.slice()[key as (usize)] as (usize); + (*self).buckets_.slice_mut()[key as (usize)] = cur_ix as (u32); + backward = cur_ix.wrapping_sub(prev_ix); + prev_ix = prev_ix & ring_buffer_mask as (u32) as (usize); + if compare_char != data[(prev_ix.wrapping_add(best_len_in) as (usize))] as (i32) { + return false; + } + if backward == 0usize || backward > max_backward { + return false; + } + len = FindMatchLengthWithLimitMin4(&data[(prev_ix as (usize))..], + &data[(cur_ix_masked as (usize))..], + max_length); + if len != 0 { + (*out).len = len; + (*out).distance = backward; + (*out).score = BackwardReferenceScore(len, backward, opts); + return true; + } + } else { + for prev_ix_ref in self.buckets_.slice().split_at(key as usize).1[..bucket_sweep as usize].iter() { + let mut prev_ix = *prev_ix_ref as usize; + let backward: usize = cur_ix.wrapping_sub(prev_ix); + prev_ix = prev_ix & ring_buffer_mask as (u32) as (usize); + if compare_char != data[(prev_ix.wrapping_add(best_len) as (usize))] as (i32) { + continue; + } + if backward == 0usize || backward > max_backward { + continue; + } + let len = FindMatchLengthWithLimitMin4(&data[(prev_ix as (usize))..], + &data[(cur_ix_masked as (usize))..], + max_length); + if len != 0 { + let score: u64 = BackwardReferenceScore(len, backward, opts); + if best_score < score { + best_score = score; + best_len = len; + (*out).len = best_len; + (*out).distance = backward; + (*out).score = score; + compare_char = data[(cur_ix_masked.wrapping_add(best_len) as (usize))] as (i32); + is_match_found = 1i32; + } + } + } + } + if dictionary.is_some() && self.buckets_.USE_DICTIONARY() != 0 && (is_match_found == 0) { + is_match_found = SearchInStaticDictionary(dictionary.unwrap(), + dictionary_hash, + self, + &data[(cur_ix_masked as (usize))..], + max_length, + max_backward.wrapping_add(gap), + max_distance, + out, + 1i32); + } + (*self).buckets_.slice_mut()[(key as (usize)).wrapping_add((cur_ix >> 3) + .wrapping_rem(bucket_sweep as usize))] = cur_ix as (u32); + is_match_found != 0 + + } +} +impl> BasicHashComputer for H2Sub { + fn HashBytes(&self, data: &[u8]) -> u32 { + let h: u64 = (BROTLI_UNALIGNED_LOAD64(data) << 64i32 - 8i32 * 5i32).wrapping_mul(kHashMul64); + (h >> 64i32 - 16i32) as (u32) + } + fn BUCKET_BITS(&self) -> i32 { + 16 + } + fn BUCKET_SWEEP(&self) -> i32 { + 1 + } + fn USE_DICTIONARY(&self) -> i32 { + 1 + } +} +impl> SliceWrapperMut for H2Sub { + fn slice_mut(&mut self) -> &mut [u32] { + return self.buckets_.slice_mut(); + } +} +impl> SliceWrapper for H2Sub { + fn slice(&self) -> &[u32] { + return self.buckets_.slice(); + } +} +pub struct H3Sub> { + pub buckets_: AllocU32::AllocatedMemory, // 65538 +} +impl> SliceWrapperMut for H3Sub { + fn slice_mut(&mut self) -> &mut [u32] { + return self.buckets_.slice_mut(); + } +} +impl> SliceWrapper for H3Sub { + fn slice(&self) -> &[u32] { + return self.buckets_.slice(); + } +} +impl> BasicHashComputer for H3Sub { + fn BUCKET_BITS(&self) -> i32 { + 16 + } + fn BUCKET_SWEEP(&self) -> i32 { + 2 + } + fn USE_DICTIONARY(&self) -> i32 { + 0 + } + fn HashBytes(&self, data: &[u8]) -> u32 { + let h: u64 = (BROTLI_UNALIGNED_LOAD64(data) << 64i32 - 8i32 * 5i32).wrapping_mul(kHashMul64); + (h >> 64i32 - 16i32) as (u32) + } +} +pub struct H4Sub> { + pub buckets_: AllocU32::AllocatedMemory, // 131076 +} +impl> BasicHashComputer for H4Sub { + fn BUCKET_BITS(&self) -> i32 { + 17 + } + fn BUCKET_SWEEP(&self) -> i32 { + 4 + } + fn USE_DICTIONARY(&self) -> i32 { + 1 + } + fn HashBytes(&self, data: &[u8]) -> u32 { + let h: u64 = (BROTLI_UNALIGNED_LOAD64(data) << 64i32 - 8i32 * 5i32).wrapping_mul(kHashMul64); + (h >> 64i32 - 17i32) as (u32) + } +} +impl> SliceWrapperMut for H4Sub { + fn slice_mut(&mut self) -> &mut [u32] { + return self.buckets_.slice_mut(); + } +} +impl> SliceWrapper for H4Sub { + fn slice(&self) -> &[u32] { + return self.buckets_.slice(); + } +} +pub struct H54Sub> { + pub buckets_: AllocU32::AllocatedMemory, +} +impl> BasicHashComputer for H54Sub { + fn BUCKET_BITS(&self) -> i32 { + 20 + } + fn BUCKET_SWEEP(&self) -> i32 { + 4 + } + fn USE_DICTIONARY(&self) -> i32 { + 0 + } + fn HashBytes(&self, data: &[u8]) -> u32 { + let h: u64 = (BROTLI_UNALIGNED_LOAD64(data) << 64i32 - 8i32 * 7i32).wrapping_mul(kHashMul64); + (h >> 64i32 - 20i32) as (u32) + } +} + + +impl> SliceWrapperMut for H54Sub { + fn slice_mut(&mut self) -> &mut [u32] { + return self.buckets_.slice_mut(); + } +} +impl> SliceWrapper for H54Sub { + fn slice(&self) -> &[u32] { + return self.buckets_.slice(); + } +} +pub const H9_BUCKET_BITS :usize = 15; +pub const H9_BLOCK_BITS :usize =8; +pub const H9_NUM_LAST_DISTANCES_TO_CHECK:usize = 16; +pub const H9_BLOCK_SIZE :usize= 1 << H9_BLOCK_BITS; +const H9_BLOCK_MASK :usize= (1 << H9_BLOCK_BITS) - 1; + + +impl H9Opts { + pub fn new(params:&BrotliHasherParams) -> H9Opts { + H9Opts { + literal_byte_score: if params.literal_byte_score != 0 { params.literal_byte_score as u32} else {540}, + } + } +} + +pub struct H9 + alloc::Allocator> { + pub num_:>::AllocatedMemory,//[u16;1 << H9_BUCKET_BITS], + pub buckets_:>::AllocatedMemory,//[u32; H9_BLOCK_SIZE << H9_BUCKET_BITS], + pub dict_search_stats_:Struct1, + pub h9_opts: H9Opts, +} + +impl + alloc::Allocator> PartialEq> for H9 { + fn eq(&self, other: &H9) -> bool { + self.dict_search_stats_ == other.dict_search_stats_ + && self.num_.slice() == other.num_.slice() + && self.buckets_.slice() == other.buckets_.slice() + && self.h9_opts == other.h9_opts + } +} + +fn adv_prepare_distance_cache(distance_cache: &mut [i32], num_distances: i32) { + if num_distances > 4i32 { + let last_distance: i32 = distance_cache[(0usize)]; + distance_cache[(4usize)] = last_distance - 1i32; + distance_cache[(5usize)] = last_distance + 1i32; + distance_cache[(6usize)] = last_distance - 2i32; + distance_cache[(7usize)] = last_distance + 2i32; + distance_cache[(8usize)] = last_distance - 3i32; + distance_cache[(9usize)] = last_distance + 3i32; + if num_distances > 10i32 { + let next_last_distance: i32 = distance_cache[(1usize)]; + distance_cache[(10usize)] = next_last_distance - 1i32; + distance_cache[(11usize)] = next_last_distance + 1i32; + distance_cache[(12usize)] = next_last_distance - 2i32; + distance_cache[(13usize)] = next_last_distance + 2i32; + distance_cache[(14usize)] = next_last_distance - 3i32; + distance_cache[(15usize)] = next_last_distance + 3i32; + } + } +} + +pub const kDistanceCacheIndex : [u8;16] = [ + 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, +]; + +pub const kDistanceCacheOffset : [i8;16]= [ + 0i8, + 0i8, + 0i8, + 0i8, + -1i8, + 1i8, + -2i8, + 2i8, + -3i8, + 3i8, + -1i8, + 1i8, + -2i8, + 2i8, + -3i8, + 3i8]; + +//const BROTLI_LITERAL_BYTE_SCORE: u64 = 540; +const BROTLI_DISTANCE_BIT_PENALTY: u32 = 120; + + +// Score must be positive after applying maximal penalty. +const BROTLI_SCORE_BASE : u32 = (BROTLI_DISTANCE_BIT_PENALTY * 8 * 8/* sizeof usize*/); +const kDistanceShortCodeCost : [u32;16] = [ + /* Repeat last */ + BROTLI_SCORE_BASE + 60, + /* 2nd, 3rd, 4th last */ + BROTLI_SCORE_BASE - 95, + BROTLI_SCORE_BASE - 117, + BROTLI_SCORE_BASE - 127, + /* Last with offset */ + BROTLI_SCORE_BASE - 93, + BROTLI_SCORE_BASE - 93, + BROTLI_SCORE_BASE - 96, + BROTLI_SCORE_BASE - 96, + BROTLI_SCORE_BASE - 99, + BROTLI_SCORE_BASE - 99, + /* 2nd last with offset */ + BROTLI_SCORE_BASE - 105, + BROTLI_SCORE_BASE - 105, + BROTLI_SCORE_BASE - 115, + BROTLI_SCORE_BASE - 115, + BROTLI_SCORE_BASE - 125, + BROTLI_SCORE_BASE - 125 +]; + +fn BackwardReferenceScoreH9(copy_length: usize, + backward_reference_offset: usize, + h9_opts: H9Opts) -> u64 { + (u64::from(BROTLI_SCORE_BASE).wrapping_add((h9_opts.literal_byte_score as u64).wrapping_mul(copy_length as u64)).wrapping_sub( + (BROTLI_DISTANCE_BIT_PENALTY as u64).wrapping_mul(Log2FloorNonZero(backward_reference_offset as u64) as u64))) >> 2 +} + +fn BackwardReferenceScoreUsingLastDistanceH9( + copy_length : usize, distance_short_code : usize, + h9_opts: H9Opts) -> u64 { + ((h9_opts.literal_byte_score as u64).wrapping_mul(copy_length as u64).wrapping_add( + u64::from(kDistanceShortCodeCost[distance_short_code]))) >> 2 +} + +impl + alloc::Allocator> AnyHasher for H9 { + #[inline(always)] + fn Opts(&self) -> H9Opts { + self.h9_opts + } + #[inline(always)] + fn GetHasherCommon(&mut self) -> &mut Struct1 { + return &mut self.dict_search_stats_; + } + #[inline(always)] + fn HashBytes(&self, data: &[u8]) -> usize { + let h: u32 = BROTLI_UNALIGNED_LOAD32(data).wrapping_mul(kHashMul32); + let thirty_two : usize = 32; + (h >> (thirty_two.wrapping_sub(H9_BUCKET_BITS))) as usize + } + #[inline(always)] + fn HashTypeLength(&self) -> usize { + 4 + } + #[inline(always)] + fn StoreLookahead(&self) -> usize { + 4 + } + fn PrepareDistanceCache(&self, distance_cache: &mut [i32]) { + let num_distances = H9_NUM_LAST_DISTANCES_TO_CHECK as i32; + adv_prepare_distance_cache(distance_cache, num_distances); + } + fn FindLongestMatch(&mut self, + dictionary: Option<&BrotliDictionary>, + dictionary_hash: &[u16], + data: &[u8], + ring_buffer_mask: usize, + distance_cache: &[i32], + cur_ix: usize, + max_length: usize, + max_backward: usize, + gap: usize, + max_distance: usize, + out: &mut HasherSearchResult) + -> bool { + let best_len_in: usize = (*out).len; + let cur_ix_masked: usize = cur_ix & ring_buffer_mask; + let mut best_score: u64 = (*out).score; + let mut best_len: usize = best_len_in; + let mut is_match_found: i32 = 0i32; + (*out).len_x_code = 0usize; + for i in 0..H9_NUM_LAST_DISTANCES_TO_CHECK { + let idx = kDistanceCacheIndex[i] as usize; + let backward = (distance_cache[idx] as usize).wrapping_add(kDistanceCacheOffset[i] as usize); + let mut prev_ix = cur_ix.wrapping_sub(backward); + if prev_ix >= cur_ix { + continue; + } + if backward > max_backward { + continue; + } + prev_ix &= ring_buffer_mask; + if cur_ix_masked.wrapping_add(best_len) > ring_buffer_mask || + prev_ix.wrapping_add(best_len) > ring_buffer_mask || + data[cur_ix_masked.wrapping_add(best_len)] != data[prev_ix.wrapping_add(best_len)] { + continue; + } + { + let len: usize = FindMatchLengthWithLimit(&data[(prev_ix as (usize))..], + &data[(cur_ix_masked as (usize))..], + max_length); + if len >= 3 || (len == 2 && i < 2) { + let score = BackwardReferenceScoreUsingLastDistanceH9(len, i, self.h9_opts); + if best_score < score { + best_score = score; + best_len = len; + out.len = best_len; + out.distance = backward; + out.score = best_score; + is_match_found = 1i32; + } + } + } + } + if max_length >= 4 && cur_ix_masked.wrapping_add(best_len) <= ring_buffer_mask { + let key = self.HashBytes(&data.split_at(cur_ix_masked).1); + let bucket = &mut self.buckets_.slice_mut().split_at_mut(key << H9_BLOCK_BITS).1.split_at_mut(H9_BLOCK_SIZE).0; + assert!(bucket.len() > H9_BLOCK_MASK); + assert_eq!(bucket.len(), H9_BLOCK_MASK + 1); + let self_num_key = &mut self.num_.slice_mut()[key]; + let down = if *self_num_key > H9_BLOCK_SIZE as u16 { + (*self_num_key as usize) - H9_BLOCK_SIZE + } else {0usize}; + let mut i: usize = *self_num_key as usize; + let mut prev_best_val = data[cur_ix_masked.wrapping_add(best_len)]; + while i > down { + i -= 1; + let mut prev_ix = bucket[i & H9_BLOCK_MASK] as usize; + let backward = cur_ix.wrapping_sub(prev_ix) as usize; + if (backward > max_backward) { + break; + } + prev_ix &= ring_buffer_mask; + if (prev_ix.wrapping_add(best_len) > ring_buffer_mask || + prev_best_val != data[prev_ix.wrapping_add(best_len) as usize]) { + continue; + } + { + let len = FindMatchLengthWithLimit(&data.split_at(prev_ix).1, + &data.split_at((cur_ix_masked as usize)).1, + max_length); + if (len >= 4) { + /* Comparing for >= 3 does not change the semantics, but just saves + for a few unnecessary binary logarithms in backward reference + score, since we are not interested in such short matches. */ + let score = BackwardReferenceScoreH9(len, backward, self.h9_opts); + if (best_score < score) { + best_score = score; + best_len = len; + out.len = best_len; + out.distance = backward; + out.score = best_score; + is_match_found = 1; + if cur_ix_masked.wrapping_add(best_len) > ring_buffer_mask { + break + } + prev_best_val = data[cur_ix_masked.wrapping_add(best_len) as usize]; + } + } + } + } + bucket[*self_num_key as usize & H9_BLOCK_MASK] = cur_ix as u32; + *self_num_key = self_num_key.wrapping_add(1); + } + if is_match_found == 0 && dictionary.is_some() { + let (_, cur_data) = data.split_at(cur_ix_masked as usize); + is_match_found = SearchInStaticDictionary(dictionary.unwrap(), + dictionary_hash, + self, + cur_data, + max_length, + max_backward.wrapping_add(gap), + max_distance, + out, + 0i32); + } + is_match_found != 0 + } + + fn Store(&mut self, data: &[u8], mask: usize, ix: usize) { + let (_, data_window) = data.split_at((ix & mask) as (usize)); + let key: u32 = self.HashBytes(data_window) as u32; + let self_num_key = &mut self.num_.slice_mut()[key as usize]; + let minor_ix: usize = (*self_num_key as usize & H9_BLOCK_MASK); + self.buckets_.slice_mut()[minor_ix.wrapping_add((key as usize) << H9_BLOCK_BITS)] = ix as u32; + *self_num_key = self_num_key.wrapping_add(1); + } + fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { + for i in ix_start..ix_end { + self.Store(data, mask, i); + } + } + fn BulkStoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { + for i in ix_start..ix_end { + self.Store(data, mask, i); + } + } + fn Prepare(&mut self, _one_shot: bool, _input_size:usize, _data:&[u8]) ->HowPrepared { + if self.GetHasherCommon().is_prepared_ != 0 { + return HowPrepared::ALREADY_PREPARED; + } + for item in self.num_.slice_mut().iter_mut() { + *item =0; + } + self.GetHasherCommon().is_prepared_ = 1; + HowPrepared::NEWLY_PREPARED + } + fn StitchToPreviousBlock(&mut self, + num_bytes: usize, + position: usize, + ringbuffer: &[u8], + ringbuffer_mask: usize) { + StitchToPreviousBlockInternal(self, + num_bytes, + position, + ringbuffer, + ringbuffer_mask) + } +} + +pub trait AdvHashSpecialization : PartialEq{ + fn get_hash_mask(&self) -> u64; + fn set_hash_mask(&mut self, params_hash_len: i32); + fn get_k_hash_mul(&self) -> u64; + fn HashTypeLength(&self) -> usize; + fn StoreLookahead(&self) -> usize; + fn load_and_mix_word(&self, data: &[u8]) -> u64; + fn hash_shift(&self) -> i32; + fn bucket_size(&self) -> u32; + fn block_mask(&self) -> u32; + fn block_size(&self) -> u32; + fn block_bits(&self) -> i32; +} +pub struct AdvHasher + alloc::Allocator> +{ + pub GetHasherCommon: Struct1, + pub specialization: Specialization, // contains hash_mask_ + pub num: >::AllocatedMemory, + pub buckets: >::AllocatedMemory, + pub h9_opts: H9Opts, +} + +impl + alloc::Allocator> PartialEq> for AdvHasher { + fn eq(&self, other: &Self) -> bool { + self.GetHasherCommon == other.GetHasherCommon + && self.specialization == other.specialization + && self.num.slice() == other.num.slice() + && self.buckets.slice() == other.buckets.slice() + && self.h9_opts == other.h9_opts + } +} + + +#[derive(Clone, PartialEq)] +pub struct HQ5Sub {} +impl AdvHashSpecialization for HQ5Sub { + #[inline(always)] + fn hash_shift(&self) -> i32 { + 32i32 - 14 // 32 - bucket_bits + } + #[inline(always)] + fn bucket_size(&self) -> u32 { + 1 << 14 + } + #[inline(always)] + fn block_bits(&self) -> i32 { + 4 + } + #[inline(always)] + fn block_size(&self) -> u32 { + 1 << 4 + } + #[inline(always)] + fn block_mask(&self) -> u32 { + (1 << 4) - 1 + } + #[inline(always)] + fn get_hash_mask(&self) -> u64 { + //return 0xffffffffffffffffu64; + return 0xffffffffu64; // make it 32 bit + } + #[inline(always)] + fn get_k_hash_mul(&self) -> u64 { + return kHashMul32 as u64; + } + #[inline(always)] + fn load_and_mix_word(&self, data: &[u8]) -> u64 { + return (BROTLI_UNALIGNED_LOAD32(data) as u64 * self.get_k_hash_mul()) & self.get_hash_mask(); + } + #[inline(always)] + fn set_hash_mask(&mut self, _params_hash_len: i32) {} + fn HashTypeLength(&self) -> usize { + 4 + } + #[inline(always)] + fn StoreLookahead(&self) -> usize { + 4 + } +} + + +#[derive(Clone, PartialEq)] +pub struct HQ7Sub {} +impl AdvHashSpecialization for HQ7Sub { + #[inline(always)] + fn hash_shift(&self) -> i32 { + 32i32 - 15 // 32 - bucket_bits + } + #[inline(always)] + fn bucket_size(&self) -> u32 { + 1 << 15 + } + #[inline(always)] + fn block_bits(&self) -> i32 { + 6 + } + #[inline(always)] + fn block_size(&self) -> u32 { + 1 << 6 + } + #[inline(always)] + fn block_mask(&self) -> u32 { + (1 << 6) - 1 + } + #[inline(always)] + fn get_hash_mask(&self) -> u64 { + //return 0xffffffffffffffffu64; + return 0xffffffffu64; // make it 32 bit + } + #[inline(always)] + fn get_k_hash_mul(&self) -> u64 { + return kHashMul32 as u64; + } + #[inline(always)] + fn load_and_mix_word(&self, data: &[u8]) -> u64 { + return (BROTLI_UNALIGNED_LOAD32(data) as u64 * self.get_k_hash_mul()) & self.get_hash_mask(); + } + #[inline(always)] + fn set_hash_mask(&mut self, _params_hash_len: i32) {} + fn HashTypeLength(&self) -> usize { + 4 + } + #[inline(always)] + fn StoreLookahead(&self) -> usize { + 4 + } +} + + +#[derive(Clone, PartialEq)] +pub struct H5Sub { + pub hash_shift_: i32, + pub bucket_size_: u32, + pub block_mask_:u32, + pub block_bits_: i32, +} + +impl AdvHashSpecialization for H5Sub { + #[inline(always)] + fn hash_shift(&self) -> i32 { + return self.hash_shift_ + } + fn bucket_size(&self) -> u32 { + return self.bucket_size_ + } + fn block_bits(&self) -> i32 { + self.block_bits_ + } + fn block_size(&self) -> u32 { + 1 << self.block_bits_ + } + fn block_mask(&self) -> u32 { + return self.block_mask_ + } + fn get_hash_mask(&self) -> u64 { + //return 0xffffffffffffffffu64; + return 0xffffffffu64; // make it 32 bit + } + fn get_k_hash_mul(&self) -> u64 { + return kHashMul32 as u64; + } + fn load_and_mix_word(&self, data: &[u8]) -> u64 { + return (BROTLI_UNALIGNED_LOAD32(data) as u64 * self.get_k_hash_mul()) & self.get_hash_mask(); + } + #[allow(unused_variables)] + fn set_hash_mask(&mut self, params_hash_len: i32) {} + fn HashTypeLength(&self) -> usize { + 4 + } + fn StoreLookahead(&self) -> usize { + 4 + } +} + +#[derive(Clone, PartialEq)] +pub struct H6Sub { + pub hash_mask: u64, + pub hash_shift_: i32, + pub bucket_size_: u32, + pub block_mask_:u32, + pub block_bits_: i32, +} + +impl AdvHashSpecialization for H6Sub { + #[inline(always)] + fn hash_shift(&self) -> i32 { + return self.hash_shift_ + } + #[inline(always)] + fn bucket_size(&self) -> u32 { + return self.bucket_size_ + } + fn block_bits(&self) -> i32 { + self.block_bits_ + } + fn block_size(&self) -> u32 { + 1 << self.block_bits_ + } + #[inline(always)] + fn block_mask(&self) -> u32 { + return self.block_mask_ + } + #[inline(always)] + fn get_hash_mask(&self) -> u64 { + self.hash_mask + } + #[inline(always)] + fn set_hash_mask(&mut self, params_hash_len: i32) { + self.hash_mask = !(0u32 as (u64)) >> 64i32 - 8i32 * params_hash_len; + } + #[inline(always)] + fn get_k_hash_mul(&self) -> u64 { + kHashMul64Long + } + #[inline(always)] + fn load_and_mix_word(&self, data: &[u8]) -> u64 { + return (BROTLI_UNALIGNED_LOAD64(data) & self.get_hash_mask()) + .wrapping_mul(self.get_k_hash_mul()); + } + #[inline(always)] + fn HashTypeLength(&self) -> usize { + 8 + } + #[inline(always)] + fn StoreLookahead(&self) -> usize { + 8 + } +} + +fn BackwardReferencePenaltyUsingLastDistance(distance_short_code: usize) -> u64 { + (39u64).wrapping_add((0x1ca10u64 >> (distance_short_code & 0xeusize) & 0xeu64)) +} + +impl + alloc::Allocator> AdvHasher { + // 7 opt + // returns a new ix_start + fn StoreRangeOptBatch(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) -> usize { + let lookahead = self.specialization.StoreLookahead(); + if ix_end >= ix_start + lookahead * 2 && lookahead == 4{ + let num = self.num.slice_mut(); + let buckets = self.buckets.slice_mut(); + assert_eq!(num.len(), self.specialization.bucket_size() as usize); + assert_eq!(buckets.len(), self.specialization.bucket_size() as usize * self.specialization.block_size() as usize); + let shift = self.specialization.hash_shift(); + let chunk_count = (ix_end - ix_start) / 4; + for chunk_id in 0..chunk_count { + let i = (ix_start + chunk_id * 4) & mask; + let ffffffff = 0xffffffff; + let word = u64::from(data[i]) + | (u64::from(data[i + 1]) << 8) + | (u64::from(data[i + 2]) << 16) + | (u64::from(data[i + 3]) << 24) + | (u64::from(data[i + 4]) << 32) + | (u64::from(data[i + 5]) << 40) + | (u64::from(data[i + 6]) << 48); + let mixed0 = ((((word & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed1 = (((((word >> 8) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed2 = (((((word >> 16) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed3 = (((((word >> 24) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mut num_ref0 = u32::from(num[mixed0]); + num[mixed0] = num_ref0.wrapping_add(1) as u16; + num_ref0 &= (*self).specialization.block_mask(); + let mut num_ref1 = u32::from(num[mixed1]); + num[mixed1] = num_ref1.wrapping_add(1) as u16; + num_ref1 &= (*self).specialization.block_mask(); + let mut num_ref2 = u32::from(num[mixed2]); + num[mixed2] = num_ref2.wrapping_add(1) as u16; + num_ref2 &= (*self).specialization.block_mask(); + let mut num_ref3 = u32::from(num[mixed3]); + num[mixed3] = num_ref3.wrapping_add(1) as u16; + num_ref3 &= (*self).specialization.block_mask(); + let offset0: usize = (mixed0 << self.specialization.block_bits()) + num_ref0 as usize; + let offset1: usize = (mixed1 << self.specialization.block_bits()) + num_ref1 as usize; + let offset2: usize = (mixed2 << self.specialization.block_bits()) + num_ref2 as usize; + let offset3: usize = (mixed3 << self.specialization.block_bits()) + num_ref3 as usize; + buckets[offset0] = (i) as u32; + buckets[offset1] = (i + 1) as u32; + buckets[offset2] = (i + 2) as u32; + buckets[offset3] = (i + 3) as u32; + } + return ix_start + chunk_count * 4; + } + ix_start + } + + fn BulkStoreRangeOptMemFetch(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) -> usize { + const REG_SIZE : usize = 32usize; + let lookahead = self.specialization.StoreLookahead(); + if mask == !0 && ix_end > ix_start + REG_SIZE && lookahead == 4{ + const lookahead4: usize = 4; + assert_eq!(lookahead4, lookahead); + let mut data64 = [0u8;REG_SIZE + lookahead4 - 1]; + let del = (ix_end - ix_start) / REG_SIZE; + let num = self.num.slice_mut(); + let buckets = self.buckets.slice_mut(); + assert_eq!(num.len(), self.specialization.bucket_size() as usize); + assert_eq!(buckets.len(), self.specialization.bucket_size() as usize * self.specialization.block_size() as usize); + let shift = self.specialization.hash_shift(); + for chunk_id in 0..del { + let ix_offset = ix_start + chunk_id * REG_SIZE; + data64[..REG_SIZE + lookahead4 - 1].clone_from_slice(data.split_at(ix_offset).1.split_at(REG_SIZE + lookahead4 - 1).0); + for quad_index in 0..(REG_SIZE>>2) { + let i = quad_index<<2; + let ffffffff = 0xffffffff; + let word = u64::from(data64[i]) + | (u64::from(data64[i + 1]) << 8) + | (u64::from(data64[i + 2]) << 16) + | (u64::from(data64[i + 3]) << 24) + | (u64::from(data64[i + 4]) << 32) + | (u64::from(data64[i + 5]) << 40) + | (u64::from(data64[i + 6]) << 48); + let mixed0 = ((((word & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed1 = (((((word >> 8) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed2 = (((((word >> 16) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed3 = (((((word >> 24) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mut num_ref0 = u32::from(num[mixed0]); + num[mixed0] = num_ref0.wrapping_add(1) as u16; + num_ref0 &= (*self).specialization.block_mask(); + let mut num_ref1 = u32::from(num[mixed1]); + num[mixed1] = num_ref1.wrapping_add(1) as u16; + num_ref1 &= (*self).specialization.block_mask(); + let mut num_ref2 = u32::from(num[mixed2]); + num[mixed2] = num_ref2.wrapping_add(1) as u16; + num_ref2 &= (*self).specialization.block_mask(); + let mut num_ref3 = u32::from(num[mixed3]); + num[mixed3] = num_ref3.wrapping_add(1) as u16; + num_ref3 &= (*self).specialization.block_mask(); + let offset0: usize = (mixed0 << self.specialization.block_bits()) + num_ref0 as usize; + let offset1: usize = (mixed1 << self.specialization.block_bits()) + num_ref1 as usize; + let offset2: usize = (mixed2 << self.specialization.block_bits()) + num_ref2 as usize; + let offset3: usize = (mixed3 << self.specialization.block_bits()) + num_ref3 as usize; + buckets[offset0] = (ix_offset + i) as u32; + buckets[offset1] = (ix_offset + i + 1) as u32; + buckets[offset2] = (ix_offset + i + 2) as u32; + buckets[offset3] = (ix_offset + i + 3) as u32; + } + } + return ix_start + del * REG_SIZE; + } + ix_start + } + fn BulkStoreRangeOptMemFetchLazyDupeUpdate(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) -> usize { + const REG_SIZE : usize = 32usize; + let lookahead = self.specialization.StoreLookahead(); + if mask == !0 && ix_end > ix_start + REG_SIZE && lookahead == 4{ + const lookahead4: usize = 4; + assert_eq!(lookahead4, lookahead); + let mut data64 = [0u8;REG_SIZE + lookahead4]; + let del = (ix_end - ix_start) / REG_SIZE; + let num = self.num.slice_mut(); + let buckets = self.buckets.slice_mut(); + assert_eq!(num.len(), self.specialization.bucket_size() as usize); + assert_eq!(buckets.len(), self.specialization.bucket_size() as usize * self.specialization.block_size() as usize); + let shift = self.specialization.hash_shift(); + for chunk_id in 0..del { + let ix_offset = ix_start + chunk_id * REG_SIZE; + data64[..REG_SIZE + lookahead4].clone_from_slice(data.split_at(ix_offset).1.split_at(REG_SIZE + lookahead4).0); + for quad_index in 0..(REG_SIZE>>2) { + let i = quad_index<<2; + let ffffffff = 0xffffffff; + let word = u64::from(data64[i]) + | (u64::from(data64[i + 1]) << 8) + | (u64::from(data64[i + 2]) << 16) + | (u64::from(data64[i + 3]) << 24) + | (u64::from(data64[i + 4]) << 32) + | (u64::from(data64[i + 5]) << 40) + | (u64::from(data64[i + 6]) << 48); + let mixed0 = ((((word & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed1 = (((((word >> 8) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed2 = (((((word >> 16) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed3 = (((((word >> 24) & ffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mut num_ref0 = u32::from(num[mixed0]); + let mut num_ref1 = u32::from(num[mixed1]); + let mut num_ref2 = u32::from(num[mixed2]); + let mut num_ref3 = u32::from(num[mixed3]); + num[mixed0] = num_ref0.wrapping_add(1) as u16; + num[mixed1] = num_ref1.wrapping_add(1) as u16; + num[mixed2] = num_ref2.wrapping_add(1) as u16; + num[mixed3] = num_ref3.wrapping_add(1) as u16; + num_ref0 &= (*self).specialization.block_mask(); + num_ref1 &= (*self).specialization.block_mask(); + num_ref2 &= (*self).specialization.block_mask(); + num_ref3 &= (*self).specialization.block_mask(); + let offset0: usize = (mixed0 << self.specialization.block_bits()) + num_ref0 as usize; + let offset1: usize = (mixed1 << self.specialization.block_bits()) + num_ref1 as usize; + let offset2: usize = (mixed2 << self.specialization.block_bits()) + num_ref2 as usize; + let offset3: usize = (mixed3 << self.specialization.block_bits()) + num_ref3 as usize; + buckets[offset0] = (ix_offset + i) as u32; + buckets[offset1] = (ix_offset + i + 1) as u32; + buckets[offset2] = (ix_offset + i + 2) as u32; + buckets[offset3] = (ix_offset + i + 3) as u32; + } + } + return ix_start + del * REG_SIZE; + } + ix_start + } + fn BulkStoreRangeOptRandomDupeUpdate(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) -> usize { + const REG_SIZE : usize = 32usize; + let lookahead = self.specialization.StoreLookahead(); + if mask == !0 && ix_end > ix_start + REG_SIZE && lookahead == 4{ + const lookahead4: usize = 4; + assert_eq!(lookahead4, lookahead); + let mut data64 = [0u8;REG_SIZE + lookahead4]; + let del = (ix_end - ix_start) / REG_SIZE; + let num = self.num.slice_mut(); + let buckets = self.buckets.slice_mut(); + assert_eq!(num.len(), self.specialization.bucket_size() as usize); + assert_eq!(buckets.len(), self.specialization.bucket_size() as usize * self.specialization.block_size() as usize); + let shift = self.specialization.hash_shift(); + for chunk_id in 0..del { + let ix_offset = ix_start + chunk_id * REG_SIZE; + data64[..REG_SIZE + lookahead4].clone_from_slice(data.split_at(ix_offset).1.split_at(REG_SIZE + lookahead4).0); + for i in 0..REG_SIZE { + let mixed_word = ((u32::from(data64[i]) + | (u32::from(data64[i + 1]) << 8) + | (u32::from(data64[i + 2]) << 16) + | (u32::from(data64[i + 3]) << 24)) as u64 + * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask(); + let key = mixed_word >> shift; + let minor_ix: usize = chunk_id&(*self).specialization.block_mask() as usize;// *num_ref as usize & (*self).specialization.block_mask() as usize; //GIGANTIC HAX: overwrite firsst option + let offset: usize = minor_ix + (key << self.specialization.block_bits()) as usize; + buckets[offset] = (ix_offset + i) as u32; + } + } + for (bucket_index, num_ref) in num.iter_mut().enumerate() { + let region = buckets.split_at_mut(bucket_index << self.specialization.block_bits()).1.split_at_mut( self.specialization.block_size() as usize).0; + let mut lnum = 0usize; + for block_index in 0..self.specialization.block_size() as usize{ + if region[block_index] != 0 { + let byte_addr = region[block_index]; + region[lnum] = byte_addr; + lnum += 1; + } + } + *num_ref = lnum as u16; + } + return ix_start + del * REG_SIZE; + } + ix_start + } +} + +impl + alloc::Allocator> AnyHasher + for AdvHasher { + fn Opts(&self) -> H9Opts { + self.h9_opts + } + fn PrepareDistanceCache(&self, distance_cache: &mut [i32]){ + let num_distances = self.GetHasherCommon.params.num_last_distances_to_check; + adv_prepare_distance_cache(distance_cache, num_distances); + } + fn StitchToPreviousBlock(&mut self, + num_bytes: usize, + position: usize, + ringbuffer: &[u8], + ringbuffer_mask: usize) { + StitchToPreviousBlockInternal(self, + num_bytes, + position, + ringbuffer, + ringbuffer_mask); + } + fn Prepare(&mut self, one_shot: bool, input_size:usize, data:&[u8]) ->HowPrepared { + if self.GetHasherCommon.is_prepared_ != 0 { + return HowPrepared::ALREADY_PREPARED; + } + let partial_prepare_threshold = self.specialization.bucket_size() as usize >> 6; + if one_shot && input_size <= partial_prepare_threshold { + for i in 0..input_size { + let key = self.HashBytes(&data[i..]); + self.num.slice_mut()[key] = 0; + } + } else { + for item in self.num.slice_mut()[..(self.specialization.bucket_size() as usize)].iter_mut() { + *item =0; + } + } + self.GetHasherCommon.is_prepared_ = 1; + HowPrepared::NEWLY_PREPARED + } + + fn GetHasherCommon(&mut self) -> &mut Struct1 { + &mut self.GetHasherCommon + } + fn HashTypeLength(&self) -> usize { + self.specialization.HashTypeLength() + } + fn StoreLookahead(&self) -> usize { + self.specialization.StoreLookahead() + } + fn HashBytes(&self, data: &[u8]) -> usize { + let shift = self.specialization.hash_shift(); + let h: u64 = self.specialization.load_and_mix_word(data); + (h >> shift) as (u32) as usize + } + fn StoreEvenVec4(&mut self, data: &[u8], mask: usize, ix: usize) { + if self.specialization.StoreLookahead() != 4 { + for i in 0..4 { + self.Store(data, mask, ix + i * 2); + } + return; + } + let shift = self.specialization.hash_shift(); + let num = self.num.slice_mut(); + let buckets = self.buckets.slice_mut(); + let li = ix & mask; + let lword = u64::from(data[li]) + | (u64::from(data[li + 1]) << 8) + | (u64::from(data[li + 2]) << 16) + | (u64::from(data[li + 3]) << 24) + | (u64::from(data[li + 4]) << 32) + | (u64::from(data[li + 5]) << 40) + | (u64::from(data[li + 6]) << 48) + | (u64::from(data[li + 7]) << 56); + let hi = (ix + 8) & mask; + let hword = u64::from(data[hi]) + | (u64::from(data[hi + 1]) << 8); + let mixed0 = ((((lword & 0xffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed1 = (((((lword >> 16) & 0xffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed2 = (((((lword >> 32) & 0xffffffff) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed3 = ((((((hword & 0xffff) << 16) | ((lword >> 48) & 0xffff)) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mut num_ref0 = u32::from(num[mixed0]); + num[mixed0] = num_ref0.wrapping_add(1) as u16; + num_ref0 &= (*self).specialization.block_mask(); + let mut num_ref1 = u32::from(num[mixed1]); + num[mixed1] = num_ref1.wrapping_add(1) as u16; + num_ref1 &= (*self).specialization.block_mask(); + let mut num_ref2 = u32::from(num[mixed2]); + num[mixed2] = num_ref2.wrapping_add(1) as u16; + num_ref2 &= (*self).specialization.block_mask(); + let mut num_ref3 = u32::from(num[mixed3]); + num[mixed3] = num_ref3.wrapping_add(1) as u16; + num_ref3 &= (*self).specialization.block_mask(); + let offset0: usize = (mixed0 << self.specialization.block_bits()) + num_ref0 as usize; + let offset1: usize = (mixed1 << self.specialization.block_bits()) + num_ref1 as usize; + let offset2: usize = (mixed2 << self.specialization.block_bits()) + num_ref2 as usize; + let offset3: usize = (mixed3 << self.specialization.block_bits()) + num_ref3 as usize; + buckets[offset0] = ix as u32; + buckets[offset1] = (ix + 2) as u32; + buckets[offset2] = (ix + 4) as u32; + buckets[offset3] = (ix + 6) as u32; + } + fn Store4Vec4(&mut self, data: &[u8], mask: usize, ix: usize) { + if self.specialization.StoreLookahead() != 4 { + for i in 0..4 { + self.Store(data, mask, ix + i * 4); + } + return; + } + let shift = self.specialization.hash_shift(); + let num = self.num.slice_mut(); + let buckets = self.buckets.slice_mut(); + let li = ix & mask; + let llword = u32::from(data[li]) + | (u32::from(data[li + 1]) << 8) + | (u32::from(data[li + 2]) << 16) + | (u32::from(data[li + 3]) << 24); + let luword = u32::from(data[li + 4]) + | (u32::from(data[li + 5]) << 8) + | (u32::from(data[li + 6]) << 16) + | (u32::from(data[li + 7]) << 24); + let ui = (ix + 8) & mask; + let ulword = u32::from(data[ui]) + | (u32::from(data[ui + 1]) << 8) + | (u32::from(data[ui + 2]) << 16) + | (u32::from(data[ui + 3]) << 24); + + let uuword = u32::from(data[ui + 4]) + | (u32::from(data[ui + 5]) << 8) + | (u32::from(data[ui + 6]) << 16) + | (u32::from(data[ui + 7]) << 24); + + let mixed0 = (((u64::from(llword) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed1 = (((u64::from(luword) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed2 = (((u64::from(ulword) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mixed3 = (((u64::from(uuword) * self.specialization.get_k_hash_mul()) & self.specialization.get_hash_mask()) >> shift) as usize; + let mut num_ref0 = u32::from(num[mixed0]); + num[mixed0] = num_ref0.wrapping_add(1) as u16; + num_ref0 &= (*self).specialization.block_mask(); + let mut num_ref1 = u32::from(num[mixed1]); + num[mixed1] = num_ref1.wrapping_add(1) as u16; + num_ref1 &= (*self).specialization.block_mask(); + let mut num_ref2 = u32::from(num[mixed2]); + num[mixed2] = num_ref2.wrapping_add(1) as u16; + num_ref2 &= (*self).specialization.block_mask(); + let mut num_ref3 = u32::from(num[mixed3]); + num[mixed3] = num_ref3.wrapping_add(1) as u16; + num_ref3 &= (*self).specialization.block_mask(); + let offset0: usize = (mixed0 << self.specialization.block_bits()) + num_ref0 as usize; + let offset1: usize = (mixed1 << self.specialization.block_bits()) + num_ref1 as usize; + let offset2: usize = (mixed2 << self.specialization.block_bits()) + num_ref2 as usize; + let offset3: usize = (mixed3 << self.specialization.block_bits()) + num_ref3 as usize; + buckets[offset0] = ix as u32; + buckets[offset1] = (ix + 4) as u32; + buckets[offset2] = (ix + 8) as u32; + buckets[offset3] = (ix + 12) as u32; + } + fn Store(&mut self, data: &[u8], mask: usize, ix: usize) { + let (_, data_window) = data.split_at((ix & mask) as (usize)); + let key: u32 = self.HashBytes(data_window) as u32; + let minor_ix: usize = (self.num.slice()[(key as (usize))] as (u32) & (*self).specialization.block_mask() as u32) as (usize); + let offset: usize = minor_ix.wrapping_add((key << (*self).specialization.block_bits()) as + (usize)); + self.buckets.slice_mut()[offset] = ix as (u32); + { + let _lhs = &mut self.num.slice_mut()[(key as (usize))]; + *_lhs = (*_lhs as (i32) + 1) as (u16); + } + } + fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { + for i in self.StoreRangeOptBatch(data, mask, ix_start, ix_end)..ix_end { + self.Store(data, mask, i); + } + } + fn BulkStoreRange(&mut self, data: &[u8], mask: usize, mut ix_start: usize, ix_end: usize) { + /* + if ix_start + 4096 < ix_end { + for vec_offset in 0..(ix_end - ix_start - 4096) / 16 { + self.Store4Vec4(data, mask, ix_start + vec_offset * 16); + } + ix_start += 16 * ((ix_end - ix_start - 4096) / 16); + } + if ix_start + 512 < ix_end { + for vec_offset in 0..(ix_end - ix_start - 512) / 8 { + self.StoreEvenVec4(data, mask, ix_start + vec_offset * 8); + //self.StoreRange(data, mask, ix_start + vec_offset * 8, ix_start + (1+ vec_offset) * 8); + } + ix_start += 8 * ((ix_end - ix_start - 512) / 8); + } + */ + ix_start = self.BulkStoreRangeOptMemFetch(data, mask, ix_start, ix_end); + for i in ix_start..ix_end { + self.Store(data, mask, i); + } + } + + fn FindLongestMatch(&mut self, + dictionary: Option<&BrotliDictionary>, + dictionary_hash: &[u16], + data: &[u8], + ring_buffer_mask: usize, + distance_cache: &[i32], + cur_ix: usize, + max_length: usize, + max_backward: usize, + gap: usize, + max_distance: usize, + out: &mut HasherSearchResult) + -> bool { + let opts = self.Opts(); + let cur_ix_masked: usize = cur_ix & ring_buffer_mask; + let mut is_match_found: i32 = 0i32; + let mut best_score: u64 = (*out).score; + let mut best_len: usize = (*out).len; + let mut i: usize; + (*out).len = 0usize; + (*out).len_x_code = 0usize; + i = 0usize; + let cur_data = data.split_at(cur_ix_masked).1; + while i < self.GetHasherCommon.params.num_last_distances_to_check as (usize) { + 'continue45: loop { + { + let backward: usize = distance_cache[(i as (usize))] as (usize); + let mut prev_ix: usize = cur_ix.wrapping_sub(backward); + if prev_ix >= cur_ix { + break 'continue45; + } + if backward > max_backward { + break 'continue45; + } + prev_ix = prev_ix & ring_buffer_mask; + if (cur_ix_masked.wrapping_add(best_len) > ring_buffer_mask || prev_ix.wrapping_add(best_len) > ring_buffer_mask || + cur_data[best_len] != data[prev_ix.wrapping_add(best_len)]) { + break 'continue45; + } + let prev_data = data.split_at(prev_ix).1; + + let len: usize = FindMatchLengthWithLimit(&prev_data, + &cur_data, + max_length); + if len >= 3usize || len == 2usize && (i < 2usize) { + let mut score: u64 = BackwardReferenceScoreUsingLastDistance(len, opts); + if best_score < score { + if i != 0usize { + score = score.wrapping_sub(BackwardReferencePenaltyUsingLastDistance(i)); + } + if best_score < score { + best_score = score; + best_len = len; + (*out).len = best_len; + (*out).distance = backward; + (*out).score = best_score; + is_match_found = 1i32; + } + } + } + } + break; + } + i = i.wrapping_add(1 as (usize)); + } + { + let key: u32 = self.HashBytes(cur_data) as u32; + let common_block_bits = self.specialization.block_bits(); + let num_ref_mut = &mut self.num.slice_mut()[key as usize]; + let num_copy = *num_ref_mut; + let bucket: &mut [u32] = self.buckets.slice_mut().split_at_mut((key << common_block_bits) as (usize)).1.split_at_mut( + (*self).specialization.block_size() as usize).0; + assert!(bucket.len() > (*self).specialization.block_mask() as usize); + if num_copy != 0 { + let down: usize = core::cmp::max(i32::from(num_copy) - (*self).specialization.block_size() as i32, + 0) as usize; + i = num_copy as (usize); + while i > down { + i -= 1; + let mut prev_ix = bucket[i & (*self).specialization.block_mask() as usize] as usize; + let backward = cur_ix.wrapping_sub(prev_ix); + prev_ix &= ring_buffer_mask; + if (cur_ix_masked.wrapping_add(best_len) > ring_buffer_mask || prev_ix.wrapping_add(best_len) > ring_buffer_mask || + cur_data[best_len] != data[prev_ix.wrapping_add(best_len)]) { + if backward > max_backward { + break; + } + continue; + } + if backward > max_backward { + break; + } + let prev_data = data.split_at(prev_ix as usize).1; + let len = FindMatchLengthWithLimitMin4(&prev_data, + &cur_data, + max_length); + if len != 0 { + let score: u64 = BackwardReferenceScore(len, backward, opts); + if best_score < score { + best_score = score; + best_len = len; + (*out).len = best_len; + (*out).distance = backward; + (*out).score = best_score; + is_match_found = 1i32; + } + } + } + } + bucket[((num_copy as (u32) & (self).specialization.block_mask() as u32) as (usize))] = cur_ix as (u32); + *num_ref_mut = num_ref_mut.wrapping_add(1); + } + if is_match_found == 0 && dictionary.is_some() { + let (_, cur_data) = data.split_at(cur_ix_masked as usize); + is_match_found = SearchInStaticDictionary(dictionary.unwrap(), + dictionary_hash, + self, + cur_data, + max_length, + max_backward.wrapping_add(gap), + max_distance, + out, + 0i32); + } + is_match_found != 0 + + } +} + + +pub struct BankH40 { + pub slots: [SlotH40; 65536], +} + +pub struct BankH41 { + pub slots: [SlotH41; 65536], +} + +pub struct BankH42 { + pub slots: [SlotH42; 512], +} + + +pub struct SlotH40 { + pub delta: u16, + pub next: u16, +} +pub struct SlotH41 { + pub delta: u16, + pub next: u16, +} + +pub struct SlotH42 { + pub delta: u16, + pub next: u16, +} + +// UNSUPPORTED, for now. +pub struct H40 { + pub common: Struct1, + pub addr: [u32; 32768], + pub head: [u16; 32768], + pub tiny_hash: [u8; 65536], + pub banks: [BankH40; 1], + pub free_slot_idx: [u16; 1], + pub max_hops: usize, +} + + +pub struct H41 { + pub common: Struct1, + pub addr: [u32; 32768], + pub head: [u16; 32768], + pub tiny_hash: [u8; 65536], + pub banks: [BankH41; 1], + pub free_slot_idx: [u16; 1], + pub max_hops: usize, +} + +pub struct H42 { + pub common: Struct1, + pub addr: [u32; 32768], + pub head: [u16; 32768], + pub tiny_hash: [u8; 65536], + pub banks: [BankH42; 512], + free_slot_idx: [u16; 512], + pub max_hops: usize, +} + + + + +fn unopt_ctzll(mut val: usize) -> u8 { + let mut cnt: u8 = 0i32 as (u8); + while val & 1usize == 0usize { + val = val >> 1i32; + cnt = (cnt as (i32) + 1) as (u8); + } + cnt +} + + +fn BackwardReferenceScoreUsingLastDistance(copy_length: usize, h9_opts: H9Opts) -> u64 { + ((h9_opts.literal_byte_score as u64) >> 2) + .wrapping_mul(copy_length as u64) + .wrapping_add((30u64 * 8u64).wrapping_mul(::core::mem::size_of::() as u64)) + .wrapping_add(15u64) +} + + +fn BackwardReferenceScore(copy_length: usize, backward_reference_offset: usize, h9_opts: H9Opts) -> u64 { + (30u64 * 8u64) + .wrapping_mul(::core::mem::size_of::() as u64) + .wrapping_add(((h9_opts.literal_byte_score as usize) >> 2).wrapping_mul(copy_length) as u64) + .wrapping_sub((30u64).wrapping_mul(Log2FloorNonZero(backward_reference_offset as u64) as u64)) +} + +fn Hash14(data: &[u8]) -> u32 { + let h: u32 = BROTLI_UNALIGNED_LOAD32(data).wrapping_mul(kHashMul32); + h >> 32i32 - 14i32 +} + +fn TestStaticDictionaryItem(dictionary: &BrotliDictionary, + item: usize, + data: &[u8], + max_length: usize, + max_backward: usize, + max_distance: usize, + h9_opts: H9Opts, + out: &mut HasherSearchResult) + -> i32 { + let len: usize; + let dist: usize; + let offset: usize; + let matchlen: usize; + let backward: usize; + let score: u64; + len = item & 0x1fusize; + dist = item >> 5i32; + offset = ((*dictionary).offsets_by_length[len] as (usize)).wrapping_add(len.wrapping_mul(dist)); + if len > max_length { + return 0i32; + } + matchlen = FindMatchLengthWithLimit(data, &(*dictionary).data[offset..], len); + if matchlen.wrapping_add(kCutoffTransformsCount as usize) <= len || matchlen == 0usize { + return 0i32; + } + { + let cut: u64 = len.wrapping_sub(matchlen) as u64; + let transform_id: usize = + (cut << 2i32).wrapping_add(kCutoffTransforms as u64 >> cut.wrapping_mul(6) & 0x3f) as usize; + backward = max_backward.wrapping_add(dist) + .wrapping_add(1usize) + .wrapping_add(transform_id << (*dictionary).size_bits_by_length[len] as (i32)); + } + if backward > max_distance { + return 0i32; + } + score = BackwardReferenceScore(matchlen, backward, h9_opts); + if score < (*out).score { + return 0i32; + } + (*out).len = matchlen; + (*out).len_x_code = len ^ matchlen; + (*out).distance = backward; + (*out).score = score; + 1i32 +} + +fn SearchInStaticDictionary(dictionary: &BrotliDictionary, + dictionary_hash: &[u16], + handle: &mut HasherType, + data: &[u8], + max_length: usize, + max_backward: usize, + max_distance: usize, + out: &mut HasherSearchResult, + shallow: i32) + -> i32 { + let mut key: usize; + let mut i: usize; + let mut is_match_found: i32 = 0i32; + let opts = handle.Opts(); + let xself: &mut Struct1 = handle.GetHasherCommon(); + if (*xself).dict_num_matches < (*xself).dict_num_lookups >> 7i32 { + return 0i32; + } + key = (Hash14(data) << 1i32) as (usize); //FIXME: works for any kind of hasher?? + i = 0usize; + while i < if shallow != 0 { 1u32 } else { 2u32 } as (usize) { + { + let item: usize = dictionary_hash[(key as (usize))] as (usize); + (*xself).dict_num_lookups = (*xself).dict_num_lookups.wrapping_add(1 as (usize)); + if item != 0usize { + let item_matches: i32 = + TestStaticDictionaryItem(dictionary, item, data, max_length, max_backward, max_distance, opts, out); + if item_matches != 0 { + (*xself).dict_num_matches = (*xself).dict_num_matches.wrapping_add(1 as (usize)); + is_match_found = 1i32; + } + } + } + i = i.wrapping_add(1 as (usize)); + key = key.wrapping_add(1 as (usize)); + } + is_match_found +} + +impl + alloc::Allocator> CloneWithAlloc for BasicHasher> { + fn clone_with_alloc(&self, m: &mut Alloc) -> Self { + let mut ret = BasicHasher::> { + GetHasherCommon: self.GetHasherCommon.clone(), + buckets_: H2Sub::{ + buckets_:>::alloc_cell(m, self.buckets_.buckets_.len()), + }, + h9_opts: self.h9_opts.clone(), + }; + ret.buckets_.buckets_.slice_mut().clone_from_slice(self.buckets_.buckets_.slice()); + ret + } +} +impl + alloc::Allocator> CloneWithAlloc for BasicHasher> { + fn clone_with_alloc(&self, m: &mut Alloc) -> Self { + let mut ret = BasicHasher::> { + GetHasherCommon: self.GetHasherCommon.clone(), + buckets_: H3Sub::{ + buckets_:>::alloc_cell(m, self.buckets_.buckets_.len()), + }, + h9_opts: self.h9_opts.clone(), + }; + ret.buckets_.buckets_.slice_mut().clone_from_slice(self.buckets_.buckets_.slice()); + ret + } +} +impl + alloc::Allocator> CloneWithAlloc for BasicHasher> { + fn clone_with_alloc(&self, m: &mut Alloc) -> Self { + let mut ret = BasicHasher::> { + GetHasherCommon: self.GetHasherCommon.clone(), + buckets_: H4Sub::{ + buckets_:>::alloc_cell(m, self.buckets_.buckets_.len()), + }, + h9_opts: self.h9_opts.clone(), + }; + ret.buckets_.buckets_.slice_mut().clone_from_slice(self.buckets_.buckets_.slice()); + ret + } +} +impl + alloc::Allocator> CloneWithAlloc for BasicHasher> { + fn clone_with_alloc(&self, m: &mut Alloc) -> Self { + let mut ret = BasicHasher::> { + GetHasherCommon: self.GetHasherCommon.clone(), + buckets_: H54Sub::{ + buckets_:>::alloc_cell(m, self.buckets_.len()), + }, + h9_opts: self.h9_opts.clone(), + }; + ret.buckets_.buckets_.slice_mut().clone_from_slice(self.buckets_.buckets_.slice()); + ret + } +} +impl + alloc::Allocator> CloneWithAlloc for H9 { + fn clone_with_alloc(&self, m: &mut Alloc) -> Self { + let mut num = >::alloc_cell(m, self.num_.len()); + num.slice_mut().clone_from_slice(self.num_.slice()); + let mut buckets = >::alloc_cell(m, self.buckets_.len()); + buckets.slice_mut().clone_from_slice(self.buckets_.slice()); + H9:: { + num_:num, + buckets_:buckets, + dict_search_stats_: self.dict_search_stats_.clone(), + h9_opts: self.h9_opts.clone(), + } + } +} +impl + alloc::Allocator, + Special: AdvHashSpecialization+Sized+Clone,> CloneWithAlloc for AdvHasher { + fn clone_with_alloc(&self, m: &mut Alloc) -> Self { + let mut num = >::alloc_cell(m, self.num.len()); + num.slice_mut().clone_from_slice(self.num.slice()); + let mut buckets = >::alloc_cell(m, self.buckets.len()); + buckets.slice_mut().clone_from_slice(self.buckets.slice()); + AdvHasher:: { + GetHasherCommon: self.GetHasherCommon.clone(), + specialization:self.specialization.clone(), + num:num, + buckets:buckets, + h9_opts: self.h9_opts.clone(), + } + } +} + +pub enum UnionHasher + alloc::Allocator> { + Uninit, + H2(BasicHasher>), + H3(BasicHasher>), + H4(BasicHasher>), + H54(BasicHasher>), + H5(AdvHasher), + H5q7(AdvHasher), + H5q5(AdvHasher), + H6(AdvHasher), + H9(H9), + H10(H10, H10DefaultParams>), +} +impl + alloc::Allocator> PartialEq> for UnionHasher { + fn eq(&self, other: &UnionHasher) -> bool { + match *self { + UnionHasher::H2(ref hasher) => match *other { + UnionHasher::H2(ref otherh) => *hasher == *otherh, + _ => false, + }, + UnionHasher::H3(ref hasher) => match *other { + UnionHasher::H3(ref otherh) => *hasher == *otherh, + _ => false, + }, + UnionHasher::H4(ref hasher) => match *other { + UnionHasher::H4(ref otherh) => *hasher == *otherh, + _ => false, + }, + UnionHasher::H54(ref hasher) => match *other { + UnionHasher::H54(ref otherh) => *hasher == *otherh, + _ => false, + }, + UnionHasher::H5(ref hasher) => match *other { + UnionHasher::H5(ref otherh) => *hasher == *otherh, + _ => false, + }, + UnionHasher::H5q7(ref hasher) => match *other { + UnionHasher::H5q7(ref otherh) => *hasher == *otherh, + _ => false, + }, + UnionHasher::H5q5(ref hasher) => match *other { + UnionHasher::H5q5(ref otherh) => *hasher == *otherh, + _ => false, + }, + UnionHasher::H6(ref hasher) => match *other { + UnionHasher::H6(ref otherh) => *hasher == *otherh, + _ => false, + }, + UnionHasher::H9(ref hasher) => match *other { + UnionHasher::H9(ref otherh) => *hasher == *otherh, + _ => false, + }, + UnionHasher::H10(ref hasher) => match *other { + UnionHasher::H10(ref otherh) => *hasher == *otherh, + _ => false, + }, + UnionHasher::Uninit => match *other { + UnionHasher::Uninit => true, + _ => false, + }, + } + } +} +impl + alloc::Allocator> CloneWithAlloc for UnionHasher { + fn clone_with_alloc(&self, m: &mut Alloc) -> Self { + match *self { + UnionHasher::H2(ref hasher) => UnionHasher::H2(hasher.clone_with_alloc(m)), + UnionHasher::H3(ref hasher) => UnionHasher::H3(hasher.clone_with_alloc(m)), + UnionHasher::H4(ref hasher) => UnionHasher::H4(hasher.clone_with_alloc(m)), + UnionHasher::H5(ref hasher) => UnionHasher::H5(hasher.clone_with_alloc(m)), + UnionHasher::H5q7(ref hasher) => UnionHasher::H5q7(hasher.clone_with_alloc(m)), + UnionHasher::H5q5(ref hasher) => UnionHasher::H5q5(hasher.clone_with_alloc(m)), + UnionHasher::H6(ref hasher) => UnionHasher::H6(hasher.clone_with_alloc(m)), + UnionHasher::H54(ref hasher) => UnionHasher::H54(hasher.clone_with_alloc(m)), + UnionHasher::H9(ref hasher) => UnionHasher::H9(hasher.clone_with_alloc(m)), + UnionHasher::H10(ref hasher) => UnionHasher::H10(hasher.clone_with_alloc(m)), + UnionHasher::Uninit => UnionHasher::Uninit, + } + } +} +macro_rules! match_all_hashers_mut { + ($xself : expr, $func_call : ident, $( $args:expr),*) => { + match $xself { + &mut UnionHasher::H2(ref mut hasher) => hasher.$func_call($($args),*), + &mut UnionHasher::H3(ref mut hasher) => hasher.$func_call($($args),*), + &mut UnionHasher::H4(ref mut hasher) => hasher.$func_call($($args),*), + &mut UnionHasher::H5(ref mut hasher) => hasher.$func_call($($args),*), + &mut UnionHasher::H5q7(ref mut hasher) => hasher.$func_call($($args),*), + &mut UnionHasher::H5q5(ref mut hasher) => hasher.$func_call($($args),*), + &mut UnionHasher::H6(ref mut hasher) => hasher.$func_call($($args),*), + &mut UnionHasher::H54(ref mut hasher) => hasher.$func_call($($args),*), + &mut UnionHasher::H9(ref mut hasher) => hasher.$func_call($($args),*), + &mut UnionHasher::H10(ref mut hasher) => hasher.$func_call($($args),*), + &mut UnionHasher::Uninit => panic!("UNINTIALIZED"), + } + }; +} +macro_rules! match_all_hashers { + ($xself : expr, $func_call : ident, $( $args:expr),*) => { + match $xself { + &UnionHasher::H2(ref hasher) => hasher.$func_call($($args),*), + &UnionHasher::H3(ref hasher) => hasher.$func_call($($args),*), + &UnionHasher::H4(ref hasher) => hasher.$func_call($($args),*), + &UnionHasher::H5(ref hasher) => hasher.$func_call($($args),*), + &UnionHasher::H5q7(ref hasher) => hasher.$func_call($($args),*), + &UnionHasher::H5q5(ref hasher) => hasher.$func_call($($args),*), + &UnionHasher::H6(ref hasher) => hasher.$func_call($($args),*), + &UnionHasher::H54(ref hasher) => hasher.$func_call($($args),*), + &UnionHasher::H9(ref hasher) => hasher.$func_call($($args),*), + &UnionHasher::H10(ref hasher) => hasher.$func_call($($args),*), + &UnionHasher::Uninit => panic!("UNINTIALIZED"), + } + }; +} +impl + alloc::Allocator> AnyHasher + for UnionHasher { + fn Opts(&self) -> H9Opts { + return match_all_hashers!(self, Opts,); + } + fn GetHasherCommon(&mut self) -> &mut Struct1 { + return match_all_hashers_mut!(self, GetHasherCommon,); + }/* + fn GetH10Tree(&mut self) -> Option<&mut H10> { + return match_all_hashers_mut!(self, GetH10Tree,); + }*/ + fn Prepare(&mut self, one_shot: bool, input_size: usize, data: &[u8]) -> HowPrepared { + return match_all_hashers_mut!(self, Prepare, one_shot, input_size, data); + } + fn HashBytes(&self, data: &[u8]) -> usize { + return match_all_hashers!(self, HashBytes, data); + } + fn HashTypeLength(&self) -> usize { + return match_all_hashers!(self, HashTypeLength,); + } + fn StoreLookahead(&self) -> usize { + return match_all_hashers!(self, StoreLookahead,); + } + fn PrepareDistanceCache(&self, distance_cache: &mut [i32]) { + return match_all_hashers!(self, PrepareDistanceCache, distance_cache); + } + fn StitchToPreviousBlock(&mut self, + num_bytes: usize, + position: usize, + ringbuffer: &[u8], + ringbuffer_mask: usize) { + return match_all_hashers_mut!(self, + StitchToPreviousBlock, + num_bytes, + position, + ringbuffer, + ringbuffer_mask); + } + fn FindLongestMatch(&mut self, + dictionary: Option<&BrotliDictionary>, + dictionary_hash: &[u16], + data: &[u8], + ring_buffer_mask: usize, + distance_cache: &[i32], + cur_ix: usize, + max_length: usize, + max_backward: usize, + gap: usize, + max_distance: usize, + out: &mut HasherSearchResult) + -> bool { + return match_all_hashers_mut!(self, + FindLongestMatch, + dictionary, + dictionary_hash, + data, + ring_buffer_mask, + distance_cache, + cur_ix, + max_length, + max_backward, + gap, + max_distance, + out); + } + fn Store(&mut self, data: &[u8], mask: usize, ix: usize) { + return match_all_hashers_mut!(self, Store, data, mask, ix); + } + fn StoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { + return match_all_hashers_mut!(self, StoreRange, data, mask, ix_start, ix_end); + } + fn BulkStoreRange(&mut self, data: &[u8], mask: usize, ix_start: usize, ix_end: usize) { + return match_all_hashers_mut!(self, BulkStoreRange, data, mask, ix_start, ix_end); + } +} + +impl + alloc::Allocator> UnionHasher { + pub fn free (&mut self, alloc: &mut Alloc) { + match self { + &mut UnionHasher::H2(ref mut hasher) => { + >::free_cell(alloc, core::mem::replace(&mut hasher.buckets_.buckets_, >::AllocatedMemory::default())); + } + &mut UnionHasher::H3(ref mut hasher) => { + >::free_cell(alloc, core::mem::replace(&mut hasher.buckets_.buckets_, >::AllocatedMemory::default())); + } + &mut UnionHasher::H4(ref mut hasher) => { + >::free_cell(alloc, core::mem::replace(&mut hasher.buckets_.buckets_, >::AllocatedMemory::default())); + } + &mut UnionHasher::H54(ref mut hasher) => { + >::free_cell(alloc, core::mem::replace(&mut hasher.buckets_.buckets_, >::AllocatedMemory::default())); + } + &mut UnionHasher::H5q7(ref mut hasher) => { + >::free_cell(alloc, core::mem::replace(&mut hasher.num, >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut hasher.buckets, >::AllocatedMemory::default())); + } + &mut UnionHasher::H5q5(ref mut hasher) => { + >::free_cell(alloc, core::mem::replace(&mut hasher.num, >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut hasher.buckets, >::AllocatedMemory::default())); + } + &mut UnionHasher::H5(ref mut hasher) => { + >::free_cell(alloc, core::mem::replace(&mut hasher.num, >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut hasher.buckets, >::AllocatedMemory::default())); + } + &mut UnionHasher::H6(ref mut hasher) => { + >::free_cell(alloc, core::mem::replace(&mut hasher.num, >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut hasher.buckets, >::AllocatedMemory::default())); + } + &mut UnionHasher::H9(ref mut hasher) => { + >::free_cell(alloc,core::mem::replace(&mut hasher.num_, >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut hasher.buckets_, >::AllocatedMemory::default())); + } + &mut UnionHasher::H10(ref mut hasher) => { + hasher.free(alloc); + } + &mut UnionHasher::Uninit => {} + } + *self = UnionHasher::::default(); + } +} + + +impl + alloc::Allocator> Default + for UnionHasher { + fn default() -> Self { + UnionHasher::Uninit + } +} + +/*UnionHasher::H2(BasicHasher { + GetHasherCommon:Struct1{params:BrotliHasherParams{ + type_:2, + block_bits: 8, + bucket_bits:16, + hash_len: 4, + num_last_distances_to_check:0}, + is_prepared_:0, + dict_num_lookups:0, + dict_num_matches:0, + }, + buckets_:H2Sub{ + buckets_:[0;65537], + }, + }) + */ +fn CreateBackwardReferences(dictionary: Option<&BrotliDictionary>, + dictionary_hash: &[u16], + num_bytes: usize, + mut position: usize, + ringbuffer: &[u8], + ringbuffer_mask: usize, + params: &BrotliEncoderParams, + hasher: &mut AH, + dist_cache: &mut [i32], + last_insert_len: &mut usize, + mut commands: &mut [Command], + num_commands: &mut usize, + num_literals: &mut usize) { + let gap = 0usize; + let max_backward_limit: usize = (1usize << (*params).lgwin).wrapping_sub(16usize); + let mut new_commands_count: usize = 0; + let mut insert_length: usize = *last_insert_len; + let pos_end: usize = position.wrapping_add(num_bytes); + let store_end: usize = if num_bytes >= hasher.StoreLookahead() { + position.wrapping_add(num_bytes).wrapping_sub(hasher.StoreLookahead()).wrapping_add(1usize) + } else { + position + }; + let random_heuristics_window_size: usize = LiteralSpreeLengthForSparseSearch(params); + let mut apply_random_heuristics: usize = position.wrapping_add(random_heuristics_window_size); + let kMinScore: u64 = (30u64 * 8) + .wrapping_mul(::core::mem::size_of::() as u64) + .wrapping_add(100u64); + hasher.PrepareDistanceCache(dist_cache); + while position.wrapping_add(hasher.HashTypeLength()) < pos_end { + let mut max_length: usize = pos_end.wrapping_sub(position); + let mut max_distance: usize = brotli_min_size_t(position, max_backward_limit); + let mut sr = HasherSearchResult { + len: 0, + len_x_code: 0, + distance: 0, + score: 0, + }; + sr.len = 0usize; + sr.len_x_code = 0usize; + sr.distance = 0usize; + sr.score = kMinScore; + if hasher.FindLongestMatch(dictionary, + dictionary_hash, + ringbuffer, + ringbuffer_mask, + dist_cache, + position, + max_length, + max_distance, + gap, + params.dist.max_distance, + &mut sr) { + let mut delayed_backward_references_in_row: i32 = 0i32; + max_length = max_length.wrapping_sub(1 as (usize)); + 'break6: loop { + 'continue7: loop { + let cost_diff_lazy: u64 = 175; + let is_match_found: bool; + let mut sr2 = HasherSearchResult { + len: 0, + len_x_code: 0, + distance: 0, + score: 0, + }; + sr2.len = if (*params).quality < 5 { + brotli_min_size_t(sr.len.wrapping_sub(1usize), max_length) + } else { + 0usize + }; + sr2.len_x_code = 0usize; + sr2.distance = 0usize; + sr2.score = kMinScore; + max_distance = brotli_min_size_t(position.wrapping_add(1usize), max_backward_limit); + is_match_found = hasher.FindLongestMatch(dictionary, + dictionary_hash, + ringbuffer, + ringbuffer_mask, + dist_cache, + position.wrapping_add(1usize), + max_length, + max_distance, + gap, + params.dist.max_distance, + &mut sr2); + if is_match_found && (sr2.score >= sr.score.wrapping_add(cost_diff_lazy)) { + position = position.wrapping_add(1 as (usize)); + insert_length = insert_length.wrapping_add(1 as (usize)); + sr = sr2; + if { + delayed_backward_references_in_row = delayed_backward_references_in_row + 1; + delayed_backward_references_in_row + } < 4i32 && + (position.wrapping_add(hasher.HashTypeLength()) < pos_end) { + { + break 'continue7; + } + } + } + break 'break6; + } + max_length = max_length.wrapping_sub(1 as (usize)); + } + apply_random_heuristics = position.wrapping_add((2usize).wrapping_mul(sr.len)) + .wrapping_add(random_heuristics_window_size); + max_distance = brotli_min_size_t(position, max_backward_limit); + { + let distance_code: usize = ComputeDistanceCode(sr.distance, max_distance, dist_cache); + if sr.distance <= max_distance && (distance_code > 0usize) { + dist_cache[(3usize)] = dist_cache[(2usize)]; + dist_cache[(2usize)] = dist_cache[(1usize)]; + dist_cache[(1usize)] = dist_cache[(0usize)]; + dist_cache[(0usize)] = sr.distance as (i32); + hasher.PrepareDistanceCache(dist_cache); + } + new_commands_count += 1; + InitCommand({ + let (mut _old, new_commands) = core::mem::replace(&mut commands, &mut []).split_at_mut(1); + commands = new_commands; + &mut _old[0] + }, + ¶ms.dist, + insert_length, + sr.len, + sr.len ^ sr.len_x_code, + distance_code); + } + *num_literals = (*num_literals).wrapping_add(insert_length); + insert_length = 0usize; + hasher.StoreRange(ringbuffer, + ringbuffer_mask, + position.wrapping_add(2usize), + brotli_min_size_t(position.wrapping_add(sr.len), store_end)); + position = position.wrapping_add(sr.len); + } else { + insert_length = insert_length.wrapping_add(1 as (usize)); + position = position.wrapping_add(1 as (usize)); + + if position > apply_random_heuristics { + let kMargin: usize = brotli_max_size_t(hasher.StoreLookahead().wrapping_sub(1usize), + 4usize); + if position.wrapping_add(16usize) >= pos_end.wrapping_sub(kMargin) { + insert_length = insert_length.wrapping_add(pos_end - position); + position = pos_end; + } else if position > + apply_random_heuristics.wrapping_add((4usize) + .wrapping_mul(random_heuristics_window_size)) { + hasher.Store4Vec4(ringbuffer, ringbuffer_mask, position); + insert_length = insert_length.wrapping_add(16usize); + position = position.wrapping_add(16usize); + } else { + hasher.StoreEvenVec4(ringbuffer, ringbuffer_mask, position); + insert_length = insert_length.wrapping_add(8usize); + position = position.wrapping_add(8usize); + } + } + } + } + insert_length = insert_length.wrapping_add(pos_end.wrapping_sub(position)); + *last_insert_len = insert_length; + *num_commands = (*num_commands).wrapping_add(new_commands_count); +} +pub fn BrotliCreateBackwardReferences + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator> + (alloc : &mut Alloc, + dictionary: &BrotliDictionary, + num_bytes: usize, + position: usize, + ringbuffer: &[u8], + ringbuffer_mask: usize, + params: &BrotliEncoderParams, + hasher_union: &mut UnionHasher, + dist_cache: &mut [i32], + last_insert_len: &mut usize, + commands: &mut [Command], + num_commands: &mut usize, + num_literals: &mut usize) { + match (hasher_union) { + &mut UnionHasher::Uninit => panic!("working with uninitialized hash map"), + &mut UnionHasher::H10(ref mut hasher) => { + if params.quality >= 11 { + super::backward_references_hq::BrotliCreateHqZopfliBackwardReferences( + alloc, if params.use_dictionary {Some(dictionary)} else {None}, + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + hasher, + dist_cache, + last_insert_len, + commands, + num_commands, + num_literals) + } else { + super::backward_references_hq::BrotliCreateZopfliBackwardReferences( + alloc, + if params.use_dictionary {Some(dictionary)} else {None}, + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + hasher, + dist_cache, + last_insert_len, + commands, + num_commands, + num_literals) + } + } + &mut UnionHasher::H2(ref mut hasher) => { + CreateBackwardReferences(if params.use_dictionary {Some(dictionary)} else {None}, + &kStaticDictionaryHash[..], + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + hasher, + dist_cache, + last_insert_len, + commands, + num_commands, + num_literals) + } + &mut UnionHasher::H3(ref mut hasher) => { + CreateBackwardReferences(if params.use_dictionary {Some(dictionary)} else {None}, + &kStaticDictionaryHash[..], + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + hasher, + dist_cache, + last_insert_len, + commands, + num_commands, + num_literals) + } + &mut UnionHasher::H4(ref mut hasher) => { + CreateBackwardReferences(if params.use_dictionary {Some(dictionary)} else {None}, + &kStaticDictionaryHash[..], + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + hasher, + dist_cache, + last_insert_len, + commands, + num_commands, + num_literals) + } + &mut UnionHasher::H5(ref mut hasher) => { + CreateBackwardReferences(if params.use_dictionary {Some(dictionary)} else {None}, + &kStaticDictionaryHash[..], + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + hasher, + dist_cache, + last_insert_len, + commands, + num_commands, + num_literals) + } + &mut UnionHasher::H5q7(ref mut hasher) => { + CreateBackwardReferences(if params.use_dictionary {Some(dictionary)} else {None}, + &kStaticDictionaryHash[..], + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + hasher, + dist_cache, + last_insert_len, + commands, + num_commands, + num_literals) + } + &mut UnionHasher::H5q5(ref mut hasher) => { + CreateBackwardReferences(if params.use_dictionary {Some(dictionary)} else {None}, + &kStaticDictionaryHash[..], + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + hasher, + dist_cache, + last_insert_len, + commands, + num_commands, + num_literals) + } + &mut UnionHasher::H6(ref mut hasher) => { + CreateBackwardReferences(if params.use_dictionary {Some(dictionary)} else {None}, + &kStaticDictionaryHash[..], + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + hasher, + dist_cache, + last_insert_len, + commands, + num_commands, + num_literals) + } + &mut UnionHasher::H9(ref mut hasher) => { + CreateBackwardReferences(if params.use_dictionary {Some(dictionary)} else {None}, + &kStaticDictionaryHash[..], + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + hasher, + dist_cache, + last_insert_len, + commands, + num_commands, + num_literals) + } + &mut UnionHasher::H54(ref mut hasher) => { + CreateBackwardReferences(if params.use_dictionary {Some(dictionary)} else {None}, + &kStaticDictionaryHash[..], + num_bytes, + position, + ringbuffer, + ringbuffer_mask, + params, + hasher, + dist_cache, + last_insert_len, + commands, + num_commands, + num_literals) + } + } +} diff --git a/rust/vendor/brotli/src/enc/backward_references/test.rs b/rust/vendor/brotli/src/enc/backward_references/test.rs new file mode 100755 index 0000000..8ac7fbb --- /dev/null +++ b/rust/vendor/brotli/src/enc/backward_references/test.rs @@ -0,0 +1,227 @@ +#![cfg(feature="std")] +#![cfg(test)] +use enc::{Allocator, SliceWrapper}; +use super::{AdvHasher, H5Sub, HQ7Sub, + Struct1, BrotliHasherParams, H9Opts, + CloneWithAlloc, AnyHasher, }; +use ::alloc_stdlib::StandardAlloc; +static RANDOM_THEN_UNICODE: &'static [u8] = include_bytes!("../../../testdata/random_then_unicode");//&[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55]; +#[cfg(feature="std")] +#[test] +fn test_bulk_store_range() { + let params_hasher = BrotliHasherParams { + type_: 5, + block_bits: 6, + bucket_bits: 15, + num_last_distances_to_check:10, + hash_len: 4, + literal_byte_score: 540, + }; + let block_size = 1u64 << params_hasher.block_bits; + let bucket_size = 1u64 << params_hasher.bucket_bits; + let mut alloc = StandardAlloc::default(); + let mut buckets = >::alloc_cell(&mut alloc, (bucket_size * block_size) as usize); + let mut num = >::alloc_cell(&mut alloc, bucket_size as usize); + + let mut hasher_a = AdvHasher::{ + buckets: buckets, + h9_opts: H9Opts::new(¶ms_hasher), + num: num, + GetHasherCommon: Struct1 { + params: params_hasher, + is_prepared_: 1, + dict_num_lookups: 0, + dict_num_matches: 0, + }, + specialization: H5Sub { + hash_shift_: 32i32 - params_hasher.bucket_bits, + bucket_size_: bucket_size as u32, + block_bits_: params_hasher.block_bits as i32, + block_mask_: block_size.wrapping_sub(1u64) as u32, + } + }; + buckets = >::alloc_cell(&mut alloc, (bucket_size * block_size) as usize); + num = >::alloc_cell(&mut alloc, bucket_size as usize); + let mut hasher_b = hasher_a.clone_with_alloc(&mut alloc); + assert!(hasher_a == hasher_b); + let mut hasher_e = hasher_a.clone_with_alloc(&mut alloc); + let mut hasher_c = AdvHasher::{ + buckets: buckets, + h9_opts: H9Opts::new(¶ms_hasher), + num: num, + GetHasherCommon: Struct1 { + params: params_hasher, + is_prepared_: 1, + dict_num_lookups: 0, + dict_num_matches: 0, + }, + specialization: HQ7Sub {}, + }; + let mut hasher_d = hasher_c.clone_with_alloc(&mut alloc); + assert!(hasher_d == hasher_c); + hasher_a.BulkStoreRange(RANDOM_THEN_UNICODE, !0usize, 15, RANDOM_THEN_UNICODE.len() - 8); + hasher_c.BulkStoreRange(RANDOM_THEN_UNICODE, !0usize, 15, RANDOM_THEN_UNICODE.len() - 8); + for i in 15..RANDOM_THEN_UNICODE.len() - 8 { + hasher_b.Store(RANDOM_THEN_UNICODE, !0usize, i); + } + hasher_d.StoreRange(RANDOM_THEN_UNICODE, !0usize, 15, RANDOM_THEN_UNICODE.len() - 8); + let ret_start = hasher_e.StoreRangeOptBatch(RANDOM_THEN_UNICODE, !0, 15, RANDOM_THEN_UNICODE.len() - 8); + assert!(ret_start > 15); + hasher_e.BulkStoreRange(RANDOM_THEN_UNICODE, !0, ret_start, RANDOM_THEN_UNICODE.len() - 8); + assert_eq!(hasher_a.buckets.slice(), hasher_c.buckets.slice()); + assert_eq!(hasher_b.buckets.slice(), hasher_d.buckets.slice()); + assert_eq!(hasher_a.num.slice(), hasher_c.num.slice()); + assert_eq!(hasher_b.num.slice(), hasher_d.num.slice()); + assert_eq!(hasher_a.buckets.slice(), hasher_b.buckets.slice()); + assert_eq!(hasher_c.buckets.slice(), hasher_d.buckets.slice()); + assert_eq!(hasher_a.num.slice(), hasher_b.num.slice()); + assert_eq!(hasher_c.num.slice(), hasher_d.num.slice()); + assert!(hasher_a == hasher_b); + assert!(hasher_d == hasher_c); + assert!(hasher_a == hasher_e); +} +#[cfg(feature="std")] +#[test] +// does not use the fancy optimizations for q7 +fn test_bulk_store_range_off_spec() { + let params_hasher = BrotliHasherParams { + type_: 5, + block_bits: 6, + bucket_bits: 15, + num_last_distances_to_check:10, + hash_len: 4, + literal_byte_score: 540, + }; + let block_size = 1u64 << params_hasher.block_bits; + let bucket_size = 1u64 << params_hasher.bucket_bits; + let mut alloc = StandardAlloc::default(); + let mut buckets = >::alloc_cell(&mut alloc, (bucket_size * block_size) as usize); + let mut num = >::alloc_cell(&mut alloc, bucket_size as usize); + + let mut hasher_a = AdvHasher::{ + buckets: buckets, + h9_opts: H9Opts::new(¶ms_hasher), + num: num, + GetHasherCommon: Struct1 { + params: params_hasher, + is_prepared_: 1, + dict_num_lookups: 0, + dict_num_matches: 0, + }, + specialization: H5Sub { + hash_shift_: 32i32 - params_hasher.bucket_bits, + bucket_size_: bucket_size as u32, + block_bits_: params_hasher.block_bits as i32, + block_mask_: block_size.wrapping_sub(1u64) as u32, + } + }; + buckets = >::alloc_cell(&mut alloc, (bucket_size * block_size) as usize); + num = >::alloc_cell(&mut alloc, bucket_size as usize); + let mut hasher_b = hasher_a.clone_with_alloc(&mut alloc); + assert!(hasher_a == hasher_b); + let mut hasher_c = AdvHasher::{ + buckets: buckets, + h9_opts: H9Opts::new(¶ms_hasher), + num: num, + GetHasherCommon: Struct1 { + params: params_hasher, + is_prepared_: 1, + dict_num_lookups: 0, + dict_num_matches: 0, + }, + specialization: HQ7Sub {}, + }; + let mut hasher_d = hasher_c.clone_with_alloc(&mut alloc); + assert!(hasher_d == hasher_c); + hasher_a.BulkStoreRange(RANDOM_THEN_UNICODE, 0xfff, 15, RANDOM_THEN_UNICODE.len() - 8); + hasher_c.BulkStoreRange(RANDOM_THEN_UNICODE, 0xfff, 15, RANDOM_THEN_UNICODE.len() - 8); + hasher_c.BulkStoreRange(RANDOM_THEN_UNICODE, 0xfff, RANDOM_THEN_UNICODE.len(), RANDOM_THEN_UNICODE.len() - 8); // noop + for i in 15..RANDOM_THEN_UNICODE.len() - 8 { + hasher_b.Store(RANDOM_THEN_UNICODE, 0xfff, i); + hasher_d.Store(RANDOM_THEN_UNICODE, 0xfff, i); + + } + assert_eq!(hasher_a.buckets.slice(), hasher_c.buckets.slice()); + assert_eq!(hasher_b.buckets.slice(), hasher_d.buckets.slice()); + assert_eq!(hasher_a.num.slice(), hasher_c.num.slice()); + assert_eq!(hasher_b.num.slice(), hasher_d.num.slice()); + assert!(hasher_a == hasher_b); + assert!(hasher_d == hasher_c); +} + + + +#[cfg(feature="std")] +#[test] +fn test_bulk_store_range_pow2() { + let params_hasher = BrotliHasherParams { + type_: 5, + block_bits: 6, + bucket_bits: 15, + num_last_distances_to_check:10, + hash_len: 4, + literal_byte_score: 540, + }; + let block_size = 1u64 << params_hasher.block_bits; + let bucket_size = 1u64 << params_hasher.bucket_bits; + let mut alloc = StandardAlloc::default(); + let mut buckets = >::alloc_cell(&mut alloc, (bucket_size * block_size) as usize); + let mut num = >::alloc_cell(&mut alloc, bucket_size as usize); + + let mut hasher_a = AdvHasher::{ + buckets: buckets, + h9_opts: H9Opts::new(¶ms_hasher), + num: num, + GetHasherCommon: Struct1 { + params: params_hasher, + is_prepared_: 1, + dict_num_lookups: 0, + dict_num_matches: 0, + }, + specialization: H5Sub { + hash_shift_: 32i32 - params_hasher.bucket_bits, + bucket_size_: bucket_size as u32, + block_bits_: params_hasher.block_bits as i32, + block_mask_: block_size.wrapping_sub(1u64) as u32, + } + }; + buckets = >::alloc_cell(&mut alloc, (bucket_size * block_size) as usize); + num = >::alloc_cell(&mut alloc, bucket_size as usize); + let mut hasher_b = hasher_a.clone_with_alloc(&mut alloc); + assert!(hasher_a == hasher_b); + let mut hasher_e = hasher_a.clone_with_alloc(&mut alloc); + let mut hasher_c = AdvHasher::{ + buckets: buckets, + h9_opts: H9Opts::new(¶ms_hasher), + num: num, + GetHasherCommon: Struct1 { + params: params_hasher, + is_prepared_: 1, + dict_num_lookups: 0, + dict_num_matches: 0, + }, + specialization: HQ7Sub {}, + }; + let mut hasher_d = hasher_c.clone_with_alloc(&mut alloc); + assert!(hasher_d == hasher_c); + hasher_a.BulkStoreRange(RANDOM_THEN_UNICODE, !0usize, RANDOM_THEN_UNICODE.len() - 64-3, RANDOM_THEN_UNICODE.len()-3); + hasher_c.BulkStoreRange(RANDOM_THEN_UNICODE, !0usize, RANDOM_THEN_UNICODE.len() - 64-3, RANDOM_THEN_UNICODE.len()-3); + for i in RANDOM_THEN_UNICODE.len() - 64 - 3 ..RANDOM_THEN_UNICODE.len()-3 { + hasher_b.Store(RANDOM_THEN_UNICODE, !0usize, i); + } + hasher_d.StoreRange(RANDOM_THEN_UNICODE, !0usize, RANDOM_THEN_UNICODE.len() - 64-3, RANDOM_THEN_UNICODE.len()-3); + let ret_start = hasher_e.StoreRangeOptBatch(RANDOM_THEN_UNICODE, !0, RANDOM_THEN_UNICODE.len() - 64-3, RANDOM_THEN_UNICODE.len()-3); + assert!(ret_start > 15); + hasher_e.BulkStoreRange(RANDOM_THEN_UNICODE, !0, ret_start, RANDOM_THEN_UNICODE.len()-3); + assert_eq!(hasher_a.buckets.slice(), hasher_c.buckets.slice()); + assert_eq!(hasher_b.buckets.slice(), hasher_d.buckets.slice()); + assert_eq!(hasher_a.num.slice(), hasher_c.num.slice()); + assert_eq!(hasher_b.num.slice(), hasher_d.num.slice()); + assert_eq!(hasher_a.buckets.slice(), hasher_b.buckets.slice()); + assert_eq!(hasher_c.buckets.slice(), hasher_d.buckets.slice()); + assert_eq!(hasher_a.num.slice(), hasher_b.num.slice()); + assert_eq!(hasher_c.num.slice(), hasher_d.num.slice()); + assert!(hasher_a == hasher_b); + assert!(hasher_d == hasher_c); + assert!(hasher_a == hasher_e); +} diff --git a/rust/vendor/brotli/src/enc/bit_cost.rs b/rust/vendor/brotli/src/enc/bit_cost.rs new file mode 100755 index 0000000..3eb5878 --- /dev/null +++ b/rust/vendor/brotli/src/enc/bit_cost.rs @@ -0,0 +1,404 @@ +#![allow(dead_code)] +use core; +use super::histogram::CostAccessors; +use super::super::alloc::SliceWrapper; + +use super::util::{brotli_max_uint32_t, FastLog2, floatX, FastLog2u16}; +#[cfg(feature="simd")] +use packed_simd_2::IntoBits; +use super::vectorization::{v256,v256i, Mem256i, sum8, cast_f32_to_i32, cast_i32_to_f32, log2i}; + +static kCopyBase: [u32; 24] = [2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30, 38, 54, 70, + 102, 134, 198, 326, 582, 1094, 2118]; + +static kCopyExtra: [u32; 24] = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, + 9, 10, 24]; + +static kBrotliMinWindowBits: i32 = 10i32; + +static kBrotliMaxWindowBits: i32 = 24i32; + + + +pub fn ShannonEntropy(mut population: &[u32], size: usize, total: &mut usize) -> super::util::floatX { + let mut sum: usize = 0usize; + let mut retval: super::util::floatX = 0i32 as super::util::floatX; + let mut p: usize; + if size & 1usize != 0 && population.len() != 0 { + p = population[0] as usize; + population = population.split_at(1).1; + sum = sum.wrapping_add(p); + retval = retval - p as super::util::floatX * FastLog2u16(p as u16); + } + for pop_iter in population.split_at((size >> 1) << 1).0 { + p = *pop_iter as usize; + sum = sum.wrapping_add(p); + retval = retval - p as super::util::floatX * FastLog2u16(p as u16); + } + if sum != 0 { + retval = retval + sum as super::util::floatX * FastLog2(sum as u64); // not sure it's 16 bit + } + *total = sum; + retval +} + +#[inline(always)] +pub fn BitsEntropy(population: &[u32], size: usize) -> super::util::floatX { + let mut sum: usize = 0; + let mut retval: super::util::floatX = ShannonEntropy(population, size, &mut sum); + if retval < sum as super::util::floatX { + retval = sum as super::util::floatX; + } + retval +} + +const BROTLI_REPEAT_ZERO_CODE_LENGTH: usize = 17; +const BROTLI_CODE_LENGTH_CODES: usize = BROTLI_REPEAT_ZERO_CODE_LENGTH + 1; +/* +use std::io::{self, Error, ErrorKind, Read, Write}; + +macro_rules! println_stderr( + ($($val:tt)*) => { { + writeln!(&mut ::std::io::stderr(), $($val)*).unwrap(); + } } +); +*/ + +#[cfg(feature="vector_scratch_space")] +const vectorize_population_cost : bool = true; + +#[cfg(not(feature="vector_scratch_space"))] +const vectorize_population_cost : bool = false; + + + +fn CostComputation >(depth_histo: &mut [u32;BROTLI_CODE_LENGTH_CODES], + nnz_data: &T, + nnz: usize, + total_count: super::util::floatX, + log2total: super::util::floatX) -> super::util::floatX { + let mut bits : super::util::floatX = 0.0 as super::util::floatX; + if true { + let mut max_depth : usize = 1; + for i in 0..nnz { + // Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) = + // = log2(total_count) - log2(count(symbol)) + let element = nnz_data.slice()[i>>3].extract(i&7); + let log2p = log2total - FastLog2u16(element as u16); + // Approximate the bit depth by round(-log2(P(symbol))) + let depth = core::cmp::min((log2p + 0.5) as u8, 15u8); + bits += element as super::util::floatX * log2p; + if (depth as usize > max_depth) { + max_depth = depth as usize; + } + depth_histo[depth as usize] += 1; + } + + // Add the estimated encoding cost of the code length code histogram. + bits += (18 + 2 * max_depth) as super::util::floatX; + // Add the entropy of the code length code histogram. + bits += BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES); + //println_stderr!("{:?} {:?}", &depth_histo[..], bits); + return bits; + } + let rem = nnz & 7; + let nnz_srl_3 = nnz >> 3; + if true { + let mut vec_max_depth :[i32;8] = [1;8]; + let mut depth_histo_vec = [[0i32;BROTLI_CODE_LENGTH_CODES]; 8]; + for nnz_data_vec in nnz_data.slice().split_at(nnz_srl_3).0.iter() { + for i in 0..8 { + // Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) = + // = log2(total_count) - log2(count(symbol)) + let ele = nnz_data_vec.extract(i); + let log2p = log2total - FastLog2u16(ele as u16); + // Approximate the bit depth by round(-log2(P(symbol))) + let depth = core::cmp::min((log2p + 0.5) as i32, 15) as i32; + bits += ele as super::util::floatX * log2p; + vec_max_depth[i] = core::cmp::max(vec_max_depth[i], depth); + depth_histo_vec[i][depth as usize] += 1; + } + } + let mut max_depth = vec_max_depth[7]; + for i in 0..8 { + for j in 0..BROTLI_CODE_LENGTH_CODES { + depth_histo[j] += depth_histo_vec[i][j] as u32; + } + max_depth = core::cmp::max(vec_max_depth[i], max_depth); + } + if rem != 0 { + let last_vec = nnz_data.slice()[nnz_srl_3]; + for i in 0..rem { // remainder won't have last element for sure + let element = last_vec.extract(i); + let log2p = log2total - FastLog2u16(element as u16); + // Approximate the bit depth by round(-log2(P(symbol))) + let depth = core::cmp::min((log2p + 0.5) as i32, 15); + bits += element as super::util::floatX * log2p; + max_depth = core::cmp::max(depth, max_depth); + depth_histo[depth as usize] += 1; + } + } + // Add the estimated encoding cost of the code length code histogram. + bits += (18 + 2 * max_depth) as super::util::floatX; + // Add the entropy of the code length code histogram. + bits += BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES); + //println_stderr!("{:?} {:?}", &depth_histo[..], bits); + return bits; + } + let pow2l = v256::new( + 1.0/*0.7071067811865476*/ as floatX, + 0.3535533905932738 as floatX, + 0.1767766952966369 as floatX, + 0.0883883476483184 as floatX, + 0.0441941738241592 as floatX, + 0.0220970869120796 as floatX, + 0.0110485434560398 as floatX, + 0.0055242717280199 as floatX); + let pow2h = v256::new(//FIXME: setr + 0.0027621358640100 as floatX, + 0.0013810679320050 as floatX, + 0.0006905339660025 as floatX, + 0.0003452669830012 as floatX, + 0.0001726334915006 as floatX, + 0.0000863167457503 as floatX, + 0.0000431583728752 as floatX, + /*0.0000215791864376f*/0.0 as floatX); + let ymm_tc = v256::splat(total_count as floatX); + let search_depthl = cast_f32_to_i32(pow2l * ymm_tc); + let search_depthh = cast_f32_to_i32(pow2h * ymm_tc); + let mut suml = v256i::splat(0); + let mut sumh = v256i::splat(0); + for nnz_data_vec in nnz_data.slice().split_at(nnz_srl_3).0.iter() { + for sub_data_item_index in 0..8 { + let count = v256i::splat(nnz_data_vec.extract(sub_data_item_index)); + let cmpl:v256i = count.gt(search_depthl).into_bits(); + let cmph:v256i = count.gt(search_depthh).into_bits(); + suml = suml + (cmpl & v256i::splat(1)); + sumh = sumh + (cmph & v256i::splat(1)); + } + } + if rem != 0 { + let last_element = nnz_data.slice()[nnz>>3]; + for sub_index in 0..rem { + let count = v256i::splat(last_element.extract(sub_index & 7)); + let cmpl:v256i = count.gt(search_depthl).into_bits(); + let cmph:v256i = count.gt(search_depthh).into_bits(); + suml = suml + (cmpl & v256i::splat(1)); + sumh = sumh + (cmph & v256i::splat(1)); + } + } + let mut max_depth : usize = 1; + // Deal with depth_histo and max_depth + { + let cumulative_sum:[Mem256i;2] = [suml, + sumh]; + let mut prev = cumulative_sum[0].extract(0); + for j in 1..16 { + let cur = cumulative_sum[(j&8) >> 3].extract(j & 7); + let delta = cur - prev; + prev = cur; + let cur = &mut depth_histo[j]; + *cur = (*cur as i32 + delta) as u32; // depth_histo[j] += delta + if delta != 0 { + max_depth = j; + } + } + } + let ymm_log2total = v256::splat(log2total); + let mut bits_cumulative = v256::splat(0.0 as floatX); + for nnz_data_item in nnz_data.slice().split_at(nnz_srl_3).0.iter() { + let counts = cast_i32_to_f32(*nnz_data_item); + let log_counts = log2i(*nnz_data_item); + let log2p = ymm_log2total - log_counts; + let tmp = counts * log2p; + bits_cumulative = bits_cumulative + tmp; + } + bits += sum8(bits_cumulative); + if rem != 0 { + let last_vec = nnz_data.slice()[nnz_srl_3]; + for i in 0..rem { + let last_item = last_vec.extract(i); + let log2p = log2total - FastLog2u16(last_item as u16); + bits += last_item as super::util::floatX * log2p; + } + } + + // Add the estimated encoding cost of the code length code histogram. + bits += (18 + 2 * max_depth) as super::util::floatX; + // Add the entropy of the code length code histogram. + bits += BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES); + //println_stderr!("{:?} {:?}", depth_histo, bits); + return bits; +} +use alloc::SliceWrapperMut; + +pub fn BrotliPopulationCost+CostAccessors>( + histogram : &HistogramType, + nnz_data : &mut HistogramType::i32vec +) -> super::util::floatX{ + static kOneSymbolHistogramCost: super::util::floatX = 12i32 as super::util::floatX; + static kTwoSymbolHistogramCost: super::util::floatX = 20i32 as super::util::floatX; + static kThreeSymbolHistogramCost: super::util::floatX = 28i32 as super::util::floatX; + static kFourSymbolHistogramCost: super::util::floatX = 37i32 as super::util::floatX; + let data_size: usize = (*histogram).slice().len(); + let mut count: i32 = 0i32; + let mut s: [usize; 5] = [0; 5]; + + let mut bits: super::util::floatX = 0.0 as super::util::floatX; + let mut i: usize; + if (*histogram).total_count() == 0usize { + return kOneSymbolHistogramCost; + } + i = 0usize; + 'break1: while i < data_size { + { + if (*histogram).slice()[i] > 0u32 { + s[count as (usize)] = i; + count = count + 1; + if count > 4i32 { + { + break 'break1; + } + } + } + } + i = i.wrapping_add(1 as (usize)); + } + if count == 1i32 { + return kOneSymbolHistogramCost; + } + if count == 2i32 { + return kTwoSymbolHistogramCost + (*histogram).total_count() as super::util::floatX; + } + if count == 3i32 { + let histo0: u32 = (*histogram).slice()[s[0usize]]; + let histo1: u32 = (*histogram).slice()[s[1usize]]; + let histo2: u32 = (*histogram).slice()[s[2usize]]; + let histomax: u32 = brotli_max_uint32_t(histo0, brotli_max_uint32_t(histo1, histo2)); + return kThreeSymbolHistogramCost + + (2u32).wrapping_mul(histo0.wrapping_add(histo1).wrapping_add(histo2)) as super::util::floatX - + histomax as super::util::floatX; + } + if count == 4i32 { + let mut histo: [u32; 4] = [0; 4]; + let h23: u32; + let histomax: u32; + i = 0usize; + while i < 4usize { + { + histo[i] = (*histogram).slice()[s[i]]; + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < 4usize { + { + let mut j: usize; + j = i.wrapping_add(1usize); + while j < 4usize { + { + if histo[j] > histo[i] { + let mut __brotli_swap_tmp: u32 = histo[j]; + histo[j] = histo[i]; + histo[i] = __brotli_swap_tmp; + } + } + j = j.wrapping_add(1 as (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } + h23 = histo[2usize].wrapping_add(histo[3usize]); + histomax = brotli_max_uint32_t(h23, histo[0usize]); + return kFourSymbolHistogramCost + (3u32).wrapping_mul(h23) as super::util::floatX + + (2u32).wrapping_mul(histo[0usize].wrapping_add(histo[1usize])) as super::util::floatX - + histomax as super::util::floatX; + } + if vectorize_population_cost { // vectorization failed: it's faster to do things inline than split into two loops + let mut nnz: usize = 0; + let mut depth_histo: [u32; 18] = [0u32; 18]; + let total_count = (*histogram).total_count() as super::util::floatX; + let log2total = FastLog2((*histogram).total_count() as u64); + i = 0usize; + while i < data_size { + if (*histogram).slice()[i] > 0u32 { + let nnz_val = &mut nnz_data.slice_mut()[nnz>>3]; + *nnz_val = nnz_val.replace(nnz&7, histogram.slice()[i] as i32); + i += 1; + nnz += 1; + } else { + let mut reps: u32 = 1; + for hd in (*histogram).slice()[i+1..(data_size as usize)].iter() { + if *hd != 0 { + break + } + reps += 1 + } + i += reps as usize; + if i == data_size { + { + break; + } + } + if reps < 3 { + depth_histo[0] += reps + } else { + reps -= 2; + let mut depth_histo_adds : u32 = 0; + while reps > 0u32 { + depth_histo_adds += 1; + bits = bits + 3i32 as super::util::floatX; + reps = reps >> 3i32; + } + depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH] += depth_histo_adds; + } + } + } + bits += CostComputation(&mut depth_histo, nnz_data, nnz, total_count, log2total); + } else { + let mut max_depth: usize = 1usize; + let mut depth_histo: [u32; 18] = [0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32]; + let log2total: super::util::floatX = FastLog2((*histogram).total_count() as u64); // 64 bit here + let mut reps : u32 = 0; + for histo in histogram.slice()[..data_size].iter() { + if *histo != 0 { + if reps != 0 { + if reps < 3 { + depth_histo[0] += reps; + } else { + reps -= 2; + while reps > 0u32 { + depth_histo[17] += 1; + bits = bits + 3 as super::util::floatX; + reps = reps >> 3; + } + } + reps = 0; + } + let log2p: super::util::floatX = log2total - FastLog2u16(*histo as (u16)); + let mut depth: usize = (log2p + 0.5 as super::util::floatX) as (usize); + bits = bits + *histo as super::util::floatX * log2p; + depth = core::cmp::min(depth, 15); + max_depth = core::cmp::max(depth, max_depth); + depth_histo[depth] += 1; + } else { + reps += 1; + } + } + bits = bits + (18usize).wrapping_add((2usize).wrapping_mul(max_depth)) as super::util::floatX; + bits = bits + BitsEntropy(&depth_histo[..], 18usize); + } + bits +} +/* +fn HistogramDataSizeCommand() -> usize { + 704i32 as (usize) +}*/ + + +/* +fn HistogramDataSizeDistance() -> usize { + 520i32 as (usize) +} +*/ diff --git a/rust/vendor/brotli/src/enc/block_split.rs b/rust/vendor/brotli/src/enc/block_split.rs new file mode 100755 index 0000000..f537302 --- /dev/null +++ b/rust/vendor/brotli/src/enc/block_split.rs @@ -0,0 +1,34 @@ +#![allow(dead_code)] +use super::super::alloc; +use super::super::alloc::Allocator; +use super::super::alloc::SliceWrapper; +use core; +pub struct BlockSplit + alloc::Allocator> { + pub num_types: usize, + pub num_blocks: usize, + pub types: >::AllocatedMemory, + pub lengths: >::AllocatedMemory, +} + +impl + alloc::Allocator> BlockSplit { + pub fn new() -> BlockSplit { + BlockSplit { + num_types: 0, + num_blocks: 0, + types: >::AllocatedMemory::default(), + lengths: >::AllocatedMemory::default(), + } + } + pub fn destroy(&mut self, m: &mut Alloc) { + >::free_cell(m, core::mem::replace(&mut self.types, >::AllocatedMemory::default())); + >::free_cell(m, core::mem::replace(&mut self.lengths, >::AllocatedMemory::default())); + self.num_blocks = 0; + self.num_types = 0; + } + pub fn types_alloc_size(&self) -> usize { + self.types.slice().len() + } + pub fn lengths_alloc_size(&self) -> usize { + self.lengths.slice().len() + } +} diff --git a/rust/vendor/brotli/src/enc/block_splitter.rs b/rust/vendor/brotli/src/enc/block_splitter.rs new file mode 100755 index 0000000..b19f7ce --- /dev/null +++ b/rust/vendor/brotli/src/enc/block_splitter.rs @@ -0,0 +1,992 @@ +#![allow(dead_code)] +use super::vectorization::{v256,v256i, Mem256f, sum8i}; +use super::backward_references::BrotliEncoderParams; + +use super::bit_cost::BrotliPopulationCost; +use super::block_split::BlockSplit; +use super::cluster::{BrotliHistogramBitCostDistance, BrotliHistogramCombine, HistogramPair}; +use super::command::Command; +use super::histogram::{HistogramAddVector, CostAccessors, ClearHistograms, HistogramClear, + HistogramAddHistogram, HistogramAddItem, HistogramLiteral, HistogramCommand, + HistogramDistance}; +use super::super::alloc; +use super::super::alloc::{SliceWrapper, SliceWrapperMut, Allocator}; +use super::util::{FastLog2, brotli_max_uint8_t, brotli_min_size_t}; +#[cfg(feature="simd")] +use packed_simd_2::IntoBits; +use core; +static kMaxLiteralHistograms: usize = 100usize; + +static kMaxCommandHistograms: usize = 50usize; + +static kLiteralBlockSwitchCost: super::util::floatX = 28.1 as super::util::floatX; + +static kCommandBlockSwitchCost: super::util::floatX = 13.5 as super::util::floatX; + +static kDistanceBlockSwitchCost: super::util::floatX = 14.6 as super::util::floatX; + +static kLiteralStrideLength: usize = 70usize; + +static kCommandStrideLength: usize = 40usize; + +static kSymbolsPerLiteralHistogram: usize = 544usize; + +static kSymbolsPerCommandHistogram: usize = 530usize; + +static kSymbolsPerDistanceHistogram: usize = 544usize; + +static kMinLengthForBlockSplitting: usize = 128usize; + +static kIterMulForRefining: usize = 2usize; + +static kMinItersForRefining: usize = 100usize; + +#[inline(always)] +fn update_cost_and_signal(num_histograms32: u32, + ix: usize, + min_cost: super::util::floatX, + block_switch_cost: super::util::floatX, + cost: &mut [Mem256f], + switch_signal: &mut [u8]) { + if (false) { // scalar mode + for k in 0.. ((num_histograms32 as usize + 7)>> 3 << 3) { + cost[k>>3] = cost[k>>3].replace(k&7, cost[k>>3].extract(k&7) - min_cost); + if (cost[k>>3].extract(k&7) >= block_switch_cost) { + let mask = ((1 as u8) << (k & 7)) as u8; + cost[k>>3] = cost[k>>3].replace(k&7, block_switch_cost); + switch_signal[ix + (k >> 3)] |= mask; + } + } + return; + } + if (false) { // scalar mode + + for k in 0.. ((num_histograms32 as usize + 7)>> 3 << 3) { + cost[k>>3] = cost[k>>3].replace(k&7, cost[k>>3].extract(k&7) - min_cost); + let cmpge = if (cost[k>>3].extract(k&7) >= block_switch_cost) { 0xff }else{0}; + let mask = ((1 as u8) << (k & 7)) as u8; + let bits = cmpge & mask; + if block_switch_cost < cost[k>>3].extract(k&7) { + cost[k>>3] = cost[k>>3].replace(k&7, block_switch_cost); + } + switch_signal[ix + (k >> 3)] |= bits; + //if (((k + 1)>> 3) != (k >>3)) { + // println_stderr!("{:} ss {:} c {:?}", k, switch_signal[ix + (k >> 3)],cost[k>>3]); + //} + } + return; + } + let ymm_min_cost = v256::splat(min_cost); + let ymm_block_switch_cost = v256::splat(block_switch_cost); + let ymm_and_mask = v256i::new(1<<0, + 1<<1, + 1<<2, + 1<<3, + 1<<4, + 1<<5, + 1<<6, + 1<<7); + + for (index, cost_it) in cost[..((num_histograms32 as usize + 7)>> 3)].iter_mut().enumerate() { + let mut ymm_cost = *cost_it; + let costk_minus_min_cost = ymm_cost - ymm_min_cost; + let ymm_cmpge:v256i = costk_minus_min_cost.ge(ymm_block_switch_cost).into_bits(); + let ymm_bits = ymm_cmpge & ymm_and_mask; + let result = sum8i(ymm_bits); + //super::vectorization::sum8(ymm_bits) as u8; + switch_signal[ix + index] |= result as u8; + ymm_cost = costk_minus_min_cost.min(ymm_block_switch_cost); + *cost_it = Mem256f::from(ymm_cost); + //println_stderr!("{:} ss {:} c {:?}", (index << 3) + 7, switch_signal[ix + index],*cost_it); + } +} +fn CountLiterals(cmds: &[Command], num_commands: usize) -> usize { + let mut total_length: usize = 0usize; + let mut i: usize; + i = 0usize; + while i < num_commands { + { + total_length = total_length.wrapping_add((cmds[(i as (usize))]).insert_len_ as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } + total_length +} + +fn CommandCopyLen(xself: &Command) -> u32 { + (*xself).copy_len_ & 0xffffffu32 +} + +fn CopyLiteralsToByteArray(cmds: &[Command], + num_commands: usize, + data: &[u8], + offset: usize, + mask: usize, + literals: &mut [u8]) { + let mut pos: usize = 0usize; + let mut from_pos: usize = offset & mask; + let mut i: usize; + i = 0usize; + while i < num_commands { + { + let mut insert_len: usize = (cmds[(i as (usize))]).insert_len_ as (usize); + if from_pos.wrapping_add(insert_len) > mask { + let head_size: usize = mask.wrapping_add(1usize).wrapping_sub(from_pos); + literals[(pos as (usize))..((pos + head_size) as usize)].clone_from_slice(&data[(from_pos as + (usize)).. + ((from_pos + + head_size) as + usize)]); + from_pos = 0usize; + pos = pos.wrapping_add(head_size); + insert_len = insert_len.wrapping_sub(head_size); + } + if insert_len > 0usize { + literals[(pos as (usize))..(pos as usize + insert_len)].clone_from_slice(&data + [(from_pos as + (usize)).. + (from_pos as + usize + + insert_len)]); + pos = pos.wrapping_add(insert_len); + } + from_pos = from_pos.wrapping_add(insert_len).wrapping_add(CommandCopyLen(&cmds[(i as + (usize))]) as + (usize)) & mask; + } + i = i.wrapping_add(1 as (usize)); + } +} + +fn MyRand(seed: &mut u32) -> u32 { + *seed = (*seed).wrapping_mul(16807u32); + if *seed == 0u32 { + *seed = 1u32; + } + *seed +} + + + +fn InitialEntropyCodes + SliceWrapperMut + CostAccessors, + IntegerType: Sized + Clone> + (data: &[IntegerType], + length: usize, + stride: usize, + num_histograms: usize, + histograms: &mut [HistogramType]) + where u64: core::convert::From +{ + let mut seed: u32 = 7u32; + let block_length: usize = length.wrapping_div(num_histograms); + let mut i: usize; + ClearHistograms(histograms, num_histograms); + i = 0usize; + while i < num_histograms { + { + let mut pos: usize = length.wrapping_mul(i).wrapping_div(num_histograms); + if i != 0usize { + pos = pos.wrapping_add((MyRand(&mut seed) as (usize)).wrapping_rem(block_length)); + } + if pos.wrapping_add(stride) >= length { + pos = length.wrapping_sub(stride).wrapping_sub(1usize); + } + HistogramAddVector(&mut histograms[(i as (usize))], + &data[(pos as (usize))..], + stride); + } + i = i.wrapping_add(1 as (usize)); + } +} + +fn RandomSample + SliceWrapperMut + CostAccessors, + IntegerType: Sized + Clone> + (seed: &mut u32, + data: &[IntegerType], + length: usize, + mut stride: usize, + sample: &mut HistogramType) + where u64: core::convert::From +{ + let pos: usize; + if stride >= length { + pos = 0usize; + stride = length; + } else { + pos = (MyRand(seed) as (usize)).wrapping_rem(length.wrapping_sub(stride).wrapping_add(1usize)); + } + HistogramAddVector(sample, &data[(pos as (usize))..], stride); +} + +fn RefineEntropyCodes+SliceWrapperMut+CostAccessors+core::default::Default, IntegerType:Sized+Clone>(data: &[IntegerType], + length: usize, + stride: usize, + num_histograms: usize, + histograms: &mut [HistogramType]) where u64: core::convert::From{ + let mut iters: usize = kIterMulForRefining.wrapping_mul(length) + .wrapping_div(stride) + .wrapping_add(kMinItersForRefining); + let mut seed: u32 = 7u32; + let mut iter: usize; + iters = iters.wrapping_add(num_histograms) + .wrapping_sub(1usize) + .wrapping_div(num_histograms) + .wrapping_mul(num_histograms); + iter = 0usize; + while iter < iters { + { + let mut sample = HistogramType::default(); + HistogramClear(&mut sample); + RandomSample(&mut seed, data, length, stride, &mut sample); + HistogramAddHistogram(&mut histograms[(iter.wrapping_rem(num_histograms) as (usize))], + &mut sample); + } + iter = iter.wrapping_add(1 as (usize)); + } +} + +fn BitCost(count: usize) -> super::util::floatX { + if count == 0usize { + -2.0 as super::util::floatX + } else { + FastLog2(count as u64) + } +} + +fn FindBlocks + SliceWrapperMut + CostAccessors, + IntegerType: Sized + Clone> + (data: &[IntegerType], + length: usize, + block_switch_bitcost: super::util::floatX, + num_histograms: usize, + histograms: &[HistogramType], + insert_cost: &mut [super::util::floatX], + cost: &mut [Mem256f], + switch_signal: &mut [u8], + block_id: &mut [u8]) + -> usize + where u64: core::convert::From +{ + if num_histograms == 0 { + return 0; + } + let data_size: usize = histograms[0usize].slice().len(); + let bitmaplen: usize = num_histograms.wrapping_add(7usize) >> 3i32; + let mut num_blocks: usize = 1usize; + let mut i: usize; + let mut j: usize; + 0i32; + if num_histograms <= 1usize { + i = 0usize; + while i < length { + { + block_id[(i as (usize))] = 0i32 as (u8); + } + i = i.wrapping_add(1 as (usize)); + } + return 1usize; + } + for item in insert_cost[..(data_size * num_histograms)].iter_mut() { + *item = 0.0 as super::util::floatX; + } + i = 0usize; + while i < num_histograms { + { + insert_cost[(i as (usize))] = FastLog2((histograms[(i as (usize))]).total_count() as (u32) as + (u64)); + } + i = i.wrapping_add(1 as (usize)); + } + i = data_size; + while i != 0usize { + i = i.wrapping_sub(1 as (usize)); + j = 0usize; + while j < num_histograms { + { + insert_cost[(i.wrapping_mul(num_histograms).wrapping_add(j) as (usize))] = + insert_cost[(j as (usize))] - BitCost((histograms[(j as (usize))]).slice()[i] as (usize)); + } + j = j.wrapping_add(1 as (usize)); + } + } + for item in cost.iter_mut() { + *item = Mem256f::default(); + } + for item in switch_signal[..(length * bitmaplen)].iter_mut() { + *item = 0; + } + for (byte_ix, data_byte_ix) in data[..length].iter().enumerate() { + { + let block_id_ptr = &mut block_id[byte_ix]; + let ix: usize = byte_ix.wrapping_mul(bitmaplen); + let insert_cost_ix: usize = u64::from(data_byte_ix.clone()) + .wrapping_mul(num_histograms as u64) as usize; + let mut min_cost: super::util::floatX = 1e38 as super::util::floatX; + let mut block_switch_cost: super::util::floatX = block_switch_bitcost; + if false { // nonvectorized version: same code below + for (k, insert_cost_iter) in insert_cost[insert_cost_ix..(insert_cost_ix + num_histograms)].iter().enumerate() { + let cost_iter = &mut cost[(k >> 3)].extract(k&7); + *cost_iter += *insert_cost_iter; + if *cost_iter < min_cost { + min_cost = *cost_iter; + *block_id_ptr = k as u8; + } + } + } else { + // main (vectorized) loop + let insert_cost_slice = insert_cost.split_at(insert_cost_ix).1; + for (v_index, cost_iter) in cost.split_at_mut(num_histograms >> 3).0.iter_mut().enumerate() { + let base_index = v_index << 3; + let mut local_insert_cost = [0.0 as super::util::floatX; 8]; + local_insert_cost.clone_from_slice(insert_cost_slice.split_at(base_index).1.split_at(8).0); + for sub_index in 0usize .. 8usize { + *cost_iter = (*cost_iter).replace(sub_index, (*cost_iter).extract(sub_index) + local_insert_cost[sub_index]); + let final_cost = (*cost_iter).extract(sub_index); + if final_cost < min_cost { + min_cost = final_cost; + *block_id_ptr = (base_index + sub_index) as u8; + } + } + } + let vectorized_offset = ((num_histograms>>3)<<3); + let mut k = vectorized_offset; + //remainder loop for + for insert_cost_iter in insert_cost.split_at(insert_cost_ix + vectorized_offset).1.split_at(num_histograms&7).0.iter() { + let cost_iter = &mut cost[(k >> 3)]; + *cost_iter = cost_iter.replace(k&7, cost_iter.extract(k&7) + *insert_cost_iter); + if cost_iter.extract(k&7) < min_cost { + min_cost = cost_iter.extract(k&7); + *block_id_ptr = k as u8; + } + k += 1; + } + } + if byte_ix < 2000usize { + block_switch_cost = block_switch_cost * + (0.77 as super::util::floatX + 0.07 as super::util::floatX * byte_ix as (super::util::floatX) / 2000i32 as (super::util::floatX)); + } + update_cost_and_signal(num_histograms as u32, ix, min_cost, block_switch_cost, cost, switch_signal); + } + } + { + let mut byte_ix: usize = length.wrapping_sub(1usize); + let mut ix: usize = byte_ix.wrapping_mul(bitmaplen); + let mut cur_id: u8 = block_id[(byte_ix as (usize))]; + while byte_ix > 0usize { + let mask: u8 = (1u32 << (cur_id as (i32) & 7i32)) as (u8); + 0i32; + byte_ix -= 1; + ix = ix.wrapping_sub(bitmaplen); + if switch_signal[(ix.wrapping_add((cur_id as (i32) >> 3i32) as (usize)) as + (usize))] as (i32) & mask as (i32) != 0 { + if cur_id as (i32) != block_id[(byte_ix as (usize))] as (i32) { + cur_id = block_id[(byte_ix as (usize))]; + num_blocks = num_blocks.wrapping_add(1 as (usize)); + } + } + block_id[(byte_ix as (usize))] = cur_id; + } + } + num_blocks +} + +fn RemapBlockIds(block_ids: &mut [u8], + length: usize, + new_id: &mut [u16], + num_histograms: usize) + -> usize { + static kInvalidId: u16 = 256i32 as (u16); + let mut next_id: u16 = 0i32 as (u16); + let mut i: usize; + i = 0usize; + while i < num_histograms { + { + new_id[(i as (usize))] = kInvalidId; + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < length { + { + 0i32; + if new_id[(block_ids[(i as (usize))] as (usize))] as (i32) == kInvalidId as (i32) { + new_id[(block_ids[(i as (usize))] as (usize))] = { + let _old = next_id; + next_id = (next_id as (i32) + 1) as (u16); + _old + }; + } + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < length { + { + block_ids[(i as (usize))] = new_id[(block_ids[(i as (usize))] as (usize))] as (u8); + 0i32; + } + i = i.wrapping_add(1 as (usize)); + } + 0i32; + next_id as (usize) +} + + +fn BuildBlockHistograms + SliceWrapperMut + CostAccessors, + IntegerType: Sized + Clone> + (data: &[IntegerType], + length: usize, + block_ids: &[u8], + num_histograms: usize, + histograms: &mut [HistogramType]) + where u64: core::convert::From +{ + let mut i: usize; + ClearHistograms(histograms, num_histograms); + i = 0usize; + while i < length { + { + HistogramAddItem(&mut histograms[(block_ids[(i as (usize))] as (usize))], + u64::from(data[(i as (usize))].clone()) as usize); + } + i = i.wrapping_add(1 as (usize)); + } +} + +fn ClusterBlocks+SliceWrapperMut+CostAccessors+core::default::Default+Clone, + Alloc:alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, + IntegerType:Sized+Clone>( + alloc:&mut Alloc, + data: &[IntegerType], + length: usize, + num_blocks: usize, + scratch_space: &mut HistogramType::i32vec, + block_ids: &mut [u8], + split: &mut BlockSplit, +) where u64: core::convert::From { + + let mut histogram_symbols = >::alloc_cell(alloc, num_blocks); + let mut block_lengths = >::alloc_cell(alloc, num_blocks); + let expected_num_clusters: usize = (16usize) + .wrapping_mul(num_blocks.wrapping_add(64usize).wrapping_sub(1usize)) + .wrapping_div(64usize); + let mut all_histograms_size: usize = 0usize; + let mut all_histograms_capacity: usize = expected_num_clusters; + let mut all_histograms = >::alloc_cell(alloc, all_histograms_capacity); + let mut cluster_size_size: usize = 0usize; + let mut cluster_size_capacity: usize = expected_num_clusters; + let mut cluster_size = >::alloc_cell(alloc, cluster_size_capacity); + let mut num_clusters: usize = 0usize; + let mut histograms = >::alloc_cell(alloc, brotli_min_size_t(num_blocks, 64usize)); + let mut max_num_pairs: usize = (64i32 * 64i32 / 2i32) as (usize); + let pairs_capacity: usize = max_num_pairs.wrapping_add(1usize); + let mut pairs = >::alloc_cell(alloc, pairs_capacity); + let mut pos: usize = 0usize; + let mut clusters: >::AllocatedMemory; + let num_final_clusters: usize; + static kInvalidIndex: u32 = !(0u32); + let mut i: usize; + let mut sizes: [u32; 64] = [0; 64]; + let mut new_clusters: [u32; 64] = [0; 64]; + let mut symbols: [u32; 64] = [0; 64]; + let mut remap: [u32; 64] = [0; 64]; + { + let mut block_idx: usize = 0usize; + i = 0usize; + while i < length { + { + 0i32; + { + let _rhs = 1; + let _lhs = &mut block_lengths.slice_mut()[(block_idx as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + if i.wrapping_add(1usize) == length || + block_ids[(i as (usize))] as (i32) != + block_ids[(i.wrapping_add(1usize) as (usize))] as (i32) { + block_idx = block_idx.wrapping_add(1 as (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } + 0i32; + } + i = 0usize; + while i < num_blocks { + { + let num_to_combine: usize = brotli_min_size_t(num_blocks.wrapping_sub(i), 64usize); + let num_new_clusters: usize; + let mut j: usize; + j = 0usize; + while j < num_to_combine { + { + let mut k: usize; + HistogramClear(&mut histograms.slice_mut()[(j as (usize))]); + k = 0usize; + while k < block_lengths.slice()[(i.wrapping_add(j) as (usize))] as (usize) { + { + HistogramAddItem(&mut histograms.slice_mut()[(j as (usize))], + u64::from(data[{ + let _old = pos; + pos = pos.wrapping_add(1 as (usize)); + _old + }] + .clone()) as usize); + } + k = k.wrapping_add(1 as (usize)); + } + let new_cost = BrotliPopulationCost(&histograms.slice()[(j as (usize))], scratch_space); + (histograms.slice_mut()[(j as (usize))]).set_bit_cost(new_cost); + + new_clusters[j] = j as (u32); + symbols[j] = j as (u32); + sizes[j] = 1u32; + } + j = j.wrapping_add(1 as (usize)); + } + num_new_clusters = BrotliHistogramCombine(histograms.slice_mut(), + &mut sizes[..], + &mut symbols[..], + &mut new_clusters[..], + pairs.slice_mut(), + num_to_combine, + num_to_combine, + 64usize, + max_num_pairs, + scratch_space); + { + if all_histograms_capacity < all_histograms_size.wrapping_add(num_new_clusters) { + let mut _new_size: usize = if all_histograms_capacity == 0usize { + all_histograms_size.wrapping_add(num_new_clusters) + } else { + all_histograms_capacity + }; + while _new_size < all_histograms_size.wrapping_add(num_new_clusters) { + _new_size = _new_size.wrapping_mul(2usize); + } + let mut new_array = >::alloc_cell(alloc, _new_size); + new_array.slice_mut()[..all_histograms_capacity] + .clone_from_slice(&all_histograms.slice()[..all_histograms_capacity]); + >::free_cell(alloc, core::mem::replace(&mut all_histograms, new_array)); + all_histograms_capacity = _new_size; + } + } + { + if cluster_size_capacity < cluster_size_size.wrapping_add(num_new_clusters) { + let mut _new_size: usize = if cluster_size_capacity == 0usize { + cluster_size_size.wrapping_add(num_new_clusters) + } else { + cluster_size_capacity + }; + while _new_size < cluster_size_size.wrapping_add(num_new_clusters) { + _new_size = _new_size.wrapping_mul(2usize); + } + let mut new_array = >::alloc_cell(alloc, _new_size); + new_array.slice_mut()[..cluster_size_capacity] + .clone_from_slice(&cluster_size.slice()[..cluster_size_capacity]); + >::free_cell(alloc, core::mem::replace(&mut cluster_size, new_array)); + cluster_size_capacity = _new_size; + } + } + j = 0usize; + while j < num_new_clusters { + { + all_histograms.slice_mut()[({ + let _old = all_histograms_size; + all_histograms_size = all_histograms_size.wrapping_add(1 as (usize)); + _old + } as (usize))] = histograms.slice()[(new_clusters[j] as (usize))].clone(); + cluster_size.slice_mut()[({ + let _old = cluster_size_size; + cluster_size_size = cluster_size_size.wrapping_add(1 as (usize)); + _old + } as (usize))] = sizes[new_clusters[j] as (usize)]; + remap[new_clusters[j] as (usize)] = j as (u32); + } + j = j.wrapping_add(1 as (usize)); + } + j = 0usize; + while j < num_to_combine { + { + histogram_symbols.slice_mut()[(i.wrapping_add(j) as (usize))] = + (num_clusters as (u32)).wrapping_add(remap[symbols[j] as (usize)]); + } + j = j.wrapping_add(1 as (usize)); + } + num_clusters = num_clusters.wrapping_add(num_new_clusters); + 0i32; + 0i32; + } + i = i.wrapping_add(64usize); + } + >::free_cell(alloc, core::mem::replace(&mut histograms, >::AllocatedMemory::default())); + max_num_pairs = brotli_min_size_t((64usize).wrapping_mul(num_clusters), + num_clusters.wrapping_div(2usize).wrapping_mul(num_clusters)); + if pairs_capacity < max_num_pairs.wrapping_add(1usize) { + let new_cell = >::alloc_cell(alloc, max_num_pairs.wrapping_add(1usize)); + >::free_cell(alloc, core::mem::replace(&mut pairs, new_cell)); + } + clusters = >::alloc_cell(alloc, num_clusters); + i = 0usize; + for item in clusters.slice_mut()[..num_clusters].iter_mut() { + *item = i as u32; + i = i.wrapping_add(1 as (usize)); + } + num_final_clusters = BrotliHistogramCombine(all_histograms.slice_mut(), + cluster_size.slice_mut(), + histogram_symbols.slice_mut(), + clusters.slice_mut(), + pairs.slice_mut(), + num_clusters, + num_blocks, + 256usize, + max_num_pairs, + scratch_space); + >::free_cell(alloc, core::mem::replace(&mut pairs, + >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut cluster_size, + >::AllocatedMemory::default())); + + let mut new_index = >::alloc_cell(alloc, num_clusters); + for item in new_index.slice_mut().iter_mut() { + *item = kInvalidIndex; + } + pos = 0usize; + { + let mut next_index: u32 = 0u32; + i = 0usize; + while i < num_blocks { + { + let mut histo: HistogramType = HistogramType::default(); + let mut j: usize; + let mut best_out: u32; + let mut best_bits: super::util::floatX; + HistogramClear(&mut histo); + j = 0usize; + while j < block_lengths.slice()[(i as (usize))] as (usize) { + { + HistogramAddItem(&mut histo, + u64::from(data[({ + let _old = pos; + pos = pos.wrapping_add(1 as (usize)); + _old + } as + (usize))] + .clone()) as (usize)); + } + j = j.wrapping_add(1 as (usize)); + } + best_out = if i == 0usize { + histogram_symbols.slice()[(0usize)] + } else { + histogram_symbols.slice()[(i.wrapping_sub(1usize) as (usize))] + }; + best_bits = BrotliHistogramBitCostDistance(&mut histo, + &mut all_histograms.slice_mut()[(best_out as + (usize))], + scratch_space); + j = 0usize; + while j < num_final_clusters { + { + let cur_bits: super::util::floatX = + BrotliHistogramBitCostDistance(&mut histo, + &mut all_histograms.slice_mut()[(clusters.slice()[(j as (usize))] as + (usize))], + scratch_space); + if cur_bits < best_bits { + best_bits = cur_bits; + best_out = clusters.slice()[(j as (usize))]; + } + } + j = j.wrapping_add(1 as (usize)); + } + histogram_symbols.slice_mut()[(i as (usize))] = best_out; + if new_index.slice()[(best_out as (usize))] == kInvalidIndex { + new_index.slice_mut()[(best_out as (usize))] = { + let _old = next_index; + next_index = next_index.wrapping_add(1 as (u32)); + _old + }; + } + } + i = i.wrapping_add(1 as (usize)); + } + } + >::free_cell(alloc, core::mem::replace(&mut clusters, >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut all_histograms, >::AllocatedMemory::default())); + { + if (*split).types_alloc_size() < num_blocks { + let mut _new_size: usize = if (*split).types_alloc_size() == 0usize { + num_blocks + } else { + (*split).types_alloc_size() + }; + while _new_size < num_blocks { + _new_size = _new_size.wrapping_mul(2usize); + } + let mut new_array = >::alloc_cell(alloc, _new_size); + new_array.slice_mut()[..(*split).types_alloc_size()] + .clone_from_slice(&(*split).types.slice()[..(*split).types_alloc_size()]); + >::free_cell(alloc, core::mem::replace(&mut (*split).types, new_array)); + } + } + { + if (*split).lengths_alloc_size() < num_blocks { + let mut _new_size: usize = if (*split).lengths_alloc_size() == 0usize { + num_blocks + } else { + (*split).lengths_alloc_size() + }; + while _new_size < num_blocks { + _new_size = _new_size.wrapping_mul(2usize); + } + let mut new_array = >::alloc_cell(alloc, _new_size); + new_array.slice_mut()[..(*split).lengths_alloc_size()].clone_from_slice((*split) + .lengths + .slice()); + >::free_cell(alloc, core::mem::replace(&mut (*split).lengths, new_array)); + } + } + { + let mut cur_length: u32 = 0u32; + let mut block_idx: usize = 0usize; + let mut max_type: u8 = 0i32 as (u8); + i = 0usize; + while i < num_blocks { + { + cur_length = cur_length.wrapping_add(block_lengths.slice()[(i as (usize))]); + if i.wrapping_add(1usize) == num_blocks || + histogram_symbols.slice()[(i as (usize))] != + histogram_symbols.slice()[(i.wrapping_add(1usize) as (usize))] { + let id: u8 = new_index.slice()[(histogram_symbols.slice()[(i as (usize))] as + (usize))] as (u8); + (*split).types.slice_mut()[(block_idx as (usize))] = id; + (*split).lengths.slice_mut()[(block_idx as (usize))] = cur_length; + max_type = brotli_max_uint8_t(max_type, id); + cur_length = 0u32; + block_idx = block_idx.wrapping_add(1 as (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } + (*split).num_blocks = block_idx; + (*split).num_types = (max_type as (usize)).wrapping_add(1usize); + } + >::free_cell(alloc, new_index); + >::free_cell(alloc, block_lengths); + >::free_cell(alloc, histogram_symbols); +} + +fn SplitByteVector+SliceWrapperMut+CostAccessors+core::default::Default+Clone, + Alloc:alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator, + IntegerType:Sized+Clone>(alloc: &mut Alloc, + data: &[IntegerType], + length: usize, + literals_per_histogram: usize, + max_histograms: usize, + sampling_stride_length: usize, + block_switch_cost: super::util::floatX, + params: &BrotliEncoderParams, + scratch_space : &mut HistogramType::i32vec, + split: &mut BlockSplit) where u64: core::convert::From{ + let data_size: usize = HistogramType::default().slice().len(); + let mut num_histograms: usize = length.wrapping_div(literals_per_histogram).wrapping_add(1usize); + if num_histograms > max_histograms { + num_histograms = max_histograms; + } + if length == 0usize { + (*split).num_types = 1usize; + return; + } else if length < kMinLengthForBlockSplitting { + { + if (*split).types_alloc_size() < (*split).num_blocks.wrapping_add(1usize) { + let mut _new_size: usize = if (*split).types_alloc_size() == 0usize { + (*split).num_blocks.wrapping_add(1usize) + } else { + (*split).types_alloc_size() + }; + + while _new_size < (*split).num_blocks.wrapping_add(1usize) { + _new_size = _new_size.wrapping_mul(2usize); + } + let mut new_array = >::alloc_cell(alloc, _new_size); + new_array.slice_mut()[..(*split).types_alloc_size()] + .clone_from_slice(&(*split).types.slice()[..(*split).types_alloc_size()]); + >::free_cell(alloc, core::mem::replace(&mut (*split).types, new_array)); + } + } + { + if (*split).lengths_alloc_size() < (*split).num_blocks.wrapping_add(1usize) { + let mut _new_size: usize = if (*split).lengths_alloc_size() == 0usize { + (*split).num_blocks.wrapping_add(1usize) + } else { + (*split).lengths_alloc_size() + }; + while _new_size < (*split).num_blocks.wrapping_add(1usize) { + _new_size = _new_size.wrapping_mul(2usize); + } + let mut new_array = >::alloc_cell(alloc, _new_size); + new_array.slice_mut()[..(*split).lengths_alloc_size()] + .clone_from_slice(&(*split).lengths.slice()[..(*split).lengths_alloc_size()]); + >::free_cell(alloc, core::mem::replace(&mut (*split).lengths, new_array)); + } + } + (*split).num_types = 1usize; + (*split).types.slice_mut()[((*split).num_blocks as (usize))] = 0i32 as (u8); + (*split).lengths.slice_mut()[((*split).num_blocks as (usize))] = length as (u32); + (*split).num_blocks = (*split).num_blocks.wrapping_add(1 as (usize)); + return; + } + let mut histograms = >::alloc_cell(alloc, num_histograms); + + InitialEntropyCodes(data, + length, + sampling_stride_length, + num_histograms, + histograms.slice_mut()); + RefineEntropyCodes(data, + length, + sampling_stride_length, + num_histograms, + histograms.slice_mut()); + { + let mut block_ids = >::alloc_cell(alloc, length); + let mut num_blocks: usize = 0usize; + let bitmaplen: usize = num_histograms.wrapping_add(7usize) >> 3i32; + let mut insert_cost = >::alloc_cell(alloc, data_size.wrapping_mul(num_histograms)); + let mut cost = >::alloc_cell(alloc, ((num_histograms + 7) >> 3)); + let mut switch_signal = >::alloc_cell(alloc, length.wrapping_mul(bitmaplen)); + let mut new_id = >::alloc_cell(alloc, num_histograms); + let iters: usize = (if (*params).quality <= 11 { + 3i32 + } else { + 10i32 + }) as (usize); + let mut i: usize; + i = 0usize; + while i < iters { + { + num_blocks = FindBlocks(data, + length, + block_switch_cost, + num_histograms, + histograms.slice_mut(), + insert_cost.slice_mut(), + cost.slice_mut(), + switch_signal.slice_mut(), + block_ids.slice_mut()); + num_histograms = RemapBlockIds(block_ids.slice_mut(), + length, + new_id.slice_mut(), + num_histograms); + BuildBlockHistograms(data, + length, + block_ids.slice(), + num_histograms, + histograms.slice_mut()); + } + i = i.wrapping_add(1 as (usize)); + } + >::free_cell(alloc, insert_cost); + >::free_cell(alloc, cost); + >::free_cell(alloc, switch_signal); + >::free_cell(alloc, new_id); + >::free_cell(alloc, histograms); + ClusterBlocks::(alloc, + data, + length, + num_blocks, + scratch_space, + block_ids.slice_mut(), + split + ); + >::free_cell(alloc, block_ids); + } +} + +pub fn BrotliSplitBlock + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator> + (alloc: &mut Alloc, + cmds: &[Command], + num_commands: usize, + data: &[u8], + pos: usize, + mask: usize, + params: &BrotliEncoderParams, + lit_scratch_space: &mut ::i32vec, + cmd_scratch_space: &mut ::i32vec, + dst_scratch_space: &mut ::i32vec, + literal_split: &mut BlockSplit, + insert_and_copy_split: &mut BlockSplit, + dist_split: &mut BlockSplit) { + { + /*for (i, cmd) in cmds[..num_commands].iter().enumerate() { + println_stderr!("C {:} {:} {:} {:} {:} {:}", + i, cmd.insert_len_, cmd.copy_len_, cmd.dist_extra_, cmd.cmd_prefix_, cmd.dist_prefix_); + }*/ + let literals_count: usize = CountLiterals(cmds, num_commands); + let mut literals = >::alloc_cell(alloc, literals_count); + CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals.slice_mut()); + SplitByteVector::(alloc, + literals.slice(), + literals_count, + kSymbolsPerLiteralHistogram, + kMaxLiteralHistograms, + kLiteralStrideLength, + kLiteralBlockSwitchCost, + params, + lit_scratch_space, + literal_split); + >::free_cell(alloc, literals); + } + { + let mut insert_and_copy_codes = >::alloc_cell(alloc, num_commands); + for i in 0..core::cmp::min(num_commands, cmds.len()) { + insert_and_copy_codes.slice_mut()[(i as (usize))] = (cmds[(i as (usize))]).cmd_prefix_; + } + SplitByteVector::(alloc, + insert_and_copy_codes.slice(), + num_commands, + kSymbolsPerCommandHistogram, + kMaxCommandHistograms, + kCommandStrideLength, + kCommandBlockSwitchCost, + params, + cmd_scratch_space, + insert_and_copy_split); + >::free_cell(alloc, insert_and_copy_codes); + } + { + let mut distance_prefixes = >::alloc_cell(alloc, num_commands); + let mut j: usize = 0usize; + let mut i: usize; + i = 0usize; + while i < num_commands { + { + let cmd = &cmds[(i as (usize))]; + if CommandCopyLen(cmd) != 0 && ((*cmd).cmd_prefix_ as (i32) >= 128i32) { + distance_prefixes.slice_mut()[({ + let _old = j; + j = j.wrapping_add(1 as (usize)); + _old + } as (usize))] = (*cmd).dist_prefix_ & 0x3ff; + } + } + i = i.wrapping_add(1 as (usize)); + } + SplitByteVector::(alloc, + distance_prefixes.slice(), + j, + kSymbolsPerDistanceHistogram, + kMaxCommandHistograms, + kCommandStrideLength, + kDistanceBlockSwitchCost, + params, + dst_scratch_space, + dist_split); + >::free_cell(alloc, distance_prefixes); + } +} diff --git a/rust/vendor/brotli/src/enc/brotli_bit_stream.rs b/rust/vendor/brotli/src/enc/brotli_bit_stream.rs new file mode 100755 index 0000000..ad940d9 --- /dev/null +++ b/rust/vendor/brotli/src/enc/brotli_bit_stream.rs @@ -0,0 +1,2839 @@ +#![allow(unknown_lints)] +#![allow(dead_code)] +#![allow(unused_imports)] +#![allow(unused_macros)] +#[cfg(feature="std")] +use std::io::Write; +use VERSION; +use super::{v8, s16}; +use super::util::floatX; +use super::prior_eval; +use super::stride_eval; +use super::combined_alloc::BrotliAlloc; + +use super::input_pair::{InputPair, InputReference, InputReferenceMut}; +use super::block_split::BlockSplit; +use enc::backward_references::BrotliEncoderParams; + +use super::super::dictionary::{kBrotliDictionary, kBrotliDictionarySizeBitsByLength, + kBrotliDictionaryOffsetsByLength}; +use super::super::transform::{TransformDictionaryWord}; +use super::static_dict::kNumDistanceCacheEntries; +use super::command::{Command, GetCopyLengthCode, GetInsertLengthCode, CommandDistanceIndexAndOffset}; +use super::constants::{BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS, BROTLI_NUM_LITERAL_SYMBOLS, BROTLI_NUM_COMMAND_SYMBOLS, + BROTLI_CONTEXT_LUT, BROTLI_NUM_BLOCK_LEN_SYMBOLS, kZeroRepsBits, kZeroRepsDepth, + kNonZeroRepsBits, kNonZeroRepsDepth, kCodeLengthBits, kCodeLengthDepth, + kStaticCommandCodeDepth, kStaticCommandCodeBits, kStaticDistanceCodeDepth, + kStaticDistanceCodeBits, kSigned3BitContextLookup, kUTF8ContextLookup, + kInsBase, kInsExtra, kCopyBase, kCopyExtra}; +use super::entropy_encode::{HuffmanTree, BrotliWriteHuffmanTree, BrotliCreateHuffmanTree, + BrotliConvertBitDepthsToSymbols, NewHuffmanTree, InitHuffmanTree, + SortHuffmanTreeItems, HuffmanComparator, BrotliSetDepth}; +use super::histogram::{HistogramAddItem, HistogramLiteral, HistogramCommand, HistogramDistance, + ContextType}; +use super::super::alloc; +use super::super::alloc::{SliceWrapper, SliceWrapperMut, Allocator}; +use super::super::core; +use super::find_stride; +use super::vectorization::Mem256f; +use super::interface; +use super::pdf::PDF; +use super::interface::{CommandProcessor, StaticCommand}; +use super::context_map_entropy::{ContextMapEntropy, SpeedAndMax, speed_to_tuple}; +pub struct PrefixCodeRange { + pub offset: u32, + pub nbits: u32, +} +pub const MAX_SIMPLE_DISTANCE_ALPHABET_SIZE: usize = 140; + +fn window_size_from_lgwin(lgwin: i32) -> usize{ + (1usize << lgwin) - 16usize +} + +fn context_type_str(context_type:ContextType) -> &'static str { + match context_type { + ContextType::CONTEXT_LSB6 => "lsb6", + ContextType::CONTEXT_MSB6 => "msb6", + ContextType::CONTEXT_UTF8 => "utf8", + ContextType::CONTEXT_SIGNED => "sign", + } +} + +fn prediction_mode_str(prediction_mode_nibble:interface::LiteralPredictionModeNibble) -> &'static str { + match prediction_mode_nibble.prediction_mode() { + interface::LITERAL_PREDICTION_MODE_SIGN => "sign", + interface::LITERAL_PREDICTION_MODE_LSB6 => "lsb6", + interface::LITERAL_PREDICTION_MODE_MSB6 => "msb6", + interface::LITERAL_PREDICTION_MODE_UTF8 => "utf8", + _ => "unknown", + } +} + +fn is_long_enough_to_be_random(len: usize, high_entropy_detection_quality:u8) -> bool{ + return match high_entropy_detection_quality { + 0 => false, + 1 => false, + 2 => len >= 128, + 3 => len >= 96, + 4 => len >= 64, + 5 => len >= 48, + 6 => len >= 32, + 7 => len >= 24, + 8 => len >= 16, + 9 => len >= 8, + 10 => len >= 4, + 11 => len >= 1, + _ => len >= 8, + } +} +const COMMAND_BUFFER_SIZE: usize = 4096; + +struct CommandQueue<'a, + Alloc:BrotliAlloc+'a> { + mb: InputPair<'a>, + mb_byte_offset: usize, + mc: &'a mut Alloc, + queue: >::AllocatedMemory, + pred_mode: interface::PredictionModeContextMap>, + loc: usize, + entropy_tally_scratch: find_stride::EntropyTally, + best_strides_per_block_type: >::AllocatedMemory, + entropy_pyramid: find_stride::EntropyPyramid, + context_map_entropy: ContextMapEntropy<'a, Alloc>, + stride_detection_quality: u8, + high_entropy_detection_quality: u8, + block_type_literal: u8, + best_stride_index: usize, + overfull: bool, +} + +impl<'a, Alloc:BrotliAlloc> CommandQueue<'a, Alloc> { + fn new(alloc: &'a mut Alloc, + num_commands: usize, + pred_mode: interface::PredictionModeContextMap>, + mb: InputPair<'a>, + stride_detection_quality: u8, + high_entropy_detection_quality: u8, + context_map_entropy: ContextMapEntropy<'a, Alloc>, + best_strides: >::AllocatedMemory, + entropy_tally_scratch: find_stride::EntropyTally, + entropy_pyramid: find_stride::EntropyPyramid, + ) -> CommandQueue <'a, Alloc> { + + // assume no more than 1/16 of the stream is block_types which may chop up literals + // also there's the first btypel and a potential wrap around the ring buffer + let queue = >::alloc_cell(alloc, num_commands * 17 / 16 + 4); + CommandQueue { + mc:alloc, + queue: queue, // always need a spare command in case the ring buffer splits a literal into two + pred_mode:pred_mode, + mb:mb, + mb_byte_offset:0, + loc:0, + best_strides_per_block_type: best_strides, + entropy_tally_scratch: entropy_tally_scratch, + entropy_pyramid: entropy_pyramid, + stride_detection_quality: stride_detection_quality, + high_entropy_detection_quality: high_entropy_detection_quality, + context_map_entropy: context_map_entropy, + block_type_literal: 0, + best_stride_index: 0, + overfull: false, + } + } + fn full(&self) -> bool { + self.loc == self.queue.len() + } + fn error_if_full(&mut self) { + if self.full() { + self.overfull = true; + } + } + fn size(&self) -> usize { + self.loc + } + fn clear(&mut self) { + self.loc = 0; + self.block_type_literal = 0; + } + fn free(&mut self, + callback: &mut Cb) -> Result<(), ()> where Cb:FnMut(&mut interface::PredictionModeContextMap, + &mut [interface::StaticCommand], + InputPair, + &mut Alloc) { + callback(&mut self.pred_mode, self.queue.slice_mut().split_at_mut(self.loc).0, self.mb, self.mc); + self.clear(); + self.entropy_tally_scratch.free(&mut self.mc); + self.entropy_pyramid.free(&mut self.mc); + self.context_map_entropy.free(&mut self.mc); + >::free_cell(self.mc, + core::mem::replace(&mut self.queue, + >::AllocatedMemory::default())); + >::free_cell(self.mc, + core::mem::replace(&mut self.best_strides_per_block_type, >::AllocatedMemory::default())); + if self.overfull { + return Err(()); + } + Ok(()) + } +} + +impl<'a, Alloc: BrotliAlloc> interface::CommandProcessor<'a> for CommandQueue<'a, Alloc> { + fn push (&mut self, val: interface::Command >) { + if self.full() { + let mut tmp = >::alloc_cell(self.mc, self.queue.slice().len() * 2); + tmp.slice_mut().split_at_mut(self.queue.slice().len()).0.clone_from_slice(self.queue.slice()); + >::free_cell(self.mc, core::mem::replace(&mut self.queue, tmp)); + } + if !self.full() { + self.queue.slice_mut()[self.loc] = val.freeze(); + self.loc += 1; + } else { + self.error_if_full(); + } + } + fn push_block_switch_literal(&mut self, block_type: u8) { + self.push(interface::Command::BlockSwitchLiteral( + interface::LiteralBlockSwitch::new(block_type, 0))) + } +} + + +#[cfg(feature="std")] +fn warn_on_missing_free() { + let _err = ::std::io::stderr().write(b"Need to free entropy_tally_scratch before dropping CommandQueue\n"); +} +#[cfg(not(feature="std"))] +fn warn_on_missing_free() { + // no way to warn in this case +} +impl<'a, Alloc: BrotliAlloc> Drop for CommandQueue<'a, Alloc> { + fn drop(&mut self) { + if !self.entropy_tally_scratch.is_free() { + warn_on_missing_free(); + } + } +} +#[cfg(not(feature="billing"))] +fn best_singleton_speed_log(_name:&str, + _data:&[SpeedAndMax;2], + _cost:&[floatX;2]) { +} +#[cfg(feature="billing")] +fn best_singleton_speed_log(name:&str, + data:&[SpeedAndMax;2], + cost:&[floatX;2]) { + println!("{} hi cost: {} lo cost: {} speeds {:?} {:?}", name, cost[1], cost[0], data[1], data[0]); +} + + +#[cfg(not(feature="billing"))] +fn best_speed_log(_name:&str, + _data:&[SpeedAndMax;2], + _cost:&[floatX;2]) {} +#[cfg(feature="billing")] +fn best_speed_log(name:&str, + data:&[SpeedAndMax;2], + cost:&[floatX;2]) { + for high in 0..2 { + println!("{} Speed [ inc: {}, max: {}, algo: 0 ] cost: {}", + name, + if high != 0 {"hi" } else {"lo"}, + data[high].0, + data[high].1, + cost[high]); + } + +} + +fn process_command_queue<'a, CmdProcessor: interface::CommandProcessor<'a> > ( + command_queue: &mut CmdProcessor, + input: InputPair<'a>, + commands: &[Command], + dist_cache: &[i32;kNumDistanceCacheEntries], + mut recoder_state :RecoderState, + block_type: &MetaBlockSplitRefs, + params: &BrotliEncoderParams, + context_type:Option, +) -> RecoderState { + let mut input_iter = input.clone(); + let mut local_dist_cache = [0i32;kNumDistanceCacheEntries]; + local_dist_cache.clone_from_slice(&dist_cache[..]); + let mut btypel_counter = 0usize; + let mut btypec_counter = 0usize; + let mut btyped_counter = 0usize; + let mut btypel_sub = if block_type.btypel.num_types == 1 { 1u32<<31 } else {block_type.btypel.lengths[0]}; + let mut btypec_sub = if block_type.btypec.num_types == 1 { 1u32<<31 } else {block_type.btypec.lengths[0]}; + let mut btyped_sub = if block_type.btyped.num_types == 1 { 1u32<<31 } else {block_type.btyped.lengths[0]}; + { + command_queue.push_block_switch_literal(0); + } + let mut mb_len = input.len(); + for cmd in commands.iter() { + let (inserts, interim) = input_iter.split_at(core::cmp::min(cmd.insert_len_ as usize, + mb_len)); + recoder_state.num_bytes_encoded += inserts.len(); + let _copy_cursor = input.len() - interim.len(); + // let distance_context = CommandDistanceContext(cmd); + let copylen_code: u32 = CommandCopyLenCode(cmd); + + let (prev_dist_index, dist_offset) = CommandDistanceIndexAndOffset(cmd, ¶ms.dist); + let final_distance: usize; + if prev_dist_index == 0 { + final_distance = dist_offset as usize; + } else { + final_distance = (local_dist_cache[prev_dist_index - 1] as isize + dist_offset) as usize; + } + let copy_len = copylen_code as usize; + let actual_copy_len : usize; + let max_distance = core::cmp::min(recoder_state.num_bytes_encoded, window_size_from_lgwin(params.lgwin)); + assert!(inserts.len() <= mb_len); + if inserts.len() != 0 { + let mut tmp_inserts = inserts; + while tmp_inserts.len() > btypel_sub as usize { + // we have to divide some: + let (in_a, in_b) = tmp_inserts.split_at(btypel_sub as usize); + if in_a.len() != 0 { + if let Some(_) = context_type { + command_queue.push_literals(&in_a); + } else if params.high_entropy_detection_quality == 0 { + command_queue.push_literals(&in_a); + } else { + command_queue.push_rand_literals(&in_a); + } + } + mb_len -= in_a.len(); + tmp_inserts = in_b; + btypel_counter += 1; + if block_type.btypel.types.len() > btypel_counter { + btypel_sub = block_type.btypel.lengths[btypel_counter]; + command_queue.push_block_switch_literal(block_type.btypel.types[btypel_counter]); + } else { + btypel_sub = 1u32<<31; + } + } + if let Some(_) = context_type { + command_queue.push_literals(&tmp_inserts); + } else if params.high_entropy_detection_quality == 0 { + command_queue.push_literals(&tmp_inserts); + }else { + command_queue.push_rand_literals(&tmp_inserts); + } + if tmp_inserts.len() != 0 { + mb_len -= tmp_inserts.len(); + btypel_sub -= tmp_inserts.len() as u32; + } + } + if final_distance > max_distance { // is dictionary + assert!(copy_len >= 4); + assert!(copy_len < 25); + let dictionary_offset = final_distance - max_distance - 1; + let ndbits = kBrotliDictionarySizeBitsByLength[copy_len] as usize; + let action = dictionary_offset >> ndbits; + let word_sub_index = dictionary_offset & ((1 << ndbits) - 1); + let word_index = word_sub_index * copy_len + kBrotliDictionaryOffsetsByLength[copy_len] as usize; + let raw_word = &kBrotliDictionary[word_index..word_index + copy_len]; + let mut transformed_word = [0u8; 38]; + actual_copy_len = TransformDictionaryWord(&mut transformed_word[..], + raw_word, + copy_len as i32, + action as i32) as usize; + if actual_copy_len <= mb_len { + command_queue.push(interface::Command::Dict( + interface::DictCommand{ + word_size: copy_len as u8, + transform: action as u8, + final_size: actual_copy_len as u8, + empty: 0, + word_id: word_sub_index as u32, + })); + mb_len -= actual_copy_len; + assert_eq!(InputPair(InputReference{data:transformed_word.split_at(actual_copy_len).0, orig_offset:0}, + InputReference::default()), + interim.split_at(actual_copy_len).0); + } else if mb_len != 0 { + // truncated dictionary word: represent it as literals instead + // won't be random noise since it fits in the dictionary, so we won't check for rand + command_queue.push_literals(&interim.split_at(mb_len).0); + mb_len = 0; + assert_eq!(InputPair(InputReference{data:transformed_word.split_at(mb_len).0, orig_offset:0}, + InputReference::default()), + interim.split_at(mb_len).0); + } + } else { + actual_copy_len = core::cmp::min(mb_len, copy_len); + if actual_copy_len != 0 { + command_queue.push(interface::Command::Copy( + interface::CopyCommand{ + distance: final_distance as u32, + num_bytes: actual_copy_len as u32, + })); + } + mb_len -= actual_copy_len; + if prev_dist_index != 1 || dist_offset != 0 { // update distance cache unless it's the "0 distance symbol" + let mut tmp_dist_cache = [0i32;kNumDistanceCacheEntries - 1]; + tmp_dist_cache.clone_from_slice(&local_dist_cache[..kNumDistanceCacheEntries - 1]); + local_dist_cache[1..].clone_from_slice(&tmp_dist_cache[..]); + local_dist_cache[0] = final_distance as i32; + + } + } + { + btypec_sub -= 1; + if btypec_sub == 0 { + btypec_counter += 1; + if block_type.btypec.types.len() > btypec_counter { + btypec_sub = block_type.btypec.lengths[btypec_counter]; + command_queue.push(interface::Command::BlockSwitchCommand( + interface::BlockSwitch(block_type.btypec.types[btypec_counter]))); + } else { + btypec_sub = 1u32 << 31; + } + } + } + if copy_len != 0 && cmd.cmd_prefix_ >= 128 { + btyped_sub -= 1; + if btyped_sub == 0 { + btyped_counter += 1; + if block_type.btyped.types.len() > btyped_counter { + btyped_sub = block_type.btyped.lengths[btyped_counter]; + command_queue.push(interface::Command::BlockSwitchDistance( + interface::BlockSwitch(block_type.btyped.types[btyped_counter]))); + } else { + btyped_sub = 1u32 << 31; + } + } + } + + let (copied, remainder) = interim.split_at(actual_copy_len); + recoder_state.num_bytes_encoded += copied.len(); + input_iter = remainder; + } + recoder_state +} + +fn LogMetaBlock<'a, + Alloc: BrotliAlloc, + Cb>(alloc: &mut Alloc, + commands: &[Command], input0: &'a[u8],input1: &'a[u8], + dist_cache: &[i32;kNumDistanceCacheEntries], + recoder_state :&mut RecoderState, + block_type: MetaBlockSplitRefs, + params: &BrotliEncoderParams, + context_type:Option, + callback: &mut Cb) where Cb:FnMut(&mut interface::PredictionModeContextMap, + &mut [interface::StaticCommand], + InputPair, &mut Alloc){ + let mut local_literal_context_map = [0u8; 256 * 64]; + let mut local_distance_context_map = [0u8; 256 * 64 + interface::DISTANCE_CONTEXT_MAP_OFFSET]; + assert_eq!(*block_type.btypel.types.iter().max().unwrap_or(&0) as u32 + 1, + block_type.btypel.num_types); + assert_eq!(*block_type.btypec.types.iter().max().unwrap_or(&0) as u32 + 1, + block_type.btypec.num_types); + assert_eq!(*block_type.btyped.types.iter().max().unwrap_or(&0) as u32 + 1, + block_type.btyped.num_types); + if block_type.literal_context_map.len() <= 256 * 64 { + for (index, item) in block_type.literal_context_map.iter().enumerate() { + local_literal_context_map[index] = *item as u8; + } + } + if block_type.distance_context_map.len() <= 256 * 64 { + for (index, item) in block_type.distance_context_map.iter().enumerate() { + local_distance_context_map[interface::DISTANCE_CONTEXT_MAP_OFFSET + index] = *item as u8; + } + } + + let mut prediction_mode = interface::PredictionModeContextMap::{ + literal_context_map:InputReferenceMut{ + data:local_literal_context_map.split_at_mut(block_type.literal_context_map.len()).0, + orig_offset:0}, + predmode_speed_and_distance_context_map:InputReferenceMut{ + data: local_distance_context_map.split_at_mut(interface::PredictionModeContextMap::::size_of_combined_array(block_type.distance_context_map.len())).0, + orig_offset: 0, + }, + }; + for item in prediction_mode.get_mixing_values_mut().iter_mut() { + *item = prior_eval::WhichPrior::STRIDE1 as u8; + } + prediction_mode.set_stride_context_speed([params.literal_adaptation[2], params.literal_adaptation[3]]); + prediction_mode.set_context_map_speed([params.literal_adaptation[0], params.literal_adaptation[1]]); + prediction_mode.set_combined_stride_context_speed([params.literal_adaptation[0], params.literal_adaptation[1]]); + + prediction_mode.set_literal_prediction_mode(interface::LiteralPredictionModeNibble(context_type.unwrap_or(ContextType::CONTEXT_LSB6) as u8)); + let mut entropy_tally_scratch; + let mut entropy_pyramid; + if params.stride_detection_quality == 1 || params.stride_detection_quality == 2 { + entropy_tally_scratch = find_stride::EntropyTally::::new(alloc, None); + entropy_pyramid = find_stride::EntropyPyramid::::new(alloc); + entropy_pyramid.populate(input0, input1, &mut entropy_tally_scratch); + } else { + entropy_tally_scratch = find_stride::EntropyTally::::disabled_placeholder(alloc); + entropy_pyramid = find_stride::EntropyPyramid::::disabled_placeholder(alloc); + } + let input = InputPair(InputReference{data:input0, orig_offset:0}, InputReference{data:input1, orig_offset:input0.len()}); + let mut best_strides = >::AllocatedMemory::default(); + if params.stride_detection_quality > 2 { + let mut stride_selector = stride_eval::StrideEval::::new(alloc, + input, + &prediction_mode, + ¶ms); + process_command_queue(&mut stride_selector, + input, + commands, + dist_cache, + *recoder_state, + &block_type, + params, + context_type); + let ntypes = stride_selector.num_types(); + best_strides = >::alloc_cell(stride_selector.alloc(), ntypes); + stride_selector.choose_stride(best_strides.slice_mut()); + } + let mut context_map_entropy = ContextMapEntropy::::new(alloc, input, + entropy_pyramid.stride_last_level_range(), + prediction_mode, + params.cdf_adaptation_detection); + if params.cdf_adaptation_detection != 0 { + process_command_queue(&mut context_map_entropy, + input, + commands, + dist_cache, + *recoder_state, + &block_type, + params, + context_type); + { + let (cm_speed, cm_cost) = context_map_entropy.best_singleton_speeds(true, false); + let (stride_speed, stride_cost) = context_map_entropy.best_singleton_speeds(false, false); + let (combined_speed, combined_cost) = context_map_entropy.best_singleton_speeds(false, true); + best_singleton_speed_log("CM", &cm_speed, &cm_cost); + best_singleton_speed_log("stride", &stride_speed, &stride_cost); + best_singleton_speed_log("combined", &combined_speed, &combined_cost); + } + + let cm_speed = context_map_entropy.best_speeds(true, false); + let stride_speed = context_map_entropy.best_speeds(false, false); + let combined_speed = context_map_entropy.best_speeds(false, true); + let acost = context_map_entropy.best_speeds_costs(true, false); + let bcost = context_map_entropy.best_speeds_costs(false, false); + let ccost = context_map_entropy.best_speeds_costs(false, true); + context_map_entropy.prediction_mode_mut().set_stride_context_speed(speed_to_tuple(stride_speed)); + context_map_entropy.prediction_mode_mut().set_context_map_speed(speed_to_tuple(cm_speed)); + context_map_entropy.prediction_mode_mut().set_combined_stride_context_speed(speed_to_tuple(combined_speed)); + + best_speed_log("CM", &cm_speed, &acost); + best_speed_log("Stride", &stride_speed, &bcost); + best_speed_log("StrideCombined", &combined_speed, &ccost); + } + let mut prior_selector = prior_eval::PriorEval::::new(alloc, input, + entropy_pyramid.stride_last_level_range(), + context_map_entropy.take_prediction_mode(), + ¶ms); + if params.prior_bitmask_detection != 0 { + process_command_queue(&mut prior_selector, + input, + commands, + dist_cache, + *recoder_state, + &block_type, + params, + context_type); + prior_selector.choose_bitmask(); + } + let prediction_mode = prior_selector.take_prediction_mode(); + prior_selector.free(alloc); + let mut command_queue = CommandQueue::new(alloc, + commands.len(), + prediction_mode, + input, + params.stride_detection_quality, + params.high_entropy_detection_quality, + context_map_entropy, + best_strides, + entropy_tally_scratch, + entropy_pyramid); + + + *recoder_state = process_command_queue(&mut command_queue, + input, + commands, + dist_cache, + *recoder_state, + &block_type, + params, + context_type); + command_queue.free(callback).unwrap(); +// ::std::io::stderr().write(input0).unwrap(); +// ::std::io::stderr().write(input1).unwrap(); +} + +static kBlockLengthPrefixCode: [PrefixCodeRange; BROTLI_NUM_BLOCK_LEN_SYMBOLS] = + [PrefixCodeRange { + offset: 1u32, + nbits: 2u32, + }, + PrefixCodeRange { + offset: 5u32, + nbits: 2u32, + }, + PrefixCodeRange { + offset: 9u32, + nbits: 2u32, + }, + PrefixCodeRange { + offset: 13u32, + nbits: 2u32, + }, + PrefixCodeRange { + offset: 17u32, + nbits: 3u32, + }, + PrefixCodeRange { + offset: 25u32, + nbits: 3u32, + }, + PrefixCodeRange { + offset: 33u32, + nbits: 3u32, + }, + PrefixCodeRange { + offset: 41u32, + nbits: 3u32, + }, + PrefixCodeRange { + offset: 49u32, + nbits: 4u32, + }, + PrefixCodeRange { + offset: 65u32, + nbits: 4u32, + }, + PrefixCodeRange { + offset: 81u32, + nbits: 4u32, + }, + PrefixCodeRange { + offset: 97u32, + nbits: 4u32, + }, + PrefixCodeRange { + offset: 113u32, + nbits: 5u32, + }, + PrefixCodeRange { + offset: 145u32, + nbits: 5u32, + }, + PrefixCodeRange { + offset: 177u32, + nbits: 5u32, + }, + PrefixCodeRange { + offset: 209u32, + nbits: 5u32, + }, + PrefixCodeRange { + offset: 241u32, + nbits: 6u32, + }, + PrefixCodeRange { + offset: 305u32, + nbits: 6u32, + }, + PrefixCodeRange { + offset: 369u32, + nbits: 7u32, + }, + PrefixCodeRange { + offset: 497u32, + nbits: 8u32, + }, + PrefixCodeRange { + offset: 753u32, + nbits: 9u32, + }, + PrefixCodeRange { + offset: 1265u32, + nbits: 10u32, + }, + PrefixCodeRange { + offset: 2289u32, + nbits: 11u32, + }, + PrefixCodeRange { + offset: 4337u32, + nbits: 12u32, + }, + PrefixCodeRange { + offset: 8433u32, + nbits: 13u32, + }, + PrefixCodeRange { + offset: 16625u32, + nbits: 24u32, + }]; + +fn BrotliWriteBits(n_bits: u8, bits: u64, pos: &mut usize, array: &mut [u8]) { + assert!((bits >> n_bits as usize) == 0); + assert!(n_bits <= 56); + let ptr_offset: usize = ((*pos >> 3) as u32) as usize; + let mut v = array[ptr_offset] as u64; + v |= bits << ((*pos) as u64 & 7); + array[ptr_offset + 7] = (v >> 56) as u8; + array[ptr_offset + 6] = ((v >> 48) & 0xff) as u8; + array[ptr_offset + 5] = ((v >> 40) & 0xff) as u8; + array[ptr_offset + 4] = ((v >> 32) & 0xff) as u8; + array[ptr_offset + 3] = ((v >> 24) & 0xff) as u8; + array[ptr_offset + 2] = ((v >> 16) & 0xff) as u8; + array[ptr_offset + 1] = ((v >> 8) & 0xff) as u8; + array[ptr_offset] = (v & 0xff) as u8; + *pos += n_bits as usize +} + +fn BrotliWriteBitsPrepareStorage(pos: usize, array: &mut [u8]) { + assert_eq!(pos & 7, 0); + array[pos >> 3] = 0; +} + +fn BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes: i32, + code_length_bitdepth: &[u8], + storage_ix: &mut usize, + storage: &mut [u8]) { + static kStorageOrder: [u8; 18] = [1i32 as (u8), + 2i32 as (u8), + 3i32 as (u8), + 4i32 as (u8), + 0i32 as (u8), + 5i32 as (u8), + 17i32 as (u8), + 6i32 as (u8), + 16i32 as (u8), + 7i32 as (u8), + 8i32 as (u8), + 9i32 as (u8), + 10i32 as (u8), + 11i32 as (u8), + 12i32 as (u8), + 13i32 as (u8), + 14i32 as (u8), + 15i32 as (u8)]; + static kHuffmanBitLengthHuffmanCodeSymbols: [u8; 6] = + [0i32 as (u8), 7i32 as (u8), 3i32 as (u8), 2i32 as (u8), 1i32 as (u8), 15i32 as (u8)]; + static kHuffmanBitLengthHuffmanCodeBitLengths: [u8; 6] = + [2i32 as (u8), 4i32 as (u8), 3i32 as (u8), 2i32 as (u8), 2i32 as (u8), 4i32 as (u8)]; + let mut skip_some: u64 = 0u64; + let mut codes_to_store: u64 = 18; + if num_codes > 1i32 { + 'break5: while codes_to_store > 0 { + { + if code_length_bitdepth[(kStorageOrder[codes_to_store.wrapping_sub(1) as + usize] as (usize))] as (i32) != 0i32 { + { + break 'break5; + } + } + } + codes_to_store = codes_to_store.wrapping_sub(1); + } + } + if code_length_bitdepth[(kStorageOrder[0usize] as (usize))] as (i32) == 0i32 && + (code_length_bitdepth[(kStorageOrder[1usize] as (usize))] as (i32) == 0i32) { + skip_some = 2; + if code_length_bitdepth[(kStorageOrder[2usize] as (usize))] as (i32) == 0i32 { + skip_some = 3; + } + } + BrotliWriteBits(2, skip_some, storage_ix, storage); + { + let mut i: u64; + i = skip_some; + while i < codes_to_store { + { + let l: usize = code_length_bitdepth[(kStorageOrder[i as usize] as (usize))] as (usize); + BrotliWriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l] as (u8), + kHuffmanBitLengthHuffmanCodeSymbols[l] as u64, + storage_ix, + storage); + } + i = i.wrapping_add(1); + } + } + +} + +fn BrotliStoreHuffmanTreeToBitMask(huffman_tree_size: usize, + huffman_tree: &[u8], + huffman_tree_extra_bits: &[u8], + code_length_bitdepth: &[u8], + code_length_bitdepth_symbols: &[u16], + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut i: usize; + i = 0usize; + while i < huffman_tree_size { + { + let ix: usize = huffman_tree[(i as (usize))] as (usize); + BrotliWriteBits(code_length_bitdepth[(ix as (usize))] as (u8), + code_length_bitdepth_symbols[(ix as (usize))] as (u64), + storage_ix, + storage); + if ix == 16usize { + BrotliWriteBits(2, + huffman_tree_extra_bits[(i as (usize))] as (u64), + storage_ix, + storage); + } else if ix == 17usize { + BrotliWriteBits(3, + huffman_tree_extra_bits[(i as (usize))] as (u64), + storage_ix, + storage); + } + } + i = i.wrapping_add(1 as (usize)); + } +} + +pub fn BrotliStoreHuffmanTree(depths: &[u8], + num: usize, + tree: &mut [HuffmanTree], + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut huffman_tree: [u8; 704] = [0; 704]; + let mut huffman_tree_extra_bits: [u8; 704] = [0; 704]; + let mut huffman_tree_size: usize = 0usize; + let mut code_length_bitdepth: [u8; 18] = [0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8), + 0i32 as (u8)]; + let mut code_length_bitdepth_symbols: [u16; 18] = [0; 18]; + let mut huffman_tree_histogram: [u32; 18] = [0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32]; + let mut i: usize; + let mut num_codes: i32 = 0i32; + let mut code: usize = 0usize; + 0i32; + BrotliWriteHuffmanTree(depths, + num, + &mut huffman_tree_size, + &mut huffman_tree[..], + &mut huffman_tree_extra_bits[..]); + i = 0usize; + while i < huffman_tree_size { + { + let _rhs = 1; + let _lhs = &mut huffman_tree_histogram[huffman_tree[i] as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + 'break3: while i < 18usize { + { + if huffman_tree_histogram[i] != 0 { + if num_codes == 0i32 { + code = i; + num_codes = 1i32; + } else if num_codes == 1i32 { + num_codes = 2i32; + { + { + break 'break3; + } + } + } + } + } + i = i.wrapping_add(1 as (usize)); + } + BrotliCreateHuffmanTree(&mut huffman_tree_histogram, + 18usize, + 5i32, + tree, + &mut code_length_bitdepth); + BrotliConvertBitDepthsToSymbols(&mut code_length_bitdepth, + 18usize, + &mut code_length_bitdepth_symbols); + BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, + &code_length_bitdepth, + storage_ix, + storage); + if num_codes == 1i32 { + code_length_bitdepth[code] = 0i32 as (u8); + } + BrotliStoreHuffmanTreeToBitMask(huffman_tree_size, + &huffman_tree, + &huffman_tree_extra_bits, + &code_length_bitdepth, + &code_length_bitdepth_symbols, + storage_ix, + storage); +} + +fn StoreStaticCodeLengthCode(storage_ix: &mut usize, storage: &mut [u8]) { + BrotliWriteBits(40, + 0xffu32 as (u64) << 32i32 | 0x55555554u32 as (u64), + storage_ix, + storage); +} + +pub struct SimpleSortHuffmanTree {} + +impl HuffmanComparator for SimpleSortHuffmanTree { + fn Cmp(self: &Self, v0: &HuffmanTree, v1: &HuffmanTree) -> bool { + return (*v0).total_count_ < (*v1).total_count_; + } +} + +pub fn BrotliBuildAndStoreHuffmanTreeFast>( + m : &mut AllocHT, + histogram : &[u32], + histogram_total : usize, + max_bits : usize, + depth : &mut [u8], + bits : &mut [u16], + storage_ix : &mut usize, + storage : &mut [u8] +){ + let mut count: u64 = 0; + let mut symbols: [u64; 4] = [0; 4]; + let mut length: u64 = 0; + let mut total: usize = histogram_total; + while total != 0usize { + if histogram[(length as (usize))] != 0 { + if count < 4 { + symbols[count as usize] = length; + } + count = count.wrapping_add(1); + total = total.wrapping_sub(histogram[(length as (usize))] as (usize)); + } + length = length.wrapping_add(1); + } + if count <= 1 { + BrotliWriteBits(4, 1, storage_ix, storage); + BrotliWriteBits(max_bits as u8, symbols[0usize], storage_ix, storage); + depth[symbols[0usize] as (usize)] = 0i32 as (u8); + bits[symbols[0usize] as (usize)] = 0i32 as (u16); + return ; + } + for depth_elem in depth[..(length as usize)].iter_mut() { + *depth_elem = 0; // memset + } + { + let max_tree_size: u64 = (2u64).wrapping_mul(length).wrapping_add(1); + let mut tree = if max_tree_size != 0 { + m.alloc_cell(max_tree_size as usize) + } else { + AllocHT::AllocatedMemory::default() // null + }; + let mut count_limit: u32; + if !(0i32 == 0) { + return; + } + count_limit = 1u32; + 'break11: loop { + { + let mut node_index: u32 = 0u32; + let mut l: u64; + l = length; + while l != 0 { + l = l.wrapping_sub(1); + if histogram[(l as (usize))] != 0 { + if histogram[(l as (usize))] >= count_limit { + InitHuffmanTree(&mut tree.slice_mut()[(node_index as (usize))], + histogram[(l as (usize))], + -1i32 as (i16), + l as (i16)); + } else { + InitHuffmanTree(&mut tree.slice_mut()[(node_index as (usize))], + count_limit, + -1i32 as (i16), + l as (i16)); + } + node_index = node_index.wrapping_add(1 as (u32)); + } + } + { + let n: i32 = node_index as (i32); + let sentinel: HuffmanTree; + let mut i: i32 = 0i32; + let mut j: i32 = n + 1i32; + let mut k: i32; + SortHuffmanTreeItems(tree.slice_mut(), n as (usize), SimpleSortHuffmanTree {}); + sentinel = NewHuffmanTree(!(0u32), -1i16, -1i16); + tree.slice_mut()[(node_index.wrapping_add(1u32) as (usize))] = sentinel.clone(); + tree.slice_mut()[(node_index as (usize))] = sentinel.clone(); + node_index = node_index.wrapping_add(2u32); + k = n - 1i32; + while k > 0i32 { + { + let left: i32; + let right: i32; + if (tree.slice()[(i as (usize))]).total_count_ <= + (tree.slice()[(j as (usize))]).total_count_ { + left = i; + i = i + 1; + } else { + left = j; + j = j + 1; + } + if (tree.slice()[(i as (usize))]).total_count_ <= + (tree.slice()[(j as (usize))]).total_count_ { + right = i; + i = i + 1; + } else { + right = j; + j = j + 1; + } + let sum_total = (tree.slice()[(left as (usize))]) + .total_count_ + .wrapping_add((tree.slice()[(right as (usize))]).total_count_); + let tree_ind = (node_index.wrapping_sub(1u32) as (usize)); + (tree.slice_mut()[tree_ind]).total_count_ = sum_total; + (tree.slice_mut()[tree_ind]).index_left_ = left as (i16); + (tree.slice_mut()[tree_ind]).index_right_or_value_ = right as (i16); + tree.slice_mut()[(node_index as (usize))] = sentinel.clone(); + node_index = node_index.wrapping_add(1u32); + } + k = k - 1; + } + if BrotliSetDepth(2i32 * n - 1i32, tree.slice_mut(), depth, 14i32) { + { + break 'break11; + } + } + } + } + count_limit = count_limit.wrapping_mul(2u32); + } + { + m.free_cell(core::mem::replace(&mut tree, AllocHT::AllocatedMemory::default())); + } + } + BrotliConvertBitDepthsToSymbols(depth, length as usize, bits); + if count <= 4 { + let mut i: u64; + BrotliWriteBits(2, 1, storage_ix, storage); + BrotliWriteBits(2, count.wrapping_sub(1) as u64, storage_ix, storage); + i = 0; + while i < count { + { + let mut j: u64; + j = i.wrapping_add(1); + while j < count { + { + if depth[(symbols[j as usize] as (usize))] as (i32) < + depth[(symbols[i as usize] as (usize)) as usize] as (i32) { + let brotli_swap_tmp: u64 = symbols[j as usize]; + symbols[j as usize] = symbols[i as usize]; + symbols[i as usize] = brotli_swap_tmp; + } + } + j = j.wrapping_add(1); + } + } + i = i.wrapping_add(1); + } + if count == 2 { + BrotliWriteBits(max_bits as u8, symbols[0usize], storage_ix, storage); + BrotliWriteBits(max_bits as u8, symbols[1usize], storage_ix, storage); + } else if count == 3 { + BrotliWriteBits(max_bits as u8, symbols[0usize], storage_ix, storage); + BrotliWriteBits(max_bits as u8, symbols[1usize], storage_ix, storage); + BrotliWriteBits(max_bits as u8, symbols[2usize], storage_ix, storage); + } else { + BrotliWriteBits(max_bits as u8, symbols[0usize], storage_ix, storage); + BrotliWriteBits(max_bits as u8, symbols[1usize], storage_ix, storage); + BrotliWriteBits(max_bits as u8, symbols[2usize], storage_ix, storage); + BrotliWriteBits(max_bits as u8, symbols[3usize], storage_ix, storage); + BrotliWriteBits(1, + if depth[(symbols[0usize] as (usize))] as (i32) == 1i32 { + 1i32 + } else { + 0i32 + } as (u64), + storage_ix, + storage); + } + } else { + let mut previous_value: u8 = 8i32 as (u8); + let mut i: u64; + StoreStaticCodeLengthCode(storage_ix, storage); + i = 0; + while i < length { + let value: u8 = depth[(i as (usize))]; + let mut reps: u64 = 1; + let mut k: u64; + k = i.wrapping_add(1); + while k < length && (depth[(k as (usize))] as (i32) == value as (i32)) { + { + reps = reps.wrapping_add(1); + } + k = k.wrapping_add(1); + } + i = i.wrapping_add(reps); + if value as (i32) == 0i32 { + BrotliWriteBits(kZeroRepsDepth[reps as usize] as (u8), + kZeroRepsBits[reps as usize] as u64, + storage_ix, + storage); + } else { + if previous_value as (i32) != value as (i32) { + BrotliWriteBits(kCodeLengthDepth[value as (usize)] as (u8), + kCodeLengthBits[value as (usize)] as (u64), + storage_ix, + storage); + reps = reps.wrapping_sub(1); + } + if reps < 3 { + while reps != 0 { + reps = reps.wrapping_sub(1); + BrotliWriteBits(kCodeLengthDepth[value as (usize)] as (u8), + kCodeLengthBits[value as (usize)] as (u64), + storage_ix, + storage); + } + } else { + reps = reps.wrapping_sub(3); + BrotliWriteBits(kNonZeroRepsDepth[reps as usize] as (u8), + kNonZeroRepsBits[reps as usize] as u64, + storage_ix, + storage); + } + previous_value = value; + } + } + } +} + +pub struct MetaBlockSplit + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator> +{ + pub literal_split: BlockSplit, + pub command_split: BlockSplit, + pub distance_split: BlockSplit, + pub literal_context_map: >::AllocatedMemory, + pub literal_context_map_size: usize, + pub distance_context_map: >::AllocatedMemory, + pub distance_context_map_size: usize, + pub literal_histograms: >::AllocatedMemory, + pub literal_histograms_size: usize, + pub command_histograms: >::AllocatedMemory, + pub command_histograms_size: usize, + pub distance_histograms: >::AllocatedMemory, + pub distance_histograms_size: usize, +} +impl + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator> + MetaBlockSplit { + pub fn new() -> Self { + return MetaBlockSplit { + literal_split:BlockSplit::::new(), + command_split:BlockSplit::::new(), + distance_split:BlockSplit::::new(), + literal_context_map : >::AllocatedMemory::default(), + literal_context_map_size : 0, + distance_context_map : >::AllocatedMemory::default(), + distance_context_map_size : 0, + literal_histograms : >::AllocatedMemory::default(), + literal_histograms_size : 0, + command_histograms : >::AllocatedMemory::default(), + command_histograms_size : 0, + distance_histograms : >::AllocatedMemory::default(), + distance_histograms_size : 0, + } + } + pub fn destroy(&mut self, + alloc: &mut Alloc) { + self.literal_split.destroy(alloc); + self.command_split.destroy(alloc); + self.distance_split.destroy(alloc); + >::free_cell(alloc, core::mem::replace(&mut self.literal_context_map, + >::AllocatedMemory::default())); + self.literal_context_map_size = 0; + >::free_cell(alloc, core::mem::replace(&mut self.distance_context_map, + >::AllocatedMemory::default())); + self.distance_context_map_size = 0; + >::free_cell(alloc, core::mem::replace(&mut self.literal_histograms, + >::AllocatedMemory::default())); + + self.literal_histograms_size = 0; + >::free_cell(alloc, core::mem::replace(&mut self.command_histograms, + >::AllocatedMemory::default())); + self.command_histograms_size = 0; + >::free_cell(alloc, core::mem::replace(&mut self.distance_histograms, + >::AllocatedMemory::default())); + self.distance_histograms_size = 0; + } +} +#[derive(Clone, Copy)] +pub struct BlockTypeCodeCalculator { + pub last_type: usize, + pub second_last_type: usize, +} + +pub struct BlockSplitCode { + pub type_code_calculator: BlockTypeCodeCalculator, + pub type_depths: [u8; 258], + pub type_bits: [u16; 258], + pub length_depths: [u8; 26], + pub length_bits: [u16; 26], +} + +pub struct BlockEncoder<'a, Alloc: alloc::Allocator + alloc::Allocator> { + /* pub alloc_u8 : AllocU8, + pub alloc_u16 : AllocU16, + pub alloc_u32 : AllocU32, + pub alloc_ht : AllocHT,*/ + pub histogram_length_: usize, + pub num_block_types_: usize, + pub block_types_: &'a [u8], + pub block_lengths_: &'a [u32], + pub num_blocks_: usize, + pub block_split_code_: BlockSplitCode, + pub block_ix_: usize, + pub block_len_: usize, + pub entropy_ix_: usize, + pub depths_: >::AllocatedMemory, + pub bits_: >::AllocatedMemory, +} + +fn Log2FloorNonZero(mut n: u64) -> u32 { + let mut result: u32 = 0u32; + 'loop1: loop { + if { + n = n >> 1i32; + n + } != 0 { + result = result.wrapping_add(1 as (u32)); + continue 'loop1; + } else { + break 'loop1; + } + } + result +} + +fn BrotliEncodeMlen(length: u32, + bits: &mut u64, + numbits: &mut u32, + nibblesbits: &mut u32) { + let lg: u32 = (if length == 1u32 { + 1u32 + } else { + Log2FloorNonZero(length.wrapping_sub(1u32) as (u32) as (u64)).wrapping_add(1u32) + }) as (u32); + let mnibbles: u32 = (if lg < 16u32 { + 16u32 + } else { + lg.wrapping_add(3u32) + }) + .wrapping_div(4u32); + assert!(length > 0); + assert!(length <= (1 << 24)); + assert!(lg <= 24); + *nibblesbits = mnibbles.wrapping_sub(4u32); + *numbits = mnibbles.wrapping_mul(4u32); + *bits = length.wrapping_sub(1u32) as u64; +} + + +fn StoreCompressedMetaBlockHeader(is_final_block: i32, + length: usize, + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut lenbits: u64 = 0; + let mut nlenbits: u32 = 0; + let mut nibblesbits: u32 = 0; + BrotliWriteBits(1, is_final_block as (u64), storage_ix, storage); + if is_final_block != 0 { + BrotliWriteBits(1, 0, storage_ix, storage); + } + BrotliEncodeMlen(length as u32, &mut lenbits, &mut nlenbits, &mut nibblesbits); + BrotliWriteBits(2, nibblesbits as u64, storage_ix, storage); + BrotliWriteBits(nlenbits as u8, lenbits, storage_ix, storage); + if is_final_block == 0 { + BrotliWriteBits(1, 0, storage_ix, storage); + } +} + +fn NewBlockTypeCodeCalculator() -> BlockTypeCodeCalculator { + return BlockTypeCodeCalculator { + last_type: 1, + second_last_type: 0, + }; +} + +fn NewBlockEncoder<'a, Alloc: alloc::Allocator + alloc::Allocator> + (histogram_length: usize, + num_block_types: usize, + block_types: &'a [u8], + block_lengths: &'a [u32], + num_blocks: usize) + -> BlockEncoder<'a, Alloc> { + let block_len: usize; + if num_blocks != 0 && block_lengths.len() != 0 { + block_len = block_lengths[0] as usize; + } else { + block_len = 0; + } + return BlockEncoder:: { + histogram_length_: histogram_length, + num_block_types_: num_block_types, + block_types_: block_types, + block_lengths_: block_lengths, + num_blocks_: num_blocks, + block_split_code_: BlockSplitCode { + type_code_calculator: NewBlockTypeCodeCalculator(), + type_depths: [0; 258], + type_bits: [0; 258], + length_depths: [0; 26], + length_bits: [0; 26], + }, + block_ix_: 0, + block_len_: block_len, + entropy_ix_: 0, + depths_: >::AllocatedMemory::default(), + bits_: >::AllocatedMemory::default(), + }; +} + + + + + +fn NextBlockTypeCode(calculator: &mut BlockTypeCodeCalculator, type_: u8) -> usize { + let type_code: usize = (if type_ as (usize) == + (*calculator).last_type.wrapping_add(1usize) { + 1u32 + } else if type_ as (usize) == (*calculator).second_last_type { + 0u32 + } else { + (type_ as (u32)).wrapping_add(2u32) + }) as (usize); + (*calculator).second_last_type = (*calculator).last_type; + (*calculator).last_type = type_ as (usize); + type_code +} + +fn BlockLengthPrefixCode(len: u32) -> u32 { + let mut code: u32 = (if len >= 177u32 { + if len >= 753u32 { 20i32 } else { 14i32 } + } else if len >= 41u32 { + 7i32 + } else { + 0i32 + }) as (u32); + while code < (26i32 - 1i32) as (u32) && + (len >= kBlockLengthPrefixCode[code.wrapping_add(1u32) as (usize)].offset) { + code = code.wrapping_add(1 as (u32)); + } + code +} + +fn StoreVarLenUint8(n: u64, storage_ix: &mut usize, storage: &mut [u8]) { + if n == 0 { + BrotliWriteBits(1, 0, storage_ix, storage); + } else { + let nbits: u8 = Log2FloorNonZero(n) as (u8); + BrotliWriteBits(1, 1, storage_ix, storage); + BrotliWriteBits(3, nbits as u64, storage_ix, storage); + BrotliWriteBits(nbits, n.wrapping_sub(1u64 << nbits), storage_ix, storage); + } +} + + +fn StoreSimpleHuffmanTree(depths: &[u8], + symbols: &mut [usize], + num_symbols: usize, + max_bits: usize, + storage_ix: &mut usize, + storage: &mut [u8]) { + BrotliWriteBits(2, 1, storage_ix, storage); + BrotliWriteBits(2, num_symbols.wrapping_sub(1) as u64, storage_ix, storage); + { + let mut i: usize; + i = 0usize; + while i < num_symbols { + { + let mut j: usize; + j = i.wrapping_add(1usize); + while j < num_symbols { + { + if depths[(symbols[(j as (usize))] as (usize))] as (i32) < + depths[(symbols[(i as (usize))] as (usize))] as (i32) { + let mut __brotli_swap_tmp: usize = symbols[(j as (usize))]; + symbols[(j as (usize))] = symbols[(i as (usize))]; + symbols[(i as (usize))] = __brotli_swap_tmp; + } + } + j = j.wrapping_add(1 as (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } + } + if num_symbols == 2usize { + BrotliWriteBits(max_bits as u8, + symbols[(0usize)] as u64, + storage_ix, + storage); + BrotliWriteBits(max_bits as u8, + symbols[(1usize)] as u64, + storage_ix, + storage); + } else if num_symbols == 3usize { + BrotliWriteBits(max_bits as u8, + symbols[(0usize)] as u64, + storage_ix, + storage); + BrotliWriteBits(max_bits as u8, + symbols[(1usize)] as u64, + storage_ix, + storage); + BrotliWriteBits(max_bits as u8, + symbols[(2usize)] as u64, + storage_ix, + storage); + } else { + BrotliWriteBits(max_bits as u8, + symbols[(0usize)] as u64, + storage_ix, + storage); + BrotliWriteBits(max_bits as u8, + symbols[(1usize)] as u64, + storage_ix, + storage); + BrotliWriteBits(max_bits as u8, + symbols[(2usize)] as u64, + storage_ix, + storage); + BrotliWriteBits(max_bits as u8, + symbols[(3usize)] as u64, + storage_ix, + storage); + BrotliWriteBits(1, + if depths[(symbols[(0usize)] as (usize))] as (i32) == 1i32 { + 1i32 + } else { + 0i32 + } as (u64), + storage_ix, + storage); + } +} + +fn BuildAndStoreHuffmanTree(histogram: &[u32], + histogram_length: usize, + alphabet_size: usize, + tree: &mut [HuffmanTree], + depth: &mut [u8], + bits: &mut [u16], + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut count: usize = 0usize; + let mut s4: [usize; 4] = [0usize, 0usize, 0usize, 0usize]; + let mut i: usize; + let mut max_bits: usize = 0usize; + i = 0usize; + 'break31: while i < histogram_length { + { + if histogram[(i as (usize))] != 0 { + if count < 4usize { + s4[count] = i; + } else if count > 4usize { + { + break 'break31; + } + } + count = count.wrapping_add(1 as (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } + { + let mut max_bits_counter: usize = alphabet_size.wrapping_sub(1usize); + while max_bits_counter != 0 { + max_bits_counter = max_bits_counter >> 1i32; + max_bits = max_bits.wrapping_add(1 as (usize)); + } + } + if count <= 1usize { + BrotliWriteBits(4, 1, storage_ix, storage); + BrotliWriteBits(max_bits as u8, s4[0usize] as u64, storage_ix, storage); + depth[(s4[0usize] as (usize))] = 0i32 as (u8); + bits[(s4[0usize] as (usize))] = 0i32 as (u16); + return; + } + + for depth_elem in depth[..histogram_length].iter_mut() { + *depth_elem = 0; // memset + } + BrotliCreateHuffmanTree(histogram, histogram_length, 15i32, tree, depth); + BrotliConvertBitDepthsToSymbols(depth, histogram_length, bits); + if count <= 4usize { + StoreSimpleHuffmanTree(depth, &mut s4[..], count, max_bits, storage_ix, storage); + } else { + BrotliStoreHuffmanTree(depth, histogram_length, tree, storage_ix, storage); + } +} + +fn GetBlockLengthPrefixCode(len: u32, + code: &mut usize, + n_extra: &mut u32, + extra: &mut u32) { + *code = BlockLengthPrefixCode(len) as (usize); + *n_extra = kBlockLengthPrefixCode[*code].nbits; + *extra = len.wrapping_sub(kBlockLengthPrefixCode[*code].offset); +} + +fn StoreBlockSwitch(code: &mut BlockSplitCode, + block_len: u32, + block_type: u8, + is_first_block: i32, + storage_ix: &mut usize, + storage: &mut [u8]) { + let typecode: usize = NextBlockTypeCode(&mut (*code).type_code_calculator, block_type); + let mut lencode: usize = 0; + let mut len_nextra: u32 = 0; + let mut len_extra: u32 = 0; + if is_first_block == 0 { + BrotliWriteBits((*code).type_depths[typecode] as (u8), + (*code).type_bits[typecode] as (u64), + storage_ix, + storage); + } + GetBlockLengthPrefixCode(block_len, &mut lencode, &mut len_nextra, &mut len_extra); + BrotliWriteBits((*code).length_depths[lencode] as (u8), + (*code).length_bits[lencode] as (u64), + storage_ix, + storage); + BrotliWriteBits(len_nextra as (u8), len_extra as (u64), storage_ix, storage); +} + +fn BuildAndStoreBlockSplitCode(types: &[u8], + lengths: &[u32], + num_blocks: usize, + num_types: usize, + tree: &mut [HuffmanTree], + code: &mut BlockSplitCode, + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut type_histo: [u32; 258] = [0; 258]; + let mut length_histo: [u32; 26] = [0; 26]; + let mut i: usize; + let mut type_code_calculator = NewBlockTypeCodeCalculator(); + i = 0usize; + while i < num_blocks { + { + let type_code: usize = NextBlockTypeCode(&mut type_code_calculator, types[(i as (usize))]); + if i != 0usize { + let _rhs = 1; + let _lhs = &mut type_histo[type_code]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + { + let _rhs = 1; + let _lhs = &mut length_histo[BlockLengthPrefixCode(lengths[(i as (usize))]) as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } + i = i.wrapping_add(1 as (usize)); + } + StoreVarLenUint8(num_types.wrapping_sub(1) as u64, storage_ix, storage); + if num_types > 1usize { + BuildAndStoreHuffmanTree(&mut type_histo[0usize..], + num_types.wrapping_add(2usize), + num_types.wrapping_add(2usize), + tree, + &mut (*code).type_depths[0usize..], + &mut (*code).type_bits[0usize..], + storage_ix, + storage); + BuildAndStoreHuffmanTree(&mut length_histo[0usize..], + super::constants::BROTLI_NUM_BLOCK_LEN_SYMBOLS, // 26 + super::constants::BROTLI_NUM_BLOCK_LEN_SYMBOLS, + tree, + &mut (*code).length_depths[0usize..], + &mut (*code).length_bits[0usize..], + storage_ix, + storage); + StoreBlockSwitch(code, + lengths[(0usize)], + types[(0usize)], + 1i32, + storage_ix, + storage); + } +} + +fn BuildAndStoreBlockSwitchEntropyCodes<'a, + Alloc: alloc::Allocator + alloc::Allocator> + (xself: &mut BlockEncoder<'a, Alloc>, + tree: &mut [HuffmanTree], + storage_ix: &mut usize, + storage: &mut [u8]) { + BuildAndStoreBlockSplitCode((*xself).block_types_, + (*xself).block_lengths_, + (*xself).num_blocks_, + (*xself).num_block_types_, + tree, + &mut (*xself).block_split_code_, + storage_ix, + storage); +} + +fn StoreTrivialContextMap(num_types: usize, + context_bits: usize, + tree: &mut [HuffmanTree], + storage_ix: &mut usize, + storage: &mut [u8]) { + StoreVarLenUint8(num_types.wrapping_sub(1usize) as u64, storage_ix, storage); + if num_types > 1usize { + let repeat_code: usize = context_bits.wrapping_sub(1u32 as (usize)); + let repeat_bits: usize = (1u32 << repeat_code).wrapping_sub(1u32) as (usize); + let alphabet_size: usize = num_types.wrapping_add(repeat_code); + let mut histogram: [u32; 272] = [0; 272]; + let mut depths: [u8; 272] = [0; 272]; + let mut bits: [u16; 272] = [0; 272]; + let mut i: usize; + BrotliWriteBits(1u8, 1u64, storage_ix, storage); + BrotliWriteBits(4u8, + repeat_code.wrapping_sub(1usize) as u64, + storage_ix, + storage); + histogram[repeat_code] = num_types as (u32); + histogram[0usize] = 1u32; + i = context_bits; + while i < alphabet_size { + { + histogram[i] = 1u32; + } + i = i.wrapping_add(1 as (usize)); + } + BuildAndStoreHuffmanTree(&mut histogram[..], + alphabet_size, + alphabet_size, + tree, + &mut depths[..], + &mut bits[..], + storage_ix, + storage); + i = 0usize; + while i < num_types { + { + let code: usize = if i == 0usize { + 0usize + } else { + i.wrapping_add(context_bits).wrapping_sub(1usize) + }; + BrotliWriteBits(depths[code] as (u8), + bits[code] as (u64), + storage_ix, + storage); + BrotliWriteBits(depths[repeat_code] as (u8), + bits[repeat_code] as (u64), + storage_ix, + storage); + BrotliWriteBits(repeat_code as u8, repeat_bits as u64, storage_ix, storage); + } + i = i.wrapping_add(1 as (usize)); + } + BrotliWriteBits(1, 1, storage_ix, storage); + } +} + +fn IndexOf(v: &[u8], v_size: usize, value: u8) -> usize { + let mut i: usize = 0usize; + while i < v_size { + { + if v[(i as (usize))] as (i32) == value as (i32) { + return i; + } + } + i = i.wrapping_add(1 as (usize)); + } + i +} + +fn MoveToFront(v: &mut [u8], index: usize) { + let value: u8 = v[(index as (usize))]; + let mut i: usize; + i = index; + while i != 0usize { + { + v[(i as (usize))] = v[(i.wrapping_sub(1usize) as (usize))]; + } + i = i.wrapping_sub(1 as (usize)); + } + v[(0usize)] = value; +} + +fn MoveToFrontTransform(v_in: &[u32], v_size: usize, v_out: &mut [u32]) { + let mut i: usize; + let mut mtf: [u8; 256] = [0; 256]; + let mut max_value: u32; + if v_size == 0usize { + return; + } + max_value = v_in[(0usize)]; + i = 1usize; + while i < v_size { + { + if v_in[(i as (usize))] > max_value { + max_value = v_in[(i as (usize))]; + } + } + i = i.wrapping_add(1 as (usize)); + } + 0i32; + i = 0usize; + while i <= max_value as (usize) { + { + mtf[i] = i as (u8); + } + i = i.wrapping_add(1 as (usize)); + } + { + let mtf_size: usize = max_value.wrapping_add(1u32) as (usize); + i = 0usize; + while i < v_size { + { + let index: usize = IndexOf(&mtf[..], mtf_size, v_in[(i as (usize))] as (u8)); + 0i32; + v_out[(i as (usize))] = index as (u32); + MoveToFront(&mut mtf[..], index); + } + i = i.wrapping_add(1 as (usize)); + } + } +} + +fn brotli_max_uint32_t(a: u32, b: u32) -> u32 { + if a > b { a } else { b } +} + +fn brotli_min_uint32_t(a: u32, b: u32) -> u32 { + if a < b { a } else { b } +} + +fn RunLengthCodeZeros(in_size: usize, + v: &mut [u32], + out_size: &mut usize, + max_run_length_prefix: &mut u32) { + let mut max_reps: u32 = 0u32; + let mut i: usize; + let mut max_prefix: u32; + i = 0usize; + while i < in_size { + let mut reps: u32 = 0u32; + while i < in_size && (v[(i as (usize))] != 0u32) { + i = i.wrapping_add(1 as (usize)); + } + while i < in_size && (v[(i as (usize))] == 0u32) { + { + reps = reps.wrapping_add(1 as (u32)); + } + i = i.wrapping_add(1 as (usize)); + } + max_reps = brotli_max_uint32_t(reps, max_reps); + } + max_prefix = if max_reps > 0u32 { + Log2FloorNonZero(max_reps as (u64)) + } else { + 0u32 + }; + max_prefix = brotli_min_uint32_t(max_prefix, *max_run_length_prefix); + *max_run_length_prefix = max_prefix; + *out_size = 0usize; + i = 0usize; + while i < in_size { + 0i32; + if v[(i as (usize))] != 0u32 { + v[(*out_size as (usize))] = (v[(i as (usize))]).wrapping_add(*max_run_length_prefix); + i = i.wrapping_add(1 as (usize)); + *out_size = (*out_size).wrapping_add(1 as (usize)); + } else { + let mut reps: u32 = 1u32; + let mut k: usize; + k = i.wrapping_add(1usize); + while k < in_size && (v[(k as (usize))] == 0u32) { + { + reps = reps.wrapping_add(1 as (u32)); + } + k = k.wrapping_add(1 as (usize)); + } + i = i.wrapping_add(reps as (usize)); + while reps != 0u32 { + if reps < 2u32 << max_prefix { + let run_length_prefix: u32 = Log2FloorNonZero(reps as (u64)); + let extra_bits: u32 = reps.wrapping_sub(1u32 << run_length_prefix); + v[(*out_size as (usize))] = run_length_prefix.wrapping_add(extra_bits << 9i32); + *out_size = (*out_size).wrapping_add(1 as (usize)); + { + { + break; + } + } + } else { + let extra_bits: u32 = (1u32 << max_prefix).wrapping_sub(1u32); + v[(*out_size as (usize))] = max_prefix.wrapping_add(extra_bits << 9i32); + reps = reps.wrapping_sub((2u32 << max_prefix).wrapping_sub(1u32)); + *out_size = (*out_size).wrapping_add(1 as (usize)); + } + } + } + } +} + +fn EncodeContextMap>(m: &mut AllocU32, + context_map: &[u32], + context_map_size: usize, + num_clusters: usize, + tree: &mut [HuffmanTree], + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut i: usize; + let mut rle_symbols: AllocU32::AllocatedMemory; + let mut max_run_length_prefix: u32 = 6u32; + let mut num_rle_symbols: usize = 0usize; + static kSymbolMask: u32 = (1u32 << 9i32) - 1; + let mut depths: [u8; 272] = [0; 272]; + let mut bits: [u16; 272] = [0; 272]; + StoreVarLenUint8(num_clusters.wrapping_sub(1usize) as u64, + storage_ix, + storage); + if num_clusters == 1usize { + return; + } + rle_symbols = if context_map_size != 0 { + m.alloc_cell(context_map_size) + } else { + AllocU32::AllocatedMemory::default() + }; + MoveToFrontTransform(context_map, context_map_size, rle_symbols.slice_mut()); + RunLengthCodeZeros(context_map_size, + rle_symbols.slice_mut(), + &mut num_rle_symbols, + &mut max_run_length_prefix); + let mut histogram: [u32; 272] = [0; 272]; + i = 0usize; + while i < num_rle_symbols { + { + let _rhs = 1; + let _lhs = &mut histogram[(rle_symbols.slice()[(i as (usize))] & kSymbolMask) as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + i = i.wrapping_add(1 as (usize)); + } + { + let use_rle: i32 = if !!(max_run_length_prefix > 0u32) { + 1i32 + } else { + 0i32 + }; + BrotliWriteBits(1, use_rle as (u64), storage_ix, storage); + if use_rle != 0 { + BrotliWriteBits(4, + max_run_length_prefix.wrapping_sub(1u32) as (u64), + storage_ix, + storage); + } + } + BuildAndStoreHuffmanTree(&mut histogram[..], + num_clusters.wrapping_add(max_run_length_prefix as (usize)), + num_clusters.wrapping_add(max_run_length_prefix as (usize)), + tree, + &mut depths[..], + &mut bits[..], + storage_ix, + storage); + i = 0usize; + while i < num_rle_symbols { + { + let rle_symbol: u32 = rle_symbols.slice()[(i as (usize))] & kSymbolMask; + let extra_bits_val: u32 = rle_symbols.slice()[(i as (usize))] >> 9i32; + BrotliWriteBits(depths[rle_symbol as (usize)] as (u8), + bits[rle_symbol as (usize)] as (u64), + storage_ix, + storage); + if rle_symbol > 0u32 && (rle_symbol <= max_run_length_prefix) { + BrotliWriteBits(rle_symbol as (u8), + extra_bits_val as (u64), + storage_ix, + storage); + } + } + i = i.wrapping_add(1 as (usize)); + } + BrotliWriteBits(1, 1, storage_ix, storage); + m.free_cell(rle_symbols); +} + +fn BuildAndStoreEntropyCodes + alloc::Allocator, + HistogramType: SliceWrapper> + (m: &mut Alloc, + xself: &mut BlockEncoder, + histograms: &[HistogramType], + histograms_size: usize, + alphabet_size: usize, + tree: &mut [HuffmanTree], + storage_ix: &mut usize, + storage: &mut [u8]) { + let table_size: usize = histograms_size.wrapping_mul(xself.histogram_length_); + (*xself).depths_ = if table_size != 0 { + >::alloc_cell(m, table_size) + } else { + >::AllocatedMemory::default() + }; + (*xself).bits_ = if table_size != 0 { + >::alloc_cell(m, table_size) + } else { + >::AllocatedMemory::default() + }; + { + let mut i: usize; + i = 0usize; + while i < histograms_size { + { + let ix: usize = i.wrapping_mul(xself.histogram_length_); + BuildAndStoreHuffmanTree(&(histograms[(i as (usize))]).slice()[0..], + xself.histogram_length_, + alphabet_size, + tree, + &mut (*xself).depths_.slice_mut()[(ix as (usize))..], + &mut (*xself).bits_.slice_mut()[(ix as (usize))..], + storage_ix, + storage); + } + i = i.wrapping_add(1 as (usize)); + } + } +} + +fn StoreSymbol + alloc::Allocator> + (xself: &mut BlockEncoder, + symbol: usize, + storage_ix: &mut usize, + storage: &mut [u8]){ + if (*xself).block_len_ == 0usize { + let block_ix: usize = { + (*xself).block_ix_ = (*xself).block_ix_.wrapping_add(1 as (usize)); + (*xself).block_ix_ + }; + let block_len: u32 = (*xself).block_lengths_[(block_ix as (usize))]; + let block_type: u8 = (*xself).block_types_[(block_ix as (usize))]; + (*xself).block_len_ = block_len as (usize); + (*xself).entropy_ix_ = (block_type as (usize)).wrapping_mul((*xself).histogram_length_); + StoreBlockSwitch(&mut (*xself).block_split_code_, + block_len, + block_type, + 0i32, + storage_ix, + storage); + } + (*xself).block_len_ = (*xself).block_len_.wrapping_sub(1 as (usize)); + { + let ix: usize = (*xself).entropy_ix_.wrapping_add(symbol); + BrotliWriteBits((*xself).depths_.slice()[(ix as (usize))] as (u8), + (*xself).bits_.slice()[(ix as (usize))] as (u64), + storage_ix, + storage); + } +} + +fn CommandCopyLenCode(xself: &Command) -> u32 { + let modifier = xself.copy_len_ >> 25; + let delta: i32 = ((modifier | ((modifier & 0x40) << 1)) as u8) as i8 as i32; + ((xself.copy_len_ & 0x1ffffff) as i32 + delta) as u32 +} +fn GetInsertExtra(inscode: u16) -> u32 { + kInsExtra[inscode as (usize)] +} + +fn GetInsertBase(inscode: u16) -> u32 { + kInsBase[inscode as (usize)] +} + +fn GetCopyBase(copycode: u16) -> u32 { + kCopyBase[copycode as (usize)] +} + +fn GetCopyExtra(copycode: u16) -> u32 { + kCopyExtra[copycode as (usize)] +} + +fn StoreCommandExtra(cmd: &Command, storage_ix: &mut usize, storage: &mut [u8]) { + let copylen_code: u32 = CommandCopyLenCode(cmd); + let inscode: u16 = GetInsertLengthCode((*cmd).insert_len_ as (usize)); + let copycode: u16 = GetCopyLengthCode(copylen_code as (usize)); + let insnumextra: u32 = GetInsertExtra(inscode); + let insextraval: u64 = (*cmd).insert_len_.wrapping_sub(GetInsertBase(inscode)) as (u64); + let copyextraval: u64 = copylen_code.wrapping_sub(GetCopyBase(copycode)) as (u64); + let bits: u64 = copyextraval << insnumextra | insextraval; + BrotliWriteBits(insnumextra.wrapping_add(GetCopyExtra(copycode)) as (u8), + bits, + storage_ix, + storage); +} + +fn Context(p1: u8, p2: u8, mode: ContextType) -> u8 { + match mode { + ContextType::CONTEXT_LSB6 => { + return (p1 as (i32) & 0x3fi32) as (u8); + } + ContextType::CONTEXT_MSB6 => { + return (p1 as (i32) >> 2i32) as (u8); + } + ContextType::CONTEXT_UTF8 => { + return (kUTF8ContextLookup[p1 as (usize)] as (i32) | + kUTF8ContextLookup[(p2 as (i32) + 256i32) as (usize)] as (i32)) as (u8); + } + ContextType::CONTEXT_SIGNED => { + return ((kSigned3BitContextLookup[p1 as (usize)] as (i32) << 3i32) + + kSigned3BitContextLookup[p2 as (usize)] as (i32)) as (u8); + } + } + // 0i32 as (u8) +} + +fn StoreSymbolWithContext + alloc::Allocator>(xself: &mut BlockEncoder, + symbol: usize, + context: usize, + context_map: &[u32], + storage_ix: &mut usize, + storage: &mut [u8], +context_bits: usize){ + if (*xself).block_len_ == 0usize { + let block_ix: usize = { + (*xself).block_ix_ = (*xself).block_ix_.wrapping_add(1 as (usize)); + (*xself).block_ix_ + }; + let block_len: u32 = (*xself).block_lengths_[(block_ix as (usize))]; + let block_type: u8 = (*xself).block_types_[(block_ix as (usize))]; + (*xself).block_len_ = block_len as (usize); + (*xself).entropy_ix_ = block_type as (usize) << context_bits; + StoreBlockSwitch(&mut (*xself).block_split_code_, + block_len, + block_type, + 0i32, + storage_ix, + storage); + } + (*xself).block_len_ = (*xself).block_len_.wrapping_sub(1 as (usize)); + { + let histo_ix: usize = context_map[((*xself).entropy_ix_.wrapping_add(context) as (usize))] as + (usize); + let ix: usize = histo_ix.wrapping_mul((*xself).histogram_length_).wrapping_add(symbol); + BrotliWriteBits((*xself).depths_.slice()[(ix as (usize))] as (u8), + (*xself).bits_.slice()[(ix as (usize))] as (u64), + storage_ix, + storage); + } +} + +fn CommandCopyLen(xself: &Command) -> u32 { + (*xself).copy_len_ & 0xffffffu32 +} + +fn CommandDistanceContext(xself: &Command) -> u32 { + let r: u32 = ((*xself).cmd_prefix_ as (i32) >> 6i32) as (u32); + let c: u32 = ((*xself).cmd_prefix_ as (i32) & 7i32) as (u32); + if (r == 0u32 || r == 2u32 || r == 4u32 || r == 7u32) && (c <= 2u32) { + return c; + } + 3u32 +} + +fn CleanupBlockEncoder + alloc::Allocator>(m: &mut Alloc, + xself: &mut BlockEncoder){ + >::free_cell(m, core::mem::replace(&mut (*xself).depths_, >::AllocatedMemory::default())); + >::free_cell(m, core::mem::replace(&mut (*xself).bits_, >::AllocatedMemory::default())); +} + +pub fn JumpToByteBoundary(storage_ix: &mut usize, storage: &mut [u8]) { + *storage_ix = (*storage_ix).wrapping_add(7u32 as (usize)) & !7u32 as (usize); + storage[((*storage_ix >> 3i32) as (usize))] = 0i32 as (u8); +} + + +pub fn BrotliStoreMetaBlock<'a, Alloc: BrotliAlloc, Cb> + (alloc: &mut Alloc, + input: &'a[u8], + start_pos: usize, + length: usize, + mask: usize, + mut prev_byte: u8, + mut prev_byte2: u8, + is_last: i32, + params: &BrotliEncoderParams, + literal_context_mode: ContextType, + distance_cache: &[i32; kNumDistanceCacheEntries], + commands: &[Command], + n_commands: usize, + mb: &mut MetaBlockSplit, + recoder_state: &mut RecoderState, + storage_ix: &mut usize, + storage: &mut [u8], + callback: &mut Cb) where Cb: FnMut(&mut interface::PredictionModeContextMap, + &mut[interface::StaticCommand], + InputPair, &mut Alloc) { + let (input0,input1) = InputPairFromMaskedInput(input, start_pos, length, mask); + if params.log_meta_block { + LogMetaBlock(alloc, commands.split_at(n_commands).0, input0, input1, + distance_cache, + recoder_state, + block_split_reference(mb), + params, + Some(literal_context_mode), + callback); + } + let mut pos: usize = start_pos; + let mut i: usize; + let num_distance_symbols = params.dist.alphabet_size; + let mut num_effective_distance_symbols = num_distance_symbols as usize; + let mut tree: >::AllocatedMemory; + let _literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode); + let mut literal_enc: BlockEncoder; + let mut command_enc: BlockEncoder; + let mut distance_enc: BlockEncoder; + let dist = ¶ms.dist; + if params.large_window && num_effective_distance_symbols > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS { + num_effective_distance_symbols = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS; + } + StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); + tree = if 2i32 * 704i32 + 1i32 != 0 { + >::alloc_cell(alloc, (2i32 * 704i32 + 1i32) as (usize)) + } else { + >::AllocatedMemory::default() + }; + literal_enc = NewBlockEncoder::(BROTLI_NUM_LITERAL_SYMBOLS, + (*mb).literal_split.num_types, + (*mb).literal_split.types.slice(), + (*mb).literal_split.lengths.slice(), + (*mb).literal_split.num_blocks); + command_enc = NewBlockEncoder::(BROTLI_NUM_COMMAND_SYMBOLS, + (*mb).command_split.num_types, + (*mb).command_split.types.slice(), + (*mb).command_split.lengths.slice(), + (*mb).command_split.num_blocks); + distance_enc = NewBlockEncoder::(num_effective_distance_symbols, + (*mb).distance_split.num_types, + (*mb).distance_split.types.slice(), + (*mb).distance_split.lengths.slice(), + (*mb).distance_split.num_blocks); + BuildAndStoreBlockSwitchEntropyCodes(&mut literal_enc, tree.slice_mut(), storage_ix, storage); + BuildAndStoreBlockSwitchEntropyCodes(&mut command_enc, tree.slice_mut(), storage_ix, storage); + BuildAndStoreBlockSwitchEntropyCodes(&mut distance_enc, tree.slice_mut(), storage_ix, storage); + BrotliWriteBits(2, dist.distance_postfix_bits as (u64), storage_ix, storage); + BrotliWriteBits(4, + (dist.num_direct_distance_codes >> dist.distance_postfix_bits) as (u64), + storage_ix, + storage); + i = 0usize; + while i < (*mb).literal_split.num_types { + { + BrotliWriteBits(2, literal_context_mode as (u64), storage_ix, storage); + } + i = i.wrapping_add(1 as (usize)); + } + if (*mb).literal_context_map_size == 0usize { + StoreTrivialContextMap((*mb).literal_histograms_size, + 6, + tree.slice_mut(), + storage_ix, + storage); + } else { + EncodeContextMap(alloc, + (*mb).literal_context_map.slice(), + (*mb).literal_context_map_size, + (*mb).literal_histograms_size, + tree.slice_mut(), + storage_ix, + storage); + } + if (*mb).distance_context_map_size == 0usize { + StoreTrivialContextMap((*mb).distance_histograms_size, + 2usize, + tree.slice_mut(), + storage_ix, + storage); + } else { + EncodeContextMap(alloc, + (*mb).distance_context_map.slice(), + (*mb).distance_context_map_size, + (*mb).distance_histograms_size, + tree.slice_mut(), + storage_ix, + storage); + } + BuildAndStoreEntropyCodes(alloc, + &mut literal_enc, + (*mb).literal_histograms.slice(), + (*mb).literal_histograms_size, + BROTLI_NUM_LITERAL_SYMBOLS, + tree.slice_mut(), + storage_ix, + storage); + BuildAndStoreEntropyCodes(alloc, + &mut command_enc, + (*mb).command_histograms.slice(), + (*mb).command_histograms_size, + BROTLI_NUM_COMMAND_SYMBOLS, + tree.slice_mut(), + storage_ix, + storage); + BuildAndStoreEntropyCodes(alloc, + &mut distance_enc, + (*mb).distance_histograms.slice(), + (*mb).distance_histograms_size, + num_distance_symbols as usize, + tree.slice_mut(), + storage_ix, + storage); + { + >::free_cell(alloc, core::mem::replace(&mut tree, >::AllocatedMemory::default())); + } + i = 0usize; + while i < n_commands { + { + let cmd: Command = commands[(i as (usize))].clone(); + let cmd_code: usize = cmd.cmd_prefix_ as (usize); + StoreSymbol(&mut command_enc, cmd_code, storage_ix, storage); + StoreCommandExtra(&cmd, storage_ix, storage); + if (*mb).literal_context_map_size == 0usize { + let mut j: usize; + j = cmd.insert_len_ as (usize); + while j != 0usize { + { + StoreSymbol(&mut literal_enc, + input[((pos & mask) as (usize))] as (usize), + storage_ix, + storage); + pos = pos.wrapping_add(1 as (usize)); + } + j = j.wrapping_sub(1 as (usize)); + } + } else { + let mut j: usize; + j = cmd.insert_len_ as (usize); + while j != 0usize { + { + let context: usize = Context(prev_byte, prev_byte2, literal_context_mode) as (usize); + let literal: u8 = input[((pos & mask) as (usize))]; + StoreSymbolWithContext(&mut literal_enc, + literal as (usize), + context, + (*mb).literal_context_map.slice(), + storage_ix, + storage, + 6usize); + prev_byte2 = prev_byte; + prev_byte = literal; + pos = pos.wrapping_add(1 as (usize)); + } + j = j.wrapping_sub(1 as (usize)); + } + } + pos = pos.wrapping_add(CommandCopyLen(&cmd) as (usize)); + if CommandCopyLen(&cmd) != 0 { + prev_byte2 = input[((pos.wrapping_sub(2usize) & mask) as (usize))]; + prev_byte = input[((pos.wrapping_sub(1usize) & mask) as (usize))]; + if cmd.cmd_prefix_ as (i32) >= 128i32 { + let dist_code: usize = cmd.dist_prefix_ as (usize) & 0x3ff; + let distnumextra: u32 = u32::from(cmd.dist_prefix_) >> 10i32; //FIXME: from command + let distextra: u64 = cmd.dist_extra_ as (u64); + if (*mb).distance_context_map_size == 0usize { + StoreSymbol(&mut distance_enc, dist_code, storage_ix, storage); + } else { + let context: usize = CommandDistanceContext(&cmd) as (usize); + StoreSymbolWithContext(&mut distance_enc, + dist_code, + context, + (*mb).distance_context_map.slice(), + storage_ix, + storage, + 2usize); + } + BrotliWriteBits(distnumextra as (u8), distextra, storage_ix, storage); + } + } + } + i = i.wrapping_add(1 as (usize)); + } + CleanupBlockEncoder(alloc, &mut distance_enc); + CleanupBlockEncoder(alloc, &mut command_enc); + CleanupBlockEncoder(alloc, &mut literal_enc); + if is_last != 0 { + JumpToByteBoundary(storage_ix, storage); + } +} + +fn BuildHistograms(input: &[u8], + start_pos: usize, + mask: usize, + commands: &[Command], + n_commands: usize, + lit_histo: &mut HistogramLiteral, + cmd_histo: &mut HistogramCommand, + dist_histo: &mut HistogramDistance) { + let mut pos: usize = start_pos; + let mut i: usize; + i = 0usize; + while i < n_commands { + { + let cmd: Command = commands[(i as (usize))].clone(); + let mut j: usize; + HistogramAddItem(cmd_histo, cmd.cmd_prefix_ as (usize)); + j = cmd.insert_len_ as (usize); + while j != 0usize { + { + HistogramAddItem(lit_histo, input[((pos & mask) as (usize))] as (usize)); + pos = pos.wrapping_add(1 as (usize)); + } + j = j.wrapping_sub(1 as (usize)); + } + pos = pos.wrapping_add(CommandCopyLen(&cmd) as (usize)); + if CommandCopyLen(&cmd) != 0 && (cmd.cmd_prefix_ as (i32) >= 128i32) { + HistogramAddItem(dist_histo, cmd.dist_prefix_ as (usize) & 0x3ff); + } + } + i = i.wrapping_add(1 as (usize)); + } +} +fn StoreDataWithHuffmanCodes(input: &[u8], + start_pos: usize, + mask: usize, + commands: &[Command], + n_commands: usize, + lit_depth: &[u8], + lit_bits: &[u16], + cmd_depth: &[u8], + cmd_bits: &[u16], + dist_depth: &[u8], + dist_bits: &[u16], + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut pos: usize = start_pos; + let mut i: usize; + i = 0usize; + while i < n_commands { + { + let cmd: Command = commands[(i as (usize))].clone(); + let cmd_code: usize = cmd.cmd_prefix_ as (usize); + let mut j: usize; + BrotliWriteBits(cmd_depth[(cmd_code as (usize))] as (u8), + cmd_bits[(cmd_code as (usize))] as (u64), + storage_ix, + storage); + StoreCommandExtra(&cmd, storage_ix, storage); + j = cmd.insert_len_ as (usize); + while j != 0usize { + { + let literal: u8 = input[((pos & mask) as (usize))]; + BrotliWriteBits(lit_depth[(literal as (usize))] as (u8), + lit_bits[(literal as (usize))] as (u64), + storage_ix, + storage); + pos = pos.wrapping_add(1 as (usize)); + } + j = j.wrapping_sub(1 as (usize)); + } + pos = pos.wrapping_add(CommandCopyLen(&cmd) as (usize)); + if CommandCopyLen(&cmd) != 0 && (cmd.cmd_prefix_ as (i32) >= 128i32) { + let dist_code: usize = cmd.dist_prefix_ as (usize) & 0x3ff; + let distnumextra: u32 = u32::from(cmd.dist_prefix_) >> 10i32; + let distextra: u32 = cmd.dist_extra_; + BrotliWriteBits(dist_depth[(dist_code as (usize))] as (u8), + dist_bits[(dist_code as (usize))] as (u64), + storage_ix, + storage); + BrotliWriteBits(distnumextra as (u8), + distextra as (u64), + storage_ix, + storage); + } + } + i = i.wrapping_add(1 as (usize)); + } +} + +fn nop<'a>(_data:&[interface::Command]){ +} +pub fn BrotliStoreMetaBlockTrivial<'a, Alloc: BrotliAlloc, Cb> + (alloc: &mut Alloc, + input: &'a [u8], + start_pos: usize, + length: usize, + mask: usize, + is_last: i32, + params: &BrotliEncoderParams, + distance_cache: &[i32; kNumDistanceCacheEntries], + commands: &[Command], + n_commands: usize, + recoder_state: &mut RecoderState, + storage_ix: &mut usize, + storage: &mut [u8], + f:&mut Cb) where Cb: FnMut(&mut interface::PredictionModeContextMap, + &mut [interface::StaticCommand], + InputPair, &mut Alloc) { + let (input0,input1) = InputPairFromMaskedInput(input, start_pos, length, mask); + if params.log_meta_block { + LogMetaBlock(alloc, + commands.split_at(n_commands).0, + input0, + input1, + distance_cache, + recoder_state, + block_split_nop(), + params, + Some(ContextType::CONTEXT_LSB6), + f); + } + let mut lit_histo: HistogramLiteral = HistogramLiteral::default(); + let mut cmd_histo: HistogramCommand = HistogramCommand::default(); + let mut dist_histo: HistogramDistance = HistogramDistance::default(); + let mut lit_depth: [u8; 256] = [0; 256]; + let mut lit_bits: [u16; 256] = [0; 256]; + let mut cmd_depth: [u8; 704] = [0; 704]; + let mut cmd_bits: [u16; 704] = [0; 704]; + let mut dist_depth: [u8; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE] = [0; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; + let mut dist_bits: [u16; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE] = [0; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; + const MAX_HUFFMAN_TREE_SIZE: usize = (2i32 * 704i32 + 1i32) as usize; + let mut tree: [HuffmanTree; MAX_HUFFMAN_TREE_SIZE] = [HuffmanTree { + total_count_: 0, + index_left_: 0, + index_right_or_value_: 0, + }; MAX_HUFFMAN_TREE_SIZE]; + let num_distance_symbols = params.dist.alphabet_size; + StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); + BuildHistograms(input, + start_pos, + mask, + commands, + n_commands, + &mut lit_histo, + &mut cmd_histo, + &mut dist_histo); + BrotliWriteBits(13, 0, storage_ix, storage); + BuildAndStoreHuffmanTree(lit_histo.slice_mut(), + BROTLI_NUM_LITERAL_SYMBOLS, + BROTLI_NUM_LITERAL_SYMBOLS, + &mut tree[..], + &mut lit_depth[..], + &mut lit_bits[..], + storage_ix, + storage); + BuildAndStoreHuffmanTree(cmd_histo.slice_mut(), + BROTLI_NUM_COMMAND_SYMBOLS, + BROTLI_NUM_COMMAND_SYMBOLS, + &mut tree[..], + &mut cmd_depth[..], + &mut cmd_bits[..], + storage_ix, + storage); + BuildAndStoreHuffmanTree(dist_histo.slice_mut(), + MAX_SIMPLE_DISTANCE_ALPHABET_SIZE, + num_distance_symbols as usize, + &mut tree[..], + &mut dist_depth[..], + &mut dist_bits[..], + storage_ix, + storage); + StoreDataWithHuffmanCodes(input, + start_pos, + mask, + commands, + n_commands, + &mut lit_depth[..], + &mut lit_bits[..], + &mut cmd_depth[..], + &mut cmd_bits[..], + &mut dist_depth[..], + &mut dist_bits[..], + storage_ix, + storage); + if is_last != 0 { + JumpToByteBoundary(storage_ix, storage); + } +} + +fn StoreStaticCommandHuffmanTree(storage_ix: &mut usize, storage: &mut [u8]) { + BrotliWriteBits(56, + 0x926244u32 as (u64) << 32i32 | 0x16307003, + storage_ix, + storage); + BrotliWriteBits(3, 0x0u64, storage_ix, storage); +} + +fn StoreStaticDistanceHuffmanTree(storage_ix: &mut usize, storage: &mut [u8]) { + BrotliWriteBits(28, 0x369dc03u64, storage_ix, storage); +} + + +struct BlockSplitRef<'a> { + types: &'a [u8], + lengths:&'a [u32], + num_types: u32, +} +impl<'a> Default for BlockSplitRef<'a> { + fn default() -> Self { + BlockSplitRef { + types:&[], + lengths:&[], + num_types:1, + } + } +} + + +#[derive(Default)] +struct MetaBlockSplitRefs<'a> { + btypel : BlockSplitRef<'a>, + literal_context_map:&'a [u32], + btypec : BlockSplitRef<'a>, + btyped : BlockSplitRef<'a>, + distance_context_map:&'a [u32], +} + +fn block_split_nop() -> MetaBlockSplitRefs<'static> { + return MetaBlockSplitRefs::default() + +} + +fn block_split_reference<'a, + Alloc: BrotliAlloc> + (mb:&'a MetaBlockSplit) -> MetaBlockSplitRefs<'a> { + return MetaBlockSplitRefs::<'a> { + btypel:BlockSplitRef { + types: mb.literal_split.types.slice().split_at(mb.literal_split.num_blocks).0, + lengths:mb.literal_split.lengths.slice().split_at(mb.literal_split.num_blocks).0, + num_types:mb.literal_split.num_types as u32, + }, + literal_context_map: mb.literal_context_map.slice().split_at(mb.literal_context_map_size).0, + btypec:BlockSplitRef { + types: mb.command_split.types.slice().split_at(mb.command_split.num_blocks).0, + lengths:mb.command_split.lengths.slice().split_at(mb.command_split.num_blocks).0, + num_types:mb.command_split.num_types as u32, + }, + btyped:BlockSplitRef { + types: mb.distance_split.types.slice().split_at(mb.distance_split.num_blocks).0, + lengths:mb.distance_split.lengths.slice().split_at(mb.distance_split.num_blocks).0, + num_types:mb.distance_split.num_types as u32, + }, + distance_context_map: mb.distance_context_map.slice().split_at(mb.distance_context_map_size).0, + } +} + +#[derive(Clone, Copy)] +pub struct RecoderState { + pub num_bytes_encoded : usize, +} + +impl RecoderState { + pub fn new() -> Self { + RecoderState{ + num_bytes_encoded:0, + } + } +} + + +pub fn BrotliStoreMetaBlockFast( + m : &mut Alloc, + input: &[u8], + start_pos: usize, + length: usize, + mask: usize, + is_last: i32, + params: &BrotliEncoderParams, + dist_cache: &[i32; kNumDistanceCacheEntries], + commands: &[Command], + n_commands: usize, + recoder_state: &mut RecoderState, + storage_ix: &mut usize, + storage: &mut [u8], + cb: &mut Cb, +) where Cb: FnMut(&mut interface::PredictionModeContextMap, + &mut [interface::StaticCommand], + InputPair, &mut Alloc +) { + let (input0,input1) = InputPairFromMaskedInput(input, start_pos, length, mask); + if params.log_meta_block { + LogMetaBlock(m, + commands.split_at(n_commands).0, input0, input1, dist_cache, recoder_state, + block_split_nop(), + params, + Some(ContextType::CONTEXT_LSB6), + cb); + } + let num_distance_symbols = params.dist.alphabet_size; + let distance_alphabet_bits = Log2FloorNonZero(u64::from(num_distance_symbols) - 1) + 1; + StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage); + BrotliWriteBits(13, 0, storage_ix, storage); + if n_commands <= 128usize { + let mut histogram: [u32; 256] = [0; 256]; + let mut pos: usize = start_pos; + let mut num_literals: usize = 0usize; + let mut i: usize; + let mut lit_depth: [u8; 256] = [0; 256]; + let mut lit_bits: [u16; 256] = [0; 256]; + i = 0usize; + while i < n_commands { + { + let cmd: Command = commands[(i as (usize))].clone(); + let mut j: usize; + j = cmd.insert_len_ as (usize); + while j != 0usize { + { + { + let _rhs = 1; + let _lhs = &mut histogram[input[((pos & mask) as (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + pos = pos.wrapping_add(1 as (usize)); + } + j = j.wrapping_sub(1 as (usize)); + } + num_literals = num_literals.wrapping_add(cmd.insert_len_ as (usize)); + pos = pos.wrapping_add(CommandCopyLen(&cmd) as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } + BrotliBuildAndStoreHuffmanTreeFast(m, + &mut histogram[..], + num_literals, + 8usize, + &mut lit_depth[..], + &mut lit_bits[..], + storage_ix, + storage); + StoreStaticCommandHuffmanTree(storage_ix, storage); + StoreStaticDistanceHuffmanTree(storage_ix, storage); + StoreDataWithHuffmanCodes(input, + start_pos, + mask, + commands, + n_commands, + &mut lit_depth[..], + &mut lit_bits[..], + &kStaticCommandCodeDepth[..], + &kStaticCommandCodeBits[..], + &kStaticDistanceCodeDepth[..], + &kStaticDistanceCodeBits[..], + storage_ix, + storage); + } else { + let mut lit_histo: HistogramLiteral = HistogramLiteral::default(); + let mut cmd_histo: HistogramCommand = HistogramCommand::default(); + let mut dist_histo: HistogramDistance = HistogramDistance::default(); + let mut lit_depth: [u8; 256] = [0; 256]; + let mut lit_bits: [u16; 256] = [0; 256]; + let mut cmd_depth: [u8; 704] = [0; 704]; + let mut cmd_bits: [u16; 704] = [0; 704]; + let mut dist_depth: [u8; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE] = [0; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; + let mut dist_bits: [u16; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE] = [0; MAX_SIMPLE_DISTANCE_ALPHABET_SIZE]; + BuildHistograms(input, + start_pos, + mask, + commands, + n_commands, + &mut lit_histo, + &mut cmd_histo, + &mut dist_histo); + BrotliBuildAndStoreHuffmanTreeFast(m, + lit_histo.slice(), + lit_histo.total_count_, + 8usize, + &mut lit_depth[..], + &mut lit_bits[..], + storage_ix, + storage); + BrotliBuildAndStoreHuffmanTreeFast(m, + cmd_histo.slice(), + cmd_histo.total_count_, + 10usize, + &mut cmd_depth[..], + &mut cmd_bits[..], + storage_ix, + storage); + BrotliBuildAndStoreHuffmanTreeFast(m, + dist_histo.slice(), + dist_histo.total_count_, + distance_alphabet_bits as usize, + &mut dist_depth[..], + &mut dist_bits[..], + storage_ix, + storage); + StoreDataWithHuffmanCodes(input, + start_pos, + mask, + commands, + n_commands, + &mut lit_depth[..], + &mut lit_bits[..], + &mut cmd_depth[..], + &mut cmd_bits[..], + &mut dist_depth[..], + &mut dist_bits[..], + storage_ix, + storage); + } + if is_last != 0 { + JumpToByteBoundary(storage_ix, storage); + } +} +fn BrotliStoreUncompressedMetaBlockHeader(length: usize, + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut lenbits: u64 = 0; + let mut nlenbits: u32 = 0; + let mut nibblesbits: u32 = 0; + BrotliWriteBits(1, 0, storage_ix, storage); + BrotliEncodeMlen(length as u32, &mut lenbits, &mut nlenbits, &mut nibblesbits); + BrotliWriteBits(2, nibblesbits as u64, storage_ix, storage); + BrotliWriteBits(nlenbits as u8, lenbits as u64, storage_ix, storage); + BrotliWriteBits(1, 1, storage_ix, storage); +} + +fn InputPairFromMaskedInput<'a>(input:&'a [u8], position: usize, len: usize, mask:usize) -> (&'a [u8], &'a [u8]) { + let masked_pos: usize = position & mask; + if masked_pos.wrapping_add(len) > mask.wrapping_add(1usize) { + let len1: usize = mask.wrapping_add(1usize).wrapping_sub(masked_pos); + return (&input[masked_pos..(masked_pos + len1)], + &input[0..len.wrapping_sub(len1)]); + } + return (&input[masked_pos..masked_pos + len], &[]); + +} +pub fn BrotliStoreUncompressedMetaBlock + (alloc: &mut Alloc, + is_final_block: i32, + input: &[u8], + position: usize, + mask: usize, + params: &BrotliEncoderParams, + len: usize, + recoder_state: &mut RecoderState, + storage_ix: &mut usize, + storage: &mut [u8], + suppress_meta_block_logging: bool, + cb: &mut Cb) where Cb: FnMut(&mut interface::PredictionModeContextMap, + &mut [interface::StaticCommand], + InputPair, &mut Alloc){ + let (input0,input1) = InputPairFromMaskedInput(input, position, len, mask); + BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage); + JumpToByteBoundary(storage_ix, storage); + let dst_start0 = ((*storage_ix >> 3i32) as (usize)); + storage[dst_start0..(dst_start0 + input0.len())].clone_from_slice(input0); + *storage_ix = (*storage_ix).wrapping_add(input0.len() << 3i32); + let dst_start1 = ((*storage_ix >> 3i32) as (usize)); + storage[dst_start1..(dst_start1 + input1.len())].clone_from_slice(input1); + *storage_ix = (*storage_ix).wrapping_add(input1.len() << 3i32); + BrotliWriteBitsPrepareStorage(*storage_ix, storage); + if params.log_meta_block && !suppress_meta_block_logging { + let cmds = [Command{insert_len_:len as u32, + copy_len_:0, + dist_extra_:0, + cmd_prefix_:0, + dist_prefix_:0 + }]; + + LogMetaBlock(alloc, &cmds, input0, input1, &[0i32, 0i32, 0i32, 0i32], recoder_state, + block_split_nop(), + params, + None, + cb); + } + if is_final_block != 0 { + BrotliWriteBits(1u8, 1u64, storage_ix, storage); + BrotliWriteBits(1u8, 1u64, storage_ix, storage); + JumpToByteBoundary(storage_ix, storage); + } +} + + +pub fn BrotliStoreSyncMetaBlock(storage_ix: &mut usize, storage: &mut [u8]) { + BrotliWriteBits(6, 6, storage_ix, storage); + JumpToByteBoundary(storage_ix, storage); +} + +pub fn BrotliWriteEmptyLastMetaBlock(storage_ix: &mut usize, storage: &mut [u8]) { + BrotliWriteBits(1u8, 1u64, storage_ix, storage); + BrotliWriteBits(1u8, 1u64, storage_ix, storage); + JumpToByteBoundary(storage_ix, storage); +} + +const MAX_SIZE_ENCODING:usize = 10; + +fn encode_base_128(mut value: u64)-> (usize, [u8;MAX_SIZE_ENCODING]) { + let mut ret = [0u8; MAX_SIZE_ENCODING]; + for index in 0..ret.len() { + ret[index] = (value & 0x7f) as u8; + value >>= 7; + if value != 0 { + ret[index] |= 0x80; + } else { + return (index + 1, ret) + } + } + (ret.len(), ret) +} + +pub fn BrotliWriteMetadataMetaBlock(params: &BrotliEncoderParams, storage_ix: &mut usize, storage: &mut [u8]) { + BrotliWriteBits(1u8, 0u64, storage_ix, storage); // not last + BrotliWriteBits(2u8, 3u64, storage_ix, storage); // MNIBBLES = 0 (pattern 1,1) + BrotliWriteBits(1u8, 0u64, storage_ix, storage); // reserved + BrotliWriteBits(2u8, 1u64, storage_ix, storage); // num bytes for length of magic number header + let (size_hint_count, size_hint_b128) = encode_base_128(params.size_hint as u64); + + BrotliWriteBits(8u8, 3 + size_hint_count as u64, storage_ix, storage); // 1 byte of data: writing 12 for the magic number header + JumpToByteBoundary(storage_ix, storage); + let magic_number: [u8;3] = if params.catable && !params.use_dictionary { + [0xe1, 0x97, 0x81] + } else if params.appendable { + [0xe1, 0x97, 0x82] + } else { + [0xe1, 0x97, 0x80] + }; + for magic in magic_number.iter() { + BrotliWriteBits(8u8, u64::from(*magic), storage_ix, storage); + } + BrotliWriteBits(8u8, u64::from(VERSION), storage_ix, storage); + for sh in size_hint_b128[..size_hint_count].iter() { + BrotliWriteBits(8u8, u64::from(*sh), storage_ix, storage); + } +} + +mod test { + use super::{encode_base_128, MAX_SIZE_ENCODING}; + #[test] + fn test_encode_base_128() { + assert_eq!(encode_base_128(0), (1,[0u8;MAX_SIZE_ENCODING])); + assert_eq!(encode_base_128(1), (1,[1,0,0,0,0,0,0,0,0,0])); + assert_eq!(encode_base_128(127), (1,[0x7f,0,0,0,0,0,0,0,0,0])); + assert_eq!(encode_base_128(128), (2,[0x80,0x1,0,0,0,0,0,0,0,0])); + assert_eq!(encode_base_128(16383), (2,[0xff,0x7f,0,0,0,0,0,0,0,0])); + assert_eq!(encode_base_128(16384), (3,[0x80,0x80,0x1,0,0,0,0,0,0,0])); + assert_eq!(encode_base_128(2097151), (3,[0xff,0xff,0x7f,0,0,0,0,0,0,0])); + assert_eq!(encode_base_128(2097152), (4,[0x80,0x80,0x80,0x1,0,0,0,0,0,0])); + assert_eq!(encode_base_128(4194303), (4,[0xff,0xff,0xff,0x1,0,0,0,0,0,0])); + assert_eq!(encode_base_128(4294967295), (5,[0xff,0xff,0xff,0xff,0xf,0,0,0,0,0])); + assert_eq!(encode_base_128(4294967296), (5,[0x80,0x80,0x80,0x80,0x10,0,0,0,0,0])); + assert_eq!(encode_base_128(9223372036854775808), (10,[0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x1])); + assert_eq!(encode_base_128(18446744073709551615), (10,[0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1])); + } +} diff --git a/rust/vendor/brotli/src/enc/cluster.rs b/rust/vendor/brotli/src/enc/cluster.rs new file mode 100755 index 0000000..b47b175 --- /dev/null +++ b/rust/vendor/brotli/src/enc/cluster.rs @@ -0,0 +1,545 @@ +#![allow(dead_code)] +use super::bit_cost::BrotliPopulationCost; +use super::histogram::{CostAccessors, HistogramSelfAddHistogram, HistogramAddHistogram, + HistogramClear}; +use super::util::FastLog2; +use super::util::brotli_min_size_t; +use alloc; +use alloc::{SliceWrapper, SliceWrapperMut, Allocator}; +use core; +#[derive(Clone,Copy)] +pub struct HistogramPair { + pub idx1: u32, + pub idx2: u32, + pub cost_combo: super::util::floatX, + pub cost_diff: super::util::floatX, +} + +impl Default for HistogramPair { + #[inline(always)] + fn default() -> HistogramPair { + HistogramPair { + idx1: 0, + idx2: 0, + cost_combo: 0.0 as super::util::floatX, + cost_diff: 0.0 as super::util::floatX, + } + } +} +/* Returns entropy reduction of the context map when we combine two clusters. */ +#[inline(always)] +fn ClusterCostDiff(size_a: usize, size_b: usize) -> super::util::floatX { + let size_c: usize = size_a.wrapping_add(size_b); + size_a as (super::util::floatX) * FastLog2(size_a as u64) + size_b as (super::util::floatX) * FastLog2(size_b as u64) - + size_c as (super::util::floatX) * FastLog2(size_c as u64) +} + +#[inline(always)] +fn brotli_max_double(a: super::util::floatX, b: super::util::floatX) -> super::util::floatX { + if a > b {a} else {b} +} + +#[inline(always)] +fn HistogramPairIsLess(p1: &HistogramPair, p2: &HistogramPair) -> bool { + if (*p1).cost_diff != (*p2).cost_diff { + if !!((*p1).cost_diff > (*p2).cost_diff) { + true + } else { + false + } + } else if !!((*p1).idx2.wrapping_sub((*p1).idx1) > (*p2).idx2.wrapping_sub((*p2).idx1)) { + true + } else { + false + } +} + +/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if + it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */ +fn BrotliCompareAndPushToQueue + SliceWrapper + CostAccessors + Clone>( + out : &[HistogramType], + cluster_size : &[u32], + mut idx1 : u32, + mut idx2 : u32, + max_num_pairs : usize, + scratch_space: &mut HistogramType::i32vec, + pairs : &mut [HistogramPair], + num_pairs : &mut usize +){ + let mut is_good_pair: i32 = 0i32; + let mut p: HistogramPair = HistogramPair { + idx1: 0, + idx2: 0, + cost_combo: 0.0, + cost_diff: 0.0, + }; + if idx1 == idx2 { + } else { + if idx2 < idx1 { + let t: u32 = idx2; + idx2 = idx1; + idx1 = t; + } + p.idx1 = idx1; + p.idx2 = idx2; + p.cost_diff = 0.5 as super::util::floatX * + ClusterCostDiff(cluster_size[idx1 as usize] as (usize), + cluster_size[idx2 as usize] as (usize)); + p.cost_diff = p.cost_diff - (out[idx1 as (usize)]).bit_cost(); + p.cost_diff = p.cost_diff - (out[idx2 as (usize)]).bit_cost(); + if (out[idx1 as (usize)]).total_count() == 0i32 as (usize) { + p.cost_combo = (out[idx2 as (usize)]).bit_cost(); + is_good_pair = 1i32; + } else if (out[idx2 as (usize)]).total_count() == 0i32 as (usize) { + p.cost_combo = (out[idx1 as (usize)]).bit_cost(); + is_good_pair = 1i32; + } else { + let threshold: super::util::floatX = if *num_pairs == 0i32 as (usize) { + 1e38 as super::util::floatX + } else { + brotli_max_double(0.0 as super::util::floatX, (pairs[0i32 as (usize)]).cost_diff) + }; + let cost_combo: super::util::floatX; + let mut combo : HistogramType = out[idx1 as usize ].clone(); + HistogramAddHistogram(&mut combo, &out[idx2 as usize]); + cost_combo = BrotliPopulationCost(&combo, scratch_space); + if cost_combo < threshold - p.cost_diff { + p.cost_combo = cost_combo; + is_good_pair = 1i32; + } + } + if is_good_pair != 0 { + p.cost_diff = p.cost_diff + p.cost_combo; + if *num_pairs > 0i32 as (usize) && + (HistogramPairIsLess(&pairs[0i32 as (usize)], &p) != false) { + /* Replace the top of the queue if needed. */ + if *num_pairs < max_num_pairs { + pairs[*num_pairs as (usize)] = pairs[0i32 as (usize)]; + *num_pairs = (*num_pairs).wrapping_add(1 as (usize)); + } + pairs[0i32 as (usize)] = p; + } else if *num_pairs < max_num_pairs { + pairs[*num_pairs as (usize)] = p; + *num_pairs = (*num_pairs).wrapping_add(1 as (usize)); + } + } + } +} + +pub fn BrotliHistogramCombine + SliceWrapper + CostAccessors +Clone> + (mut out: &mut [HistogramType], + cluster_size: &mut [u32], + symbols: &mut [u32], + clusters: &mut [u32], + mut pairs: &mut [HistogramPair], + mut num_clusters: usize, + symbols_size: usize, + max_clusters: usize, + max_num_pairs: usize, + scratch_space: &mut HistogramType::i32vec) -> usize{ + let mut cost_diff_threshold: super::util::floatX = 0.0 as super::util::floatX; + let mut min_cluster_size: usize = 1usize; + let mut num_pairs: usize = 0usize; + { + /* We maintain a vector of histogram pairs, with the property that the pair + with the maximum bit cost reduction is the first. */ + let mut idx1: usize; + idx1 = 0usize; + while idx1 < num_clusters { + { + let mut idx2: usize; + idx2 = idx1.wrapping_add(1usize); + while idx2 < num_clusters { + { + BrotliCompareAndPushToQueue(out, + cluster_size, + clusters[(idx1 as (usize))], + clusters[(idx2 as (usize))], + max_num_pairs, + scratch_space, + pairs, + &mut num_pairs); + } + idx2 = idx2.wrapping_add(1 as (usize)); + } + } + idx1 = idx1.wrapping_add(1 as (usize)); + } + } + while num_clusters > min_cluster_size { + let best_idx1: u32; + let best_idx2: u32; + let mut i: usize; + if (pairs[(0usize)]).cost_diff >= cost_diff_threshold { + cost_diff_threshold = 1e38 as super::util::floatX; + min_cluster_size = max_clusters; + { + { + continue; + } + } + } + /* Take the best pair from the top of heap. */ + best_idx1 = (pairs[(0usize)]).idx1; + best_idx2 = (pairs[(0usize)]).idx2; + HistogramSelfAddHistogram(&mut out, (best_idx1 as (usize)), (best_idx2 as (usize))); + (out[(best_idx1 as (usize))]).set_bit_cost((pairs[(0usize)]).cost_combo); + { + let _rhs = cluster_size[(best_idx2 as (usize))]; + let _lhs = &mut cluster_size[(best_idx1 as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs); + } + i = 0usize; + while i < symbols_size { + { + if symbols[(i as (usize))] == best_idx2 { + symbols[(i as (usize))] = best_idx1; + } + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + 'break9: while i < num_clusters { + { + if clusters[(i as (usize))] == best_idx2 { + for offset in 0..(num_clusters - i - 1) { + clusters[i + offset] = clusters[i + 1 + offset]; + } + break 'break9; + } + } + i = i.wrapping_add(1 as (usize)); + } + num_clusters = num_clusters.wrapping_sub(1 as (usize)); + { + /* Remove pairs intersecting the just combined best pair. */ + let mut copy_to_idx: usize = 0usize; + i = 0usize; + while i < num_pairs { + 'continue12: loop { + { + let p: HistogramPair = pairs[(i as (usize))]; + if (p).idx1 == best_idx1 || (p).idx2 == best_idx1 || (p).idx1 == best_idx2 || + (p).idx2 == best_idx2 { + /* Remove invalid pair from the queue. */ + { + break 'continue12; + } + } + if HistogramPairIsLess(&pairs[(0usize)], &p) != false { + /* Replace the top of the queue if needed. */ + let front: HistogramPair = pairs[(0usize)]; + pairs[(0usize)] = p; + pairs[(copy_to_idx as (usize))] = front; + } else { + pairs[(copy_to_idx as (usize))] = p; + } + copy_to_idx = copy_to_idx.wrapping_add(1 as (usize)); + } + break; + } + i = i.wrapping_add(1 as (usize)); + } + num_pairs = copy_to_idx; + } + i = 0usize; + /* Push new pairs formed with the combined histogram to the heap. */ + while i < num_clusters { + { + BrotliCompareAndPushToQueue(out, + cluster_size, + best_idx1, + clusters[(i as (usize))], + max_num_pairs, + scratch_space, + &mut pairs, + &mut num_pairs); + } + i = i.wrapping_add(1 as (usize)); + } + } + num_clusters +} + +/* What is the bit cost of moving histogram from cur_symbol to candidate. */ +#[inline(always)] +pub fn BrotliHistogramBitCostDistance + SliceWrapper + CostAccessors + Clone> + (histogram: &HistogramType, + candidate: &HistogramType, + scratch_space : &mut HistogramType::i32vec) +-> super::util::floatX{ + if (*histogram).total_count() == 0usize { + 0.0 as super::util::floatX + } else { + let mut tmp: HistogramType = histogram.clone(); + HistogramAddHistogram(&mut tmp, candidate); + BrotliPopulationCost(&tmp, scratch_space) - (*candidate).bit_cost() + } +} + +/* Find the best 'out' histogram for each of the 'in' histograms. + When called, clusters[0..num_clusters) contains the unique values from + symbols[0..in_size), but this property is not preserved in this function. + Note: we assume that out[]->bit_cost_ is already up-to-date. */ + +pub fn BrotliHistogramRemap + SliceWrapper + CostAccessors + Clone> + (inp: &[HistogramType], + in_size: usize, + clusters: &[u32], + num_clusters: usize, + scratch_space: &mut HistogramType::i32vec, + out: &mut [HistogramType], + symbols: &mut [u32]){ + let mut i: usize; + i = 0usize; + while i < in_size { + { + let mut best_out: u32 = if i == 0usize { + symbols[(0usize)] + } else { + symbols[(i.wrapping_sub(1usize) as (usize))] + }; + let mut best_bits: super::util::floatX = BrotliHistogramBitCostDistance(&inp[(i as (usize))], + &mut out[(best_out as (usize))], + scratch_space); + let mut j: usize; + j = 0usize; + while j < num_clusters { + { + let cur_bits: super::util::floatX = BrotliHistogramBitCostDistance(&inp[(i as (usize))], + &mut out[(clusters[(j as (usize))] as + (usize))], + scratch_space); + if cur_bits < best_bits { + best_bits = cur_bits; + best_out = clusters[(j as (usize))]; + } + } + j = j.wrapping_add(1 as (usize)); + } + symbols[(i as (usize))] = best_out; + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + /* Recompute each out based on raw and symbols. */ + while i < num_clusters { + { + HistogramClear(&mut out[(clusters[(i as (usize))] as (usize))]); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < in_size { + { + HistogramAddHistogram(&mut out[(symbols[(i as (usize))] as (usize))], + &inp[(i as (usize))]); + } + i = i.wrapping_add(1 as (usize)); + } +} + + + +/* Reorders elements of the out[0..length) array and changes values in + symbols[0..length) array in the following way: + * when called, symbols[] contains indexes into out[], and has N unique + values (possibly N < length) + * on return, symbols'[i] = f(symbols[i]) and + out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length, + where f is a bijection between the range of symbols[] and [0..N), and + the first occurrences of values in symbols'[i] come in consecutive + increasing order. + Returns N, the number of unique values in symbols[]. */ +pub fn BrotliHistogramReindex + SliceWrapper + CostAccessors+Clone, + Alloc:alloc::Allocator + alloc::Allocator > + (alloc: &mut Alloc, + out: &mut [HistogramType], + symbols: &mut [u32], + length: usize) +-> usize{ + static kInvalidIndex: u32 = !(0u32); + let mut new_index = if length != 0 { + >::alloc_cell(alloc, length) + } else { + >::AllocatedMemory::default() + }; + let mut next_index: u32; + let mut tmp: >::AllocatedMemory; + let mut i: usize; + i = 0usize; + while i < length { + { + new_index.slice_mut()[(i as (usize))] = kInvalidIndex; + } + i = i.wrapping_add(1 as (usize)); + } + next_index = 0u32; + i = 0usize; + while i < length { + { + if new_index.slice()[(symbols[(i as (usize))] as (usize))] == kInvalidIndex { + new_index.slice_mut()[(symbols[(i as (usize))] as (usize))] = next_index; + next_index = next_index.wrapping_add(1 as (u32)); + } + } + i = i.wrapping_add(1 as (usize)); + } + /* TODO: by using idea of "cycle-sort" we can avoid allocation of + tmp and reduce the number of copying by the factor of 2. */ + tmp = if next_index != 0 { + >::alloc_cell(alloc, next_index as usize) + } else { + >::AllocatedMemory::default() + }; + next_index = 0u32; + i = 0usize; + while i < length { + { + if new_index.slice()[(symbols[(i as (usize))] as (usize))] == next_index { + tmp.slice_mut()[(next_index as (usize))] = out[(symbols[(i as (usize))] as (usize))] + .clone(); + next_index = next_index.wrapping_add(1 as (u32)); + } + symbols[(i as (usize))] = new_index.slice()[(symbols[(i as (usize))] as (usize))]; + } + i = i.wrapping_add(1 as (usize)); + } + { + >::free_cell(alloc, new_index); + } + i = 0usize; + while i < next_index as (usize) { + { + out[(i as (usize))] = tmp.slice()[(i as (usize))].clone(); + } + i = i.wrapping_add(1 as (usize)); + } + { + >::free_cell(alloc, tmp) + } + next_index as (usize) +} + +pub fn BrotliClusterHistograms + SliceWrapper + CostAccessors+Clone, + Alloc:alloc::Allocator + alloc::Allocator + alloc::Allocator > + (alloc: &mut Alloc, + inp: &[HistogramType], + in_size: usize, + max_histograms: usize, + scratch_space: &mut HistogramType::i32vec, + out: &mut [HistogramType], + out_size: &mut usize, + histogram_symbols: &mut [u32]){ + let mut cluster_size = if in_size != 0 { + >::alloc_cell(alloc, in_size) + } else { + >::AllocatedMemory::default() + }; + let mut clusters = if in_size != 0 { + >::alloc_cell(alloc, in_size) + } else { + >::AllocatedMemory::default() + }; + let mut num_clusters: usize = 0usize; + let max_input_histograms: usize = 64usize; + let pairs_capacity: usize = max_input_histograms.wrapping_mul(max_input_histograms) + .wrapping_div(2usize); + let mut pairs = >::alloc_cell(alloc, pairs_capacity.wrapping_add(1usize)); + let mut i: usize; + i = 0usize; + while i < in_size { + { + cluster_size.slice_mut()[(i as (usize))] = 1u32; + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < in_size { + { + out[(i as (usize))] = inp[(i as (usize))].clone(); + (out[(i as (usize))]).set_bit_cost(BrotliPopulationCost(&inp[(i as (usize))], scratch_space)); + histogram_symbols[(i as (usize))] = i as (u32); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < in_size { + { + let num_to_combine: usize = brotli_min_size_t(in_size.wrapping_sub(i), max_input_histograms); + let num_new_clusters: usize; + let mut j: usize; + j = 0usize; + while j < num_to_combine { + { + clusters.slice_mut()[(num_clusters.wrapping_add(j) as (usize))] = i.wrapping_add(j) as + (u32); + } + j = j.wrapping_add(1 as (usize)); + } + num_new_clusters = BrotliHistogramCombine(out, + cluster_size.slice_mut(), + &mut histogram_symbols[(i as (usize))..], + &mut clusters.slice_mut()[(num_clusters as + (usize))..], + pairs.slice_mut(), + num_to_combine, + num_to_combine, + max_histograms, + pairs_capacity, + scratch_space); + num_clusters = num_clusters.wrapping_add(num_new_clusters); + } + i = i.wrapping_add(max_input_histograms); + } + { + let max_num_pairs: usize = brotli_min_size_t((64usize).wrapping_mul(num_clusters), + num_clusters.wrapping_div(2usize) + .wrapping_mul(num_clusters)); + { + if pairs_capacity < max_num_pairs.wrapping_add(1usize) { + let mut _new_size: usize = if pairs_capacity == 0usize { + max_num_pairs.wrapping_add(1usize) + } else { + pairs_capacity + }; + let mut new_array: >::AllocatedMemory; + while _new_size < max_num_pairs.wrapping_add(1usize) { + _new_size = _new_size.wrapping_mul(2usize); + } + new_array = if _new_size != 0 { + >::alloc_cell(alloc, _new_size) + } else { + >::AllocatedMemory::default() + }; + new_array.slice_mut()[..pairs_capacity].clone_from_slice(&pairs.slice()[..pairs_capacity]); + >::free_cell(alloc, core::mem::replace(&mut pairs, new_array)); + } + } + num_clusters = BrotliHistogramCombine(out, + cluster_size.slice_mut(), + histogram_symbols, + clusters.slice_mut(), + pairs.slice_mut(), + num_clusters, + in_size, + max_histograms, + max_num_pairs, + scratch_space); + } + >::free_cell(alloc, pairs); + >::free_cell(alloc, cluster_size); + BrotliHistogramRemap(inp, + in_size, + clusters.slice(), + num_clusters, + scratch_space, + out, + histogram_symbols); + >::free_cell(alloc, clusters); + *out_size = BrotliHistogramReindex(alloc, out, histogram_symbols, in_size); +} + + + +/////////// DONE ////////////////////////// diff --git a/rust/vendor/brotli/src/enc/combined_alloc.rs b/rust/vendor/brotli/src/enc/combined_alloc.rs new file mode 100644 index 0000000..aeca2de --- /dev/null +++ b/rust/vendor/brotli/src/enc/combined_alloc.rs @@ -0,0 +1,439 @@ +pub use alloc::Allocator; +use super::command::Command; +use super::util::floatX; +use super::v8; +use super::s16; +use super::PDF; +use super::interface::StaticCommand; +use super::histogram::{ + HistogramLiteral, + HistogramCommand, + HistogramDistance, + ContextType, +}; +use super::cluster::HistogramPair; + +use super::entropy_encode::HuffmanTree; +use super::hash_to_binary_tree::ZopfliNode; +#[cfg(feature="std")] +use alloc_stdlib::StandardAlloc; +/* +struct CombiningAllocator, AllocT2:Allocator>(AllocT1, AllocT2); + +impl , AllocT2:Allocator> CombiningAllocator { + pub fn new(a: AllocT1, b: AllocT2) -> Self { + CombiningAllocator(a, b) + } +} + +impl , AllocT2:Allocator> Allocator for CombiningAllocator { + +} + + +impl , AllocT2:Allocator> Allocator for CombiningAllocator { + +} +*/ + +pub trait BrotliAlloc:Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator + Allocator{ +} + +#[cfg(feature="std")] +impl BrotliAlloc for StandardAlloc{} + +pub struct CombiningAllocator, + AllocU16:Allocator, + AllocI32:Allocator, + AllocU32:Allocator, + AllocU64:Allocator, + AllocCommand:Allocator, + AllocFloatX:Allocator, + AllocV8:Allocator, + AllocS16:Allocator, + AllocPDF:Allocator, + AllocStaticCommand:Allocator, + AllocHistogramLiteral:Allocator, + AllocHistogramCommand:Allocator, + AllocHistogramDistance:Allocator, + AllocHistogramPair:Allocator, + AllocContextType:Allocator, + AllocHuffmanTree:Allocator, + AllocZopfliNode:Allocator, + >{ + alloc_u8: AllocU8, + alloc_u16: AllocU16, + alloc_i32: AllocI32, + alloc_u32: AllocU32, + alloc_u64: AllocU64, + alloc_c: AllocCommand, + alloc_f: AllocFloatX, + alloc_f32x8: AllocV8, + alloc_i16x16: AllocS16, + alloc_pdf: AllocPDF, + alloc_sc: AllocStaticCommand, + alloc_hl: AllocHistogramLiteral, + alloc_hc: AllocHistogramCommand, + alloc_hd: AllocHistogramDistance, + alloc_hp: AllocHistogramPair, + alloc_ct: AllocContextType, + alloc_ht: AllocHuffmanTree, + alloc_zn: AllocZopfliNode, +} + +impl, + AllocU16:Allocator, + AllocI32:Allocator, + AllocU32:Allocator, + AllocU64:Allocator, + AllocCommand:Allocator, + AllocFloatX:Allocator, + AllocV8:Allocator, + AllocS16:Allocator, + AllocPDF:Allocator, + AllocStaticCommand:Allocator, + AllocHistogramLiteral:Allocator, + AllocHistogramCommand:Allocator, + AllocHistogramDistance:Allocator, + AllocHistogramPair:Allocator, + AllocContextType:Allocator, + AllocHuffmanTree:Allocator, + AllocZopfliNode:Allocator, + > CombiningAllocator { + pub fn new(alloc_u8: AllocU8, + alloc_u16: AllocU16, + alloc_i32: AllocI32, + alloc_u32: AllocU32, + alloc_u64: AllocU64, + alloc_c: AllocCommand, + alloc_f: AllocFloatX, + alloc_f32x8: AllocV8, + alloc_i16x16: AllocS16, + alloc_pdf: AllocPDF, + alloc_sc: AllocStaticCommand, + alloc_hl: AllocHistogramLiteral, + alloc_hc: AllocHistogramCommand, + alloc_hd: AllocHistogramDistance, + alloc_hp: AllocHistogramPair, + alloc_ct: AllocContextType, + alloc_ht: AllocHuffmanTree, + alloc_zn: AllocZopfliNode) -> Self { + CombiningAllocator{ + alloc_u8: alloc_u8, + alloc_u16: alloc_u16, + alloc_i32: alloc_i32, + alloc_u32: alloc_u32, + alloc_u64: alloc_u64, + alloc_c: alloc_c, + alloc_f: alloc_f, + alloc_f32x8: alloc_f32x8, + alloc_i16x16: alloc_i16x16, + alloc_pdf: alloc_pdf, + alloc_sc: alloc_sc, + alloc_hl: alloc_hl, + alloc_hc: alloc_hc, + alloc_hd: alloc_hd, + alloc_hp: alloc_hp, + alloc_ct: alloc_ct, + alloc_ht: alloc_ht, + alloc_zn: alloc_zn, + } + } +} + + +impl, + AllocU16:Allocator, + AllocI32:Allocator, + AllocU32:Allocator, + AllocU64:Allocator, + AllocCommand:Allocator, + AllocFloatX:Allocator, + AllocV8:Allocator, + AllocS16:Allocator, + AllocPDF:Allocator, + AllocStaticCommand:Allocator, + AllocHistogramLiteral:Allocator, + AllocHistogramCommand:Allocator, + AllocHistogramDistance:Allocator, + AllocHistogramPair:Allocator, + AllocContextType:Allocator, + AllocHuffmanTree:Allocator, + AllocZopfliNode:Allocator, + > BrotliAlloc for CombiningAllocator { +} + + +impl+Default, + AllocU16:Allocator+Default, + AllocI32:Allocator+Default, + AllocU32:Allocator+Default, + AllocU64:Allocator+Default, + AllocCommand:Allocator+Default, + AllocFloatX:Allocator+Default, + AllocV8:Allocator+Default, + AllocS16:Allocator+Default, + AllocPDF:Allocator+Default, + AllocStaticCommand:Allocator+Default, + AllocHistogramLiteral:Allocator+Default, + AllocHistogramCommand:Allocator+Default, + AllocHistogramDistance:Allocator+Default, + AllocHistogramPair:Allocator+Default, + AllocContextType:Allocator+Default, + AllocHuffmanTree:Allocator+Default, + AllocZopfliNode:Allocator+Default, + > Default for CombiningAllocator { + fn default() -> Self { + CombiningAllocator{ + alloc_u8: AllocU8::default(), + alloc_u16: AllocU16::default(), + alloc_i32: AllocI32::default(), + alloc_u32: AllocU32::default(), + alloc_u64: AllocU64::default(), + alloc_c: AllocCommand::default(), + alloc_f: AllocFloatX::default(), + alloc_f32x8:AllocV8::default(), + alloc_i16x16:AllocS16::default(), + alloc_pdf: AllocPDF::default(), + alloc_sc: AllocStaticCommand::default(), + alloc_hl: AllocHistogramLiteral::default(), + alloc_hc: AllocHistogramCommand::default(), + alloc_hd: AllocHistogramDistance::default(), + alloc_hp: AllocHistogramPair::default(), + alloc_ct: AllocContextType::default(), + alloc_ht: AllocHuffmanTree::default(), + alloc_zn: AllocZopfliNode::default(), + } + + } +} + +impl+Clone, + AllocU16:Allocator+Clone, + AllocI32:Allocator+Clone, + AllocU32:Allocator+Clone, + AllocU64:Allocator+Clone, + AllocCommand:Allocator+Clone, + AllocFloatX:Allocator+Clone, + AllocV8:Allocator+Clone, + AllocS16:Allocator+Clone, + AllocPDF:Allocator+Clone, + AllocStaticCommand:Allocator+Clone, + AllocHistogramLiteral:Allocator+Clone, + AllocHistogramCommand:Allocator+Clone, + AllocHistogramDistance:Allocator+Clone, + AllocHistogramPair:Allocator+Clone, + AllocContextType:Allocator+Clone, + AllocHuffmanTree:Allocator+Clone, + AllocZopfliNode:Allocator+Clone, + > Clone for CombiningAllocator { + fn clone(&self) -> Self { + CombiningAllocator{ + alloc_u8: self.alloc_u8.clone(), + alloc_u16: self.alloc_u16.clone(), + alloc_i32: self.alloc_i32.clone(), + alloc_u32: self.alloc_u32.clone(), + alloc_u64: self.alloc_u64.clone(), + alloc_c: self.alloc_c.clone(), + alloc_f: self.alloc_f.clone(), + alloc_f32x8:self.alloc_f32x8.clone(), + alloc_i16x16:self.alloc_i16x16.clone(), + alloc_pdf: self.alloc_pdf.clone(), + alloc_sc: self.alloc_sc.clone(), + alloc_hl: self.alloc_hl.clone(), + alloc_hc: self.alloc_hc.clone(), + alloc_hd: self.alloc_hd.clone(), + alloc_hp: self.alloc_hp.clone(), + alloc_ct: self.alloc_ct.clone(), + alloc_ht: self.alloc_ht.clone(), + alloc_zn: self.alloc_zn.clone(), + } + + } +} + +impl+Copy, + AllocU16:Allocator+Copy, + AllocI32:Allocator+Copy, + AllocU32:Allocator+Copy, + AllocU64:Allocator+Copy, + AllocCommand:Allocator+Copy, + AllocFloatX:Allocator+Copy, + AllocV8:Allocator+Copy, + AllocS16:Allocator+Copy, + AllocPDF:Allocator+Copy, + AllocStaticCommand:Allocator+Copy, + AllocHistogramLiteral:Allocator+Copy, + AllocHistogramCommand:Allocator+Copy, + AllocHistogramDistance:Allocator+Copy, + AllocHistogramPair:Allocator+Copy, + AllocContextType:Allocator+Copy, + AllocHuffmanTree:Allocator+Copy, + AllocZopfliNode:Allocator+Copy, + > Copy for CombiningAllocator { +} + +macro_rules! implement_allocator { + ($bound_name: ty, + $type_name: ty, + $sub_type_name: ty, + $local_name: ident) => { + impl, + AllocU16:Allocator, + AllocI32:Allocator, + AllocU32:Allocator, + AllocU64:Allocator, + AllocCommand:Allocator, + AllocFloatX:Allocator, + AllocV8:Allocator, + AllocS16:Allocator, + AllocPDF:Allocator, + AllocStaticCommand:Allocator, + AllocHistogramLiteral:Allocator, + AllocHistogramCommand:Allocator, + AllocHistogramDistance:Allocator, + AllocHistogramPair:Allocator, + AllocContextType:Allocator, + AllocHuffmanTree:Allocator, + AllocZopfliNode:Allocator, + > Allocator<$type_name> for CombiningAllocator { + type AllocatedMemory = $sub_type_name; + fn alloc_cell(&mut self, size: usize) -> >::AllocatedMemory { + self.$local_name.alloc_cell(size) + } + fn free_cell(&mut self, data: >::AllocatedMemory) { + self.$local_name.free_cell(data) + } + } +}; +} + +implement_allocator!(AllocU8, u8, AllocU8::AllocatedMemory, alloc_u8); +implement_allocator!(AllocU16, u16, AllocU16::AllocatedMemory, alloc_u16); + +implement_allocator!(AllocI32, i32, AllocI32::AllocatedMemory, alloc_i32); +implement_allocator!(AllocU32, u32, AllocU32::AllocatedMemory, alloc_u32); +implement_allocator!(AllocU64, u64, AllocU64::AllocatedMemory, alloc_u64); +implement_allocator!(AllocCommand, Command, AllocCommand::AllocatedMemory, alloc_c); +implement_allocator!(AllocFloatX, floatX, AllocFloatX::AllocatedMemory, alloc_f); +implement_allocator!(AllocV8, v8, AllocV8::AllocatedMemory, alloc_f32x8); +implement_allocator!(AllocS16, s16, AllocS16::AllocatedMemory, alloc_i16x16); +implement_allocator!(AllocPDF, PDF, AllocPDF::AllocatedMemory, alloc_pdf); +implement_allocator!(AllocStaticCommand, StaticCommand, AllocStaticCommand::AllocatedMemory, alloc_sc); +implement_allocator!(AllocHistogramLiteral, HistogramLiteral, AllocHistogramLiteral::AllocatedMemory, alloc_hl); +implement_allocator!(AllocHistogramCommand, HistogramCommand, AllocHistogramCommand::AllocatedMemory, alloc_hc); +implement_allocator!(AllocHistogramDistance, HistogramDistance, AllocHistogramDistance::AllocatedMemory, alloc_hd); +implement_allocator!(AllocHistogramPair, HistogramPair, AllocHistogramPair::AllocatedMemory, alloc_hp); +implement_allocator!(AllocContextType, ContextType, AllocContextType::AllocatedMemory, alloc_ct); +implement_allocator!(AllocHuffmanTree, HuffmanTree, AllocHuffmanTree::AllocatedMemory, alloc_ht); +implement_allocator!(AllocZopfliNode, ZopfliNode, AllocZopfliNode::AllocatedMemory, alloc_zn); + + diff --git a/rust/vendor/brotli/src/enc/command.rs b/rust/vendor/brotli/src/enc/command.rs new file mode 100755 index 0000000..a3e6d97 --- /dev/null +++ b/rust/vendor/brotli/src/enc/command.rs @@ -0,0 +1,361 @@ + +use super::util::Log2FloorNonZero; +use super::encode::BROTLI_NUM_DISTANCE_SHORT_CODES; +#[derive(Copy,Clone, Debug)] +pub struct BrotliDistanceParams { + pub distance_postfix_bits : u32, + pub num_direct_distance_codes : u32, + pub alphabet_size : u32, + pub max_distance : usize, +} + +#[derive(Clone, Copy, Debug)] +pub struct Command { + // stores copy_len in low 25 bits and copy_code - copy_len in high 7 bit + pub insert_len_: u32, + pub copy_len_: u32, + //stores distance_extra bits + pub dist_extra_: u32, + pub cmd_prefix_: u16, + // stores distance code in low 10 bits and num extra bits in high 6 bits + pub dist_prefix_: u16, +} +impl Default for Command { + fn default() -> Command { + Command { + insert_len_: 0, + copy_len_: 0, + dist_extra_: 0, + cmd_prefix_: 0, + dist_prefix_: 0, + } + } +} +pub fn CommandCopyLen(xself: &Command) -> u32 { + (*xself).copy_len_ & 0x1ffffffi32 as (u32) +} + +pub fn CommandDistanceContext(xself: &Command) -> u32 { + let r: u32 = ((*xself).cmd_prefix_ as (i32) >> 6i32) as (u32); + let c: u32 = ((*xself).cmd_prefix_ as (i32) & 7i32) as (u32); + if (r == 0i32 as (u32) || r == 2i32 as (u32) || r == 4i32 as (u32) || r == 7i32 as (u32)) && + (c <= 2i32 as (u32)) { + c + } else { + 3i32 as (u32) + } +} + +#[inline(always)] +pub fn ComputeDistanceCode(distance: usize, max_distance: usize, dist_cache: &[i32]) -> usize { + if distance <= max_distance { + let distance_plus_3: usize = distance.wrapping_add(3usize); + let offset0: usize = distance_plus_3.wrapping_sub(dist_cache[(0usize)] as (usize)); + let offset1: usize = distance_plus_3.wrapping_sub(dist_cache[(1usize)] as (usize)); + if distance == dist_cache[(0usize)] as (usize) { + return 0usize; + } else if distance == dist_cache[(1usize)] as (usize) { + return 1usize; + } else if offset0 < 7usize { + return (0x9750468i32 >> (4usize).wrapping_mul(offset0) & 0xfi32) as (usize); + } else if offset1 < 7usize { + return (0xfdb1acei32 >> (4usize).wrapping_mul(offset1) & 0xfi32) as (usize); + } else if distance == dist_cache[(2usize)] as (usize) { + return 2usize; + } else if distance == dist_cache[(3usize)] as (usize) { + return 3usize; + } + } + distance.wrapping_add(16usize).wrapping_sub(1usize) +} + +#[inline(always)] +pub fn GetInsertLengthCode(insertlen: usize) -> u16 { + if insertlen < 6usize { + insertlen as (u16) + } else if insertlen < 130usize { + let nbits: u32 = Log2FloorNonZero(insertlen.wrapping_sub(2) as u64).wrapping_sub(1u32); + ((nbits << 1i32) as (usize)) + .wrapping_add(insertlen.wrapping_sub(2usize) >> nbits) + .wrapping_add(2usize) as (u16) + } else if insertlen < 2114usize { + Log2FloorNonZero(insertlen.wrapping_sub(66usize) as u64).wrapping_add(10u32) as (u16) + } else if insertlen < 6210usize { + 21u32 as (u16) + } else if insertlen < 22594usize { + 22u32 as (u16) + } else { + 23u32 as (u16) + } +} + +#[inline(always)] +pub fn GetCopyLengthCode(copylen: usize) -> u16 { + if copylen < 10usize { + copylen.wrapping_sub(2usize) as (u16) + } else if copylen < 134usize { + let nbits: u32 = Log2FloorNonZero(copylen.wrapping_sub(6usize) as u64).wrapping_sub(1u32); + ((nbits << 1i32) as (usize)) + .wrapping_add(copylen.wrapping_sub(6usize) >> nbits) + .wrapping_add(4usize) as (u16) + } else if copylen < 2118usize { + Log2FloorNonZero(copylen.wrapping_sub(70usize) as u64).wrapping_add(12u32) as (u16) + } else { + 23u32 as (u16) + } +} + +#[inline(always)] +pub fn CombineLengthCodes(inscode: u16, copycode: u16, use_last_distance: i32) -> u16 { + let bits64: u16 = (copycode as (u32) & 0x7u32 | (inscode as (u32) & 0x7u32) << 3i32) as (u16); + if use_last_distance != 0 && (inscode as (i32) < 8i32) && (copycode as (i32) < 16i32) { + if copycode as (i32) < 8i32 { + bits64 + } else { + let s64: u16 = 64i32 as (u16); + (bits64 as (i32) | s64 as (i32)) as (u16) + } + } else { + let sub_offset: i32 = 2i32 * ((copycode as (i32) >> 3i32) + 3i32 * (inscode as (i32) >> 3i32)); + let offset = (sub_offset << 5i32) + 0x40i32 + (0x520d40i32 >> sub_offset & 0xc0i32); + (offset as (u16) as (i32) | bits64 as (i32)) as (u16) + } +} + +#[inline(always)] +pub fn GetLengthCode(insertlen: usize, + copylen: usize, + use_last_distance: i32, + code: &mut u16) { + let inscode: u16 = GetInsertLengthCode(insertlen); + let copycode: u16 = GetCopyLengthCode(copylen); + *code = CombineLengthCodes(inscode, copycode, use_last_distance); +} +pub fn PrefixEncodeCopyDistance(distance_code: usize, + num_direct_codes: usize, + postfix_bits: u64, + code: &mut u16, + extra_bits: &mut u32) { + if distance_code < (BROTLI_NUM_DISTANCE_SHORT_CODES as usize).wrapping_add(num_direct_codes) { + *code = distance_code as (u16); + *extra_bits = 0u32; + } else { + let dist: u64 = (1u64 << (postfix_bits as u64).wrapping_add(2u32 as (u64))) + .wrapping_add((distance_code as u64).wrapping_sub(BROTLI_NUM_DISTANCE_SHORT_CODES as u64).wrapping_sub(num_direct_codes as u64) as u64); + let bucket: u64 = Log2FloorNonZero(dist).wrapping_sub(1u32) as (u64); + let postfix_mask: u64 = (1u32 << postfix_bits).wrapping_sub(1u32) as (u64); + let postfix: u64 = dist & postfix_mask; + let prefix: u64 = (dist >> bucket) & 1; + let offset: u64 = (2u64).wrapping_add(prefix) << bucket; + let nbits: u64 = bucket.wrapping_sub(postfix_bits); + *code = ((nbits << 10) | + ((BROTLI_NUM_DISTANCE_SHORT_CODES as u64).wrapping_add(num_direct_codes as u64).wrapping_add( + 2u64.wrapping_mul(nbits.wrapping_sub(1)).wrapping_add(prefix) << postfix_bits).wrapping_add(postfix))) as u16; + *extra_bits = (dist.wrapping_sub(offset) >> postfix_bits) as u32; + /*(16u64) + .wrapping_add(num_direct_codes as u64) + .wrapping_add((2u64).wrapping_mul(nbits.wrapping_sub(1)).wrapping_add(prefix) << + postfix_bits) + .wrapping_add(postfix) as (u16);*/ + //*extra_bits = (nbits << 24i32 | dist.wrapping_sub(offset) >> postfix_bits) as (u32); + } +} +pub fn CommandRestoreDistanceCode(xself: &Command, dist:&BrotliDistanceParams) -> u32 { + if ((*xself).dist_prefix_ as (i32) & 0x3ff) < BROTLI_NUM_DISTANCE_SHORT_CODES as i32 + dist.num_direct_distance_codes as i32 { + (*xself).dist_prefix_ as (u32) & 0x3ff + } else { + let dcode = xself.dist_prefix_ as u32 & 0x3ff; + let nbits: u32 = u32::from((*xself).dist_prefix_ >> 10); + let extra: u32 = (*xself).dist_extra_; + let postfix_mask = (1u32 << dist.distance_postfix_bits) - 1; + let hcode = dcode.wrapping_sub(dist.num_direct_distance_codes).wrapping_sub(BROTLI_NUM_DISTANCE_SHORT_CODES as u32) >> dist.distance_postfix_bits; + let lcode = dcode.wrapping_sub(dist.num_direct_distance_codes).wrapping_sub(BROTLI_NUM_DISTANCE_SHORT_CODES as u32) & postfix_mask; + let offset = (2u32.wrapping_add((hcode & 1)) << nbits).wrapping_sub(4); + (offset.wrapping_add(extra) << dist.distance_postfix_bits).wrapping_add(lcode).wrapping_add(dist.num_direct_distance_codes).wrapping_add( + BROTLI_NUM_DISTANCE_SHORT_CODES) + } +} + + + +// returns which distance code to use ( 0 means none, 1 means last, 2 means penultimate, 3 means the prior to penultimate +pub fn CommandDistanceIndexAndOffset(cmd: &Command, + dist: &BrotliDistanceParams) -> (usize, isize) { + let n_postfix = dist.distance_postfix_bits; + let n_direct = dist.num_direct_distance_codes; + let dextra = cmd.dist_extra_; + let dprefix = cmd.dist_prefix_ & 0x3ff; + let n_dist_bits = cmd.dist_prefix_ >> 10; + if u32::from(dprefix) < BROTLI_NUM_DISTANCE_SHORT_CODES { + let table: [(usize, isize);16]= [(1,0), (2,0),(3,0),(4,0), + (1,-1), (1, 1), (1,-2), (1,2),(1,-3),(1,3), + (2,-1),(2,1),(2,-2),(2,2),(2,-3),(2,3)]; + //eprint!("AA {:?} {:?} -> {:?}\n",*cmd, *dist, table[dprefix as usize]); + return table[dprefix as usize]; + } + if (dprefix as usize) < BROTLI_NUM_DISTANCE_SHORT_CODES as usize + n_direct as usize { + let ret = dprefix as isize + 1 - BROTLI_NUM_DISTANCE_SHORT_CODES as isize; + //eprint!("BB {:?} {:?} -> {:?}\n",*cmd, *dist, ret); + return (0, ret); + } + let postfix_mask = (1 << n_postfix) - 1; + let dcode = dprefix as u32 - BROTLI_NUM_DISTANCE_SHORT_CODES as u32 - n_direct; + let hcode = dcode >> n_postfix; + let lcode = dcode & postfix_mask; + let offset = ((2 + (hcode & 1)) << n_dist_bits) - 4; + + let ret = (((offset + dextra) << n_postfix) + lcode + n_direct + 1) as isize; + //assert!(ret != 0); + (0, ret) +} + +mod test { + // returns which distance code to use ( 0 means none, 1 means last, 2 means penultimate, 3 means the prior to penultimate + #[cfg(test)] + pub fn helperCommandDistanceIndexAndOffset(cmd: &super::Command, + dist: &super::BrotliDistanceParams) -> (usize, isize) { + + let n_postfix = dist.distance_postfix_bits; + let n_direct = dist.num_direct_distance_codes; + let dextra = cmd.dist_extra_; + let dist_prefix = cmd.dist_prefix_ & 0x3ff; + if dist_prefix < 16 { + let table: [(usize, isize);16]= [(1,0), (2,0),(3,0),(4,0), + (1,-1), (1, 1), (1,-2), (1,2),(1,-3),(1,3), + (2,-1),(2,1),(2,-2),(2,2),(2,-3),(2,3)]; + return table[cmd.dist_prefix_ as usize]; + } + if (dist_prefix as usize) < 16 + n_direct as usize { + return (0, dist_prefix as isize + 1 - 16); + } + let postfix_mask = (1 << n_postfix) - 1; + let dcode = dist_prefix as u32 - 16 - n_direct; + let n_dist_bits = 1 + (dcode >> (n_postfix + 1)); + + let hcode = dcode >> n_postfix; + let lcode = dcode & postfix_mask; + let offset = ((2 + (hcode & 1)) << n_dist_bits) - 4; + (0, (((offset + dextra) << n_postfix) + lcode + n_direct + 1) as isize) + } + #[test] + fn test_command_return_distance_index_offset() { + let param = super::BrotliDistanceParams { + distance_postfix_bits: 2, + num_direct_distance_codes: 16, + alphabet_size: 224, + max_distance: 268435456, + }; + let mut cmd = super::Command::default(); + cmd.insert_len_ = 63; + cmd.copy_len_ = 3; + cmd.dist_extra_ = 3; + cmd.cmd_prefix_ = 297; + cmd.dist_prefix_= 2089; + + assert_eq!(super::CommandDistanceIndexAndOffset(&cmd, ¶m), + (0,46)); + assert_eq!(super::CommandDistanceIndexAndOffset(&cmd, ¶m), + helperCommandDistanceIndexAndOffset(&cmd, ¶m)); + cmd = super::Command { insert_len_: 27, copy_len_: 3, dist_extra_: 0, cmd_prefix_: 281, dist_prefix_: 6 }; + assert_eq!(super::CommandDistanceIndexAndOffset(&cmd, ¶m), + (1,-2)); + assert_eq!(super::CommandDistanceIndexAndOffset(&cmd, ¶m), + helperCommandDistanceIndexAndOffset(&cmd, ¶m)); + cmd = super::Command { insert_len_: 1, copy_len_: 3, dist_extra_: 0, cmd_prefix_: 137, dist_prefix_: 27 }; + assert_eq!(super::CommandDistanceIndexAndOffset(&cmd, ¶m), + (0,12)); + assert_eq!(super::CommandDistanceIndexAndOffset(&cmd, ¶m), + helperCommandDistanceIndexAndOffset(&cmd, ¶m)); + cmd = super::Command { insert_len_: 5, copy_len_: 4, dist_extra_: 297, cmd_prefix_: 170, dist_prefix_: 11377 }; + assert_eq!(super::CommandDistanceIndexAndOffset(&cmd, ¶m), + (0,17574)); + assert_eq!(super::CommandDistanceIndexAndOffset(&cmd, ¶m), + helperCommandDistanceIndexAndOffset(&cmd, ¶m)); + super::super::encode::InitInsertCommand(&mut cmd, 24); + assert_eq!(super::CommandDistanceIndexAndOffset(&cmd, ¶m), + (0,1)); + + } + /* + #[test] + fn test_restore_distance_code() { + for dist_code in 0..50000 { + let mut cmd = super::Command::default(); + let param =super::BrotliDistanceParams{ + distance_postfix_bits:2, + num_direct_distance_codes:16, + alphabet_size:224, + max_distance:268435456, + }; + super::InitCommand(&mut cmd, ¶m, 4, 4, 4, dist_code); + let exp_dist_code = super::CommandRestoreDistanceCode(&cmd, ¶m); + assert_eq!(exp_dist_code as u32, dist_code as u32); + } + }*/ +} +pub fn RecomputeDistancePrefixes(cmds: &mut [Command], + num_commands: usize, + num_direct_distance_codes: u32, + distance_postfix_bits: u32, + dist:&BrotliDistanceParams) { + let mut i: usize; + if num_direct_distance_codes == 0u32 && (distance_postfix_bits == 0u32) { + return; + } + i = 0usize; + while i < num_commands { + { + let cmd: &mut Command = &mut cmds[(i as (usize))]; + if CommandCopyLen(cmd) != 0 && ((*cmd).cmd_prefix_ as (i32) >= 128i32) { + PrefixEncodeCopyDistance(CommandRestoreDistanceCode(cmd, dist) as (usize), + num_direct_distance_codes as (usize), + distance_postfix_bits as (u64), + &mut (*cmd).dist_prefix_, + &mut (*cmd).dist_extra_); + } + } + i = i.wrapping_add(1 as (usize)); + } +} + + +pub fn InitCommand(xself: &mut Command, + dist: &BrotliDistanceParams, + insertlen: usize, + copylen: usize, + copylen_code: usize, + distance_code: usize) { + + xself.insert_len_ = insertlen as (u32); + let copylen_code_delta = (copylen_code as i32 - copylen as i32) as i8; + xself.copy_len_ = (copylen as u32 | (u32::from(copylen_code_delta as u8) << 25)); + PrefixEncodeCopyDistance(distance_code, + dist.num_direct_distance_codes as usize, + u64::from(dist.distance_postfix_bits), + &mut xself.dist_prefix_, + &mut xself.dist_extra_); + GetLengthCode(insertlen, + copylen_code, + if !!((xself.dist_prefix_ as (i32) & 0x3ff) == 0i32) { + 1i32 + } else { + 0i32 + }, + &mut xself.cmd_prefix_); +} +pub fn NewCommand(dist: &BrotliDistanceParams, + insertlen: usize, + copylen: usize, + copylen_code: usize, + distance_code: usize) + -> Command { + let mut xself: Command = Command { + insert_len_: insertlen as (u32), + copy_len_: (copylen | ((copylen_code ^ copylen) << 25)) as (u32), + dist_extra_: 0, + cmd_prefix_: 0, + dist_prefix_: 0, + }; + InitCommand(&mut xself, dist, insertlen, copylen, copylen_code, distance_code); + xself +} diff --git a/rust/vendor/brotli/src/enc/compat.rs b/rust/vendor/brotli/src/enc/compat.rs new file mode 100755 index 0000000..fb3e038 --- /dev/null +++ b/rust/vendor/brotli/src/enc/compat.rs @@ -0,0 +1,340 @@ +#![cfg_attr(feature="simd", allow(unused))] +use core::ops::{Shr, Add, Sub, AddAssign, Mul, BitAnd}; +#[derive(Default, Copy, Clone, Debug)] +pub struct Compat16x16([i16;16]); +impl Compat16x16 { + #[inline(always)] + pub fn splat(a: i16) -> Compat16x16 { + Compat16x16([a, a, a, a, a, a, a, a, + a, a, a, a, a, a, a, a,]) + } + #[inline(always)] + pub fn new(a0: i16, a1: i16, a2: i16, a3: i16, + a4: i16, a5: i16, a6: i16, a7: i16, + a8: i16, a9: i16, a10: i16, a11: i16, + a12: i16, a13: i16, a14:i16, a15:i16) -> Compat16x16 { + Compat16x16([a0, a1, a2, a3, a4, a5, a6, a7, + a8, a9, a10, a11, a12, a13, a14, a15]) + } + #[inline(always)] + pub fn extract(&self, i: usize) -> i16 { + self.0[i] + } + #[inline(always)] + pub fn replace(&self, i: usize, data: i16) -> Compat16x16 { + let mut ret = *self; + ret.0[i] = data; + ret + } + #[inline(always)] + pub fn into_bits(&self) -> Self { + *self + } + #[inline(always)] + pub fn gt(&self, rhs: Compat16x16) -> Compat16x16 { + Self::new(-((self.extract(0) > rhs.extract(0)) as i16), + -((self.extract(1) > rhs.extract(1)) as i16), + -((self.extract(2) > rhs.extract(2)) as i16), + -((self.extract(3) > rhs.extract(3)) as i16), + -((self.extract(4) > rhs.extract(4)) as i16), + -((self.extract(5) > rhs.extract(5)) as i16), + -((self.extract(6) > rhs.extract(6)) as i16), + -((self.extract(7) > rhs.extract(7)) as i16), + -((self.extract(8) > rhs.extract(8)) as i16), + -((self.extract(9) > rhs.extract(9)) as i16), + -((self.extract(10) > rhs.extract(10)) as i16), + -((self.extract(11) > rhs.extract(11)) as i16), + -((self.extract(12) > rhs.extract(12)) as i16), + -((self.extract(13) > rhs.extract(13)) as i16), + -((self.extract(14) > rhs.extract(14)) as i16), + -((self.extract(15) > rhs.extract(15)) as i16)) + } +} + +macro_rules! op16 { + ($a: expr, $b: expr, $op: expr) => ( + Compat16x16::new($op($a[0], $b[0]), + $op($a[1], $b[1]), + $op($a[2], $b[2]), + $op($a[3], $b[3]), + $op($a[4], $b[4]), + $op($a[5], $b[5]), + $op($a[6], $b[6]), + $op($a[7], $b[7]), + $op($a[8], $b[8]), + $op($a[9], $b[9]), + $op($a[10], $b[10]), + $op($a[11], $b[11]), + $op($a[12], $b[12]), + $op($a[13], $b[13]), + $op($a[14], $b[14]), + $op($a[15], $b[15])) + + ) +} +macro_rules! scalar_op16 { + ($a: expr, $b: expr, $op: expr) => ( + Compat16x16::new($op($a[0], $b), + $op($a[1], $b), + $op($a[2], $b), + $op($a[3], $b), + $op($a[4], $b), + $op($a[5], $b), + $op($a[6], $b), + $op($a[7], $b), + $op($a[8], $b), + $op($a[9], $b), + $op($a[10], $b), + $op($a[11], $b), + $op($a[12], $b), + $op($a[13], $b), + $op($a[14], $b), + $op($a[15], $b)) + + ) +} +#[inline(always)] +fn wrapping_i16_add(a: i16, b:i16) -> i16 { + a.wrapping_add(b) +} +#[inline(always)] +fn wrapping_i16_sub(a: i16, b:i16) -> i16 { + a.wrapping_sub(b) +} +#[inline(always)] +fn i16_bitand(a: i16, b:i16) -> i16 { + a & b +} +#[inline(always)] +fn shift16(a: i16, b:Scalar) -> i16 where i64:From { + a >> i64::from(b) +} +impl Add for Compat16x16 { + type Output = Compat16x16; + #[inline(always)] + fn add(self, other: Compat16x16) -> Compat16x16 { + op16!(self.0, other.0, wrapping_i16_add) + } +} +impl Sub for Compat16x16 { + type Output = Compat16x16; + #[inline(always)] + fn sub(self, other: Compat16x16) -> Compat16x16 { + op16!(self.0, other.0, wrapping_i16_sub) + } +} +impl BitAnd for Compat16x16 { + type Output = Compat16x16; + #[inline(always)] + fn bitand(self, other: Compat16x16) -> Compat16x16 { + op16!(self.0, other.0, i16_bitand) + } +} +impl Shr for Compat16x16 where i64:From { + type Output = Compat16x16; + #[inline(always)] + fn shr(self, other: Scalar) -> Compat16x16 { + scalar_op16!(self.0, other.clone(), shift16) + } +} + +#[derive(Default, Copy, Clone, Debug)] +pub struct Compat32x8([i32;8]); +impl Compat32x8 { + #[inline(always)] + pub fn splat(a: i32) -> Compat32x8 { + Compat32x8([a, a, a, a, a, a, a, a]) + } + #[inline(always)] + pub fn new(a0: i32, a1: i32, a2: i32, a3: i32, + a4: i32, a5: i32, a6: i32, a7: i32) -> Compat32x8 { + Compat32x8([a0, a1, a2, a3, a4, a5, a6, a7]) + } + #[inline(always)] + pub fn extract(&self, i: usize) -> i32 { + self.0[i] + } + #[inline(always)] + pub fn replace(&self, i: usize, data: i32) -> Compat32x8 { + let mut ret = *self; + ret.0[i] = data; + ret + } + #[inline(always)] + pub fn gt(&self, rhs: Compat32x8) -> Compat32x8 { + Self::new(-((self.extract(0) > rhs.extract(0)) as i32), + -((self.extract(1) > rhs.extract(1)) as i32), + -((self.extract(2) > rhs.extract(2)) as i32), + -((self.extract(3) > rhs.extract(3)) as i32), + -((self.extract(4) > rhs.extract(4)) as i32), + -((self.extract(5) > rhs.extract(5)) as i32), + -((self.extract(6) > rhs.extract(6)) as i32), + -((self.extract(7) > rhs.extract(7)) as i32)) + } + #[inline(always)] + pub fn ge(&self, rhs: Compat32x8) -> Compat32x8 { + Self::new(-((self.extract(0) >= rhs.extract(0)) as i32), + -((self.extract(1) >= rhs.extract(1)) as i32), + -((self.extract(2) >= rhs.extract(2)) as i32), + -((self.extract(3) >= rhs.extract(3)) as i32), + -((self.extract(4) >= rhs.extract(4)) as i32), + -((self.extract(5) >= rhs.extract(5)) as i32), + -((self.extract(6) >= rhs.extract(6)) as i32), + -((self.extract(7) >= rhs.extract(7)) as i32)) + } + pub fn into_bits(&self) -> Self { + *self + } +} + + +#[inline(always)] +fn fmin(a: f32, b:f32) -> f32 { + if a < b { + a + } else { + b + } +} +#[derive(Default, Copy, Clone, Debug)] +pub struct CompatF8([f32;8]); +impl CompatF8 { + #[inline(always)] + pub fn new(a0: f32, a1: f32, a2: f32, a3: f32, a4: f32, a5: f32, a6: f32, a7: f32) -> CompatF8 { + CompatF8([a0, a1, a2, a3, a4, a5, a6, a7]) + } + #[inline(always)] + pub fn splat(a: f32) -> CompatF8 { + CompatF8([a, a, a, a, a, a, a, a]) + } + #[inline(always)] + pub fn extract(&self, i: usize) -> f32 { + self.0[i] + } + #[inline(always)] + pub fn replace(&self, i: usize, data: f32) -> CompatF8 { + let mut ret = *self; + ret.0[i] = data; + ret + } + #[inline(always)] + pub fn ge(&self, rhs: CompatF8) -> Compat32x8 { + Compat32x8::new(-((self.extract(0) >= rhs.extract(0)) as i32), + -((self.extract(1) >= rhs.extract(1)) as i32), + -((self.extract(2) >= rhs.extract(2)) as i32), + -((self.extract(3) >= rhs.extract(3)) as i32), + -((self.extract(4) >= rhs.extract(4)) as i32), + -((self.extract(5) >= rhs.extract(5)) as i32), + -((self.extract(6) >= rhs.extract(6)) as i32), + -((self.extract(7) >= rhs.extract(7)) as i32)) + } + #[inline(always)] + pub fn min(&self, rhs: CompatF8) -> CompatF8 { + Self::new(fmin(self.extract(0), rhs.extract(0)), + fmin(self.extract(1), rhs.extract(1)), + fmin(self.extract(2), rhs.extract(2)), + fmin(self.extract(3), rhs.extract(3)), + fmin(self.extract(4), rhs.extract(4)), + fmin(self.extract(5), rhs.extract(5)), + fmin(self.extract(6), rhs.extract(6)), + fmin(self.extract(7), rhs.extract(7))) + } +} +impl Add for Compat32x8 { + type Output = Compat32x8; + #[inline(always)] + fn add(self, other: Compat32x8) -> Compat32x8 { + Compat32x8::new(self.0[0].wrapping_add(other.0[0]), + self.0[1].wrapping_add(other.0[1]), + self.0[2].wrapping_add(other.0[2]), + self.0[3].wrapping_add(other.0[3]), + self.0[4].wrapping_add(other.0[4]), + self.0[5].wrapping_add(other.0[5]), + self.0[6].wrapping_add(other.0[6]), + self.0[7].wrapping_add(other.0[7])) + } +} + +impl BitAnd for Compat32x8 { + type Output = Compat32x8; + #[inline(always)] + fn bitand(self, other: Compat32x8) -> Compat32x8 { + Compat32x8::new(self.0[0] & other.0[0], + self.0[1] & other.0[1], + self.0[2] & other.0[2], + self.0[3] & other.0[3], + self.0[4] & other.0[4], + self.0[5] & other.0[5], + self.0[6] & other.0[6], + self.0[7] & other.0[7]) + } +} +impl Mul for Compat32x8 { + type Output = Compat32x8; + #[inline(always)] + fn mul(self, other: Compat32x8) -> Compat32x8 { + Compat32x8::new(self.0[0].wrapping_mul(other.0[0]), + self.0[1].wrapping_mul(other.0[1]), + self.0[2].wrapping_mul(other.0[2]), + self.0[3].wrapping_mul(other.0[3]), + self.0[4].wrapping_mul(other.0[4]), + self.0[5].wrapping_mul(other.0[5]), + self.0[6].wrapping_mul(other.0[6]), + self.0[7].wrapping_mul(other.0[7])) + } +} +impl Add for CompatF8 { + type Output = CompatF8; + #[inline(always)] + fn add(self, other: CompatF8) -> CompatF8 { + CompatF8::new(self.0[0] + other.0[0], + self.0[1] + other.0[1], + self.0[2] + other.0[2], + self.0[3] + other.0[3], + self.0[4] + other.0[4], + self.0[5] + other.0[5], + self.0[6] + other.0[6], + self.0[7] + other.0[7]) + } +} +impl Sub for CompatF8 { + type Output = CompatF8; + #[inline(always)] + fn sub(self, other: CompatF8) -> CompatF8 { + CompatF8::new(self.0[0] - other.0[0], + self.0[1] - other.0[1], + self.0[2] - other.0[2], + self.0[3] - other.0[3], + self.0[4] - other.0[4], + self.0[5] - other.0[5], + self.0[6] - other.0[6], + self.0[7] - other.0[7]) + } +} +impl Mul for CompatF8 { + type Output = CompatF8; + #[inline(always)] + fn mul(self, other: CompatF8) -> CompatF8 { + CompatF8::new(self.0[0] * other.0[0], + self.0[1] * other.0[1], + self.0[2] * other.0[2], + self.0[3] * other.0[3], + self.0[4] * other.0[4], + self.0[5] * other.0[5], + self.0[6] * other.0[6], + self.0[7] * other.0[7]) + } +} +impl AddAssign for CompatF8 { + #[inline(always)] + fn add_assign(&mut self, other: CompatF8) { + self.0[0] += other.0[0]; + self.0[1] += other.0[1]; + self.0[2] += other.0[2]; + self.0[3] += other.0[3]; + self.0[4] += other.0[4]; + self.0[5] += other.0[5]; + self.0[6] += other.0[6]; + self.0[7] += other.0[7]; + } +} diff --git a/rust/vendor/brotli/src/enc/compress_fragment.rs b/rust/vendor/brotli/src/enc/compress_fragment.rs new file mode 100755 index 0000000..3bc4dc8 --- /dev/null +++ b/rust/vendor/brotli/src/enc/compress_fragment.rs @@ -0,0 +1,1144 @@ +#![allow(dead_code)] +use super::backward_references::kHashMul32; +//use super::super::alloc::{SliceWrapper, SliceWrapperMut}; + +use super::brotli_bit_stream::{BrotliBuildAndStoreHuffmanTreeFast, BrotliStoreHuffmanTree}; +//caution: lots of the functions look structurally the same as two_pass, +// but have subtle index differences +// examples: IsMatch checks p1[4] and p1[5] +// the hoops that BuildAndStoreCommandPrefixCode goes through are subtly different in order +// (eg memcpy x+24, y instead of +24, y+40 +// pretty much assume compress_fragment_two_pass is a trap! except for BrotliStoreMetaBlockHeader +use super::compress_fragment_two_pass::{BrotliStoreMetaBlockHeader, BrotliWriteBits, memcpy}; +use super::entropy_encode::{BrotliConvertBitDepthsToSymbols, BrotliCreateHuffmanTree, HuffmanTree, + NewHuffmanTree}; +use super::static_dict::{BROTLI_UNALIGNED_LOAD32, BROTLI_UNALIGNED_LOAD64, FindMatchLengthWithLimit}; +use super::super::alloc; +use super::util::{brotli_min_size_t, brotli_min_uint32_t, Log2FloorNonZero, FastLog2}; + +//static kHashMul32: u32 = 0x1e35a7bdu32; + +static kCmdHistoSeed: [u32; 128] = + [0u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, + 0u32, 0u32, 0u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, + 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 0u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, + 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, + 1u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, + 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, + 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 1u32, 0u32, 0u32, 0u32, 0u32]; + +fn Hash(p: &[u8], shift: usize) -> u32 { + let h: u64 = (BROTLI_UNALIGNED_LOAD64(p) << 24i32).wrapping_mul(kHashMul32 as (u64)); + (h >> shift) as (u32) +} +fn IsMatch(p1: &[u8], p2: &[u8]) -> i32 { + if !!(BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) && + (p1[(4usize)] as (i32) == p2[(4usize)] as (i32))) { + 1i32 + } else { + 0i32 + } +} + +fn BuildAndStoreLiteralPrefixCode>(mht: &mut AllocHT, + input: &[u8], + input_size: usize, + depths: &mut [u8], + bits: &mut [u16], + storage_ix: &mut usize, + storage: &mut [u8]) +-> usize{ + let mut histogram: [u32; 256] = [0; 256]; + let mut histogram_total: usize; + let mut i: usize; + if input_size < (1i32 << 15i32) as (usize) { + i = 0usize; + while i < input_size { + { + let _rhs = 1; + let _lhs = &mut histogram[input[(i as (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + i = i.wrapping_add(1 as (usize)); + } + histogram_total = input_size; + i = 0usize; + while i < 256usize { + { + let adjust: u32 = (2u32).wrapping_mul(brotli_min_uint32_t(histogram[i], 11u32)); + { + let _rhs = adjust; + let _lhs = &mut histogram[i]; + *_lhs = (*_lhs).wrapping_add(_rhs); + } + histogram_total = histogram_total.wrapping_add(adjust as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } + } else { + static kSampleRate: usize = 29usize; + i = 0usize; + while i < input_size { + { + let _rhs = 1; + let _lhs = &mut histogram[input[(i as (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + i = i.wrapping_add(kSampleRate); + } + histogram_total = + input_size.wrapping_add(kSampleRate).wrapping_sub(1usize).wrapping_div(kSampleRate); + i = 0usize; + while i < 256usize { + { + let adjust: u32 = + (1u32).wrapping_add((2u32).wrapping_mul(brotli_min_uint32_t(histogram[i], 11u32))); + { + let _rhs = adjust; + let _lhs = &mut histogram[i]; + *_lhs = (*_lhs).wrapping_add(_rhs); + } + histogram_total = histogram_total.wrapping_add(adjust as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } + } + BrotliBuildAndStoreHuffmanTreeFast(mht, + &mut histogram[..], + histogram_total, + 8usize, + depths, + bits, + storage_ix, + storage); + { + let mut literal_ratio: usize = 0usize; + i = 0usize; + while i < 256usize { + { + if histogram[i] != 0 { + literal_ratio = + literal_ratio.wrapping_add(histogram[i].wrapping_mul(depths[(i as (usize))] as (u32)) as + (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } + literal_ratio.wrapping_mul(125usize).wrapping_div(histogram_total) + } +} +#[derive(PartialEq, Eq, Copy, Clone)] +pub enum CodeBlockState { + EMIT_REMAINDER, + EMIT_COMMANDS, + NEXT_BLOCK, +} + + + + +fn EmitInsertLen(insertlen: usize, + depth: &[u8], + bits: &[u16], + histo: &mut [u32], + storage_ix: &mut usize, + storage: &mut [u8]) { + if insertlen < 6usize { + let code: usize = insertlen.wrapping_add(40usize); + BrotliWriteBits(depth[(code as (usize))] as (usize), + bits[(code as (usize))] as (u64), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(code as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } else if insertlen < 130usize { + let tail: usize = insertlen.wrapping_sub(2usize); + let nbits: u32 = Log2FloorNonZero(tail as u64).wrapping_sub(1u32); + let prefix: usize = tail >> nbits; + let inscode: usize = ((nbits << 1i32) as (usize)).wrapping_add(prefix).wrapping_add(42usize); + BrotliWriteBits(depth[(inscode as (usize))] as (usize), + bits[(inscode as (usize))] as (u64), + storage_ix, + storage); + BrotliWriteBits(nbits as (usize), + (tail as u64).wrapping_sub((prefix as u64) << nbits), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(inscode as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } else if insertlen < 2114usize { + let tail: usize = insertlen.wrapping_sub(66usize); + let nbits: u32 = Log2FloorNonZero(tail as u64); + let code: usize = nbits.wrapping_add(50u32) as (usize); + BrotliWriteBits(depth[(code as (usize))] as (usize), + bits[(code as (usize))] as (u64), + storage_ix, + storage); + BrotliWriteBits(nbits as (usize), + (tail as u64).wrapping_sub(1 << nbits), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(code as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } else { + BrotliWriteBits(depth[(61usize)] as (usize), + bits[(61usize)] as (u64), + storage_ix, + storage); + BrotliWriteBits(12usize, + (insertlen as u64).wrapping_sub(2114u64), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(61usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } +} + +fn ShouldUseUncompressedMode(delta: isize, insertlen: usize, literal_ratio: usize) -> i32 { + let compressed: usize = delta as (usize); + if compressed.wrapping_mul(50usize) > insertlen { + 0i32 + } else if !!(literal_ratio > 980usize) { + 1i32 + } else { + 0i32 + } +} +fn RewindBitPosition(new_storage_ix: usize, storage_ix: &mut usize, storage: &mut [u8]) { + let bitpos: usize = new_storage_ix & 7usize; + let mask: usize = (1u32 << bitpos).wrapping_sub(1u32) as (usize); + { + let _rhs = mask as (u8); + let _lhs = &mut storage[((new_storage_ix >> 3i32) as (usize))]; + *_lhs = (*_lhs as (i32) & _rhs as (i32)) as (u8); + } + *storage_ix = new_storage_ix; +} + +fn EmitUncompressedMetaBlock(begin: &[u8], + len: usize, + storage_ix_start: usize, + storage_ix: &mut usize, + storage: &mut [u8]) { + RewindBitPosition(storage_ix_start, storage_ix, storage); + BrotliStoreMetaBlockHeader(len, 1i32, storage_ix, storage); + *storage_ix = (*storage_ix).wrapping_add(7u32 as (usize)) & !7u32 as (usize); + memcpy(storage, ((*storage_ix >> 3i32) as (usize)), begin, 0, len); + *storage_ix = (*storage_ix).wrapping_add(len << 3i32); + storage[((*storage_ix >> 3i32) as (usize))] = 0i32 as (u8); +} + +fn EmitLongInsertLen(insertlen: usize, + depth: &[u8], + bits: &[u16], + histo: &mut [u32], + storage_ix: &mut usize, + storage: &mut [u8]) { + if insertlen < 22594usize { + BrotliWriteBits(depth[(62usize)] as (usize), + bits[(62usize)] as (u64), + storage_ix, + storage); + BrotliWriteBits(14usize, + (insertlen as u64).wrapping_sub(6210), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(62usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } else { + BrotliWriteBits(depth[(63usize)] as (usize), + bits[(63usize)] as (u64), + storage_ix, + storage); + BrotliWriteBits(24usize, + (insertlen as u64).wrapping_sub(22594), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(63usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } +} + +fn EmitLiterals(input: &[u8], + len: usize, + depth: &[u8], + bits: &[u16], + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut j: usize; + j = 0usize; + while j < len { + { + let lit: u8 = input[(j as (usize))]; + BrotliWriteBits(depth[(lit as (usize))] as (usize), + bits[(lit as (usize))] as (u64), + storage_ix, + storage); + } + j = j.wrapping_add(1 as (usize)); + } +} + +fn EmitDistance(distance: usize, + depth: &[u8], + bits: &[u16], + histo: &mut [u32], + storage_ix: &mut usize, + storage: &mut [u8]) { + let d: u64 = distance.wrapping_add(3usize) as u64; + let nbits: u32 = Log2FloorNonZero(d as u64).wrapping_sub(1u32); + let prefix: u64 = d >> nbits & 1; + let offset: u64 = (2u64).wrapping_add(prefix) << nbits; + let distcode: u64 = ((2u32).wrapping_mul(nbits.wrapping_sub(1u32)) as (u64)) + .wrapping_add(prefix) + .wrapping_add(80u64); + BrotliWriteBits(depth[(distcode as (usize))] as (usize), + bits[(distcode as (usize))] as (u64), + storage_ix, + storage); + BrotliWriteBits(nbits as (usize), + d.wrapping_sub(offset), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(distcode as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } +} + + +fn EmitCopyLenLastDistance(copylen: usize, + depth: &[u8], + bits: &[u16], + histo: &mut [u32], + storage_ix: &mut usize, + storage: &mut [u8]) { + if copylen < 12usize { + BrotliWriteBits(depth[(copylen.wrapping_sub(4usize) as (usize))] as (usize), + bits[(copylen.wrapping_sub(4usize) as (usize))] as (u64), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(copylen.wrapping_sub(4usize) as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } else if copylen < 72usize { + let tail: usize = copylen.wrapping_sub(8usize); + let nbits: u32 = Log2FloorNonZero(tail as u64).wrapping_sub(1u32); + let prefix: usize = tail >> nbits; + let code: usize = ((nbits << 1i32) as (usize)).wrapping_add(prefix).wrapping_add(4usize); + BrotliWriteBits(depth[(code as (usize))] as (usize), + bits[(code as (usize))] as (u64), + storage_ix, + storage); + BrotliWriteBits(nbits as (usize), + tail.wrapping_sub(prefix << nbits) as u64, + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(code as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } else if copylen < 136usize { + let tail: usize = copylen.wrapping_sub(8usize); + let code: usize = (tail >> 5i32).wrapping_add(30usize); + BrotliWriteBits(depth[(code as (usize))] as (usize), + bits[(code as (usize))] as (u64), + storage_ix, + storage); + BrotliWriteBits(5usize, tail as u64 & 31, storage_ix, storage); + BrotliWriteBits(depth[(64usize)] as (usize), + bits[(64usize)] as (u64), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(code as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + { + let _rhs = 1; + let _lhs = &mut histo[(64usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } else if copylen < 2120usize { + let tail: usize = copylen.wrapping_sub(72usize); + let nbits: u32 = Log2FloorNonZero(tail as u64); + let code: usize = nbits.wrapping_add(28u32) as (usize); + BrotliWriteBits(depth[(code as (usize))] as (usize), + bits[(code as (usize))] as (u64), + storage_ix, + storage); + BrotliWriteBits(nbits as (usize), + (tail as u64).wrapping_sub(1u64 << nbits), + storage_ix, + storage); + BrotliWriteBits(depth[(64usize)] as (usize), + bits[(64usize)] as (u64), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(code as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + { + let _rhs = 1; + let _lhs = &mut histo[(64usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } else { + BrotliWriteBits(depth[(39usize)] as (usize), + bits[(39usize)] as (u64), + storage_ix, + storage); + BrotliWriteBits(24usize, + copylen.wrapping_sub(2120usize) as u64, + storage_ix, + storage); + BrotliWriteBits(depth[(64usize)] as (usize), + bits[(64usize)] as (u64), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(39usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + { + let _rhs = 1; + let _lhs = &mut histo[(64usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } +} + +fn HashBytesAtOffset(v: u64, offset: i32, shift: usize) -> u32 { + { + let h: u64 = (v >> 8i32 * offset << 24i32).wrapping_mul(kHashMul32 as (u64)); + (h >> shift) as (u32) + } +} + +fn EmitCopyLen(copylen: usize, + depth: &[u8], + bits: &[u16], + histo: &mut [u32], + storage_ix: &mut usize, + storage: &mut [u8]) { + if copylen < 10usize { + BrotliWriteBits(depth[(copylen.wrapping_add(14usize) as (usize))] as (usize), + bits[(copylen.wrapping_add(14usize) as (usize))] as (u64), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(copylen.wrapping_add(14usize) as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } else if copylen < 134usize { + let tail: usize = copylen.wrapping_sub(6usize); + let nbits: u32 = Log2FloorNonZero(tail as u64).wrapping_sub(1u32); + let prefix: usize = tail >> nbits; + let code: usize = ((nbits << 1i32) as (usize)).wrapping_add(prefix).wrapping_add(20usize); + BrotliWriteBits(depth[(code as (usize))] as (usize), + bits[(code as (usize))] as (u64), + storage_ix, + storage); + BrotliWriteBits(nbits as (usize), + (tail as u64).wrapping_sub((prefix as u64) << nbits), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(code as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } else if copylen < 2118usize { + let tail: usize = copylen.wrapping_sub(70usize); + let nbits: u32 = Log2FloorNonZero(tail as u64); + let code: usize = nbits.wrapping_add(28u32) as (usize); + BrotliWriteBits(depth[(code as (usize))] as (usize), + bits[(code as (usize))] as (u64), + storage_ix, + storage); + BrotliWriteBits(nbits as (usize), + (tail as u64).wrapping_sub(1 << nbits), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(code as (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } else { + BrotliWriteBits(depth[(39usize)] as (usize), + bits[(39usize)] as (u64), + storage_ix, + storage); + BrotliWriteBits(24usize, + (copylen as u64).wrapping_sub(2118), + storage_ix, + storage); + { + let _rhs = 1; + let _lhs = &mut histo[(39usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } +} + +fn ShouldMergeBlock(data: &[u8], len: usize, depths: &[u8]) -> i32 { + let mut histo: [usize; 256] = [0; 256]; + static kSampleRate: usize = 43usize; + let mut i: usize; + i = 0usize; + while i < len { + { + let _rhs = 1; + let _lhs = &mut histo[data[(i as (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (usize)); + } + i = i.wrapping_add(kSampleRate); + } + { + let total: usize = len.wrapping_add(kSampleRate).wrapping_sub(1usize).wrapping_div(kSampleRate); + let mut r: super::util::floatX = (FastLog2(total as u64) + 0.5 as super::util::floatX) * total as (super::util::floatX) + 200i32 as (super::util::floatX); + i = 0usize; + while i < 256usize { + { + r = r - histo[i] as (super::util::floatX) * (depths[(i as (usize))] as (super::util::floatX) + FastLog2(histo[i] as u64)); + } + i = i.wrapping_add(1 as (usize)); + } + if !!(r >= 0.0 as super::util::floatX) { 1i32 } else { 0i32 } + } +} + +fn UpdateBits(mut n_bits: usize, mut bits: u32, mut pos: usize, array: &mut [u8]) { + while n_bits > 0usize { + let byte_pos: usize = pos >> 3i32; + let n_unchanged_bits: usize = pos & 7usize; + let n_changed_bits: usize = brotli_min_size_t(n_bits, (8usize).wrapping_sub(n_unchanged_bits)); + let total_bits: usize = n_unchanged_bits.wrapping_add(n_changed_bits); + let mask: u32 = !(1u32 << total_bits).wrapping_sub(1u32) | + (1u32 << n_unchanged_bits).wrapping_sub(1u32); + let unchanged_bits: u32 = array[(byte_pos as (usize))] as (u32) & mask; + let changed_bits: u32 = bits & (1u32 << n_changed_bits).wrapping_sub(1u32); + array[(byte_pos as (usize))] = (changed_bits << n_unchanged_bits | unchanged_bits) as (u8); + n_bits = n_bits.wrapping_sub(n_changed_bits); + bits = bits >> n_changed_bits; + pos = pos.wrapping_add(n_changed_bits); + } +} + + +fn BuildAndStoreCommandPrefixCode(histogram: &[u32], + depth: &mut [u8], + bits: &mut [u16], + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut tree: [HuffmanTree; 129] = [NewHuffmanTree(0, 0, 0); 129]; + let mut cmd_depth: [u8; 704] = [0i32 as (u8); 704]; + + let mut cmd_bits: [u16; 64] = [0; 64]; + BrotliCreateHuffmanTree(&histogram[..], 64usize, 15i32, &mut tree[..], depth); + BrotliCreateHuffmanTree(&histogram[(64usize)..], + 64usize, + 14i32, + &mut tree[..], + &mut depth[(64usize)..]); + /* We have to jump through a few hoops here in order to compute + the command bits because the symbols are in a different order than in + the full alphabet. This looks complicated, but having the symbols + in this order in the command bits saves a few branches in the Emit* + functions. */ + memcpy(&mut cmd_depth[..], 0, depth, 0, 24usize); + memcpy(&mut cmd_depth[..], + 24i32 as (usize), + depth, + (40usize), + 8usize); + memcpy(&mut cmd_depth[..], + 32i32 as (usize), + depth, + (24usize), + 8usize); + memcpy(&mut cmd_depth[..], + 40i32 as (usize), + depth, + (48usize), + 8usize); + memcpy(&mut cmd_depth[..], + 48i32 as (usize), + depth, + (32usize), + 8usize); + memcpy(&mut cmd_depth[..], + 56i32 as (usize), + depth, + (56usize), + 8usize); + BrotliConvertBitDepthsToSymbols(&mut cmd_depth[..], 64usize, &mut cmd_bits[..]); + memcpy(bits, 0, &cmd_bits[..], 0, 24usize); + memcpy(bits, (24usize), &cmd_bits[..], 32i32 as (usize), 8usize); + memcpy(bits, (32usize), &cmd_bits[..], 48i32 as (usize), 8usize); + memcpy(bits, (40usize), &cmd_bits[..], 24i32 as (usize), 8usize); + memcpy(bits, (48usize), &cmd_bits[..], 40i32 as (usize), 8usize); + memcpy(bits, (56usize), &cmd_bits[..], 56i32 as (usize), 8usize); + BrotliConvertBitDepthsToSymbols(&mut depth[(64usize)..], 64usize, &mut bits[(64usize)..]); + { + let mut i: usize; + for item in cmd_depth[..64].iter_mut() { + *item = 0; + } + memcpy(&mut cmd_depth[..], 0, depth, 0, 8usize); + memcpy(&mut cmd_depth[..], + 64i32 as (usize), + depth, + (8usize), + 8usize); + memcpy(&mut cmd_depth[..], + 128i32 as (usize), + depth, + (16usize), + 8usize); + memcpy(&mut cmd_depth[..], + 192i32 as (usize), + depth, + (24usize), + 8usize); + memcpy(&mut cmd_depth[..], + 384i32 as (usize), + depth, + (32usize), + 8usize); + i = 0usize; + while i < 8usize { + { + cmd_depth[(128usize).wrapping_add((8usize).wrapping_mul(i))] = depth[i.wrapping_add(40)]; + cmd_depth[(256usize).wrapping_add((8usize).wrapping_mul(i))] = depth[i.wrapping_add(48)]; + cmd_depth[(448usize).wrapping_add((8usize).wrapping_mul(i))] = depth[i.wrapping_add(56)]; + } + i = i.wrapping_add(1 as (usize)); + } + BrotliStoreHuffmanTree(&mut cmd_depth[..], + 704usize, + &mut tree[..], + storage_ix, + storage); + } + BrotliStoreHuffmanTree(&mut depth[(64usize)..], + 64usize, + &mut tree[..], + storage_ix, + storage); +} + +#[allow(unused_assignments)] +fn BrotliCompressFragmentFastImpl>(m: &mut AllocHT, + input_ptr: &[u8], + mut input_size: usize, + is_last: i32, + table: &mut [i32], + table_bits: usize, + cmd_depth: &mut [u8], + cmd_bits: &mut [u16], + cmd_code_numbits: &mut usize, + cmd_code: &mut [u8], + storage_ix: &mut usize, + storage: &mut [u8]){ + let mut cmd_histo = [0u32; 128]; + let mut ip_end = 0usize; + let mut next_emit = 0usize; + let base_ip = 0usize; + static kFirstBlockSize: usize = (3i32 << 15i32) as (usize); + static kMergeBlockSize: usize = (1i32 << 16i32) as (usize); + let kInputMarginBytes = 16usize; + let kMinMatchLen = 5usize; + let mut metablock_start = 0usize; + let mut block_size = brotli_min_size_t(input_size, kFirstBlockSize); + let mut total_block_size = block_size; + let mut mlen_storage_ix = (*storage_ix).wrapping_add(3usize); + let mut lit_depth = [0u8; 256]; + let mut lit_bits = [0u16; 256]; + let mut literal_ratio: usize; + let mut input_index = 0usize; + let mut last_distance: i32; + let shift: usize = (64u32 as usize).wrapping_sub(table_bits); + BrotliStoreMetaBlockHeader(block_size, 0i32, storage_ix, storage); + BrotliWriteBits(13usize, 0, storage_ix, storage); + literal_ratio = BuildAndStoreLiteralPrefixCode(m, + &input_ptr[input_index..], + block_size, + &mut lit_depth[..], + &mut lit_bits[..], + storage_ix, + storage); + { + let mut i = 0usize; + while i.wrapping_add(7usize) < *cmd_code_numbits { + BrotliWriteBits(8usize, + cmd_code[i >> 3] as u64, + storage_ix, + storage); + i = i.wrapping_add(8usize); + } + } + BrotliWriteBits(*cmd_code_numbits & 7usize, + cmd_code[*cmd_code_numbits >> 3i32] as u64, + storage_ix, + storage); + let mut code_block_selection: CodeBlockState = CodeBlockState::EMIT_COMMANDS; + 'continue_to_next_block: loop { + let mut ip_index: usize; + if code_block_selection == CodeBlockState::EMIT_COMMANDS { + cmd_histo[..128].clone_from_slice(&kCmdHistoSeed[..]); + ip_index = input_index; + last_distance = -1i32; + ip_end = input_index.wrapping_add(block_size); + if block_size >= kInputMarginBytes { + let len_limit: usize = brotli_min_size_t(block_size.wrapping_sub(kMinMatchLen), + input_size.wrapping_sub(kInputMarginBytes)); + let ip_limit: usize = input_index.wrapping_add(len_limit); + let mut next_hash = Hash(&input_ptr[{ + ip_index = ip_index.wrapping_add(1usize); + ip_index + }..], + shift); + loop { + let mut skip = 32u32; + let mut next_ip = ip_index; + let mut candidate = 0usize; + loop { + { + 'break15: loop { + { + let hash = next_hash; + let bytes_between_hash_lookups: u32 = { + let _old = skip; + skip = skip.wrapping_add(1u32); + _old + } >> + 5i32; + ip_index = next_ip; + next_ip = ip_index.wrapping_add(bytes_between_hash_lookups as usize); + if next_ip > ip_limit { + code_block_selection = CodeBlockState::EMIT_REMAINDER; + break 'break15; + } + next_hash = Hash(&input_ptr[next_ip..], shift); + candidate = ip_index.wrapping_sub(last_distance as usize); + if IsMatch(&input_ptr[ip_index..], + &input_ptr[candidate..]) != 0 { + if candidate < ip_index { + table[hash as usize] = ip_index.wrapping_sub(base_ip) as i32; + break 'break15; + } + } + candidate = base_ip.wrapping_add(table[hash as usize] as usize); + table[hash as usize] = ip_index.wrapping_sub(base_ip) as i32; + } + if IsMatch(&input_ptr[ip_index..], + &input_ptr[candidate..]) != 0 { + break; + } + } + } + if !(ip_index.wrapping_sub(candidate) > + (1usize << 18i32).wrapping_sub(16usize) as isize as usize && + (code_block_selection as i32 == CodeBlockState::EMIT_COMMANDS as i32)) { + break; + } + } + if code_block_selection as i32 != CodeBlockState::EMIT_COMMANDS as i32 { + break; + } + { + let base: usize = ip_index; + let matched = (5usize) + .wrapping_add(FindMatchLengthWithLimit(&input_ptr[candidate + 5..], + &input_ptr[ip_index + 5..], + ip_end.wrapping_sub(ip_index) + .wrapping_sub(5usize))); + let distance = base.wrapping_sub(candidate) as i32; + let insert = base.wrapping_sub(next_emit); + ip_index = ip_index.wrapping_add(matched); + if insert < 6210 { + EmitInsertLen(insert, + cmd_depth, + cmd_bits, + &mut cmd_histo[..], + storage_ix, + storage); + } else if ShouldUseUncompressedMode((next_emit as isize) - + (metablock_start as isize), + insert, + literal_ratio) != 0 { + EmitUncompressedMetaBlock(&input_ptr[metablock_start..], + base.wrapping_sub(metablock_start), + mlen_storage_ix.wrapping_sub(3usize), + storage_ix, + storage); + input_size = input_size.wrapping_sub(base.wrapping_sub(input_index)); + input_index = base; + next_emit = input_index; + code_block_selection = CodeBlockState::NEXT_BLOCK; + continue 'continue_to_next_block; + } else { + EmitLongInsertLen(insert, + cmd_depth, + cmd_bits, + &mut cmd_histo[..], + storage_ix, + storage); + } + EmitLiterals(&input_ptr[(next_emit as (usize))..], + insert, + &mut lit_depth[..], + &mut lit_bits[..], + storage_ix, + storage); + if distance == last_distance { + BrotliWriteBits(cmd_depth[64] as usize, + cmd_bits[64] as u64, + storage_ix, + storage); + { + let _rhs = 1u32; + let _lhs = &mut cmd_histo[64]; + *_lhs = (*_lhs).wrapping_add(_rhs); + } + } else { + EmitDistance(distance as usize, + cmd_depth, + cmd_bits, + &mut cmd_histo[..], + storage_ix, + storage); + last_distance = distance; + } + EmitCopyLenLastDistance(matched, + cmd_depth, + cmd_bits, + &mut cmd_histo[..], + storage_ix, + storage); + next_emit = ip_index; + if ip_index >= ip_limit { + code_block_selection = CodeBlockState::EMIT_REMAINDER; + continue 'continue_to_next_block; + } + { + assert!(ip_index >= 3); + let input_bytes: u64 = BROTLI_UNALIGNED_LOAD64(&input_ptr[ip_index - 3..]); + let mut prev_hash: u32 = HashBytesAtOffset(input_bytes, 0i32, shift); + let cur_hash: u32 = HashBytesAtOffset(input_bytes, 3i32, shift); + table[prev_hash as usize] = ip_index.wrapping_sub(base_ip) + .wrapping_sub(3usize) as i32; + prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift); + table[prev_hash as usize] = ip_index.wrapping_sub(base_ip) + .wrapping_sub(2usize) as i32; + prev_hash = HashBytesAtOffset(input_bytes, 2i32, shift); + table[prev_hash as usize] = ip_index.wrapping_sub(base_ip) + .wrapping_sub(1usize) as i32; + candidate = base_ip.wrapping_add(table[cur_hash as usize] as usize); + table[cur_hash as usize] = ip_index.wrapping_sub(base_ip) as i32; + } + } + while IsMatch(&input_ptr[ip_index..], &input_ptr[candidate..]) != 0 { + let base: usize = ip_index; + let matched: usize = (5usize) + .wrapping_add(FindMatchLengthWithLimit(&input_ptr[candidate + 5..], + &input_ptr[ip_index + 5..], + ip_end.wrapping_sub(ip_index) + .wrapping_sub(5usize))); + if ip_index.wrapping_sub(candidate) > + (1usize << 18i32).wrapping_sub(16usize) { + break; + } + ip_index = ip_index.wrapping_add(matched); + last_distance = base.wrapping_sub(candidate) as i32; + EmitCopyLen(matched, + cmd_depth, + cmd_bits, + &mut cmd_histo[..], + storage_ix, + storage); + EmitDistance(last_distance as usize, + cmd_depth, + cmd_bits, + &mut cmd_histo[..], + storage_ix, + storage); + next_emit = ip_index; + if ip_index >= ip_limit { + code_block_selection = CodeBlockState::EMIT_REMAINDER; + continue 'continue_to_next_block; + } + { + assert!(ip_index >= 3); + let input_bytes: u64 = BROTLI_UNALIGNED_LOAD64(&input_ptr[ip_index as usize - + 3..]); + let mut prev_hash: u32 = HashBytesAtOffset(input_bytes, 0i32, shift); + let cur_hash: u32 = HashBytesAtOffset(input_bytes, 3i32, shift); + table[prev_hash as usize] = ip_index.wrapping_sub(base_ip) + .wrapping_sub(3usize) as i32; + prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift); + table[prev_hash as usize] = ip_index.wrapping_sub(base_ip) + .wrapping_sub(2usize) as i32; + prev_hash = HashBytesAtOffset(input_bytes, 2i32, shift); + table[prev_hash as usize] = ip_index.wrapping_sub(base_ip) + .wrapping_sub(1usize) as i32; + candidate = base_ip.wrapping_add(table[cur_hash as usize] as usize); + table[cur_hash as usize] = ip_index.wrapping_sub(base_ip) as i32; + } + } + if code_block_selection as i32 == CodeBlockState::EMIT_REMAINDER as i32 { + break; + } + if code_block_selection as i32 == CodeBlockState::EMIT_COMMANDS as i32 { + next_hash = Hash(&input_ptr[{ + ip_index = ip_index.wrapping_add(1usize); + ip_index + }..], + shift); + } + } + } + code_block_selection = CodeBlockState::EMIT_REMAINDER; + continue 'continue_to_next_block; + } else if code_block_selection as i32 == CodeBlockState::EMIT_REMAINDER as i32 { + input_index = input_index.wrapping_add(block_size); + input_size = input_size.wrapping_sub(block_size); + block_size = brotli_min_size_t(input_size, kMergeBlockSize); + if input_size > 0 && + (total_block_size.wrapping_add(block_size) <= (1i32 << 20i32) as usize) && + (ShouldMergeBlock(&input_ptr[input_index..], + block_size, + &mut lit_depth[..]) != 0) { + total_block_size = total_block_size.wrapping_add(block_size); + UpdateBits(20usize, + total_block_size.wrapping_sub(1usize) as (u32), + mlen_storage_ix, + storage); + code_block_selection = CodeBlockState::EMIT_COMMANDS; + continue 'continue_to_next_block; + } + if next_emit < ip_end { + let insert: usize = ip_end.wrapping_sub(next_emit); + if insert < 6210 { + EmitInsertLen(insert, + cmd_depth, + cmd_bits, + &mut cmd_histo[..], + storage_ix, + storage); + EmitLiterals(&input_ptr[next_emit..], + insert, + &mut lit_depth[..], + &mut lit_bits[..], + storage_ix, + storage); + } else if ShouldUseUncompressedMode(next_emit as isize - metablock_start as isize, + insert, + literal_ratio) != 0 { + EmitUncompressedMetaBlock(&input_ptr[metablock_start..], + ip_end.wrapping_sub(metablock_start), + mlen_storage_ix.wrapping_sub(3usize), + storage_ix, + storage); + } else { + EmitLongInsertLen(insert, + cmd_depth, + cmd_bits, + &mut cmd_histo[..], + storage_ix, + storage); + EmitLiterals(&input_ptr[next_emit..], + insert, + &mut lit_depth[..], + &mut lit_bits[..], + storage_ix, + storage); + } + } + next_emit = ip_end; + code_block_selection = CodeBlockState::NEXT_BLOCK; + continue 'continue_to_next_block; + } else if code_block_selection as i32 == CodeBlockState::NEXT_BLOCK as i32 { + if input_size > 0 { + metablock_start = input_index; + block_size = brotli_min_size_t(input_size, kFirstBlockSize); + total_block_size = block_size; + mlen_storage_ix = (*storage_ix).wrapping_add(3usize); + BrotliStoreMetaBlockHeader(block_size, 0i32, storage_ix, storage); + BrotliWriteBits(13usize, 0, storage_ix, storage); + literal_ratio = BuildAndStoreLiteralPrefixCode(m, + &input_ptr[(input_index as (usize))..], + block_size, + &mut lit_depth[..], + &mut lit_bits[..], + storage_ix, + storage); + BuildAndStoreCommandPrefixCode(&mut cmd_histo[..], + cmd_depth, + cmd_bits, + storage_ix, + storage); + code_block_selection = CodeBlockState::EMIT_COMMANDS; + continue 'continue_to_next_block; + } + break; + } + } + if is_last == 0 { + cmd_code[0] = 0; + *cmd_code_numbits = 0; + BuildAndStoreCommandPrefixCode(&mut cmd_histo[..], + cmd_depth, + cmd_bits, + cmd_code_numbits, + cmd_code); + } +} + +macro_rules! compress_specialization { + ($table_bits : expr, $fname: ident) => { +fn $fname>(mht: &mut AllocHT, + input: &[u8], + input_size: usize, + is_last: i32, + table: &mut [i32], + cmd_depth: &mut [u8], + cmd_bits: &mut [u16], + cmd_code_numbits: &mut usize, + cmd_code: &mut [u8], + storage_ix: &mut usize, + storage: &mut [u8]) { + BrotliCompressFragmentFastImpl(mht, + input, + input_size, + is_last, + table, + $table_bits, + cmd_depth, + cmd_bits, + cmd_code_numbits, + cmd_code, + storage_ix, + storage); +} + }; +} + +compress_specialization!(9, BrotliCompressFragmentFastImpl9); +compress_specialization!(11, BrotliCompressFragmentFastImpl11); +compress_specialization!(13, BrotliCompressFragmentFastImpl13); +compress_specialization!(15, BrotliCompressFragmentFastImpl15); + + +pub fn BrotliCompressFragmentFast>(m: &mut AllocHT, + input: &[u8], + input_size: usize, + is_last: i32, + table: &mut [i32], + table_size: usize, + cmd_depth: &mut [u8], + cmd_bits: &mut [u16], + cmd_code_numbits: &mut usize, + cmd_code: &mut [u8], + storage_ix: &mut usize, + storage: &mut [u8]){ + let initial_storage_ix: usize = *storage_ix; + let table_bits: usize = Log2FloorNonZero(table_size as u64) as (usize); + if input_size == 0usize { + 0i32; + BrotliWriteBits(1usize, 1, storage_ix, storage); + BrotliWriteBits(1usize, 1, storage_ix, storage); + *storage_ix = (*storage_ix).wrapping_add(7u32 as (usize)) & !7u32 as (usize); + return; + } + if table_bits == 9usize { + BrotliCompressFragmentFastImpl9(m, + input, + input_size, + is_last, + table, + cmd_depth, + cmd_bits, + cmd_code_numbits, + cmd_code, + storage_ix, + storage); + } + if table_bits == 11usize { + BrotliCompressFragmentFastImpl11(m, + input, + input_size, + is_last, + table, + cmd_depth, + cmd_bits, + cmd_code_numbits, + cmd_code, + storage_ix, + storage); + } + if table_bits == 13usize { + BrotliCompressFragmentFastImpl13(m, + input, + input_size, + is_last, + table, + cmd_depth, + cmd_bits, + cmd_code_numbits, + cmd_code, + storage_ix, + storage); + } + if table_bits == 15usize { + BrotliCompressFragmentFastImpl15(m, + input, + input_size, + is_last, + table, + cmd_depth, + cmd_bits, + cmd_code_numbits, + cmd_code, + storage_ix, + storage); + } + if (*storage_ix).wrapping_sub(initial_storage_ix) > (31usize).wrapping_add(input_size << 3i32) { + EmitUncompressedMetaBlock(input, input_size, initial_storage_ix, storage_ix, storage); + } + if is_last != 0 { + BrotliWriteBits(1usize, 1, storage_ix, storage); + BrotliWriteBits(1usize, 1, storage_ix, storage); + *storage_ix = (*storage_ix).wrapping_add(7u32 as (usize)) & !7u32 as (usize); + } +} diff --git a/rust/vendor/brotli/src/enc/compress_fragment_two_pass.rs b/rust/vendor/brotli/src/enc/compress_fragment_two_pass.rs new file mode 100755 index 0000000..67f46e9 --- /dev/null +++ b/rust/vendor/brotli/src/enc/compress_fragment_two_pass.rs @@ -0,0 +1,940 @@ +#![allow(dead_code)] +use super::backward_references::kHashMul32; +//use super::super::alloc::{SliceWrapper, SliceWrapperMut}; +use super::bit_cost::BitsEntropy; +use super::brotli_bit_stream::{BrotliBuildAndStoreHuffmanTreeFast, BrotliStoreHuffmanTree}; +use super::entropy_encode::{BrotliConvertBitDepthsToSymbols, BrotliCreateHuffmanTree, HuffmanTree, + NewHuffmanTree}; +use super::static_dict::{BROTLI_UNALIGNED_LOAD32, BROTLI_UNALIGNED_LOAD64, BROTLI_UNALIGNED_STORE64, + FindMatchLengthWithLimit}; +use super::super::alloc; +use super::util::{brotli_min_size_t, Log2FloorNonZero}; +use core; +static kCompressFragmentTwoPassBlockSize: usize = (1i32 << 17i32) as (usize); + +// returns number of commands inserted +fn EmitInsertLen(insertlen: u32, commands: &mut &mut [u32]) -> usize { + if insertlen < 6u32 { + (*commands)[0] = insertlen; + } else if insertlen < 130u32 { + let tail: u32 = insertlen.wrapping_sub(2u32); + let nbits: u32 = Log2FloorNonZero(tail as (u64)).wrapping_sub(1u32); + let prefix: u32 = tail >> nbits; + let inscode: u32 = (nbits << 1i32).wrapping_add(prefix).wrapping_add(2u32); + let extra: u32 = tail.wrapping_sub(prefix << nbits); + (*commands)[0] = inscode | extra << 8i32; + } else if insertlen < 2114u32 { + let tail: u32 = insertlen.wrapping_sub(66u32); + let nbits: u32 = Log2FloorNonZero(tail as (u64)); + let code: u32 = nbits.wrapping_add(10u32); + let extra: u32 = tail.wrapping_sub(1u32 << nbits); + (*commands)[0] = code | extra << 8i32; + } else if insertlen < 6210u32 { + let extra: u32 = insertlen.wrapping_sub(2114u32); + (*commands)[0] = 21u32 | extra << 8i32; + } else if insertlen < 22594u32 { + let extra: u32 = insertlen.wrapping_sub(6210u32); + (*commands)[0] = 22u32 | extra << 8i32; + } else { + let extra: u32 = insertlen.wrapping_sub(22594u32); + (*commands)[0] = 23u32 | extra << 8i32; + } + let remainder = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder[1..]); + 1 +} + +fn EmitDistance(distance: u32, commands: &mut &mut [u32]) -> usize { + let d: u32 = distance.wrapping_add(3u32); + let nbits: u32 = Log2FloorNonZero(d as (u64)).wrapping_sub(1u32); + let prefix: u32 = d >> nbits & 1u32; + let offset: u32 = (2u32).wrapping_add(prefix) << nbits; + let distcode: u32 = + (2u32).wrapping_mul(nbits.wrapping_sub(1u32)).wrapping_add(prefix).wrapping_add(80u32); + let extra: u32 = d.wrapping_sub(offset); + (*commands)[0] = distcode | extra << 8i32; + let remainder = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder[1..]); + 1 +} + +fn EmitCopyLenLastDistance(copylen: usize, commands: &mut &mut [u32]) -> usize { + if copylen < 12usize { + (*commands)[0] = copylen.wrapping_add(20usize) as (u32); + let remainder = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder[1..]); + 1 + } else if copylen < 72usize { + let tail: usize = copylen.wrapping_sub(8usize); + let nbits: usize = Log2FloorNonZero(tail as u64).wrapping_sub(1u32) as (usize); + let prefix: usize = tail >> nbits; + let code: usize = (nbits << 1i32).wrapping_add(prefix).wrapping_add(28usize); + let extra: usize = tail.wrapping_sub(prefix << nbits); + (*commands)[0] = (code | extra << 8i32) as (u32); + let remainder = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder[1..]); + 1 + } else if copylen < 136usize { + let tail: usize = copylen.wrapping_sub(8usize); + let code: usize = (tail >> 5i32).wrapping_add(54usize); + let extra: usize = tail & 31usize; + (*commands)[0] = (code | extra << 8i32) as (u32); + let remainder = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder[1..]); + (*commands)[0] = 64u32; + let remainder2 = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder2[1..]); + 2 + } else if copylen < 2120usize { + let tail: usize = copylen.wrapping_sub(72usize); + let nbits: usize = Log2FloorNonZero(tail as u64) as (usize); + let code: usize = nbits.wrapping_add(52usize); + let extra: usize = tail.wrapping_sub(1usize << nbits); + (*commands)[0] = (code | extra << 8i32) as (u32); + let remainder = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder[1..]); + (*commands)[0] = 64u32; + let remainder2 = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder2[1..]); + 2 + } else { + let extra: usize = copylen.wrapping_sub(2120usize); + (*commands)[0] = (63usize | extra << 8i32) as (u32); + let remainder = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder[1..]); + (*commands)[0] = 64u32; + let remainder2 = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder2[1..]); + 2 + } +} +fn HashBytesAtOffset(v: u64, offset: i32, shift: usize, length: usize) -> u32 { + 0i32; + 0i32; + { + let h: u64 = (v >> 8i32 * offset << ((8 - length) * 8)).wrapping_mul(kHashMul32 as (u64)); + (h >> shift) as (u32) + } +} + +fn EmitCopyLen(copylen: usize, commands: &mut &mut [u32]) -> usize { + if copylen < 10usize { + (*commands)[0] = copylen.wrapping_add(38usize) as (u32); + } else if copylen < 134usize { + let tail: usize = copylen.wrapping_sub(6usize); + let nbits: usize = Log2FloorNonZero(tail as u64).wrapping_sub(1u32) as (usize); + let prefix: usize = tail >> nbits; + let code: usize = (nbits << 1i32).wrapping_add(prefix).wrapping_add(44usize); + let extra: usize = tail.wrapping_sub(prefix << nbits); + (*commands)[0] = (code | extra << 8i32) as (u32); + } else if copylen < 2118usize { + let tail: usize = copylen.wrapping_sub(70usize); + let nbits: usize = Log2FloorNonZero(tail as u64) as (usize); + let code: usize = nbits.wrapping_add(52usize); + let extra: usize = tail.wrapping_sub(1usize << nbits); + (*commands)[0] = (code | extra << 8i32) as (u32); + } else { + let extra: usize = copylen.wrapping_sub(2118usize); + (*commands)[0] = (63usize | extra << 8i32) as (u32); + } + let remainder = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder[1..]); + 1 +} +fn Hash(p: &[u8], shift: usize, length:usize) -> u32 { + let h: u64 = (BROTLI_UNALIGNED_LOAD64(p) << ((8 - length) * 8)).wrapping_mul(kHashMul32 as (u64)); + (h >> shift) as (u32) +} + +fn IsMatch(p1: &[u8], p2: &[u8], length: usize) -> i32 { + if BROTLI_UNALIGNED_LOAD32(p1) == BROTLI_UNALIGNED_LOAD32(p2) { + if length == 4 { + return 1; + } + return + ((p1[(4usize)] as (i32) == p2[(4usize)] as (i32)) && + (p1[(5usize)] as (i32) == p2[(5usize)] as (i32))) as i32 + } + 0 +} + +#[allow(unused_assignments)] +fn CreateCommands(input_index: usize, + block_size: usize, + input_size: usize, + base_ip: &[u8], + table: &mut [i32], + table_bits: usize, + min_match: usize, + literals: &mut &mut [u8], + num_literals: &mut usize, + commands: &mut &mut [u32], + num_commands: &mut usize) { + let mut ip_index: usize = input_index; + let shift: usize = (64u32 as (usize)).wrapping_sub(table_bits); + let ip_end: usize = input_index.wrapping_add(block_size); + let mut next_emit: usize = input_index; + let mut last_distance: i32 = -1i32; + let kInputMarginBytes: usize = 16usize; + + if block_size >= kInputMarginBytes { + let len_limit: usize = brotli_min_size_t(block_size.wrapping_sub(min_match), + input_size.wrapping_sub(kInputMarginBytes)); + let ip_limit: usize = input_index.wrapping_add(len_limit); + let mut next_hash: u32; + let mut goto_emit_remainder: i32 = 0i32; + next_hash = Hash(&base_ip[({ + ip_index = ip_index.wrapping_add(1 as (usize)); + ip_index + } as (usize))..], + shift, min_match); + while goto_emit_remainder == 0 { + let mut skip: u32 = 32u32; + let mut next_ip: usize = ip_index; + let mut candidate: usize = 0; + 0i32; + loop { + { + 'break3: loop { + { + let hash: u32 = next_hash; + let bytes_between_hash_lookups: u32 = ({ + let _old = skip; + skip = skip.wrapping_add(1 as (u32)); + _old + }) >> + 5i32; + ip_index = next_ip; + 0i32; + next_ip = ip_index.wrapping_add(bytes_between_hash_lookups as (usize)); + if next_ip > ip_limit { + goto_emit_remainder = 1i32; + { + { + break 'break3; + } + } + } + next_hash = Hash(&base_ip[(next_ip as (usize))..], shift, min_match); + 0i32; + candidate = ip_index.wrapping_sub(last_distance as (usize)); + if IsMatch(&base_ip[(ip_index as (usize))..], + &base_ip[(candidate as (usize))..], min_match) != 0 { + if candidate < ip_index { + table[(hash as (usize))] = ip_index.wrapping_sub(0usize) as (i32); + { + { + break 'break3; + } + } + } + } + candidate = table[(hash as (usize))] as (usize); + 0i32; + 0i32; + table[(hash as (usize))] = ip_index.wrapping_sub(0usize) as (i32); + } + if !(IsMatch(&base_ip[(ip_index as (usize))..], + &base_ip[(candidate as (usize))..], min_match) == 0) { + break; + } + } + } + if !(ip_index.wrapping_sub(candidate) > + (1usize << 18i32).wrapping_sub(16usize) as (isize) as (usize) && + (goto_emit_remainder == 0)) { + break; + } + } + if goto_emit_remainder != 0 { + { + break; + } + } + { + let base: usize = ip_index; + let matched: usize = min_match + .wrapping_add(FindMatchLengthWithLimit(&base_ip[(candidate as (usize) + min_match)..], + &base_ip[(ip_index as (usize) + min_match)..], + ip_end.wrapping_sub(ip_index) + .wrapping_sub(min_match))); + let distance: i32 = base.wrapping_sub(candidate) as (i32); + let insert: i32 = base.wrapping_sub(next_emit) as (i32); + ip_index = ip_index.wrapping_add(matched); + 0i32; + *num_commands += EmitInsertLen(insert as (u32), commands); + (*literals)[..(insert as usize)].clone_from_slice(&base_ip[(next_emit as usize).. + ((next_emit + + insert as usize))]); + *num_literals += insert as usize; + let new_literals = core::mem::replace(literals, &mut []); + let _ = core::mem::replace(literals, &mut new_literals[(insert as usize)..]); + if distance == last_distance { + (*commands)[0] = 64u32; + let remainder = core::mem::replace(commands, &mut []); + let _ = core::mem::replace(commands, &mut remainder[1..]); + *num_commands += 1; + } else { + *num_commands += EmitDistance(distance as (u32), commands); + last_distance = distance; + } + *num_commands += EmitCopyLenLastDistance(matched, commands); + next_emit = ip_index; + if ip_index >= ip_limit { + goto_emit_remainder = 1i32; + { + { + break; + } + } + } + { + let mut input_bytes: u64; + let mut prev_hash: u32; + let cur_hash: u32; + if min_match == 4 { + input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index as (usize) - 3)..]); + cur_hash = HashBytesAtOffset(input_bytes, 3i32, shift, min_match); + prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(3usize) as (i32); + prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(2usize) as (i32); + prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(1usize) as (i32); + }else { + assert!(ip_index >= 5); + // could this be off the end FIXME + input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index as (usize) - 5)..]); + prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(5usize) as (i32); + prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(4usize) as (i32); + prev_hash = HashBytesAtOffset(input_bytes, 2i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(3usize) as (i32); + assert!(ip_index >= 2); + input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index as (usize) - 2)..]); + cur_hash = HashBytesAtOffset(input_bytes, 2i32, shift, min_match); + prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(2usize) as (i32); + prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(1usize) as (i32); + } + candidate = table[(cur_hash as (usize))] as (usize); + table[(cur_hash as (usize))] = ip_index as (i32); + } + } + while ip_index.wrapping_sub(candidate) <= + (1usize << 18i32).wrapping_sub(16usize) as (isize) as (usize) && + (IsMatch(&base_ip[(ip_index as (usize))..], + &base_ip[(candidate as (usize))..], min_match) != 0) { + let base_index: usize = ip_index; + let matched: usize = min_match + .wrapping_add(FindMatchLengthWithLimit(&base_ip[(candidate as (usize) + min_match)..], + &base_ip[(ip_index as (usize) + min_match)..], + ip_end.wrapping_sub(ip_index) + .wrapping_sub(min_match))); + ip_index = ip_index.wrapping_add(matched); + last_distance = base_index.wrapping_sub(candidate) as (i32); + 0i32; + *num_commands += EmitCopyLen(matched, commands); + *num_commands += EmitDistance(last_distance as (u32), commands); + next_emit = ip_index; + if ip_index >= ip_limit { + goto_emit_remainder = 1i32; + { + { + break; + } + } + } + { + assert!(ip_index >= 5); + let mut input_bytes: u64; + + let cur_hash: u32; + let mut prev_hash: u32; + if min_match == 4 { + input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index as (usize) - 3)..]); + cur_hash = HashBytesAtOffset(input_bytes, 3i32, shift, min_match); + prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(3usize) as (i32); + prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(2usize) as (i32); + prev_hash = HashBytesAtOffset(input_bytes, 2i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(1usize) as (i32); + } else { + input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index as (usize) - 5)..]); + prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(5usize) as (i32); + prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(4usize) as (i32); + prev_hash = HashBytesAtOffset(input_bytes, 2i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(3usize) as (i32); + assert!(ip_index >= 2); + input_bytes = BROTLI_UNALIGNED_LOAD64(&base_ip[(ip_index as (usize) - 2)..]); + cur_hash = HashBytesAtOffset(input_bytes, 2i32, shift, min_match); + prev_hash = HashBytesAtOffset(input_bytes, 0i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(2usize) as (i32); + prev_hash = HashBytesAtOffset(input_bytes, 1i32, shift, min_match); + table[(prev_hash as (usize))] = ip_index.wrapping_sub(1usize) as (i32); + } + candidate = table[(cur_hash as (usize))] as (usize); + table[(cur_hash as (usize))] = ip_index as (i32); + } + } + if goto_emit_remainder == 0 { + next_hash = Hash(&base_ip[({ + ip_index = ip_index.wrapping_add(1 as (usize)); + ip_index + } as (usize))..], + shift, min_match); + } + } + } + 0i32; + if next_emit < ip_end { + let insert: u32 = ip_end.wrapping_sub(next_emit) as (u32); + *num_commands += EmitInsertLen(insert, commands); + literals[..insert as usize].clone_from_slice(&base_ip[(next_emit as (usize)).. + (next_emit + insert as usize)]); + let mut xliterals = core::mem::replace(literals, &mut []); + *literals = &mut core::mem::replace(&mut xliterals, &mut [])[(insert as usize)..]; + *num_literals += insert as usize; + } +} + +fn ShouldCompress(input: &[u8], input_size: usize, num_literals: usize) -> i32 { + let corpus_size: super::util::floatX = input_size as (super::util::floatX); + if num_literals as (super::util::floatX) < 0.98 as super::util::floatX * corpus_size { + 1i32 + } else { + let mut literal_histo: [u32; 256] = [0; 256]; + let max_total_bit_cost: super::util::floatX = corpus_size * 8i32 as (super::util::floatX) * 0.98 as super::util::floatX / 43i32 as (super::util::floatX); + let mut i: usize; + i = 0usize; + while i < input_size { + { + let _rhs = 1; + let _lhs = &mut literal_histo[input[(i as (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + i = i.wrapping_add(43usize); + } + if !!(BitsEntropy(&mut literal_histo[..], 256usize) < max_total_bit_cost) { + 1i32 + } else { + 0i32 + } + } +} + +pub fn BrotliWriteBits(n_bits: usize, bits: u64, pos: &mut usize, array: &mut [u8]) { + let p = &mut array[((*pos >> 3i32) as (usize))..]; + let mut v: u64 = p[0] as (u64); + v = v | bits << (*pos & 7); + BROTLI_UNALIGNED_STORE64(p, v); + *pos = (*pos).wrapping_add(n_bits); +} +pub fn BrotliStoreMetaBlockHeader(len: usize, + is_uncompressed: i32, + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut nibbles: u64 = 6; + BrotliWriteBits(1, 0, storage_ix, storage); + if len <= (1u32 << 16i32) as (usize) { + nibbles = 4; + } else if len <= (1u32 << 20i32) as (usize) { + nibbles = 5; + } + BrotliWriteBits(2, nibbles.wrapping_sub(4), storage_ix, storage); + BrotliWriteBits(nibbles.wrapping_mul(4) as usize, + len.wrapping_sub(1) as u64, + storage_ix, + storage); + BrotliWriteBits(1usize, is_uncompressed as (u64), storage_ix, storage); +} + + +pub fn memcpy(dst: &mut [T], + dst_offset: usize, + src: &[T], + src_offset: usize, + size_to_copy: usize) { + dst[dst_offset..(dst_offset + size_to_copy)].clone_from_slice(&src[src_offset.. + (src_offset + size_to_copy)]); +} +fn BuildAndStoreCommandPrefixCode(histogram: &[u32], + depth: &mut [u8], + mut bits: &mut [u16], + storage_ix: &mut usize, + storage: &mut [u8]) { + let mut tree: [HuffmanTree; 129] = [NewHuffmanTree(0, 0, 0); 129]; + let mut cmd_depth: [u8; 704] = [0; 704]; + let mut cmd_bits: [u16; 64] = [0; 64]; + BrotliCreateHuffmanTree(histogram, 64usize, 15i32, &mut tree[..], depth); + BrotliCreateHuffmanTree(&histogram[(64usize)..], + 64usize, + 14i32, + &mut tree[..], + &mut depth[(64usize)..]); + /* We have to jump through a few hoops here in order to compute + the command bits because the symbols are in a different order than in + the full alphabet. This looks complicated, but having the symbols + in this order in the command bits saves a few branches in the Emit* + functions. */ + memcpy(&mut cmd_depth[..], 0, depth, 24, 24); + memcpy(&mut cmd_depth[..], 24, depth, 0, 8); + memcpy(&mut cmd_depth[..], + 32i32 as (usize), + depth, + (48usize), + 8usize); + memcpy(&mut cmd_depth[..], + 40i32 as (usize), + depth, + (8usize), + 8usize); + memcpy(&mut cmd_depth[..], + 48i32 as (usize), + depth, + (56usize), + 8usize); + memcpy(&mut cmd_depth[..], + 56i32 as (usize), + depth, + (16usize), + 8usize); + BrotliConvertBitDepthsToSymbols(&mut cmd_depth[..], 64usize, &mut cmd_bits[..]); + memcpy(&mut bits, 0, &cmd_bits[..], 24i32 as (usize), 16usize); + memcpy(&mut bits, + (8usize), + &cmd_bits[..], + 40i32 as (usize), + 8usize); + memcpy(&mut bits, + (16usize), + &cmd_bits[..], + 56i32 as (usize), + 8usize); + memcpy(&mut bits, (24usize), &cmd_bits[..], 0, 48usize); + memcpy(&mut bits, + (48usize), + &cmd_bits[..], + 32i32 as (usize), + 8usize); + memcpy(&mut bits, + (56usize), + &cmd_bits[..], + 48i32 as (usize), + 8usize); + BrotliConvertBitDepthsToSymbols(&mut depth[(64usize)..], 64usize, &mut bits[(64usize)..]); + { + let mut i: usize; + for item in cmd_depth[..64].iter_mut() { + *item = 0; + } + //memset(&mut cmd_depth[..], 0i32, 64usize); + memcpy(&mut cmd_depth[..], 0, depth, (24usize), 8usize); + memcpy(&mut cmd_depth[..], + 64i32 as (usize), + depth, + (32usize), + 8usize); + memcpy(&mut cmd_depth[..], + 128i32 as (usize), + depth, + (40usize), + 8usize); + memcpy(&mut cmd_depth[..], + 192i32 as (usize), + depth, + (48usize), + 8usize); + memcpy(&mut cmd_depth[..], + 384i32 as (usize), + depth, + (56usize), + 8usize); + i = 0usize; + while i < 8usize { + { + cmd_depth[(128usize).wrapping_add((8usize).wrapping_mul(i))] = depth[(i as (usize))]; + cmd_depth[(256usize).wrapping_add((8usize).wrapping_mul(i))] = depth[i.wrapping_add(8)]; + cmd_depth[(448usize).wrapping_add((8usize).wrapping_mul(i))] = depth[i.wrapping_add(16)]; + } + i = i.wrapping_add(1 as (usize)); + } + BrotliStoreHuffmanTree(&mut cmd_depth[..], + 704usize, + &mut tree[..], + storage_ix, + storage); + } + BrotliStoreHuffmanTree(&mut depth[(64usize)..], + 64usize, + &mut tree[..], + storage_ix, + storage); +} + +fn StoreCommands>(mht: &mut AllocHT, + mut literals: &[u8], + num_literals: usize, + commands: &[u32], + num_commands: usize, + storage_ix: &mut usize, + storage: &mut [u8]) { + static kNumExtraBits: [u32; 128] = + [0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 1u32, 1u32, 2u32, 2u32, 3u32, 3u32, 4u32, 4u32, 5u32, + 5u32, 6u32, 7u32, 8u32, 9u32, 10u32, 12u32, 14u32, 24u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 1u32, 1u32, 2u32, 2u32, 3u32, 3u32, 4u32, 4u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 1u32, 1u32, 2u32, 2u32, 3u32, 3u32, 4u32, 4u32, 5u32, 5u32, 6u32, 7u32, + 8u32, 9u32, 10u32, 24u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 1u32, 1u32, 2u32, 2u32, 3u32, 3u32, 4u32, 4u32, 5u32, 5u32, + 6u32, 6u32, 7u32, 7u32, 8u32, 8u32, 9u32, 9u32, 10u32, 10u32, 11u32, 11u32, 12u32, 12u32, + 13u32, 13u32, 14u32, 14u32, 15u32, 15u32, 16u32, 16u32, 17u32, 17u32, 18u32, 18u32, 19u32, + 19u32, 20u32, 20u32, 21u32, 21u32, 22u32, 22u32, 23u32, 23u32, 24u32, 24u32]; + static kInsertOffset: [u32; 24] = [0u32, 1u32, 2u32, 3u32, 4u32, 5u32, 6u32, 8u32, 10u32, 14u32, + 18u32, 26u32, 34u32, 50u32, 66u32, 98u32, 130u32, 194u32, + 322u32, 578u32, 1090u32, 2114u32, 6210u32, 22594u32]; + let mut lit_depths: [u8; 256] = [0; 256]; + let mut lit_bits: [u16; 256] = [0; 256]; // maybe return this instead + let mut lit_histo: [u32; 256] = [0; 256]; // maybe return this instead of init + let mut cmd_depths: [u8; 128] = [0; 128]; + let mut cmd_bits: [u16; 128] = [0; 128]; + let mut cmd_histo: [u32; 128] = [0; 128]; + let mut i: usize; + i = 0usize; + while i < num_literals { + { + let _rhs = 1; + let _lhs = &mut lit_histo[literals[(i as (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + i = i.wrapping_add(1 as (usize)); + } + BrotliBuildAndStoreHuffmanTreeFast(mht, + &lit_histo[..], + num_literals, + 8usize, + &mut lit_depths[..], + &mut lit_bits[..], + storage_ix, + storage); + i = 0usize; + while i < num_commands { + { + let code: u32 = commands[(i as (usize))] & 0xffu32; + 0i32; + { + let _rhs = 1; + let _lhs = &mut cmd_histo[code as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + } + i = i.wrapping_add(1 as (usize)); + } + { + let _rhs = 1i32; + let _lhs = &mut cmd_histo[1usize]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + { + let _rhs = 1i32; + let _lhs = &mut cmd_histo[2usize]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + { + let _rhs = 1i32; + let _lhs = &mut cmd_histo[64usize]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + { + let _rhs = 1i32; + let _lhs = &mut cmd_histo[84usize]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + BuildAndStoreCommandPrefixCode(&mut cmd_histo[..], + &mut cmd_depths[..], + &mut cmd_bits[..], + storage_ix, + storage); + i = 0usize; + while i < num_commands { + { + let cmd: u32 = commands[(i as (usize))]; + let code: u32 = cmd & 0xffu32; + let extra: u32 = cmd >> 8i32; + 0i32; + BrotliWriteBits(cmd_depths[code as (usize)] as (usize), + cmd_bits[code as (usize)] as (u64), + storage_ix, + storage); + BrotliWriteBits(kNumExtraBits[code as (usize)] as (usize), + extra as (u64), + storage_ix, + storage); + if code < 24u32 { + let insert: u32 = kInsertOffset[code as (usize)].wrapping_add(extra); + for literal in literals[..(insert as usize)].iter() { + let lit: u8 = *literal; + BrotliWriteBits(lit_depths[lit as (usize)] as (usize), + lit_bits[lit as (usize)] as (u64), + storage_ix, + storage); + } + literals = &literals[insert as usize..]; + } + } + i = i.wrapping_add(1 as (usize)); + } +} +fn EmitUncompressedMetaBlock(input: &[u8], + input_size: usize, + storage_ix: &mut usize, + storage: &mut [u8]) { + BrotliStoreMetaBlockHeader(input_size, 1i32, storage_ix, storage); + *storage_ix = (*storage_ix).wrapping_add(7u32 as (usize)) & !7u32 as (usize); + memcpy(storage, + ((*storage_ix >> 3i32) as (usize)), + input, + 0, + input_size); + *storage_ix = (*storage_ix).wrapping_add(input_size << 3i32); + storage[((*storage_ix >> 3i32) as (usize))] = 0i32 as (u8); +} +#[allow(unused_variables)] +#[inline(always)] +fn BrotliCompressFragmentTwoPassImpl>(m: &mut AllocHT, + base_ip: &[u8], + mut input_size: usize, + is_last: i32, + command_buf: &mut [u32], + literal_buf: &mut [u8], + table: &mut [i32], + table_bits: usize, + min_match: usize, + storage_ix: &mut usize, + storage: &mut [u8]){ + let mut input_index: usize = 0usize; + while input_size > 0usize { + let block_size: usize = brotli_min_size_t(input_size, kCompressFragmentTwoPassBlockSize); + let mut num_literals: usize = 0; + let mut num_commands: usize = 0; + { + let mut literals = &mut literal_buf[..]; + let mut commands = &mut command_buf[..]; + CreateCommands(input_index, + block_size, + input_size, + base_ip, + table, + table_bits, + min_match, + &mut literals, + &mut num_literals, + &mut commands, + &mut num_commands); + } + if ShouldCompress(&base_ip[(input_index as (usize))..], + block_size, + num_literals) != 0 { + BrotliStoreMetaBlockHeader(block_size, 0i32, storage_ix, storage); + BrotliWriteBits(13usize, 0, storage_ix, storage); + StoreCommands(m, + literal_buf, + num_literals, + command_buf, + num_commands, + storage_ix, + storage); + } else { + EmitUncompressedMetaBlock(&base_ip[(input_index as (usize))..], + block_size, + storage_ix, + storage); + } + input_index = input_index.wrapping_add(block_size); + input_size = input_size.wrapping_sub(block_size); + } +} +macro_rules! compress_specialization { + ($table_bits : expr, $fname: ident) => { + fn $fname>(mht: &mut AllocHT, + input: &[u8], + input_size: usize, + is_last: i32, + command_buf: &mut [u32], + literal_buf: &mut [u8], + table: &mut [i32], + storage_ix: &mut usize, + storage: &mut [u8]) { + let min_match = if $table_bits < 15 {4} else {6}; + BrotliCompressFragmentTwoPassImpl(mht, + input, + input_size, + is_last, + command_buf, + literal_buf, + table, + $table_bits, + min_match, + storage_ix, + storage); + } + }; +} +compress_specialization!(8, BrotliCompressFragmentTwoPassImpl8); +compress_specialization!(9, BrotliCompressFragmentTwoPassImpl9); +compress_specialization!(10, BrotliCompressFragmentTwoPassImpl10); +compress_specialization!(11, BrotliCompressFragmentTwoPassImpl11); +compress_specialization!(12, BrotliCompressFragmentTwoPassImpl12); +compress_specialization!(13, BrotliCompressFragmentTwoPassImpl13); +compress_specialization!(14, BrotliCompressFragmentTwoPassImpl14); +compress_specialization!(15, BrotliCompressFragmentTwoPassImpl15); +compress_specialization!(16, BrotliCompressFragmentTwoPassImpl16); +compress_specialization!(17, BrotliCompressFragmentTwoPassImpl17); + +fn RewindBitPosition(new_storage_ix: usize, storage_ix: &mut usize, storage: &mut [u8]) { + let bitpos: usize = new_storage_ix & 7usize; + let mask: usize = (1u32 << bitpos).wrapping_sub(1u32) as (usize); + { + let _rhs = mask as (u8); + let _lhs = &mut storage[((new_storage_ix >> 3i32) as (usize))]; + *_lhs = (*_lhs as (i32) & _rhs as (i32)) as (u8); + } + *storage_ix = new_storage_ix; +} + +pub fn BrotliCompressFragmentTwoPass>(m: &mut AllocHT, + input: &[u8], + input_size: usize, + is_last: i32, + command_buf: &mut [u32], + literal_buf: &mut [u8], + table: &mut [i32], + table_size: usize, + storage_ix: &mut usize, + storage: &mut [u8]){ + let initial_storage_ix: usize = *storage_ix; + let table_bits: usize = Log2FloorNonZero(table_size as u64) as (usize); + if table_bits == 8usize { + BrotliCompressFragmentTwoPassImpl8(m, + input, + input_size, + is_last, + command_buf, + literal_buf, + table, + storage_ix, + storage); + } + if table_bits == 9usize { + BrotliCompressFragmentTwoPassImpl9(m, + input, + input_size, + is_last, + command_buf, + literal_buf, + table, + storage_ix, + storage); + } + if table_bits == 10usize { + BrotliCompressFragmentTwoPassImpl10(m, + input, + input_size, + is_last, + command_buf, + literal_buf, + table, + storage_ix, + storage); + } + if table_bits == 11usize { + BrotliCompressFragmentTwoPassImpl11(m, + input, + input_size, + is_last, + command_buf, + literal_buf, + table, + storage_ix, + storage); + } + if table_bits == 12usize { + BrotliCompressFragmentTwoPassImpl12(m, + input, + input_size, + is_last, + command_buf, + literal_buf, + table, + storage_ix, + storage); + } + if table_bits == 13usize { + BrotliCompressFragmentTwoPassImpl13(m, + input, + input_size, + is_last, + command_buf, + literal_buf, + table, + storage_ix, + storage); + } + if table_bits == 14usize { + BrotliCompressFragmentTwoPassImpl14(m, + input, + input_size, + is_last, + command_buf, + literal_buf, + table, + storage_ix, + storage); + } + if table_bits == 15usize { + BrotliCompressFragmentTwoPassImpl15(m, + input, + input_size, + is_last, + command_buf, + literal_buf, + table, + storage_ix, + storage); + } + if table_bits == 16usize { + BrotliCompressFragmentTwoPassImpl16(m, + input, + input_size, + is_last, + command_buf, + literal_buf, + table, + storage_ix, + storage); + } + if table_bits == 17usize { + BrotliCompressFragmentTwoPassImpl17(m, + input, + input_size, + is_last, + command_buf, + literal_buf, + table, + storage_ix, + storage); + } + if (*storage_ix).wrapping_sub(initial_storage_ix) > (31usize).wrapping_add(input_size << 3i32) { + RewindBitPosition(initial_storage_ix, storage_ix, storage); + EmitUncompressedMetaBlock(input, input_size, storage_ix, storage); + } + if is_last != 0 { + BrotliWriteBits(1, 1, storage_ix, storage); + BrotliWriteBits(1, 1, storage_ix, storage); + *storage_ix = (*storage_ix).wrapping_add(7u32 as (usize)) & !7u32 as (usize); + } +} diff --git a/rust/vendor/brotli/src/enc/constants.rs b/rust/vendor/brotli/src/enc/constants.rs new file mode 100755 index 0000000..a579fb6 --- /dev/null +++ b/rust/vendor/brotli/src/enc/constants.rs @@ -0,0 +1,3300 @@ +#![allow(dead_code)] +pub const BROTLI_NUM_BLOCK_LEN_SYMBOLS: usize = 26; +pub static kInsBase: [u32; 24] = [0u32, 1u32, 2u32, 3u32, 4u32, 5u32, 6u32, 8u32, 10u32, 14u32, + 18u32, 26u32, 34u32, 50u32, 66u32, 98u32, 130u32, 194u32, + 322u32, 578u32, 1090u32, 2114u32, 6210u32, 22594u32]; + +pub static kInsExtra: [u32; 24] = [0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 1u32, 1u32, 2u32, 2u32, + 3u32, 3u32, 4u32, 4u32, 5u32, 5u32, 6u32, 7u32, 8u32, 9u32, + 10u32, 12u32, 14u32, 24u32]; + +pub static kCopyBase: [u32; 24] = [2u32, 3u32, 4u32, 5u32, 6u32, 7u32, 8u32, 9u32, 10u32, 12u32, + 14u32, 18u32, 22u32, 30u32, 38u32, 54u32, 70u32, 102u32, + 134u32, 198u32, 326u32, 582u32, 1094u32, 2118u32]; + +pub static kCopyExtra: [u32; 24] = [0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 1u32, 1u32, + 2u32, 2u32, 3u32, 3u32, 4u32, 4u32, 5u32, 5u32, 6u32, 7u32, + 8u32, 9u32, 10u32, 24u32]; + +/* Common context lookup table for all context modes. */ +static kContextLookup:[u8;2048] = [ + /* CONTEXT_LSB6, last byte. */ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + + /* CONTEXT_LSB6, second last byte, */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + /* CONTEXT_MSB6, last byte. */ + 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, + 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, + 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, + 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, + 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, + 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, + 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, + 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, + 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, + 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, + 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, + 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, + 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, + 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, + 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, + + /* CONTEXT_MSB6, second last byte, */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + /* CONTEXT_UTF8, last byte. */ + /* ASCII range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12, + 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, + 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, + 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, + 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, + /* UTF8 continuation byte range. */ + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + /* UTF8 lead byte range. */ + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + + /* CONTEXT_UTF8 second last byte. */ + /* ASCII range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, + /* UTF8 continuation byte range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + /* UTF8 lead byte range. */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + + /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ + 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56, + + /* CONTEXT_SIGNED, second last byte. */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, +]; +pub const BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS:usize = 544; +pub const BROTLI_NUM_LITERAL_SYMBOLS:usize = 256; +pub const BROTLI_NUM_COMMAND_SYMBOLS:usize = 704; +pub const BROTLI_WINDOW_GAP: usize = 16; +pub const BROTLI_MAX_NPOSTFIX:usize = 3; +pub const BROTLI_MAX_NDIRECT:usize = 120; +#[inline(always)] +pub fn BROTLI_CONTEXT_LUT(mode: super::histogram::ContextType)->&'static[u8] { + &kContextLookup[((mode as usize) << 9)..] +} +pub fn BROTLI_CONTEXT(P1: u8, P2:u8, LUT:&[u8])->u8 { + (LUT)[P1 as usize] | ((LUT)[256 + P2 as usize]) +} +pub static kZeroRepsBits: [usize; 704] = [0x0usize, + 0x0usize, + 0x0usize, + 0x7usize, + 0x17usize, + 0x27usize, + 0x37usize, + 0x47usize, + 0x57usize, + 0x67usize, + 0x77usize, + 0x770usize, + 0xb87usize, + 0x1387usize, + 0x1b87usize, + 0x2387usize, + 0x2b87usize, + 0x3387usize, + 0x3b87usize, + 0x397usize, + 0xb97usize, + 0x1397usize, + 0x1b97usize, + 0x2397usize, + 0x2b97usize, + 0x3397usize, + 0x3b97usize, + 0x3a7usize, + 0xba7usize, + 0x13a7usize, + 0x1ba7usize, + 0x23a7usize, + 0x2ba7usize, + 0x33a7usize, + 0x3ba7usize, + 0x3b7usize, + 0xbb7usize, + 0x13b7usize, + 0x1bb7usize, + 0x23b7usize, + 0x2bb7usize, + 0x33b7usize, + 0x3bb7usize, + 0x3c7usize, + 0xbc7usize, + 0x13c7usize, + 0x1bc7usize, + 0x23c7usize, + 0x2bc7usize, + 0x33c7usize, + 0x3bc7usize, + 0x3d7usize, + 0xbd7usize, + 0x13d7usize, + 0x1bd7usize, + 0x23d7usize, + 0x2bd7usize, + 0x33d7usize, + 0x3bd7usize, + 0x3e7usize, + 0xbe7usize, + 0x13e7usize, + 0x1be7usize, + 0x23e7usize, + 0x2be7usize, + 0x33e7usize, + 0x3be7usize, + 0x3f7usize, + 0xbf7usize, + 0x13f7usize, + 0x1bf7usize, + 0x23f7usize, + 0x2bf7usize, + 0x33f7usize, + 0x3bf7usize, + 0x1c387usize, + 0x5c387usize, + 0x9c387usize, + 0xdc387usize, + 0x11c387usize, + 0x15c387usize, + 0x19c387usize, + 0x1dc387usize, + 0x1cb87usize, + 0x5cb87usize, + 0x9cb87usize, + 0xdcb87usize, + 0x11cb87usize, + 0x15cb87usize, + 0x19cb87usize, + 0x1dcb87usize, + 0x1d387usize, + 0x5d387usize, + 0x9d387usize, + 0xdd387usize, + 0x11d387usize, + 0x15d387usize, + 0x19d387usize, + 0x1dd387usize, + 0x1db87usize, + 0x5db87usize, + 0x9db87usize, + 0xddb87usize, + 0x11db87usize, + 0x15db87usize, + 0x19db87usize, + 0x1ddb87usize, + 0x1e387usize, + 0x5e387usize, + 0x9e387usize, + 0xde387usize, + 0x11e387usize, + 0x15e387usize, + 0x19e387usize, + 0x1de387usize, + 0x1eb87usize, + 0x5eb87usize, + 0x9eb87usize, + 0xdeb87usize, + 0x11eb87usize, + 0x15eb87usize, + 0x19eb87usize, + 0x1deb87usize, + 0x1f387usize, + 0x5f387usize, + 0x9f387usize, + 0xdf387usize, + 0x11f387usize, + 0x15f387usize, + 0x19f387usize, + 0x1df387usize, + 0x1fb87usize, + 0x5fb87usize, + 0x9fb87usize, + 0xdfb87usize, + 0x11fb87usize, + 0x15fb87usize, + 0x19fb87usize, + 0x1dfb87usize, + 0x1c397usize, + 0x5c397usize, + 0x9c397usize, + 0xdc397usize, + 0x11c397usize, + 0x15c397usize, + 0x19c397usize, + 0x1dc397usize, + 0x1cb97usize, + 0x5cb97usize, + 0x9cb97usize, + 0xdcb97usize, + 0x11cb97usize, + 0x15cb97usize, + 0x19cb97usize, + 0x1dcb97usize, + 0x1d397usize, + 0x5d397usize, + 0x9d397usize, + 0xdd397usize, + 0x11d397usize, + 0x15d397usize, + 0x19d397usize, + 0x1dd397usize, + 0x1db97usize, + 0x5db97usize, + 0x9db97usize, + 0xddb97usize, + 0x11db97usize, + 0x15db97usize, + 0x19db97usize, + 0x1ddb97usize, + 0x1e397usize, + 0x5e397usize, + 0x9e397usize, + 0xde397usize, + 0x11e397usize, + 0x15e397usize, + 0x19e397usize, + 0x1de397usize, + 0x1eb97usize, + 0x5eb97usize, + 0x9eb97usize, + 0xdeb97usize, + 0x11eb97usize, + 0x15eb97usize, + 0x19eb97usize, + 0x1deb97usize, + 0x1f397usize, + 0x5f397usize, + 0x9f397usize, + 0xdf397usize, + 0x11f397usize, + 0x15f397usize, + 0x19f397usize, + 0x1df397usize, + 0x1fb97usize, + 0x5fb97usize, + 0x9fb97usize, + 0xdfb97usize, + 0x11fb97usize, + 0x15fb97usize, + 0x19fb97usize, + 0x1dfb97usize, + 0x1c3a7usize, + 0x5c3a7usize, + 0x9c3a7usize, + 0xdc3a7usize, + 0x11c3a7usize, + 0x15c3a7usize, + 0x19c3a7usize, + 0x1dc3a7usize, + 0x1cba7usize, + 0x5cba7usize, + 0x9cba7usize, + 0xdcba7usize, + 0x11cba7usize, + 0x15cba7usize, + 0x19cba7usize, + 0x1dcba7usize, + 0x1d3a7usize, + 0x5d3a7usize, + 0x9d3a7usize, + 0xdd3a7usize, + 0x11d3a7usize, + 0x15d3a7usize, + 0x19d3a7usize, + 0x1dd3a7usize, + 0x1dba7usize, + 0x5dba7usize, + 0x9dba7usize, + 0xddba7usize, + 0x11dba7usize, + 0x15dba7usize, + 0x19dba7usize, + 0x1ddba7usize, + 0x1e3a7usize, + 0x5e3a7usize, + 0x9e3a7usize, + 0xde3a7usize, + 0x11e3a7usize, + 0x15e3a7usize, + 0x19e3a7usize, + 0x1de3a7usize, + 0x1eba7usize, + 0x5eba7usize, + 0x9eba7usize, + 0xdeba7usize, + 0x11eba7usize, + 0x15eba7usize, + 0x19eba7usize, + 0x1deba7usize, + 0x1f3a7usize, + 0x5f3a7usize, + 0x9f3a7usize, + 0xdf3a7usize, + 0x11f3a7usize, + 0x15f3a7usize, + 0x19f3a7usize, + 0x1df3a7usize, + 0x1fba7usize, + 0x5fba7usize, + 0x9fba7usize, + 0xdfba7usize, + 0x11fba7usize, + 0x15fba7usize, + 0x19fba7usize, + 0x1dfba7usize, + 0x1c3b7usize, + 0x5c3b7usize, + 0x9c3b7usize, + 0xdc3b7usize, + 0x11c3b7usize, + 0x15c3b7usize, + 0x19c3b7usize, + 0x1dc3b7usize, + 0x1cbb7usize, + 0x5cbb7usize, + 0x9cbb7usize, + 0xdcbb7usize, + 0x11cbb7usize, + 0x15cbb7usize, + 0x19cbb7usize, + 0x1dcbb7usize, + 0x1d3b7usize, + 0x5d3b7usize, + 0x9d3b7usize, + 0xdd3b7usize, + 0x11d3b7usize, + 0x15d3b7usize, + 0x19d3b7usize, + 0x1dd3b7usize, + 0x1dbb7usize, + 0x5dbb7usize, + 0x9dbb7usize, + 0xddbb7usize, + 0x11dbb7usize, + 0x15dbb7usize, + 0x19dbb7usize, + 0x1ddbb7usize, + 0x1e3b7usize, + 0x5e3b7usize, + 0x9e3b7usize, + 0xde3b7usize, + 0x11e3b7usize, + 0x15e3b7usize, + 0x19e3b7usize, + 0x1de3b7usize, + 0x1ebb7usize, + 0x5ebb7usize, + 0x9ebb7usize, + 0xdebb7usize, + 0x11ebb7usize, + 0x15ebb7usize, + 0x19ebb7usize, + 0x1debb7usize, + 0x1f3b7usize, + 0x5f3b7usize, + 0x9f3b7usize, + 0xdf3b7usize, + 0x11f3b7usize, + 0x15f3b7usize, + 0x19f3b7usize, + 0x1df3b7usize, + 0x1fbb7usize, + 0x5fbb7usize, + 0x9fbb7usize, + 0xdfbb7usize, + 0x11fbb7usize, + 0x15fbb7usize, + 0x19fbb7usize, + 0x1dfbb7usize, + 0x1c3c7usize, + 0x5c3c7usize, + 0x9c3c7usize, + 0xdc3c7usize, + 0x11c3c7usize, + 0x15c3c7usize, + 0x19c3c7usize, + 0x1dc3c7usize, + 0x1cbc7usize, + 0x5cbc7usize, + 0x9cbc7usize, + 0xdcbc7usize, + 0x11cbc7usize, + 0x15cbc7usize, + 0x19cbc7usize, + 0x1dcbc7usize, + 0x1d3c7usize, + 0x5d3c7usize, + 0x9d3c7usize, + 0xdd3c7usize, + 0x11d3c7usize, + 0x15d3c7usize, + 0x19d3c7usize, + 0x1dd3c7usize, + 0x1dbc7usize, + 0x5dbc7usize, + 0x9dbc7usize, + 0xddbc7usize, + 0x11dbc7usize, + 0x15dbc7usize, + 0x19dbc7usize, + 0x1ddbc7usize, + 0x1e3c7usize, + 0x5e3c7usize, + 0x9e3c7usize, + 0xde3c7usize, + 0x11e3c7usize, + 0x15e3c7usize, + 0x19e3c7usize, + 0x1de3c7usize, + 0x1ebc7usize, + 0x5ebc7usize, + 0x9ebc7usize, + 0xdebc7usize, + 0x11ebc7usize, + 0x15ebc7usize, + 0x19ebc7usize, + 0x1debc7usize, + 0x1f3c7usize, + 0x5f3c7usize, + 0x9f3c7usize, + 0xdf3c7usize, + 0x11f3c7usize, + 0x15f3c7usize, + 0x19f3c7usize, + 0x1df3c7usize, + 0x1fbc7usize, + 0x5fbc7usize, + 0x9fbc7usize, + 0xdfbc7usize, + 0x11fbc7usize, + 0x15fbc7usize, + 0x19fbc7usize, + 0x1dfbc7usize, + 0x1c3d7usize, + 0x5c3d7usize, + 0x9c3d7usize, + 0xdc3d7usize, + 0x11c3d7usize, + 0x15c3d7usize, + 0x19c3d7usize, + 0x1dc3d7usize, + 0x1cbd7usize, + 0x5cbd7usize, + 0x9cbd7usize, + 0xdcbd7usize, + 0x11cbd7usize, + 0x15cbd7usize, + 0x19cbd7usize, + 0x1dcbd7usize, + 0x1d3d7usize, + 0x5d3d7usize, + 0x9d3d7usize, + 0xdd3d7usize, + 0x11d3d7usize, + 0x15d3d7usize, + 0x19d3d7usize, + 0x1dd3d7usize, + 0x1dbd7usize, + 0x5dbd7usize, + 0x9dbd7usize, + 0xddbd7usize, + 0x11dbd7usize, + 0x15dbd7usize, + 0x19dbd7usize, + 0x1ddbd7usize, + 0x1e3d7usize, + 0x5e3d7usize, + 0x9e3d7usize, + 0xde3d7usize, + 0x11e3d7usize, + 0x15e3d7usize, + 0x19e3d7usize, + 0x1de3d7usize, + 0x1ebd7usize, + 0x5ebd7usize, + 0x9ebd7usize, + 0xdebd7usize, + 0x11ebd7usize, + 0x15ebd7usize, + 0x19ebd7usize, + 0x1debd7usize, + 0x1f3d7usize, + 0x5f3d7usize, + 0x9f3d7usize, + 0xdf3d7usize, + 0x11f3d7usize, + 0x15f3d7usize, + 0x19f3d7usize, + 0x1df3d7usize, + 0x1fbd7usize, + 0x5fbd7usize, + 0x9fbd7usize, + 0xdfbd7usize, + 0x11fbd7usize, + 0x15fbd7usize, + 0x19fbd7usize, + 0x1dfbd7usize, + 0x1c3e7usize, + 0x5c3e7usize, + 0x9c3e7usize, + 0xdc3e7usize, + 0x11c3e7usize, + 0x15c3e7usize, + 0x19c3e7usize, + 0x1dc3e7usize, + 0x1cbe7usize, + 0x5cbe7usize, + 0x9cbe7usize, + 0xdcbe7usize, + 0x11cbe7usize, + 0x15cbe7usize, + 0x19cbe7usize, + 0x1dcbe7usize, + 0x1d3e7usize, + 0x5d3e7usize, + 0x9d3e7usize, + 0xdd3e7usize, + 0x11d3e7usize, + 0x15d3e7usize, + 0x19d3e7usize, + 0x1dd3e7usize, + 0x1dbe7usize, + 0x5dbe7usize, + 0x9dbe7usize, + 0xddbe7usize, + 0x11dbe7usize, + 0x15dbe7usize, + 0x19dbe7usize, + 0x1ddbe7usize, + 0x1e3e7usize, + 0x5e3e7usize, + 0x9e3e7usize, + 0xde3e7usize, + 0x11e3e7usize, + 0x15e3e7usize, + 0x19e3e7usize, + 0x1de3e7usize, + 0x1ebe7usize, + 0x5ebe7usize, + 0x9ebe7usize, + 0xdebe7usize, + 0x11ebe7usize, + 0x15ebe7usize, + 0x19ebe7usize, + 0x1debe7usize, + 0x1f3e7usize, + 0x5f3e7usize, + 0x9f3e7usize, + 0xdf3e7usize, + 0x11f3e7usize, + 0x15f3e7usize, + 0x19f3e7usize, + 0x1df3e7usize, + 0x1fbe7usize, + 0x5fbe7usize, + 0x9fbe7usize, + 0xdfbe7usize, + 0x11fbe7usize, + 0x15fbe7usize, + 0x19fbe7usize, + 0x1dfbe7usize, + 0x1c3f7usize, + 0x5c3f7usize, + 0x9c3f7usize, + 0xdc3f7usize, + 0x11c3f7usize, + 0x15c3f7usize, + 0x19c3f7usize, + 0x1dc3f7usize, + 0x1cbf7usize, + 0x5cbf7usize, + 0x9cbf7usize, + 0xdcbf7usize, + 0x11cbf7usize, + 0x15cbf7usize, + 0x19cbf7usize, + 0x1dcbf7usize, + 0x1d3f7usize, + 0x5d3f7usize, + 0x9d3f7usize, + 0xdd3f7usize, + 0x11d3f7usize, + 0x15d3f7usize, + 0x19d3f7usize, + 0x1dd3f7usize, + 0x1dbf7usize, + 0x5dbf7usize, + 0x9dbf7usize, + 0xddbf7usize, + 0x11dbf7usize, + 0x15dbf7usize, + 0x19dbf7usize, + 0x1ddbf7usize, + 0x1e3f7usize, + 0x5e3f7usize, + 0x9e3f7usize, + 0xde3f7usize, + 0x11e3f7usize, + 0x15e3f7usize, + 0x19e3f7usize, + 0x1de3f7usize, + 0x1ebf7usize, + 0x5ebf7usize, + 0x9ebf7usize, + 0xdebf7usize, + 0x11ebf7usize, + 0x15ebf7usize, + 0x19ebf7usize, + 0x1debf7usize, + 0x1f3f7usize, + 0x5f3f7usize, + 0x9f3f7usize, + 0xdf3f7usize, + 0x11f3f7usize, + 0x15f3f7usize, + 0x19f3f7usize, + 0x1df3f7usize, + 0x1fbf7usize, + 0x5fbf7usize, + 0x9fbf7usize, + 0xdfbf7usize, + 0x11fbf7usize, + 0x15fbf7usize, + 0x19fbf7usize, + 0x1dfbf7usize, + 0xe1c387usize, + 0x2e1c387usize, + 0x4e1c387usize, + 0x6e1c387usize, + 0x8e1c387usize, + 0xae1c387usize, + 0xce1c387usize, + 0xee1c387usize, + 0xe5c387usize, + 0x2e5c387usize, + 0x4e5c387usize, + 0x6e5c387usize, + 0x8e5c387usize, + 0xae5c387usize, + 0xce5c387usize, + 0xee5c387usize, + 0xe9c387usize, + 0x2e9c387usize, + 0x4e9c387usize, + 0x6e9c387usize, + 0x8e9c387usize, + 0xae9c387usize, + 0xce9c387usize, + 0xee9c387usize, + 0xedc387usize, + 0x2edc387usize, + 0x4edc387usize, + 0x6edc387usize, + 0x8edc387usize, + 0xaedc387usize, + 0xcedc387usize, + 0xeedc387usize, + 0xf1c387usize, + 0x2f1c387usize, + 0x4f1c387usize, + 0x6f1c387usize, + 0x8f1c387usize, + 0xaf1c387usize, + 0xcf1c387usize, + 0xef1c387usize, + 0xf5c387usize, + 0x2f5c387usize, + 0x4f5c387usize, + 0x6f5c387usize, + 0x8f5c387usize, + 0xaf5c387usize, + 0xcf5c387usize, + 0xef5c387usize, + 0xf9c387usize, + 0x2f9c387usize, + 0x4f9c387usize, + 0x6f9c387usize, + 0x8f9c387usize, + 0xaf9c387usize, + 0xcf9c387usize, + 0xef9c387usize, + 0xfdc387usize, + 0x2fdc387usize, + 0x4fdc387usize, + 0x6fdc387usize, + 0x8fdc387usize, + 0xafdc387usize, + 0xcfdc387usize, + 0xefdc387usize, + 0xe1cb87usize, + 0x2e1cb87usize, + 0x4e1cb87usize, + 0x6e1cb87usize, + 0x8e1cb87usize, + 0xae1cb87usize, + 0xce1cb87usize, + 0xee1cb87usize, + 0xe5cb87usize, + 0x2e5cb87usize, + 0x4e5cb87usize, + 0x6e5cb87usize, + 0x8e5cb87usize, + 0xae5cb87usize, + 0xce5cb87usize, + 0xee5cb87usize, + 0xe9cb87usize, + 0x2e9cb87usize, + 0x4e9cb87usize, + 0x6e9cb87usize, + 0x8e9cb87usize, + 0xae9cb87usize, + 0xce9cb87usize, + 0xee9cb87usize, + 0xedcb87usize, + 0x2edcb87usize, + 0x4edcb87usize, + 0x6edcb87usize, + 0x8edcb87usize, + 0xaedcb87usize, + 0xcedcb87usize, + 0xeedcb87usize, + 0xf1cb87usize, + 0x2f1cb87usize, + 0x4f1cb87usize, + 0x6f1cb87usize, + 0x8f1cb87usize, + 0xaf1cb87usize, + 0xcf1cb87usize, + 0xef1cb87usize, + 0xf5cb87usize, + 0x2f5cb87usize, + 0x4f5cb87usize, + 0x6f5cb87usize, + 0x8f5cb87usize, + 0xaf5cb87usize, + 0xcf5cb87usize, + 0xef5cb87usize, + 0xf9cb87usize, + 0x2f9cb87usize, + 0x4f9cb87usize, + 0x6f9cb87usize, + 0x8f9cb87usize]; + +pub static kZeroRepsDepth: [u32; 704] = + [0u32, 4u32, 8u32, 7u32, 7u32, 7u32, 7u32, 7u32, 7u32, 7u32, 7u32, 11u32, 14u32, 14u32, 14u32, + 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, + 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, + 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, + 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, + 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 14u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, 21u32, + 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, + 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, + 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, + 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, + 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, + 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, + 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, + 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, + 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32, 28u32]; + +pub static kUTF8ContextLookup: [u8; 512] = + [0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 44, 32, 32, 24, 40, 28, 12, 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48, + 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12, 12, 56, 60, 60, 60, 56, 60, 60, + 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, + 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]; + +pub static kSigned3BitContextLookup: [u8; 256] = + [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7]; + +pub static kBrotliMinWindowBits: i32 = 10i32; + +pub static kBrotliMaxWindowBits: i32 = 24i32; + +pub static kCodeLengthDepth: [u8; 18] = [4i32 as (u8), + 4i32 as (u8), + 4i32 as (u8), + 4i32 as (u8), + 4i32 as (u8), + 4i32 as (u8), + 4i32 as (u8), + 4i32 as (u8), + 4i32 as (u8), + 4i32 as (u8), + 4i32 as (u8), + 4i32 as (u8), + 4i32 as (u8), + 5i32 as (u8), + 5i32 as (u8), + 0i32 as (u8), + 4i32 as (u8), + 4i32 as (u8)]; + + +pub static kStaticDistanceCodeDepth: [u8; 64] = [6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8), + 6i32 as (u8)]; + +pub static kCodeLengthBits: [u32; 18] = [0u32, 8u32, 4u32, 12u32, 2u32, 10u32, 6u32, 14u32, 1u32, + 9u32, 5u32, 13u32, 3u32, 15u32, 31u32, 0u32, 11u32, 7u32]; +pub static kNonZeroRepsBits: [usize; 704] = [0xbusize, + 0x1busize, + 0x2busize, + 0x3busize, + 0x2cbusize, + 0x6cbusize, + 0xacbusize, + 0xecbusize, + 0x2dbusize, + 0x6dbusize, + 0xadbusize, + 0xedbusize, + 0x2ebusize, + 0x6ebusize, + 0xaebusize, + 0xeebusize, + 0x2fbusize, + 0x6fbusize, + 0xafbusize, + 0xefbusize, + 0xb2cbusize, + 0x1b2cbusize, + 0x2b2cbusize, + 0x3b2cbusize, + 0xb6cbusize, + 0x1b6cbusize, + 0x2b6cbusize, + 0x3b6cbusize, + 0xbacbusize, + 0x1bacbusize, + 0x2bacbusize, + 0x3bacbusize, + 0xbecbusize, + 0x1becbusize, + 0x2becbusize, + 0x3becbusize, + 0xb2dbusize, + 0x1b2dbusize, + 0x2b2dbusize, + 0x3b2dbusize, + 0xb6dbusize, + 0x1b6dbusize, + 0x2b6dbusize, + 0x3b6dbusize, + 0xbadbusize, + 0x1badbusize, + 0x2badbusize, + 0x3badbusize, + 0xbedbusize, + 0x1bedbusize, + 0x2bedbusize, + 0x3bedbusize, + 0xb2ebusize, + 0x1b2ebusize, + 0x2b2ebusize, + 0x3b2ebusize, + 0xb6ebusize, + 0x1b6ebusize, + 0x2b6ebusize, + 0x3b6ebusize, + 0xbaebusize, + 0x1baebusize, + 0x2baebusize, + 0x3baebusize, + 0xbeebusize, + 0x1beebusize, + 0x2beebusize, + 0x3beebusize, + 0xb2fbusize, + 0x1b2fbusize, + 0x2b2fbusize, + 0x3b2fbusize, + 0xb6fbusize, + 0x1b6fbusize, + 0x2b6fbusize, + 0x3b6fbusize, + 0xbafbusize, + 0x1bafbusize, + 0x2bafbusize, + 0x3bafbusize, + 0xbefbusize, + 0x1befbusize, + 0x2befbusize, + 0x3befbusize, + 0x2cb2cbusize, + 0x6cb2cbusize, + 0xacb2cbusize, + 0xecb2cbusize, + 0x2db2cbusize, + 0x6db2cbusize, + 0xadb2cbusize, + 0xedb2cbusize, + 0x2eb2cbusize, + 0x6eb2cbusize, + 0xaeb2cbusize, + 0xeeb2cbusize, + 0x2fb2cbusize, + 0x6fb2cbusize, + 0xafb2cbusize, + 0xefb2cbusize, + 0x2cb6cbusize, + 0x6cb6cbusize, + 0xacb6cbusize, + 0xecb6cbusize, + 0x2db6cbusize, + 0x6db6cbusize, + 0xadb6cbusize, + 0xedb6cbusize, + 0x2eb6cbusize, + 0x6eb6cbusize, + 0xaeb6cbusize, + 0xeeb6cbusize, + 0x2fb6cbusize, + 0x6fb6cbusize, + 0xafb6cbusize, + 0xefb6cbusize, + 0x2cbacbusize, + 0x6cbacbusize, + 0xacbacbusize, + 0xecbacbusize, + 0x2dbacbusize, + 0x6dbacbusize, + 0xadbacbusize, + 0xedbacbusize, + 0x2ebacbusize, + 0x6ebacbusize, + 0xaebacbusize, + 0xeebacbusize, + 0x2fbacbusize, + 0x6fbacbusize, + 0xafbacbusize, + 0xefbacbusize, + 0x2cbecbusize, + 0x6cbecbusize, + 0xacbecbusize, + 0xecbecbusize, + 0x2dbecbusize, + 0x6dbecbusize, + 0xadbecbusize, + 0xedbecbusize, + 0x2ebecbusize, + 0x6ebecbusize, + 0xaebecbusize, + 0xeebecbusize, + 0x2fbecbusize, + 0x6fbecbusize, + 0xafbecbusize, + 0xefbecbusize, + 0x2cb2dbusize, + 0x6cb2dbusize, + 0xacb2dbusize, + 0xecb2dbusize, + 0x2db2dbusize, + 0x6db2dbusize, + 0xadb2dbusize, + 0xedb2dbusize, + 0x2eb2dbusize, + 0x6eb2dbusize, + 0xaeb2dbusize, + 0xeeb2dbusize, + 0x2fb2dbusize, + 0x6fb2dbusize, + 0xafb2dbusize, + 0xefb2dbusize, + 0x2cb6dbusize, + 0x6cb6dbusize, + 0xacb6dbusize, + 0xecb6dbusize, + 0x2db6dbusize, + 0x6db6dbusize, + 0xadb6dbusize, + 0xedb6dbusize, + 0x2eb6dbusize, + 0x6eb6dbusize, + 0xaeb6dbusize, + 0xeeb6dbusize, + 0x2fb6dbusize, + 0x6fb6dbusize, + 0xafb6dbusize, + 0xefb6dbusize, + 0x2cbadbusize, + 0x6cbadbusize, + 0xacbadbusize, + 0xecbadbusize, + 0x2dbadbusize, + 0x6dbadbusize, + 0xadbadbusize, + 0xedbadbusize, + 0x2ebadbusize, + 0x6ebadbusize, + 0xaebadbusize, + 0xeebadbusize, + 0x2fbadbusize, + 0x6fbadbusize, + 0xafbadbusize, + 0xefbadbusize, + 0x2cbedbusize, + 0x6cbedbusize, + 0xacbedbusize, + 0xecbedbusize, + 0x2dbedbusize, + 0x6dbedbusize, + 0xadbedbusize, + 0xedbedbusize, + 0x2ebedbusize, + 0x6ebedbusize, + 0xaebedbusize, + 0xeebedbusize, + 0x2fbedbusize, + 0x6fbedbusize, + 0xafbedbusize, + 0xefbedbusize, + 0x2cb2ebusize, + 0x6cb2ebusize, + 0xacb2ebusize, + 0xecb2ebusize, + 0x2db2ebusize, + 0x6db2ebusize, + 0xadb2ebusize, + 0xedb2ebusize, + 0x2eb2ebusize, + 0x6eb2ebusize, + 0xaeb2ebusize, + 0xeeb2ebusize, + 0x2fb2ebusize, + 0x6fb2ebusize, + 0xafb2ebusize, + 0xefb2ebusize, + 0x2cb6ebusize, + 0x6cb6ebusize, + 0xacb6ebusize, + 0xecb6ebusize, + 0x2db6ebusize, + 0x6db6ebusize, + 0xadb6ebusize, + 0xedb6ebusize, + 0x2eb6ebusize, + 0x6eb6ebusize, + 0xaeb6ebusize, + 0xeeb6ebusize, + 0x2fb6ebusize, + 0x6fb6ebusize, + 0xafb6ebusize, + 0xefb6ebusize, + 0x2cbaebusize, + 0x6cbaebusize, + 0xacbaebusize, + 0xecbaebusize, + 0x2dbaebusize, + 0x6dbaebusize, + 0xadbaebusize, + 0xedbaebusize, + 0x2ebaebusize, + 0x6ebaebusize, + 0xaebaebusize, + 0xeebaebusize, + 0x2fbaebusize, + 0x6fbaebusize, + 0xafbaebusize, + 0xefbaebusize, + 0x2cbeebusize, + 0x6cbeebusize, + 0xacbeebusize, + 0xecbeebusize, + 0x2dbeebusize, + 0x6dbeebusize, + 0xadbeebusize, + 0xedbeebusize, + 0x2ebeebusize, + 0x6ebeebusize, + 0xaebeebusize, + 0xeebeebusize, + 0x2fbeebusize, + 0x6fbeebusize, + 0xafbeebusize, + 0xefbeebusize, + 0x2cb2fbusize, + 0x6cb2fbusize, + 0xacb2fbusize, + 0xecb2fbusize, + 0x2db2fbusize, + 0x6db2fbusize, + 0xadb2fbusize, + 0xedb2fbusize, + 0x2eb2fbusize, + 0x6eb2fbusize, + 0xaeb2fbusize, + 0xeeb2fbusize, + 0x2fb2fbusize, + 0x6fb2fbusize, + 0xafb2fbusize, + 0xefb2fbusize, + 0x2cb6fbusize, + 0x6cb6fbusize, + 0xacb6fbusize, + 0xecb6fbusize, + 0x2db6fbusize, + 0x6db6fbusize, + 0xadb6fbusize, + 0xedb6fbusize, + 0x2eb6fbusize, + 0x6eb6fbusize, + 0xaeb6fbusize, + 0xeeb6fbusize, + 0x2fb6fbusize, + 0x6fb6fbusize, + 0xafb6fbusize, + 0xefb6fbusize, + 0x2cbafbusize, + 0x6cbafbusize, + 0xacbafbusize, + 0xecbafbusize, + 0x2dbafbusize, + 0x6dbafbusize, + 0xadbafbusize, + 0xedbafbusize, + 0x2ebafbusize, + 0x6ebafbusize, + 0xaebafbusize, + 0xeebafbusize, + 0x2fbafbusize, + 0x6fbafbusize, + 0xafbafbusize, + 0xefbafbusize, + 0x2cbefbusize, + 0x6cbefbusize, + 0xacbefbusize, + 0xecbefbusize, + 0x2dbefbusize, + 0x6dbefbusize, + 0xadbefbusize, + 0xedbefbusize, + 0x2ebefbusize, + 0x6ebefbusize, + 0xaebefbusize, + 0xeebefbusize, + 0x2fbefbusize, + 0x6fbefbusize, + 0xafbefbusize, + 0xefbefbusize, + 0xb2cb2cbusize, + 0x1b2cb2cbusize, + 0x2b2cb2cbusize, + 0x3b2cb2cbusize, + 0xb6cb2cbusize, + 0x1b6cb2cbusize, + 0x2b6cb2cbusize, + 0x3b6cb2cbusize, + 0xbacb2cbusize, + 0x1bacb2cbusize, + 0x2bacb2cbusize, + 0x3bacb2cbusize, + 0xbecb2cbusize, + 0x1becb2cbusize, + 0x2becb2cbusize, + 0x3becb2cbusize, + 0xb2db2cbusize, + 0x1b2db2cbusize, + 0x2b2db2cbusize, + 0x3b2db2cbusize, + 0xb6db2cbusize, + 0x1b6db2cbusize, + 0x2b6db2cbusize, + 0x3b6db2cbusize, + 0xbadb2cbusize, + 0x1badb2cbusize, + 0x2badb2cbusize, + 0x3badb2cbusize, + 0xbedb2cbusize, + 0x1bedb2cbusize, + 0x2bedb2cbusize, + 0x3bedb2cbusize, + 0xb2eb2cbusize, + 0x1b2eb2cbusize, + 0x2b2eb2cbusize, + 0x3b2eb2cbusize, + 0xb6eb2cbusize, + 0x1b6eb2cbusize, + 0x2b6eb2cbusize, + 0x3b6eb2cbusize, + 0xbaeb2cbusize, + 0x1baeb2cbusize, + 0x2baeb2cbusize, + 0x3baeb2cbusize, + 0xbeeb2cbusize, + 0x1beeb2cbusize, + 0x2beeb2cbusize, + 0x3beeb2cbusize, + 0xb2fb2cbusize, + 0x1b2fb2cbusize, + 0x2b2fb2cbusize, + 0x3b2fb2cbusize, + 0xb6fb2cbusize, + 0x1b6fb2cbusize, + 0x2b6fb2cbusize, + 0x3b6fb2cbusize, + 0xbafb2cbusize, + 0x1bafb2cbusize, + 0x2bafb2cbusize, + 0x3bafb2cbusize, + 0xbefb2cbusize, + 0x1befb2cbusize, + 0x2befb2cbusize, + 0x3befb2cbusize, + 0xb2cb6cbusize, + 0x1b2cb6cbusize, + 0x2b2cb6cbusize, + 0x3b2cb6cbusize, + 0xb6cb6cbusize, + 0x1b6cb6cbusize, + 0x2b6cb6cbusize, + 0x3b6cb6cbusize, + 0xbacb6cbusize, + 0x1bacb6cbusize, + 0x2bacb6cbusize, + 0x3bacb6cbusize, + 0xbecb6cbusize, + 0x1becb6cbusize, + 0x2becb6cbusize, + 0x3becb6cbusize, + 0xb2db6cbusize, + 0x1b2db6cbusize, + 0x2b2db6cbusize, + 0x3b2db6cbusize, + 0xb6db6cbusize, + 0x1b6db6cbusize, + 0x2b6db6cbusize, + 0x3b6db6cbusize, + 0xbadb6cbusize, + 0x1badb6cbusize, + 0x2badb6cbusize, + 0x3badb6cbusize, + 0xbedb6cbusize, + 0x1bedb6cbusize, + 0x2bedb6cbusize, + 0x3bedb6cbusize, + 0xb2eb6cbusize, + 0x1b2eb6cbusize, + 0x2b2eb6cbusize, + 0x3b2eb6cbusize, + 0xb6eb6cbusize, + 0x1b6eb6cbusize, + 0x2b6eb6cbusize, + 0x3b6eb6cbusize, + 0xbaeb6cbusize, + 0x1baeb6cbusize, + 0x2baeb6cbusize, + 0x3baeb6cbusize, + 0xbeeb6cbusize, + 0x1beeb6cbusize, + 0x2beeb6cbusize, + 0x3beeb6cbusize, + 0xb2fb6cbusize, + 0x1b2fb6cbusize, + 0x2b2fb6cbusize, + 0x3b2fb6cbusize, + 0xb6fb6cbusize, + 0x1b6fb6cbusize, + 0x2b6fb6cbusize, + 0x3b6fb6cbusize, + 0xbafb6cbusize, + 0x1bafb6cbusize, + 0x2bafb6cbusize, + 0x3bafb6cbusize, + 0xbefb6cbusize, + 0x1befb6cbusize, + 0x2befb6cbusize, + 0x3befb6cbusize, + 0xb2cbacbusize, + 0x1b2cbacbusize, + 0x2b2cbacbusize, + 0x3b2cbacbusize, + 0xb6cbacbusize, + 0x1b6cbacbusize, + 0x2b6cbacbusize, + 0x3b6cbacbusize, + 0xbacbacbusize, + 0x1bacbacbusize, + 0x2bacbacbusize, + 0x3bacbacbusize, + 0xbecbacbusize, + 0x1becbacbusize, + 0x2becbacbusize, + 0x3becbacbusize, + 0xb2dbacbusize, + 0x1b2dbacbusize, + 0x2b2dbacbusize, + 0x3b2dbacbusize, + 0xb6dbacbusize, + 0x1b6dbacbusize, + 0x2b6dbacbusize, + 0x3b6dbacbusize, + 0xbadbacbusize, + 0x1badbacbusize, + 0x2badbacbusize, + 0x3badbacbusize, + 0xbedbacbusize, + 0x1bedbacbusize, + 0x2bedbacbusize, + 0x3bedbacbusize, + 0xb2ebacbusize, + 0x1b2ebacbusize, + 0x2b2ebacbusize, + 0x3b2ebacbusize, + 0xb6ebacbusize, + 0x1b6ebacbusize, + 0x2b6ebacbusize, + 0x3b6ebacbusize, + 0xbaebacbusize, + 0x1baebacbusize, + 0x2baebacbusize, + 0x3baebacbusize, + 0xbeebacbusize, + 0x1beebacbusize, + 0x2beebacbusize, + 0x3beebacbusize, + 0xb2fbacbusize, + 0x1b2fbacbusize, + 0x2b2fbacbusize, + 0x3b2fbacbusize, + 0xb6fbacbusize, + 0x1b6fbacbusize, + 0x2b6fbacbusize, + 0x3b6fbacbusize, + 0xbafbacbusize, + 0x1bafbacbusize, + 0x2bafbacbusize, + 0x3bafbacbusize, + 0xbefbacbusize, + 0x1befbacbusize, + 0x2befbacbusize, + 0x3befbacbusize, + 0xb2cbecbusize, + 0x1b2cbecbusize, + 0x2b2cbecbusize, + 0x3b2cbecbusize, + 0xb6cbecbusize, + 0x1b6cbecbusize, + 0x2b6cbecbusize, + 0x3b6cbecbusize, + 0xbacbecbusize, + 0x1bacbecbusize, + 0x2bacbecbusize, + 0x3bacbecbusize, + 0xbecbecbusize, + 0x1becbecbusize, + 0x2becbecbusize, + 0x3becbecbusize, + 0xb2dbecbusize, + 0x1b2dbecbusize, + 0x2b2dbecbusize, + 0x3b2dbecbusize, + 0xb6dbecbusize, + 0x1b6dbecbusize, + 0x2b6dbecbusize, + 0x3b6dbecbusize, + 0xbadbecbusize, + 0x1badbecbusize, + 0x2badbecbusize, + 0x3badbecbusize, + 0xbedbecbusize, + 0x1bedbecbusize, + 0x2bedbecbusize, + 0x3bedbecbusize, + 0xb2ebecbusize, + 0x1b2ebecbusize, + 0x2b2ebecbusize, + 0x3b2ebecbusize, + 0xb6ebecbusize, + 0x1b6ebecbusize, + 0x2b6ebecbusize, + 0x3b6ebecbusize, + 0xbaebecbusize, + 0x1baebecbusize, + 0x2baebecbusize, + 0x3baebecbusize, + 0xbeebecbusize, + 0x1beebecbusize, + 0x2beebecbusize, + 0x3beebecbusize, + 0xb2fbecbusize, + 0x1b2fbecbusize, + 0x2b2fbecbusize, + 0x3b2fbecbusize, + 0xb6fbecbusize, + 0x1b6fbecbusize, + 0x2b6fbecbusize, + 0x3b6fbecbusize, + 0xbafbecbusize, + 0x1bafbecbusize, + 0x2bafbecbusize, + 0x3bafbecbusize, + 0xbefbecbusize, + 0x1befbecbusize, + 0x2befbecbusize, + 0x3befbecbusize, + 0xb2cb2dbusize, + 0x1b2cb2dbusize, + 0x2b2cb2dbusize, + 0x3b2cb2dbusize, + 0xb6cb2dbusize, + 0x1b6cb2dbusize, + 0x2b6cb2dbusize, + 0x3b6cb2dbusize, + 0xbacb2dbusize, + 0x1bacb2dbusize, + 0x2bacb2dbusize, + 0x3bacb2dbusize, + 0xbecb2dbusize, + 0x1becb2dbusize, + 0x2becb2dbusize, + 0x3becb2dbusize, + 0xb2db2dbusize, + 0x1b2db2dbusize, + 0x2b2db2dbusize, + 0x3b2db2dbusize, + 0xb6db2dbusize, + 0x1b6db2dbusize, + 0x2b6db2dbusize, + 0x3b6db2dbusize, + 0xbadb2dbusize, + 0x1badb2dbusize, + 0x2badb2dbusize, + 0x3badb2dbusize, + 0xbedb2dbusize, + 0x1bedb2dbusize, + 0x2bedb2dbusize, + 0x3bedb2dbusize, + 0xb2eb2dbusize, + 0x1b2eb2dbusize, + 0x2b2eb2dbusize, + 0x3b2eb2dbusize, + 0xb6eb2dbusize, + 0x1b6eb2dbusize, + 0x2b6eb2dbusize, + 0x3b6eb2dbusize, + 0xbaeb2dbusize, + 0x1baeb2dbusize, + 0x2baeb2dbusize, + 0x3baeb2dbusize, + 0xbeeb2dbusize, + 0x1beeb2dbusize, + 0x2beeb2dbusize, + 0x3beeb2dbusize, + 0xb2fb2dbusize, + 0x1b2fb2dbusize, + 0x2b2fb2dbusize, + 0x3b2fb2dbusize, + 0xb6fb2dbusize, + 0x1b6fb2dbusize, + 0x2b6fb2dbusize, + 0x3b6fb2dbusize, + 0xbafb2dbusize, + 0x1bafb2dbusize, + 0x2bafb2dbusize, + 0x3bafb2dbusize, + 0xbefb2dbusize, + 0x1befb2dbusize, + 0x2befb2dbusize, + 0x3befb2dbusize, + 0xb2cb6dbusize, + 0x1b2cb6dbusize, + 0x2b2cb6dbusize, + 0x3b2cb6dbusize, + 0xb6cb6dbusize, + 0x1b6cb6dbusize, + 0x2b6cb6dbusize, + 0x3b6cb6dbusize, + 0xbacb6dbusize, + 0x1bacb6dbusize, + 0x2bacb6dbusize, + 0x3bacb6dbusize, + 0xbecb6dbusize, + 0x1becb6dbusize, + 0x2becb6dbusize, + 0x3becb6dbusize, + 0xb2db6dbusize, + 0x1b2db6dbusize, + 0x2b2db6dbusize, + 0x3b2db6dbusize, + 0xb6db6dbusize, + 0x1b6db6dbusize, + 0x2b6db6dbusize, + 0x3b6db6dbusize, + 0xbadb6dbusize, + 0x1badb6dbusize, + 0x2badb6dbusize, + 0x3badb6dbusize, + 0xbedb6dbusize, + 0x1bedb6dbusize, + 0x2bedb6dbusize, + 0x3bedb6dbusize, + 0xb2eb6dbusize, + 0x1b2eb6dbusize, + 0x2b2eb6dbusize, + 0x3b2eb6dbusize, + 0xb6eb6dbusize, + 0x1b6eb6dbusize, + 0x2b6eb6dbusize, + 0x3b6eb6dbusize, + 0xbaeb6dbusize, + 0x1baeb6dbusize, + 0x2baeb6dbusize, + 0x3baeb6dbusize]; + +pub static kNonZeroRepsDepth: [u32; 704] = + [6u32, 6u32, 6u32, 6u32, 12u32, 12u32, 12u32, 12u32, 12u32, 12u32, 12u32, 12u32, 12u32, 12u32, + 12u32, 12u32, 12u32, 12u32, 12u32, 12u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, + 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, + 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, + 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, + 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, 18u32, + 18u32, 18u32, 18u32, 18u32, 18u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, 24u32, + 24u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, 30u32, + 30u32]; + +pub static kStaticCommandCodeDepth: [u8; 704] = [9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 9i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8), + 11i32 as (u8)]; + + +pub static kStaticDistanceCodeBits: [u16; 64] = [0i32 as (u16), + 32i32 as (u16), + 16i32 as (u16), + 48i32 as (u16), + 8i32 as (u16), + 40i32 as (u16), + 24i32 as (u16), + 56i32 as (u16), + 4i32 as (u16), + 36i32 as (u16), + 20i32 as (u16), + 52i32 as (u16), + 12i32 as (u16), + 44i32 as (u16), + 28i32 as (u16), + 60i32 as (u16), + 2i32 as (u16), + 34i32 as (u16), + 18i32 as (u16), + 50i32 as (u16), + 10i32 as (u16), + 42i32 as (u16), + 26i32 as (u16), + 58i32 as (u16), + 6i32 as (u16), + 38i32 as (u16), + 22i32 as (u16), + 54i32 as (u16), + 14i32 as (u16), + 46i32 as (u16), + 30i32 as (u16), + 62i32 as (u16), + 1i32 as (u16), + 33i32 as (u16), + 17i32 as (u16), + 49i32 as (u16), + 9i32 as (u16), + 41i32 as (u16), + 25i32 as (u16), + 57i32 as (u16), + 5i32 as (u16), + 37i32 as (u16), + 21i32 as (u16), + 53i32 as (u16), + 13i32 as (u16), + 45i32 as (u16), + 29i32 as (u16), + 61i32 as (u16), + 3i32 as (u16), + 35i32 as (u16), + 19i32 as (u16), + 51i32 as (u16), + 11i32 as (u16), + 43i32 as (u16), + 27i32 as (u16), + 59i32 as (u16), + 7i32 as (u16), + 39i32 as (u16), + 23i32 as (u16), + 55i32 as (u16), + 15i32 as (u16), + 47i32 as (u16), + 31i32 as (u16), + 63i32 as (u16)]; +pub static kStaticCommandCodeBits: [u16; 704] = [0i32 as (u16), + 256i32 as (u16), + 128i32 as (u16), + 384i32 as (u16), + 64i32 as (u16), + 320i32 as (u16), + 192i32 as (u16), + 448i32 as (u16), + 32i32 as (u16), + 288i32 as (u16), + 160i32 as (u16), + 416i32 as (u16), + 96i32 as (u16), + 352i32 as (u16), + 224i32 as (u16), + 480i32 as (u16), + 16i32 as (u16), + 272i32 as (u16), + 144i32 as (u16), + 400i32 as (u16), + 80i32 as (u16), + 336i32 as (u16), + 208i32 as (u16), + 464i32 as (u16), + 48i32 as (u16), + 304i32 as (u16), + 176i32 as (u16), + 432i32 as (u16), + 112i32 as (u16), + 368i32 as (u16), + 240i32 as (u16), + 496i32 as (u16), + 8i32 as (u16), + 264i32 as (u16), + 136i32 as (u16), + 392i32 as (u16), + 72i32 as (u16), + 328i32 as (u16), + 200i32 as (u16), + 456i32 as (u16), + 40i32 as (u16), + 296i32 as (u16), + 168i32 as (u16), + 424i32 as (u16), + 104i32 as (u16), + 360i32 as (u16), + 232i32 as (u16), + 488i32 as (u16), + 24i32 as (u16), + 280i32 as (u16), + 152i32 as (u16), + 408i32 as (u16), + 88i32 as (u16), + 344i32 as (u16), + 216i32 as (u16), + 472i32 as (u16), + 56i32 as (u16), + 312i32 as (u16), + 184i32 as (u16), + 440i32 as (u16), + 120i32 as (u16), + 376i32 as (u16), + 248i32 as (u16), + 504i32 as (u16), + 4i32 as (u16), + 260i32 as (u16), + 132i32 as (u16), + 388i32 as (u16), + 68i32 as (u16), + 324i32 as (u16), + 196i32 as (u16), + 452i32 as (u16), + 36i32 as (u16), + 292i32 as (u16), + 164i32 as (u16), + 420i32 as (u16), + 100i32 as (u16), + 356i32 as (u16), + 228i32 as (u16), + 484i32 as (u16), + 20i32 as (u16), + 276i32 as (u16), + 148i32 as (u16), + 404i32 as (u16), + 84i32 as (u16), + 340i32 as (u16), + 212i32 as (u16), + 468i32 as (u16), + 52i32 as (u16), + 308i32 as (u16), + 180i32 as (u16), + 436i32 as (u16), + 116i32 as (u16), + 372i32 as (u16), + 244i32 as (u16), + 500i32 as (u16), + 12i32 as (u16), + 268i32 as (u16), + 140i32 as (u16), + 396i32 as (u16), + 76i32 as (u16), + 332i32 as (u16), + 204i32 as (u16), + 460i32 as (u16), + 44i32 as (u16), + 300i32 as (u16), + 172i32 as (u16), + 428i32 as (u16), + 108i32 as (u16), + 364i32 as (u16), + 236i32 as (u16), + 492i32 as (u16), + 28i32 as (u16), + 284i32 as (u16), + 156i32 as (u16), + 412i32 as (u16), + 92i32 as (u16), + 348i32 as (u16), + 220i32 as (u16), + 476i32 as (u16), + 60i32 as (u16), + 316i32 as (u16), + 188i32 as (u16), + 444i32 as (u16), + 124i32 as (u16), + 380i32 as (u16), + 252i32 as (u16), + 508i32 as (u16), + 2i32 as (u16), + 258i32 as (u16), + 130i32 as (u16), + 386i32 as (u16), + 66i32 as (u16), + 322i32 as (u16), + 194i32 as (u16), + 450i32 as (u16), + 34i32 as (u16), + 290i32 as (u16), + 162i32 as (u16), + 418i32 as (u16), + 98i32 as (u16), + 354i32 as (u16), + 226i32 as (u16), + 482i32 as (u16), + 18i32 as (u16), + 274i32 as (u16), + 146i32 as (u16), + 402i32 as (u16), + 82i32 as (u16), + 338i32 as (u16), + 210i32 as (u16), + 466i32 as (u16), + 50i32 as (u16), + 306i32 as (u16), + 178i32 as (u16), + 434i32 as (u16), + 114i32 as (u16), + 370i32 as (u16), + 242i32 as (u16), + 498i32 as (u16), + 10i32 as (u16), + 266i32 as (u16), + 138i32 as (u16), + 394i32 as (u16), + 74i32 as (u16), + 330i32 as (u16), + 202i32 as (u16), + 458i32 as (u16), + 42i32 as (u16), + 298i32 as (u16), + 170i32 as (u16), + 426i32 as (u16), + 106i32 as (u16), + 362i32 as (u16), + 234i32 as (u16), + 490i32 as (u16), + 26i32 as (u16), + 282i32 as (u16), + 154i32 as (u16), + 410i32 as (u16), + 90i32 as (u16), + 346i32 as (u16), + 218i32 as (u16), + 474i32 as (u16), + 58i32 as (u16), + 314i32 as (u16), + 186i32 as (u16), + 442i32 as (u16), + 122i32 as (u16), + 378i32 as (u16), + 250i32 as (u16), + 506i32 as (u16), + 6i32 as (u16), + 262i32 as (u16), + 134i32 as (u16), + 390i32 as (u16), + 70i32 as (u16), + 326i32 as (u16), + 198i32 as (u16), + 454i32 as (u16), + 38i32 as (u16), + 294i32 as (u16), + 166i32 as (u16), + 422i32 as (u16), + 102i32 as (u16), + 358i32 as (u16), + 230i32 as (u16), + 486i32 as (u16), + 22i32 as (u16), + 278i32 as (u16), + 150i32 as (u16), + 406i32 as (u16), + 86i32 as (u16), + 342i32 as (u16), + 214i32 as (u16), + 470i32 as (u16), + 54i32 as (u16), + 310i32 as (u16), + 182i32 as (u16), + 438i32 as (u16), + 118i32 as (u16), + 374i32 as (u16), + 246i32 as (u16), + 502i32 as (u16), + 14i32 as (u16), + 270i32 as (u16), + 142i32 as (u16), + 398i32 as (u16), + 78i32 as (u16), + 334i32 as (u16), + 206i32 as (u16), + 462i32 as (u16), + 46i32 as (u16), + 302i32 as (u16), + 174i32 as (u16), + 430i32 as (u16), + 110i32 as (u16), + 366i32 as (u16), + 238i32 as (u16), + 494i32 as (u16), + 30i32 as (u16), + 286i32 as (u16), + 158i32 as (u16), + 414i32 as (u16), + 94i32 as (u16), + 350i32 as (u16), + 222i32 as (u16), + 478i32 as (u16), + 62i32 as (u16), + 318i32 as (u16), + 190i32 as (u16), + 446i32 as (u16), + 126i32 as (u16), + 382i32 as (u16), + 254i32 as (u16), + 510i32 as (u16), + 1i32 as (u16), + 257i32 as (u16), + 129i32 as (u16), + 385i32 as (u16), + 65i32 as (u16), + 321i32 as (u16), + 193i32 as (u16), + 449i32 as (u16), + 33i32 as (u16), + 289i32 as (u16), + 161i32 as (u16), + 417i32 as (u16), + 97i32 as (u16), + 353i32 as (u16), + 225i32 as (u16), + 481i32 as (u16), + 17i32 as (u16), + 273i32 as (u16), + 145i32 as (u16), + 401i32 as (u16), + 81i32 as (u16), + 337i32 as (u16), + 209i32 as (u16), + 465i32 as (u16), + 49i32 as (u16), + 305i32 as (u16), + 177i32 as (u16), + 433i32 as (u16), + 113i32 as (u16), + 369i32 as (u16), + 241i32 as (u16), + 497i32 as (u16), + 9i32 as (u16), + 265i32 as (u16), + 137i32 as (u16), + 393i32 as (u16), + 73i32 as (u16), + 329i32 as (u16), + 201i32 as (u16), + 457i32 as (u16), + 41i32 as (u16), + 297i32 as (u16), + 169i32 as (u16), + 425i32 as (u16), + 105i32 as (u16), + 361i32 as (u16), + 233i32 as (u16), + 489i32 as (u16), + 25i32 as (u16), + 281i32 as (u16), + 153i32 as (u16), + 409i32 as (u16), + 89i32 as (u16), + 345i32 as (u16), + 217i32 as (u16), + 473i32 as (u16), + 57i32 as (u16), + 313i32 as (u16), + 185i32 as (u16), + 441i32 as (u16), + 121i32 as (u16), + 377i32 as (u16), + 249i32 as (u16), + 505i32 as (u16), + 5i32 as (u16), + 261i32 as (u16), + 133i32 as (u16), + 389i32 as (u16), + 69i32 as (u16), + 325i32 as (u16), + 197i32 as (u16), + 453i32 as (u16), + 37i32 as (u16), + 293i32 as (u16), + 165i32 as (u16), + 421i32 as (u16), + 101i32 as (u16), + 357i32 as (u16), + 229i32 as (u16), + 485i32 as (u16), + 21i32 as (u16), + 277i32 as (u16), + 149i32 as (u16), + 405i32 as (u16), + 85i32 as (u16), + 341i32 as (u16), + 213i32 as (u16), + 469i32 as (u16), + 53i32 as (u16), + 309i32 as (u16), + 181i32 as (u16), + 437i32 as (u16), + 117i32 as (u16), + 373i32 as (u16), + 245i32 as (u16), + 501i32 as (u16), + 13i32 as (u16), + 269i32 as (u16), + 141i32 as (u16), + 397i32 as (u16), + 77i32 as (u16), + 333i32 as (u16), + 205i32 as (u16), + 461i32 as (u16), + 45i32 as (u16), + 301i32 as (u16), + 173i32 as (u16), + 429i32 as (u16), + 109i32 as (u16), + 365i32 as (u16), + 237i32 as (u16), + 493i32 as (u16), + 29i32 as (u16), + 285i32 as (u16), + 157i32 as (u16), + 413i32 as (u16), + 93i32 as (u16), + 349i32 as (u16), + 221i32 as (u16), + 477i32 as (u16), + 61i32 as (u16), + 317i32 as (u16), + 189i32 as (u16), + 445i32 as (u16), + 125i32 as (u16), + 381i32 as (u16), + 253i32 as (u16), + 509i32 as (u16), + 3i32 as (u16), + 259i32 as (u16), + 131i32 as (u16), + 387i32 as (u16), + 67i32 as (u16), + 323i32 as (u16), + 195i32 as (u16), + 451i32 as (u16), + 35i32 as (u16), + 291i32 as (u16), + 163i32 as (u16), + 419i32 as (u16), + 99i32 as (u16), + 355i32 as (u16), + 227i32 as (u16), + 483i32 as (u16), + 19i32 as (u16), + 275i32 as (u16), + 147i32 as (u16), + 403i32 as (u16), + 83i32 as (u16), + 339i32 as (u16), + 211i32 as (u16), + 467i32 as (u16), + 51i32 as (u16), + 307i32 as (u16), + 179i32 as (u16), + 435i32 as (u16), + 115i32 as (u16), + 371i32 as (u16), + 243i32 as (u16), + 499i32 as (u16), + 11i32 as (u16), + 267i32 as (u16), + 139i32 as (u16), + 395i32 as (u16), + 75i32 as (u16), + 331i32 as (u16), + 203i32 as (u16), + 459i32 as (u16), + 43i32 as (u16), + 299i32 as (u16), + 171i32 as (u16), + 427i32 as (u16), + 107i32 as (u16), + 363i32 as (u16), + 235i32 as (u16), + 491i32 as (u16), + 27i32 as (u16), + 283i32 as (u16), + 155i32 as (u16), + 411i32 as (u16), + 91i32 as (u16), + 347i32 as (u16), + 219i32 as (u16), + 475i32 as (u16), + 59i32 as (u16), + 315i32 as (u16), + 187i32 as (u16), + 443i32 as (u16), + 123i32 as (u16), + 379i32 as (u16), + 251i32 as (u16), + 507i32 as (u16), + 7i32 as (u16), + 1031i32 as (u16), + 519i32 as (u16), + 1543i32 as (u16), + 263i32 as (u16), + 1287i32 as (u16), + 775i32 as (u16), + 1799i32 as (u16), + 135i32 as (u16), + 1159i32 as (u16), + 647i32 as (u16), + 1671i32 as (u16), + 391i32 as (u16), + 1415i32 as (u16), + 903i32 as (u16), + 1927i32 as (u16), + 71i32 as (u16), + 1095i32 as (u16), + 583i32 as (u16), + 1607i32 as (u16), + 327i32 as (u16), + 1351i32 as (u16), + 839i32 as (u16), + 1863i32 as (u16), + 199i32 as (u16), + 1223i32 as (u16), + 711i32 as (u16), + 1735i32 as (u16), + 455i32 as (u16), + 1479i32 as (u16), + 967i32 as (u16), + 1991i32 as (u16), + 39i32 as (u16), + 1063i32 as (u16), + 551i32 as (u16), + 1575i32 as (u16), + 295i32 as (u16), + 1319i32 as (u16), + 807i32 as (u16), + 1831i32 as (u16), + 167i32 as (u16), + 1191i32 as (u16), + 679i32 as (u16), + 1703i32 as (u16), + 423i32 as (u16), + 1447i32 as (u16), + 935i32 as (u16), + 1959i32 as (u16), + 103i32 as (u16), + 1127i32 as (u16), + 615i32 as (u16), + 1639i32 as (u16), + 359i32 as (u16), + 1383i32 as (u16), + 871i32 as (u16), + 1895i32 as (u16), + 231i32 as (u16), + 1255i32 as (u16), + 743i32 as (u16), + 1767i32 as (u16), + 487i32 as (u16), + 1511i32 as (u16), + 999i32 as (u16), + 2023i32 as (u16), + 23i32 as (u16), + 1047i32 as (u16), + 535i32 as (u16), + 1559i32 as (u16), + 279i32 as (u16), + 1303i32 as (u16), + 791i32 as (u16), + 1815i32 as (u16), + 151i32 as (u16), + 1175i32 as (u16), + 663i32 as (u16), + 1687i32 as (u16), + 407i32 as (u16), + 1431i32 as (u16), + 919i32 as (u16), + 1943i32 as (u16), + 87i32 as (u16), + 1111i32 as (u16), + 599i32 as (u16), + 1623i32 as (u16), + 343i32 as (u16), + 1367i32 as (u16), + 855i32 as (u16), + 1879i32 as (u16), + 215i32 as (u16), + 1239i32 as (u16), + 727i32 as (u16), + 1751i32 as (u16), + 471i32 as (u16), + 1495i32 as (u16), + 983i32 as (u16), + 2007i32 as (u16), + 55i32 as (u16), + 1079i32 as (u16), + 567i32 as (u16), + 1591i32 as (u16), + 311i32 as (u16), + 1335i32 as (u16), + 823i32 as (u16), + 1847i32 as (u16), + 183i32 as (u16), + 1207i32 as (u16), + 695i32 as (u16), + 1719i32 as (u16), + 439i32 as (u16), + 1463i32 as (u16), + 951i32 as (u16), + 1975i32 as (u16), + 119i32 as (u16), + 1143i32 as (u16), + 631i32 as (u16), + 1655i32 as (u16), + 375i32 as (u16), + 1399i32 as (u16), + 887i32 as (u16), + 1911i32 as (u16), + 247i32 as (u16), + 1271i32 as (u16), + 759i32 as (u16), + 1783i32 as (u16), + 503i32 as (u16), + 1527i32 as (u16), + 1015i32 as (u16), + 2039i32 as (u16), + 15i32 as (u16), + 1039i32 as (u16), + 527i32 as (u16), + 1551i32 as (u16), + 271i32 as (u16), + 1295i32 as (u16), + 783i32 as (u16), + 1807i32 as (u16), + 143i32 as (u16), + 1167i32 as (u16), + 655i32 as (u16), + 1679i32 as (u16), + 399i32 as (u16), + 1423i32 as (u16), + 911i32 as (u16), + 1935i32 as (u16), + 79i32 as (u16), + 1103i32 as (u16), + 591i32 as (u16), + 1615i32 as (u16), + 335i32 as (u16), + 1359i32 as (u16), + 847i32 as (u16), + 1871i32 as (u16), + 207i32 as (u16), + 1231i32 as (u16), + 719i32 as (u16), + 1743i32 as (u16), + 463i32 as (u16), + 1487i32 as (u16), + 975i32 as (u16), + 1999i32 as (u16), + 47i32 as (u16), + 1071i32 as (u16), + 559i32 as (u16), + 1583i32 as (u16), + 303i32 as (u16), + 1327i32 as (u16), + 815i32 as (u16), + 1839i32 as (u16), + 175i32 as (u16), + 1199i32 as (u16), + 687i32 as (u16), + 1711i32 as (u16), + 431i32 as (u16), + 1455i32 as (u16), + 943i32 as (u16), + 1967i32 as (u16), + 111i32 as (u16), + 1135i32 as (u16), + 623i32 as (u16), + 1647i32 as (u16), + 367i32 as (u16), + 1391i32 as (u16), + 879i32 as (u16), + 1903i32 as (u16), + 239i32 as (u16), + 1263i32 as (u16), + 751i32 as (u16), + 1775i32 as (u16), + 495i32 as (u16), + 1519i32 as (u16), + 1007i32 as (u16), + 2031i32 as (u16), + 31i32 as (u16), + 1055i32 as (u16), + 543i32 as (u16), + 1567i32 as (u16), + 287i32 as (u16), + 1311i32 as (u16), + 799i32 as (u16), + 1823i32 as (u16), + 159i32 as (u16), + 1183i32 as (u16), + 671i32 as (u16), + 1695i32 as (u16), + 415i32 as (u16), + 1439i32 as (u16), + 927i32 as (u16), + 1951i32 as (u16), + 95i32 as (u16), + 1119i32 as (u16), + 607i32 as (u16), + 1631i32 as (u16), + 351i32 as (u16), + 1375i32 as (u16), + 863i32 as (u16), + 1887i32 as (u16), + 223i32 as (u16), + 1247i32 as (u16), + 735i32 as (u16), + 1759i32 as (u16), + 479i32 as (u16), + 1503i32 as (u16), + 991i32 as (u16), + 2015i32 as (u16), + 63i32 as (u16), + 1087i32 as (u16), + 575i32 as (u16), + 1599i32 as (u16), + 319i32 as (u16), + 1343i32 as (u16), + 831i32 as (u16), + 1855i32 as (u16), + 191i32 as (u16), + 1215i32 as (u16), + 703i32 as (u16), + 1727i32 as (u16), + 447i32 as (u16), + 1471i32 as (u16), + 959i32 as (u16), + 1983i32 as (u16), + 127i32 as (u16), + 1151i32 as (u16), + 639i32 as (u16), + 1663i32 as (u16), + 383i32 as (u16), + 1407i32 as (u16), + 895i32 as (u16), + 1919i32 as (u16), + 255i32 as (u16), + 1279i32 as (u16), + 767i32 as (u16), + 1791i32 as (u16), + 511i32 as (u16), + 1535i32 as (u16), + 1023i32 as (u16), + 2047i32 as (u16)]; diff --git a/rust/vendor/brotli/src/enc/context_map_entropy.rs b/rust/vendor/brotli/src/enc/context_map_entropy.rs new file mode 100644 index 0000000..d04f91d --- /dev/null +++ b/rust/vendor/brotli/src/enc/context_map_entropy.rs @@ -0,0 +1,450 @@ +use core; +pub use super::ir_interpret::{IRInterpreter, Context, push_base}; +use super::super::alloc; +use super::super::alloc::{SliceWrapper, SliceWrapperMut, Allocator}; +use super::interface; +use super::input_pair::{InputPair, InputReference, InputReferenceMut}; +use super::util::{floatX, FastLog2u16}; +use super::find_stride; +use super::weights::{Weights, BLEND_FIXED_POINT_PRECISION}; + +const DEFAULT_CM_SPEED_INDEX: usize = 8; +const NUM_SPEEDS_TO_TRY: usize = 16; +const SPEEDS_TO_SEARCH: [u16; NUM_SPEEDS_TO_TRY]= [0, + 1, 1, 1, + 2, + 4, + 8, + 16, + 16, + 32, + 64, + 128, 128, + 512, + 1664, + 1664, + ]; +const MAXES_TO_SEARCH: [u16; NUM_SPEEDS_TO_TRY] = [32, + 32, 128, 16384, + 1024, + 1024, + 8192, + 48, + 8192, + 4096, + 16384, + 256, 16384, + 16384, + 16384, + 16384, + ]; +const NIBBLE_PRIOR_SIZE: usize = 16 * NUM_SPEEDS_TO_TRY; +// the high nibble, followed by the low nibbles +const CONTEXT_MAP_PRIOR_SIZE: usize = 256 * NIBBLE_PRIOR_SIZE * 17; +const STRIDE_PRIOR_SIZE: usize = 256 * 256 * NIBBLE_PRIOR_SIZE * 2; +#[derive(Clone,Copy, Debug)] +pub struct SpeedAndMax(pub u16, pub u16); + +pub fn speed_to_tuple(inp:[SpeedAndMax;2]) -> [(u16,u16);2] { + [(inp[0].0, inp[0].1), (inp[1].0, inp[1].1)] +} + +fn get_stride_cdf_low(data: &mut [u16], stride_prior: u8, cm_prior: usize, high_nibble: u8) -> &mut [u16] { + let index: usize = 1 + 2 * (cm_prior as usize | ((stride_prior as usize & 0xf) << 8) | ((high_nibble as usize) << 12)); + data.split_at_mut(NUM_SPEEDS_TO_TRY * index << 4).1.split_at_mut(16 * NUM_SPEEDS_TO_TRY).0 +} + +fn get_stride_cdf_high(data: &mut [u16], stride_prior: u8, cm_prior: usize) -> &mut [u16] { + let index: usize = 2 * (cm_prior as usize | ((stride_prior as usize) << 8)); + data.split_at_mut(NUM_SPEEDS_TO_TRY * index << 4).1.split_at_mut(16 * NUM_SPEEDS_TO_TRY).0 +} + +fn get_cm_cdf_low(data: &mut [u16], cm_prior: usize, high_nibble: u8) -> &mut [u16] { + let index: usize = (high_nibble as usize + 1) + 17 * cm_prior as usize; + data.split_at_mut(NUM_SPEEDS_TO_TRY * index << 4).1.split_at_mut(16 * NUM_SPEEDS_TO_TRY).0 +} + +fn get_cm_cdf_high(data: &mut [u16], cm_prior: usize) -> &mut [u16] { + let index: usize = 17 * cm_prior as usize; + data.split_at_mut(NUM_SPEEDS_TO_TRY * index << 4).1.split_at_mut(16 * NUM_SPEEDS_TO_TRY).0 +} +fn init_cdfs(cdfs: &mut [u16]) { + assert_eq!(cdfs.len() % (16 * NUM_SPEEDS_TO_TRY), 0); + let mut total_index = 0usize; + let len = cdfs.len(); + loop { + for cdf_index in 0..16 { + let vec = cdfs.split_at_mut(total_index).1.split_at_mut(NUM_SPEEDS_TO_TRY).0; + for item in vec { + *item = 4 + 4 * cdf_index as u16; + } + total_index += NUM_SPEEDS_TO_TRY; + } + if total_index == len { + break; + } + } +} +fn compute_combined_cost(singleton_cost: &mut [floatX;NUM_SPEEDS_TO_TRY], + cdfs: &[u16], + mixing_cdf: [u16;16], + nibble_u8: u8, + _weights: &mut [Weights; NUM_SPEEDS_TO_TRY]) { + assert_eq!(cdfs.len(), 16 * NUM_SPEEDS_TO_TRY); + let nibble = nibble_u8 as usize & 0xf; + let mut stride_pdf = [0u16; NUM_SPEEDS_TO_TRY]; + stride_pdf.clone_from_slice(cdfs.split_at(NUM_SPEEDS_TO_TRY * nibble).1.split_at(NUM_SPEEDS_TO_TRY).0); + let mut cm_pdf:u16 = mixing_cdf[nibble]; + if nibble_u8 != 0 { + let mut tmp = [0u16; NUM_SPEEDS_TO_TRY]; + tmp.clone_from_slice(cdfs.split_at(NUM_SPEEDS_TO_TRY * (nibble - 1)).1.split_at(NUM_SPEEDS_TO_TRY).0); + for i in 0..NUM_SPEEDS_TO_TRY { + stride_pdf[i] -= tmp[i]; + } + cm_pdf -= mixing_cdf[nibble - 1] + } + let mut stride_max = [0u16; NUM_SPEEDS_TO_TRY]; + stride_max.clone_from_slice(cdfs.split_at(NUM_SPEEDS_TO_TRY * 15).1); + let cm_max = mixing_cdf[15]; + for i in 0..NUM_SPEEDS_TO_TRY { + if stride_pdf[i] == 0 { + assert!(stride_pdf[i] != 0); + } + if stride_max[i] == 0 { + assert!(stride_max[i] != 0); + } + let w; + w = (1<<(BLEND_FIXED_POINT_PRECISION - 2)) ; // a quarter of weight to stride + let combined_pdf = w * u32::from(stride_pdf[i]) + ((1<> BLEND_FIXED_POINT_PRECISION) as u16) - FastLog2u16((combined_max >> BLEND_FIXED_POINT_PRECISION) as u16); + singleton_cost[i] -= del; + } +} +fn compute_cost(singleton_cost: &mut [floatX;NUM_SPEEDS_TO_TRY], + cdfs: &[u16], + nibble_u8: u8) { + assert_eq!(cdfs.len(), 16 * NUM_SPEEDS_TO_TRY); + let nibble = nibble_u8 as usize & 0xf; + let mut pdf = [0u16; NUM_SPEEDS_TO_TRY]; + pdf.clone_from_slice(cdfs.split_at(NUM_SPEEDS_TO_TRY * nibble).1.split_at(NUM_SPEEDS_TO_TRY).0); + if nibble_u8 != 0 { + let mut tmp = [0u16; NUM_SPEEDS_TO_TRY]; + tmp.clone_from_slice(cdfs.split_at(NUM_SPEEDS_TO_TRY * (nibble - 1)).1.split_at(NUM_SPEEDS_TO_TRY).0); + for i in 0..NUM_SPEEDS_TO_TRY { + pdf[i] -= tmp[i]; + } + } + let mut max = [0u16; NUM_SPEEDS_TO_TRY]; + max.clone_from_slice(cdfs.split_at(NUM_SPEEDS_TO_TRY * 15).1); + for i in 0..NUM_SPEEDS_TO_TRY { + if pdf[i] == 0 { + assert!(pdf[i] != 0); + } + if max[i] == 0 { + assert!(max[i] != 0); + } + let del = FastLog2u16(pdf[i]) - FastLog2u16(max[i]); + singleton_cost[i] -= del; + } +} +fn update_cdf(cdfs: &mut [u16], + nibble_u8: u8) { + assert_eq!(cdfs.len(), 16 * NUM_SPEEDS_TO_TRY); + let mut overall_index = nibble_u8 as usize * NUM_SPEEDS_TO_TRY; + for _nibble in (nibble_u8 as usize & 0xf) .. 16 { + for speed_index in 0..NUM_SPEEDS_TO_TRY { + cdfs[overall_index + speed_index] += SPEEDS_TO_SEARCH[speed_index]; + } + overall_index += NUM_SPEEDS_TO_TRY; + } + overall_index = 0; + for nibble in 0 .. 16 { + for speed_index in 0..NUM_SPEEDS_TO_TRY { + if nibble == 0 { + assert!(cdfs[overall_index + speed_index] != 0); + } else { + assert!(cdfs[overall_index + speed_index] - cdfs[overall_index + speed_index - NUM_SPEEDS_TO_TRY] != 0); + } + } + overall_index += NUM_SPEEDS_TO_TRY; + } + for max_index in 0..NUM_SPEEDS_TO_TRY { + if cdfs[15 * NUM_SPEEDS_TO_TRY + max_index] >= MAXES_TO_SEARCH[max_index] { + const CDF_BIAS:[u16;16] = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; + for nibble_index in 0..16 { + let tmp = &mut cdfs[nibble_index * NUM_SPEEDS_TO_TRY + max_index]; + *tmp = (tmp.wrapping_add(CDF_BIAS[nibble_index])).wrapping_sub(tmp.wrapping_add(CDF_BIAS[nibble_index]) >> 2); + } + } + } + overall_index = 0; + for nibble in 0 .. 16 { + for speed_index in 0..NUM_SPEEDS_TO_TRY { + if nibble == 0 { + assert!(cdfs[overall_index + speed_index] != 0); + } else { + assert!(cdfs[overall_index + speed_index] - cdfs[overall_index + speed_index - NUM_SPEEDS_TO_TRY] != 0); + } + } + overall_index += NUM_SPEEDS_TO_TRY; + } +} + +fn extract_single_cdf(cdf_bundle:&[u16], index:usize) -> [u16;16] { + assert_eq!(cdf_bundle.len(), 16 * NUM_SPEEDS_TO_TRY); + assert!(index < NUM_SPEEDS_TO_TRY); + [ + cdf_bundle[index + 0 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 1 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 2 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 3 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 4 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 5 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 6 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 7 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 8 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 9 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 10 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 11 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 12 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 13 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 14 * NUM_SPEEDS_TO_TRY], + cdf_bundle[index + 15 * NUM_SPEEDS_TO_TRY], + ] +} + +fn min_cost_index_for_speed(cost: &[floatX]) -> usize { + assert_eq!(cost.len(), NUM_SPEEDS_TO_TRY); + let mut min_cost = cost[0]; + let mut best_choice = 0; + for i in 1..NUM_SPEEDS_TO_TRY { + if cost[i] < min_cost { + best_choice = i; + min_cost = cost[i]; + } + } + best_choice +} +fn min_cost_speed_max(cost: &[floatX]) -> SpeedAndMax { + let best_choice = min_cost_index_for_speed(cost); + SpeedAndMax( + SPEEDS_TO_SEARCH[best_choice], + MAXES_TO_SEARCH[best_choice]) +} + +fn min_cost_value(cost: &[floatX]) -> floatX { + let best_choice = min_cost_index_for_speed(cost); + cost[best_choice] +} + +const SINGLETON_COMBINED_STRATEGY: usize = 2; +const SINGLETON_STRIDE_STRATEGY: usize = 1; +const SINGLETON_CM_STRATEGY: usize = 0; + +pub struct ContextMapEntropy<'a, + Alloc:alloc::Allocator + alloc::Allocator + alloc::Allocator, + > { + input: InputPair<'a>, + context_map: interface::PredictionModeContextMap>, + block_type: u8, + cur_stride: u8, + local_byte_offset: usize, + weight: [[Weights; NUM_SPEEDS_TO_TRY];2], + + cm_priors: >::AllocatedMemory, + stride_priors: >::AllocatedMemory, + _stride_pyramid_leaves: [u8; find_stride::NUM_LEAF_NODES], + singleton_costs: [[[floatX;NUM_SPEEDS_TO_TRY];2];3], +} +impl<'a, + Alloc:alloc::Allocator + alloc::Allocator + alloc::Allocator, + > ContextMapEntropy<'a, Alloc> { + pub fn new(m16: &mut Alloc, + input: InputPair<'a>, + stride: [u8; find_stride::NUM_LEAF_NODES], + prediction_mode: interface::PredictionModeContextMap>, + cdf_detection_quality: u8) -> Self { + let cdf_detect = cdf_detection_quality != 0; + let mut ret = ContextMapEntropy::{ + input: input, + context_map: prediction_mode, + block_type: 0, + cur_stride: 1, + local_byte_offset: 0, + cm_priors: if cdf_detect {>::alloc_cell(m16, CONTEXT_MAP_PRIOR_SIZE)} else {>::AllocatedMemory::default()}, + stride_priors: if cdf_detect {>::alloc_cell(m16, STRIDE_PRIOR_SIZE)} else {>::AllocatedMemory::default()}, + _stride_pyramid_leaves: stride, + weight:[[Weights::new(); NUM_SPEEDS_TO_TRY], + [Weights::new(); NUM_SPEEDS_TO_TRY]], + singleton_costs:[[[0.0 as floatX;NUM_SPEEDS_TO_TRY];2];3], + }; + if cdf_detect { + init_cdfs(ret.cm_priors.slice_mut()); + init_cdfs(ret.stride_priors.slice_mut()); + } + ret + } + pub fn take_prediction_mode(&mut self) -> interface::PredictionModeContextMap> { + core::mem::replace(&mut self.context_map, interface::PredictionModeContextMap::>{ + literal_context_map:InputReferenceMut::default(), + predmode_speed_and_distance_context_map:InputReferenceMut::default(), + }) + } + pub fn prediction_mode_mut(&mut self) -> &mut interface::PredictionModeContextMap> { + &mut self.context_map + } + pub fn best_singleton_speeds(&self, + cm: bool, + combined: bool) -> ([SpeedAndMax;2], [floatX; 2]) { + let cost_type_index = if combined { + 2usize + } else if cm { + 0usize + } else { + 1usize + }; + let mut ret_cost = [self.singleton_costs[cost_type_index][0][0], + self.singleton_costs[cost_type_index][1][0]]; + let mut best_indexes = [0,0]; + for speed_index in 1..NUM_SPEEDS_TO_TRY { + for highness in 0..2 { + let cur_cost = self.singleton_costs[cost_type_index][highness][speed_index]; + if cur_cost < ret_cost[highness] { + best_indexes[highness] = speed_index; + ret_cost[highness] = cur_cost; + } + } + } + let ret_speed = [SpeedAndMax(SPEEDS_TO_SEARCH[best_indexes[0]], + MAXES_TO_SEARCH[best_indexes[0]]), + SpeedAndMax(SPEEDS_TO_SEARCH[best_indexes[1]], + MAXES_TO_SEARCH[best_indexes[1]])]; + (ret_speed, ret_cost) + } + pub fn best_speeds(&mut self, // mut due to helpers + cm:bool, + combined: bool) -> [SpeedAndMax;2] { + let mut ret = [SpeedAndMax(SPEEDS_TO_SEARCH[0],MAXES_TO_SEARCH[0]); 2]; + let cost_type_index = if combined { + 2usize + } else if cm { + 0usize + } else { + 1usize + }; + for high in 0..2 { + /*eprintln!("TRIAL {} {}", cm, combined); + for i in 0..NUM_SPEEDS_TO_TRY { + eprintln!("{},{} costs {:?}", SPEEDS_TO_SEARCH[i], MAXES_TO_SEARCH[i], self.singleton_costs[cost_type_index][high][i]); + }*/ + ret[high] = min_cost_speed_max(&self.singleton_costs[cost_type_index][high][..]); + } + ret + } + pub fn best_speeds_costs(&mut self, // mut due to helpers + cm:bool, + combined: bool) -> [floatX;2] { + let cost_type_index = if combined { + 2usize + } else if cm { + 0usize + } else { + 1usize + }; + let mut ret = [0.0 as floatX; 2]; + for high in 0..2 { + ret[high] = min_cost_value(&self.singleton_costs[cost_type_index][high][..]); + } + ret + } + pub fn free(&mut self, alloc: &mut Alloc) { + >::free_cell(alloc, core::mem::replace(&mut self.cm_priors, >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut self.stride_priors, >::AllocatedMemory::default())); + } + fn update_cost_base(&mut self, stride_prior: u8, _selected_bits:u8, cm_prior: usize, literal: u8) { + let upper_nibble = (literal >> 4); + let lower_nibble = literal & 0xf; + let provisional_cm_high_cdf: [u16; 16]; + let provisional_cm_low_cdf: [u16; 16]; + { + let cm_cdf_high = get_cm_cdf_high(self.cm_priors.slice_mut(), cm_prior); + compute_cost(&mut self.singleton_costs[SINGLETON_CM_STRATEGY][1], + cm_cdf_high, upper_nibble); + // choose a fairly reasonable cm speed rather than a selected one + let best_cm_index = DEFAULT_CM_SPEED_INDEX;// = min_cost_index_for_speed(&self.singleton_costs[SINGLETON_CM_STRATEGY][1]); + provisional_cm_high_cdf = extract_single_cdf(cm_cdf_high, best_cm_index); + } + { + let cm_cdf_low = get_cm_cdf_low(self.cm_priors.slice_mut(), cm_prior, upper_nibble); + compute_cost(&mut self.singleton_costs[SINGLETON_CM_STRATEGY][0], + cm_cdf_low, lower_nibble); + // choose a fairly reasonable cm speed rather than a selected one + let best_cm_index = DEFAULT_CM_SPEED_INDEX;//min_cost_index_for_speed(&self.singleton_costs[SINGLETON_CM_STRATEGY][0]); + provisional_cm_low_cdf = extract_single_cdf(cm_cdf_low, best_cm_index); + } + { + let stride_cdf_high = get_stride_cdf_high(self.stride_priors.slice_mut(), stride_prior, cm_prior); + compute_combined_cost(&mut self.singleton_costs[SINGLETON_COMBINED_STRATEGY][1], + stride_cdf_high, provisional_cm_high_cdf, upper_nibble, &mut self.weight[1]); + compute_cost(&mut self.singleton_costs[SINGLETON_STRIDE_STRATEGY][1], + stride_cdf_high, upper_nibble); + update_cdf(stride_cdf_high, upper_nibble); + } + { + let stride_cdf_low = get_stride_cdf_low(self.stride_priors.slice_mut(), stride_prior, cm_prior, upper_nibble); + compute_combined_cost(&mut self.singleton_costs[SINGLETON_COMBINED_STRATEGY][0], + stride_cdf_low, provisional_cm_low_cdf, lower_nibble, &mut self.weight[0]); + compute_cost(&mut self.singleton_costs[SINGLETON_STRIDE_STRATEGY][0], + stride_cdf_low, + lower_nibble); + update_cdf(stride_cdf_low, lower_nibble); + } + { + let cm_cdf_high = get_cm_cdf_high(self.cm_priors.slice_mut(), cm_prior); + update_cdf(cm_cdf_high, upper_nibble); + } + { + let cm_cdf_low = get_cm_cdf_low(self.cm_priors.slice_mut(), cm_prior, upper_nibble); + update_cdf(cm_cdf_low, lower_nibble); + } + } +} + +impl<'a, 'b, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> interface::CommandProcessor<'b> for ContextMapEntropy<'a, Alloc> { + fn push(&mut self, + val: interface::Command>) { + push_base(self, val) + } +} + +impl<'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> IRInterpreter for ContextMapEntropy<'a, Alloc> { + fn inc_local_byte_offset(&mut self, inc: usize) { + self.local_byte_offset += inc; + } + fn local_byte_offset(&self) -> usize { + self.local_byte_offset + } + fn update_block_type(&mut self, new_type: u8, stride: u8) { + self.block_type = new_type; + self.cur_stride = stride; + } + fn block_type(&self) -> u8 { + self.block_type + } + fn literal_data_at_offset(&self, index:usize) -> u8 { + self.input[index] + } + fn literal_context_map(&self) -> &[u8] { + self.context_map.literal_context_map.slice() + } + fn prediction_mode(&self) -> ::interface::LiteralPredictionModeNibble { + self.context_map.literal_prediction_mode() + } + fn update_cost(&mut self, stride_prior: [u8;8], stride_prior_offset: usize, selected_bits: u8, cm_prior: usize, literal: u8) { + let stride = self.cur_stride as usize; + self.update_cost_base(stride_prior[stride_prior_offset.wrapping_sub(stride) & 7], selected_bits, cm_prior, literal) + } +} + + diff --git a/rust/vendor/brotli/src/enc/dictionary_hash.rs b/rust/vendor/brotli/src/enc/dictionary_hash.rs new file mode 100755 index 0000000..eef5d14 --- /dev/null +++ b/rust/vendor/brotli/src/enc/dictionary_hash.rs @@ -0,0 +1,32769 @@ +#![allow(dead_code)] +pub static kStaticDictionaryHash: [u16; 32768] = [32072, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21860, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40486, + 0, + 0, + 0, + 0, + 0, + 45798, + 0, + 0, + 0, + 0, + 0, + 0, + 1292, + 0, + 0, + 0, + 0, + 4964, + 278, + 23717, + 0, + 19972, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2126, + 16102, + 0, + 0, + 0, + 14437, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26727, + 2253, + 0, + 0, + 17252, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3622, + 0, + 0, + 0, + 0, + 22984, + 0, + 0, + 0, + 0, + 0, + 0, + 16647, + 0, + 34247, + 0, + 0, + 0, + 0, + 0, + 48486, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2511, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19532, + 0, + 0, + 24004, + 0, + 0, + 0, + 9828, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30853, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31974, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20650, + 2404, + 0, + 20773, + 1677, + 9031, + 0, + 6404, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 51879, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6761, + 7206, + 0, + 0, + 21992, + 22983, + 0, + 0, + 3529, + 0, + 1864, + 0, + 0, + 0, + 0, + 0, + 0, + 11046, + 0, + 0, + 9641, + 0, + 0, + 0, + 6507, + 0, + 0, + 36934, + 21576, + 62375, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8294, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40807, + 0, + 0, + 0, + 39398, + 8136, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8875, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7941, + 0, + 0, + 25609, + 0, + 0, + 0, + 936, + 3716, + 3213, + 15687, + 0, + 0, + 0, + 0, + 0, + 52519, + 0, + 17381, + 0, + 0, + 0, + 0, + 1320, + 5797, + 0, + 21029, + 0, + 0, + 6472, + 807, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13545, + 0, + 0, + 0, + 3624, + 0, + 0, + 0, + 29674, + 30820, + 0, + 31237, + 0, + 6596, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64070, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22278, + 0, + 37446, + 0, + 0, + 0, + 0, + 7240, + 423, + 0, + 24612, + 21705, + 17636, + 0, + 0, + 0, + 0, + 0, + 0, + 1833, + 0, + 0, + 0, + 328, + 6021, + 0, + 0, + 0, + 19974, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 62119, + 4178, + 0, + 0, + 0, + 0, + 12100, + 8617, + 0, + 0, + 16900, + 0, + 36678, + 0, + 0, + 0, + 35366, + 0, + 51718, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20998, + 0, + 62086, + 0, + 0, + 0, + 0, + 0, + 5542, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14629, + 10952, + 25927, + 0, + 0, + 0, + 0, + 19849, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30952, + 3046, + 14314, + 12998, + 0, + 0, + 0, + 15268, + 0, + 40582, + 30216, + 62118, + 0, + 0, + 0, + 20132, + 0, + 0, + 0, + 0, + 0, + 12005, + 0, + 0, + 0, + 52358, + 0, + 0, + 0, + 0, + 24778, + 0, + 44, + 33095, + 0, + 0, + 0, + 0, + 0, + 26372, + 0, + 0, + 0, + 0, + 0, + 3781, + 0, + 0, + 17928, + 9479, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32297, + 28613, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47174, + 11723, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2536, + 55143, + 0, + 0, + 6410, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 56294, + 11914, + 0, + 529, + 0, + 30184, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8261, + 0, + 0, + 28808, + 58854, + 22633, + 965, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64135, + 0, + 0, + 331, + 3684, + 0, + 1605, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16650, + 37, + 0, + 23622, + 3144, + 15429, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22443, + 69, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17832, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11113, + 0, + 0, + 0, + 0, + 18309, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26630, + 0, + 0, + 25512, + 25895, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16901, + 0, + 0, + 0, + 27558, + 0, + 0, + 9418, + 0, + 0, + 0, + 3508, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37990, + 9289, + 8517, + 0, + 0, + 0, + 0, + 1578, + 1604, + 23944, + 0, + 0, + 14916, + 12781, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12105, + 0, + 16617, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21348, + 11240, + 28870, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5772, + 0, + 0, + 27812, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8324, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16748, + 1157, + 0, + 0, + 18794, + 16324, + 25898, + 935, + 8333, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18246, + 0, + 18086, + 0, + 46854, + 0, + 0, + 0, + 0, + 0, + 0, + 339, + 0, + 0, + 25188, + 12780, + 12166, + 6409, + 0, + 0, + 0, + 0, + 16516, + 0, + 27012, + 28395, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1420, + 0, + 0, + 0, + 9768, + 52967, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25163, + 324, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64998, + 0, + 0, + 0, + 0, + 0, + 21893, + 0, + 0, + 0, + 0, + 0, + 47366, + 0, + 0, + 0, + 870, + 0, + 0, + 0, + 12646, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26020, + 16360, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1809, + 0, + 0, + 0, + 6601, + 15878, + 0, + 0, + 0, + 0, + 0, + 29092, + 0, + 28516, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21988, + 0, + 0, + 0, + 42950, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5133, + 1318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 54982, + 24904, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 51526, + 0, + 0, + 0, + 0, + 0, + 3685, + 0, + 0, + 0, + 0, + 10062, + 9412, + 0, + 0, + 0, + 31460, + 5708, + 6181, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5575, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27144, + 57478, + 0, + 0, + 0, + 0, + 0, + 0, + 7084, + 0, + 21993, + 53126, + 0, + 0, + 0, + 0, + 8397, + 0, + 0, + 5733, + 0, + 0, + 0, + 0, + 0, + 2116, + 0, + 24742, + 0, + 11271, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1133, + 0, + 4873, + 0, + 0, + 38310, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17932, + 0, + 0, + 18053, + 0, + 0, + 0, + 25510, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17798, + 0, + 26214, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23016, + 17415, + 20392, + 164, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3239, + 0, + 46119, + 0, + 0, + 0, + 28580, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7621, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41478, + 0, + 0, + 31016, + 55334, + 10056, + 1924, + 0, + 0, + 0, + 0, + 0, + 36614, + 0, + 36711, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13994, + 59303, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26501, + 0, + 5639, + 0, + 0, + 0, + 0, + 0, + 0, + 13897, + 1253, + 0, + 0, + 0, + 0, + 0, + 5095, + 0, + 0, + 0, + 28869, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8646, + 0, + 0, + 0, + 0, + 25641, + 17796, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13316, + 620, + 6309, + 11819, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 904, + 1095, + 0, + 24229, + 0, + 0, + 28744, + 49703, + 0, + 23077, + 0, + 0, + 0, + 0, + 32392, + 0, + 0, + 0, + 0, + 35271, + 0, + 28740, + 5866, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4361, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7917, + 8869, + 0, + 0, + 0, + 13924, + 0, + 0, + 0, + 0, + 0, + 41958, + 0, + 0, + 0, + 0, + 0, + 0, + 6766, + 13989, + 0, + 0, + 0, + 903, + 0, + 0, + 24010, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64390, + 0, + 22468, + 0, + 25861, + 0, + 0, + 0, + 0, + 23656, + 5317, + 0, + 0, + 0, + 0, + 0, + 0, + 23017, + 5445, + 16009, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 48006, + 10473, + 0, + 0, + 14404, + 0, + 0, + 0, + 42183, + 0, + 0, + 0, + 51270, + 0, + 0, + 10602, + 24132, + 0, + 0, + 0, + 0, + 0, + 43782, + 0, + 0, + 17834, + 0, + 0, + 0, + 25576, + 27205, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29066, + 0, + 0, + 0, + 0, + 0, + 626, + 1988, + 14700, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 57670, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44710, + 0, + 0, + 0, + 0, + 3848, + 7623, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42374, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19272, + 6436, + 0, + 0, + 5256, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19685, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39783, + 0, + 0, + 0, + 0, + 30984, + 0, + 0, + 0, + 0, + 0, + 0, + 28230, + 0, + 0, + 0, + 29028, + 10538, + 3205, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5636, + 840, + 295, + 0, + 0, + 8488, + 8198, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20580, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4074, + 19526, + 0, + 0, + 0, + 0, + 31144, + 64038, + 0, + 0, + 0, + 0, + 0, + 0, + 16716, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17706, + 0, + 0, + 0, + 0, + 0, + 0, + 50630, + 0, + 50503, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25446, + 0, + 0, + 0, + 13831, + 0, + 0, + 0, + 0, + 0, + 0, + 2696, + 4039, + 0, + 0, + 0, + 0, + 25288, + 0, + 12076, + 2054, + 0, + 48934, + 0, + 0, + 0, + 0, + 16969, + 59431, + 17259, + 35335, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31275, + 0, + 0, + 0, + 1097, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 776, + 839, + 0, + 0, + 29386, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5864, + 12134, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25349, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 61447, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24678, + 0, + 0, + 0, + 63335, + 0, + 28836, + 8142, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4494, + 0, + 0, + 0, + 0, + 0, + 14088, + 1188, + 0, + 16260, + 0, + 0, + 0, + 16421, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 276, + 0, + 0, + 17060, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24076, + 29445, + 0, + 33543, + 0, + 4901, + 0, + 0, + 12522, + 0, + 0, + 62471, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4046, + 0, + 0, + 0, + 0, + 20486, + 0, + 15460, + 2217, + 51719, + 0, + 0, + 0, + 0, + 0, + 23495, + 0, + 0, + 0, + 0, + 0, + 0, + 15370, + 0, + 15849, + 0, + 15113, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27972, + 7337, + 0, + 0, + 0, + 0, + 30342, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32299, + 23940, + 0, + 17766, + 0, + 0, + 0, + 0, + 0, + 0, + 6184, + 0, + 20904, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31492, + 0, + 0, + 0, + 5509, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2669, + 50182, + 0, + 0, + 12299, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5257, + 28167, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11750, + 3890, + 0, + 0, + 26500, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10981, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17961, + 1831, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29638, + 0, + 0, + 0, + 0, + 26473, + 0, + 6216, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 711, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28683, + 39975, + 0, + 0, + 0, + 0, + 0, + 51654, + 0, + 0, + 0, + 27527, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30859, + 3268, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28772, + 0, + 18212, + 0, + 0, + 0, + 0, + 25448, + 65446, + 0, + 0, + 0, + 0, + 0, + 0, + 3337, + 1670, + 0, + 0, + 0, + 0, + 0, + 19332, + 0, + 0, + 0, + 0, + 24936, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1043, + 0, + 0, + 0, + 0, + 15814, + 0, + 21670, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16263, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32454, + 0, + 30630, + 0, + 0, + 20170, + 9926, + 0, + 0, + 0, + 18247, + 0, + 0, + 14376, + 0, + 2056, + 17191, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7812, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22474, + 52806, + 1588, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10825, + 0, + 0, + 0, + 0, + 40934, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28677, + 0, + 0, + 5714, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25865, + 22246, + 0, + 0, + 0, + 0, + 17256, + 35751, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8236, + 0, + 32108, + 0, + 0, + 0, + 43, + 14342, + 0, + 16517, + 0, + 0, + 30732, + 0, + 4012, + 133, + 0, + 40583, + 971, + 23942, + 0, + 0, + 27275, + 0, + 0, + 0, + 204, + 0, + 0, + 27140, + 7564, + 44327, + 27592, + 57958, + 0, + 0, + 0, + 0, + 22344, + 25701, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19524, + 31755, + 0, + 0, + 28102, + 0, + 59111, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12261, + 0, + 44934, + 0, + 0, + 0, + 0, + 31560, + 0, + 11114, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18953, + 18311, + 0, + 45159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2059, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19399, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 58534, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22411, + 23943, + 0, + 0, + 0, + 0, + 0, + 0, + 11690, + 0, + 0, + 4069, + 0, + 0, + 2668, + 6342, + 0, + 0, + 0, + 0, + 0, + 0, + 27658, + 1766, + 0, + 0, + 0, + 0, + 23240, + 56070, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 34119, + 0, + 24453, + 0, + 0, + 0, + 0, + 21867, + 0, + 17610, + 9894, + 0, + 0, + 27976, + 38790, + 0, + 0, + 0, + 43654, + 0, + 31559, + 12202, + 23142, + 0, + 0, + 0, + 50343, + 0, + 0, + 0, + 0, + 0, + 32806, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49895, + 0, + 0, + 0, + 0, + 15786, + 4263, + 0, + 0, + 0, + 0, + 4746, + 3814, + 0, + 0, + 0, + 0, + 0, + 0, + 17192, + 453, + 17323, + 0, + 20328, + 4036, + 0, + 0, + 0, + 15844, + 0, + 0, + 0, + 0, + 27561, + 31940, + 32296, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11499, + 11782, + 0, + 0, + 0, + 0, + 9738, + 50471, + 0, + 0, + 0, + 0, + 0, + 35430, + 0, + 0, + 0, + 0, + 0, + 29734, + 0, + 0, + 0, + 36551, + 0, + 0, + 0, + 0, + 9257, + 5606, + 0, + 13829, + 0, + 7015, + 0, + 0, + 0, + 0, + 0, + 25127, + 0, + 0, + 19051, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2572, + 0, + 0, + 0, + 0, + 0, + 0, + 29797, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42342, + 0, + 0, + 0, + 0, + 9293, + 0, + 17896, + 56038, + 4077, + 0, + 0, + 0, + 29899, + 37351, + 0, + 30823, + 0, + 8326, + 0, + 0, + 0, + 18342, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18569, + 54054, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37254, + 0, + 0, + 31433, + 61510, + 0, + 2022, + 0, + 0, + 0, + 0, + 0, + 25381, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2149, + 25289, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12516, + 14185, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8676, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36486, + 0, + 0, + 0, + 0, + 10889, + 9607, + 0, + 28711, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28490, + 0, + 0, + 0, + 0, + 26181, + 10283, + 1701, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14980, + 0, + 7783, + 0, + 27846, + 0, + 0, + 0, + 56486, + 3892, + 0, + 0, + 0, + 5770, + 16583, + 0, + 26309, + 13422, + 20292, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28742, + 0, + 0, + 0, + 0, + 14536, + 1158, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25801, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42438, + 0, + 3332, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8327, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17353, + 1447, + 0, + 0, + 8427, + 48518, + 1359, + 0, + 0, + 0, + 0, + 0, + 14986, + 0, + 32168, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9230, + 2791, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16073, + 31623, + 4269, + 0, + 0, + 0, + 0, + 0, + 0, + 4519, + 0, + 0, + 27912, + 58950, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8361, + 19812, + 0, + 0, + 0, + 0, + 6056, + 7877, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21701, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9128, + 1125, + 0, + 16548, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17292, + 6854, + 21352, + 0, + 2380, + 0, + 0, + 4007, + 0, + 0, + 0, + 0, + 0, + 24357, + 4202, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10664, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42823, + 3022, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14373, + 0, + 20677, + 3304, + 2759, + 20522, + 64903, + 0, + 0, + 0, + 38, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27814, + 2802, + 8870, + 3758, + 1255, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30027, + 9510, + 0, + 0, + 0, + 0, + 17864, + 14855, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23404, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 51462, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45734, + 0, + 0, + 23467, + 32327, + 0, + 0, + 10826, + 52999, + 0, + 0, + 0, + 33222, + 31336, + 64326, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32166, + 0, + 0, + 3891, + 0, + 0, + 0, + 7017, + 645, + 0, + 0, + 0, + 0, + 0, + 0, + 27915, + 46087, + 0, + 0, + 0, + 21863, + 0, + 34246, + 0, + 0, + 16715, + 0, + 0, + 0, + 0, + 14052, + 21416, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39846, + 0, + 0, + 0, + 0, + 0, + 38982, + 0, + 0, + 17512, + 7460, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15428, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28356, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25445, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11879, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19911, + 0, + 20007, + 0, + 0, + 0, + 10855, + 943, + 0, + 0, + 10821, + 0, + 0, + 0, + 0, + 4170, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9836, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 65415, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9865, + 24646, + 0, + 0, + 0, + 0, + 0, + 40519, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12804, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22091, + 23655, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31686, + 0, + 0, + 0, + 58599, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19620, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24421, + 0, + 28100, + 0, + 0, + 0, + 31268, + 0, + 3204, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14822, + 0, + 0, + 0, + 0, + 19947, + 10182, + 0, + 0, + 9480, + 14821, + 4398, + 0, + 0, + 14532, + 0, + 0, + 0, + 48871, + 1873, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 589, + 1541, + 0, + 0, + 0, + 0, + 0, + 23333, + 0, + 0, + 0, + 14149, + 0, + 0, + 0, + 0, + 1296, + 14374, + 0, + 27300, + 0, + 0, + 0, + 0, + 0, + 0, + 7276, + 0, + 0, + 0, + 0, + 0, + 0, + 47718, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5164, + 1765, + 0, + 14405, + 0, + 37574, + 1994, + 0, + 6636, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27815, + 0, + 0, + 0, + 0, + 2568, + 6820, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11336, + 26247, + 0, + 0, + 23912, + 0, + 0, + 0, + 30536, + 0, + 0, + 34342, + 0, + 17799, + 0, + 0, + 0, + 22149, + 0, + 6118, + 0, + 25732, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26600, + 5190, + 0, + 0, + 1142, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39527, + 0, + 0, + 0, + 0, + 0, + 39494, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3085, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4786, + 0, + 0, + 0, + 28873, + 6532, + 0, + 0, + 26664, + 0, + 9193, + 11719, + 0, + 0, + 0, + 0, + 0, + 0, + 31752, + 64646, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11397, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25094, + 0, + 0, + 18153, + 20167, + 0, + 0, + 0, + 17254, + 0, + 0, + 878, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24166, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26059, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31592, + 0, + 0, + 8167, + 24362, + 6212, + 0, + 34758, + 0, + 0, + 0, + 0, + 0, + 0, + 32520, + 0, + 0, + 44679, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17989, + 8681, + 29222, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10251, + 4902, + 1452, + 15207, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22822, + 0, + 10469, + 0, + 0, + 0, + 0, + 0, + 0, + 19337, + 17670, + 107, + 11494, + 0, + 0, + 0, + 0, + 27305, + 2565, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64518, + 200, + 28389, + 0, + 0, + 0, + 0, + 31208, + 0, + 30762, + 0, + 0, + 0, + 0, + 0, + 29321, + 60518, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3209, + 3237, + 12490, + 22663, + 0, + 0, + 0, + 18789, + 31464, + 16391, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20646, + 0, + 0, + 0, + 27238, + 0, + 0, + 0, + 0, + 0, + 15940, + 4488, + 6951, + 0, + 0, + 0, + 46342, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28965, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20584, + 3367, + 0, + 25350, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1814, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17125, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55943, + 0, + 0, + 0, + 0, + 0, + 24133, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2929, + 0, + 0, + 50086, + 0, + 2918, + 25356, + 30052, + 115, + 11846, + 0, + 0, + 0, + 0, + 3056, + 0, + 0, + 0, + 0, + 17639, + 239, + 19815, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36806, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21479, + 0, + 0, + 0, + 0, + 0, + 28420, + 11786, + 4772, + 0, + 0, + 3368, + 36295, + 0, + 31463, + 0, + 0, + 14665, + 996, + 0, + 20582, + 0, + 0, + 0, + 9988, + 0, + 23685, + 0, + 0, + 0, + 52551, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7556, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1895, + 2186, + 0, + 0, + 0, + 0, + 0, + 27755, + 25447, + 0, + 0, + 0, + 0, + 31052, + 63270, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36742, + 0, + 24804, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31048, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21290, + 2276, + 0, + 0, + 0, + 0, + 26475, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15332, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3176, + 19431, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 62726, + 0, + 0, + 0, + 25380, + 0, + 0, + 27883, + 1316, + 0, + 0, + 7724, + 3015, + 0, + 0, + 0, + 0, + 6697, + 0, + 0, + 47910, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3141, + 0, + 0, + 0, + 14820, + 0, + 0, + 0, + 0, + 9326, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31493, + 0, + 0, + 0, + 0, + 0, + 6566, + 0, + 0, + 0, + 0, + 0, + 0, + 6569, + 1348, + 0, + 25638, + 0, + 0, + 0, + 0, + 0, + 20324, + 0, + 0, + 17067, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11876, + 0, + 41030, + 0, + 0, + 0, + 26405, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11431, + 28137, + 14950, + 0, + 10151, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29574, + 0, + 0, + 0, + 0, + 27176, + 57446, + 0, + 0, + 0, + 0, + 28650, + 57574, + 1387, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 58247, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16805, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3526, + 0, + 15781, + 0, + 5572, + 13352, + 0, + 0, + 0, + 0, + 0, + 18665, + 23463, + 0, + 0, + 0, + 0, + 0, + 0, + 15405, + 6885, + 0, + 0, + 0, + 0, + 15272, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9861, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9512, + 4037, + 0, + 0, + 11563, + 49639, + 0, + 0, + 0, + 0, + 0, + 0, + 27880, + 57830, + 0, + 0, + 0, + 0, + 0, + 41831, + 0, + 21924, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25509, + 0, + 27462, + 0, + 18085, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13898, + 8068, + 26441, + 0, + 0, + 0, + 0, + 0, + 0, + 25316, + 0, + 0, + 0, + 0, + 16298, + 7397, + 5706, + 19239, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1392, + 50919, + 0, + 0, + 0, + 0, + 0, + 53863, + 0, + 0, + 0, + 0, + 1451, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35847, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17801, + 15813, + 0, + 12740, + 0, + 0, + 0, + 32967, + 0, + 0, + 0, + 0, + 0, + 0, + 5389, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31143, + 0, + 20548, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 51686, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12109, + 19015, + 0, + 34983, + 0, + 21732, + 3600, + 0, + 0, + 0, + 0, + 47750, + 17288, + 43975, + 22857, + 47559, + 0, + 0, + 0, + 0, + 26408, + 48358, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30470, + 0, + 0, + 23560, + 4581, + 0, + 22404, + 0, + 49286, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49831, + 0, + 0, + 0, + 27525, + 31691, + 7, + 0, + 0, + 25835, + 0, + 0, + 0, + 0, + 0, + 4201, + 16485, + 0, + 20676, + 0, + 0, + 0, + 0, + 3753, + 23303, + 16264, + 3878, + 0, + 0, + 0, + 0, + 0, + 0, + 11434, + 0, + 0, + 0, + 0, + 0, + 0, + 7589, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 57095, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22820, + 11146, + 49158, + 0, + 23623, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13893, + 0, + 0, + 0, + 0, + 0, + 0, + 11722, + 60071, + 1258, + 0, + 0, + 0, + 0, + 0, + 0, + 18564, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27945, + 0, + 0, + 0, + 0, + 5479, + 0, + 20006, + 17608, + 3431, + 10988, + 30180, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24581, + 14, + 0, + 0, + 0, + 0, + 0, + 0, + 25572, + 0, + 0, + 0, + 28612, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 53543, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 33670, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8710, + 0, + 14116, + 0, + 0, + 116, + 292, + 0, + 0, + 0, + 37831, + 0, + 43078, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21832, + 0, + 0, + 32134, + 783, + 0, + 0, + 30982, + 0, + 0, + 0, + 68, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5932, + 0, + 0, + 0, + 18505, + 15175, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3630, + 16965, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17797, + 0, + 0, + 0, + 0, + 0, + 0, + 520, + 42150, + 0, + 0, + 3122, + 0, + 0, + 0, + 22506, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28550, + 0, + 0, + 0, + 50278, + 0, + 0, + 13641, + 5958, + 0, + 35238, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29993, + 18724, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20619, + 9319, + 0, + 0, + 0, + 0, + 23977, + 0, + 5193, + 0, + 0, + 12196, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24390, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20105, + 677, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29419, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20266, + 0, + 0, + 0, + 0, + 10631, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47655, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26628, + 12744, + 0, + 20648, + 0, + 0, + 0, + 432, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 646, + 0, + 25604, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 63782, + 0, + 0, + 0, + 0, + 24616, + 0, + 0, + 0, + 21291, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45638, + 0, + 0, + 0, + 0, + 1931, + 0, + 0, + 0, + 20521, + 59975, + 0, + 20614, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 56231, + 0, + 0, + 0, + 0, + 0, + 29991, + 0, + 52871, + 0, + 20934, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16871, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7237, + 0, + 0, + 0, + 0, + 0, + 47558, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10406, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43046, + 0, + 0, + 2930, + 0, + 12936, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31141, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37639, + 0, + 17572, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31240, + 0, + 0, + 0, + 0, + 0, + 688, + 0, + 0, + 0, + 0, + 0, + 1648, + 0, + 0, + 0, + 0, + 10055, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 146, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6345, + 199, + 0, + 34982, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 56839, + 0, + 0, + 0, + 0, + 0, + 48902, + 0, + 13412, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2441, + 4420, + 0, + 0, + 0, + 0, + 20428, + 933, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45383, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 54726, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17036, + 741, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27589, + 0, + 0, + 30282, + 18950, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2248, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25993, + 0, + 0, + 0, + 2443, + 0, + 0, + 31622, + 0, + 14150, + 0, + 0, + 0, + 28679, + 0, + 0, + 0, + 0, + 0, + 0, + 15464, + 0, + 0, + 0, + 0, + 54694, + 0, + 0, + 0, + 0, + 0, + 0, + 3827, + 0, + 0, + 0, + 3756, + 0, + 9897, + 0, + 0, + 0, + 0, + 0, + 19082, + 31239, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24580, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16580, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27625, + 0, + 0, + 0, + 784, + 4647, + 32652, + 0, + 0, + 63494, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21062, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3404, + 58470, + 0, + 32325, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18634, + 2789, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8548, + 0, + 0, + 0, + 22501, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15881, + 0, + 0, + 0, + 0, + 35879, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7978, + 17956, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24324, + 0, + 0, + 4937, + 0, + 0, + 0, + 8168, + 0, + 13420, + 10340, + 0, + 0, + 0, + 0, + 0, + 11780, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16712, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17640, + 17991, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2953, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9100, + 16806, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30667, + 0, + 0, + 19013, + 0, + 0, + 0, + 0, + 0, + 0, + 205, + 15334, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1969, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26248, + 52518, + 0, + 49798, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9668, + 0, + 0, + 0, + 0, + 0, + 4742, + 0, + 0, + 21641, + 0, + 0, + 0, + 0, + 0, + 0, + 53574, + 0, + 0, + 0, + 0, + 0, + 0, + 5707, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3018, + 12454, + 0, + 0, + 0, + 0, + 2920, + 262, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3593, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23910, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55879, + 0, + 0, + 0, + 0, + 0, + 775, + 0, + 43270, + 5066, + 48967, + 0, + 0, + 22986, + 4165, + 8971, + 44838, + 0, + 0, + 0, + 0, + 0, + 62279, + 272, + 0, + 0, + 0, + 0, + 51430, + 0, + 0, + 0, + 0, + 0, + 0, + 28234, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13349, + 0, + 0, + 0, + 51111, + 20265, + 13861, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 585, + 7494, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21768, + 62407, + 0, + 0, + 0, + 0, + 7979, + 166, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 38918, + 0, + 56742, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16296, + 5767, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32068, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29796, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23916, + 30183, + 0, + 58791, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20518, + 0, + 0, + 0, + 0, + 8969, + 0, + 0, + 0, + 183, + 0, + 0, + 0, + 0, + 0, + 2314, + 17445, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23748, + 0, + 0, + 8139, + 4839, + 27914, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29478, + 0, + 0, + 16552, + 26663, + 0, + 53767, + 0, + 0, + 13960, + 8039, + 18696, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 782, + 16005, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6258, + 56806, + 16456, + 12455, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23780, + 0, + 0, + 0, + 0, + 0, + 0, + 9355, + 0, + 0, + 0, + 7273, + 41063, + 24780, + 57766, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3820, + 2597, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29225, + 61126, + 0, + 0, + 0, + 58439, + 15691, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37190, + 22408, + 967, + 0, + 0, + 0, + 23078, + 26858, + 0, + 0, + 0, + 19753, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5416, + 13702, + 0, + 0, + 0, + 0, + 0, + 52742, + 20394, + 38567, + 0, + 0, + 0, + 51079, + 0, + 0, + 136, + 8516, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27588, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 531, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8936, + 5031, + 12520, + 19334, + 0, + 0, + 22827, + 30247, + 28074, + 31140, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27497, + 18148, + 20104, + 59079, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24389, + 0, + 0, + 6125, + 0, + 0, + 0, + 0, + 9541, + 0, + 0, + 24553, + 29095, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25444, + 0, + 0, + 9643, + 0, + 0, + 63047, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39558, + 0, + 0, + 0, + 0, + 0, + 0, + 20620, + 11815, + 499, + 0, + 5128, + 2278, + 0, + 0, + 0, + 0, + 0, + 46310, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23530, + 40166, + 2440, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15174, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26922, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26758, + 0, + 0, + 0, + 0, + 0, + 51911, + 0, + 0, + 23532, + 0, + 0, + 0, + 0, + 51238, + 25737, + 44486, + 12622, + 0, + 0, + 0, + 0, + 0, + 0, + 3078, + 0, + 9253, + 0, + 0, + 1128, + 22023, + 0, + 0, + 0, + 21350, + 0, + 16420, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 65094, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22532, + 0, + 48774, + 0, + 34503, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9797, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13797, + 0, + 38279, + 0, + 0, + 1738, + 0, + 489, + 46343, + 0, + 45382, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29030, + 0, + 0, + 0, + 0, + 0, + 0, + 6220, + 56550, + 0, + 0, + 0, + 0, + 0, + 26885, + 0, + 28806, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45958, + 0, + 0, + 0, + 0, + 20553, + 49927, + 0, + 0, + 0, + 0, + 0, + 0, + 3019, + 12358, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26571, + 13319, + 0, + 0, + 653, + 23399, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22316, + 0, + 0, + 21188, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27556, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27878, + 21483, + 27653, + 0, + 29701, + 237, + 0, + 10632, + 0, + 0, + 0, + 0, + 33766, + 0, + 0, + 0, + 0, + 0, + 0, + 31563, + 0, + 0, + 0, + 0, + 0, + 1416, + 2439, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9611, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5611, + 16581, + 26601, + 35462, + 0, + 0, + 0, + 26756, + 0, + 59271, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26984, + 57734, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7882, + 0, + 0, + 0, + 19528, + 6469, + 0, + 0, + 1161, + 0, + 0, + 0, + 7688, + 20935, + 425, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12519, + 0, + 12902, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2411, + 0, + 11725, + 26086, + 0, + 0, + 20201, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11045, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30471, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21541, + 1141, + 21190, + 0, + 9188, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 184, + 1093, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4842, + 0, + 13672, + 0, + 0, + 12230, + 0, + 0, + 0, + 10532, + 0, + 0, + 8937, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28996, + 0, + 0, + 11720, + 26982, + 0, + 46182, + 0, + 43911, + 31754, + 0, + 1160, + 3940, + 0, + 20772, + 0, + 0, + 0, + 0, + 0, + 24549, + 0, + 32582, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31845, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2310, + 11788, + 0, + 0, + 43047, + 0, + 0, + 0, + 18853, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 63622, + 0, + 0, + 7048, + 17318, + 0, + 0, + 0, + 21957, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1039, + 6279, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12197, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46470, + 0, + 0, + 24, + 19719, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39335, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21353, + 3846, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36679, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11268, + 0, + 0, + 0, + 0, + 0, + 9382, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29926, + 0, + 33606, + 0, + 4708, + 2828, + 0, + 0, + 29543, + 0, + 0, + 0, + 0, + 0, + 29893, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3663, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10920, + 7111, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9384, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20388, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37094, + 0, + 0, + 0, + 27110, + 0, + 0, + 0, + 0, + 0, + 0, + 21865, + 0, + 27753, + 30214, + 0, + 0, + 0, + 0, + 0, + 57895, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12648, + 5446, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19784, + 17124, + 0, + 52007, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 758, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24900, + 0, + 0, + 0, + 0, + 0, + 1476, + 0, + 65031, + 0, + 0, + 1205, + 46663, + 0, + 30023, + 11625, + 1094, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10058, + 0, + 0, + 0, + 0, + 0, + 0, + 28455, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14788, + 0, + 0, + 0, + 0, + 16808, + 0, + 0, + 742, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21636, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15944, + 23207, + 0, + 0, + 0, + 0, + 247, + 0, + 0, + 0, + 0, + 24743, + 0, + 0, + 0, + 5252, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29961, + 18660, + 21099, + 46791, + 0, + 7045, + 0, + 0, + 0, + 0, + 25707, + 0, + 0, + 17412, + 3828, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5803, + 5637, + 0, + 38151, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 60103, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 853, + 0, + 0, + 0, + 0, + 0, + 0, + 30215, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8741, + 0, + 0, + 0, + 0, + 0, + 27366, + 0, + 0, + 0, + 0, + 171, + 4070, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24073, + 7366, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2184, + 5189, + 0, + 20932, + 1545, + 4996, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7684, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6313, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30826, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27463, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21640, + 63303, + 0, + 0, + 3275, + 31111, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11556, + 0, + 14756, + 0, + 0, + 0, + 15108, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23914, + 28966, + 0, + 0, + 0, + 4965, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10216, + 5223, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27142, + 0, + 0, + 1173, + 20198, + 0, + 0, + 0, + 0, + 0, + 56614, + 0, + 0, + 0, + 0, + 0, + 4612, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11822, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17769, + 7910, + 0, + 0, + 31880, + 0, + 0, + 6055, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8970, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16840, + 23879, + 0, + 0, + 11051, + 0, + 0, + 0, + 32552, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20842, + 13701, + 0, + 0, + 0, + 37191, + 7373, + 10471, + 17482, + 25348, + 0, + 0, + 0, + 38502, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21509, + 6058, + 0, + 0, + 0, + 0, + 0, + 0, + 3173, + 0, + 0, + 0, + 9543, + 0, + 0, + 0, + 0, + 0, + 0, + 17768, + 12708, + 0, + 0, + 0, + 0, + 0, + 37030, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12748, + 48743, + 0, + 11718, + 0, + 0, + 25194, + 0, + 0, + 0, + 9033, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5028, + 0, + 30118, + 0, + 0, + 0, + 0, + 0, + 42759, + 0, + 0, + 3720, + 0, + 0, + 0, + 0, + 0, + 0, + 25190, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5450, + 5125, + 0, + 58086, + 0, + 0, + 0, + 0, + 0, + 27716, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22052, + 0, + 0, + 0, + 0, + 26249, + 0, + 15947, + 3460, + 0, + 0, + 0, + 35814, + 0, + 0, + 0, + 7813, + 19500, + 32167, + 0, + 18597, + 0, + 0, + 0, + 0, + 0, + 28644, + 0, + 0, + 0, + 60743, + 0, + 0, + 0, + 0, + 0, + 29636, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17220, + 15885, + 9414, + 9642, + 0, + 0, + 0, + 593, + 0, + 0, + 24228, + 0, + 0, + 0, + 0, + 0, + 40422, + 0, + 26244, + 0, + 23109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64902, + 0, + 0, + 0, + 0, + 3979, + 60007, + 0, + 0, + 0, + 28199, + 0, + 0, + 0, + 43142, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29158, + 0, + 30532, + 0, + 0, + 0, + 0, + 13256, + 0, + 0, + 0, + 0, + 16549, + 0, + 0, + 0, + 0, + 0, + 26116, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22825, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1065, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18985, + 4805, + 0, + 0, + 0, + 0, + 0, + 17702, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3468, + 0, + 0, + 0, + 0, + 13447, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 56871, + 0, + 0, + 1776, + 15780, + 0, + 0, + 2603, + 0, + 10280, + 31366, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11592, + 3591, + 0, + 2372, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20004, + 0, + 0, + 0, + 0, + 0, + 0, + 12072, + 518, + 0, + 0, + 1960, + 8999, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7178, + 32999, + 0, + 0, + 0, + 0, + 0, + 0, + 1641, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6764, + 9893, + 490, + 4005, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25258, + 5541, + 0, + 14053, + 306, + 20743, + 0, + 0, + 9422, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11977, + 260, + 0, + 35175, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18405, + 0, + 0, + 0, + 16582, + 0, + 0, + 0, + 22470, + 0, + 0, + 0, + 0, + 0, + 0, + 2792, + 0, + 0, + 0, + 14026, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14858, + 3909, + 0, + 0, + 0, + 57671, + 0, + 0, + 0, + 0, + 0, + 0, + 15979, + 0, + 0, + 0, + 2794, + 15239, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26884, + 9070, + 0, + 0, + 0, + 0, + 51846, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19499, + 37127, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19205, + 10350, + 11910, + 0, + 0, + 0, + 0, + 15083, + 23108, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 169, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15274, + 41735, + 0, + 56774, + 0, + 0, + 2825, + 0, + 14025, + 389, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21482, + 31910, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20456, + 710, + 0, + 0, + 25032, + 21797, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32427, + 21252, + 0, + 30150, + 0, + 43174, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11403, + 0, + 0, + 1029, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6892, + 9252, + 0, + 63206, + 3496, + 14406, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22568, + 0, + 0, + 21253, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39623, + 0, + 0, + 10189, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30729, + 59910, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3305, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7660, + 24871, + 0, + 838, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12013, + 13252, + 0, + 551, + 0, + 0, + 0, + 43207, + 0, + 30567, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28394, + 30724, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22665, + 22725, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29414, + 0, + 0, + 0, + 0, + 16074, + 8966, + 245, + 1445, + 0, + 0, + 0, + 0, + 24872, + 0, + 0, + 0, + 0, + 13124, + 0, + 35527, + 0, + 0, + 0, + 0, + 0, + 0, + 13259, + 10917, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25191, + 0, + 0, + 0, + 13956, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 54631, + 19625, + 12070, + 3083, + 0, + 0, + 0, + 0, + 14436, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21766, + 0, + 15463, + 29322, + 0, + 0, + 0, + 0, + 0, + 0, + 29990, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23653, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2643, + 0, + 0, + 21223, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4114, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 34790, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16103, + 0, + 0, + 0, + 0, + 0, + 0, + 297, + 3620, + 3338, + 10372, + 0, + 14727, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29924, + 22473, + 13895, + 15529, + 32455, + 30378, + 13540, + 0, + 28807, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64582, + 18380, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 38598, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1236, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32710, + 0, + 0, + 0, + 0, + 4590, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64935, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16744, + 0, + 0, + 0, + 0, + 0, + 0, + 20005, + 0, + 0, + 13608, + 1191, + 0, + 0, + 0, + 62183, + 0, + 0, + 0, + 0, + 0, + 24484, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17643, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5380, + 0, + 0, + 32328, + 0, + 0, + 63814, + 0, + 0, + 0, + 2919, + 0, + 0, + 0, + 0, + 17034, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 60295, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7690, + 486, + 0, + 0, + 0, + 39270, + 0, + 49094, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12555, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20967, + 17993, + 12647, + 0, + 0, + 0, + 16036, + 32616, + 0, + 0, + 0, + 0, + 16294, + 8555, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35174, + 0, + 0, + 0, + 0, + 0, + 0, + 30346, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14797, + 3652, + 0, + 0, + 8268, + 12934, + 0, + 54950, + 0, + 0, + 0, + 0, + 2632, + 33959, + 0, + 23175, + 0, + 0, + 0, + 0, + 0, + 36262, + 0, + 0, + 0, + 0, + 0, + 0, + 32684, + 26918, + 0, + 32676, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15625, + 11943, + 1206, + 0, + 0, + 0, + 0, + 18052, + 0, + 0, + 0, + 0, + 0, + 16422, + 0, + 0, + 0, + 26404, + 0, + 0, + 28777, + 0, + 0, + 24902, + 0, + 0, + 408, + 45351, + 0, + 35719, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3658, + 17446, + 0, + 165, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6151, + 0, + 0, + 24424, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24170, + 24293, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11847, + 0, + 39591, + 0, + 0, + 0, + 0, + 0, + 0, + 9549, + 2788, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1010, + 0, + 0, + 0, + 0, + 0, + 0, + 26055, + 31724, + 0, + 24233, + 1828, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17284, + 0, + 0, + 0, + 0, + 19464, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32452, + 0, + 0, + 0, + 28871, + 0, + 0, + 0, + 0, + 17704, + 53383, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17892, + 1938, + 0, + 0, + 0, + 0, + 0, + 16362, + 0, + 0, + 21605, + 0, + 0, + 5003, + 0, + 0, + 0, + 0, + 0, + 0, + 22693, + 0, + 22342, + 0, + 0, + 0, + 55846, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22853, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6600, + 263, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24836, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40711, + 0, + 0, + 0, + 0, + 0, + 33894, + 0, + 0, + 0, + 0, + 0, + 0, + 13000, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30308, + 0, + 0, + 0, + 0, + 0, + 0, + 5386, + 0, + 0, + 0, + 0, + 0, + 0, + 27844, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17740, + 0, + 0, + 0, + 0, + 25093, + 29064, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12680, + 11462, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 84, + 7303, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27044, + 457, + 0, + 22924, + 58246, + 19016, + 0, + 2606, + 45703, + 0, + 5157, + 0, + 25028, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2065, + 0, + 0, + 0, + 0, + 0, + 31946, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 33382, + 0, + 47878, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25004, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26153, + 35654, + 0, + 58055, + 30668, + 0, + 0, + 0, + 0, + 25988, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4456, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7560, + 20583, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37510, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42822, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1733, + 0, + 0, + 0, + 8196, + 0, + 0, + 11241, + 0, + 30572, + 60326, + 0, + 15013, + 0, + 0, + 0, + 40646, + 0, + 23812, + 0, + 10022, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12874, + 31015, + 0, + 0, + 0, + 0, + 0, + 0, + 1608, + 0, + 0, + 0, + 0, + 18308, + 0, + 0, + 0, + 0, + 27114, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7944, + 1382, + 0, + 11813, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24517, + 0, + 11621, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21702, + 0, + 0, + 13100, + 8262, + 2644, + 7973, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1033, + 12581, + 0, + 25221, + 0, + 0, + 0, + 40998, + 16301, + 62983, + 0, + 0, + 0, + 0, + 1263, + 9318, + 0, + 0, + 0, + 18854, + 0, + 0, + 1741, + 33895, + 0, + 0, + 0, + 0, + 0, + 0, + 26377, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32165, + 0, + 51143, + 0, + 0, + 0, + 0, + 0, + 29412, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1674, + 4230, + 0, + 0, + 0, + 0, + 0, + 10502, + 0, + 0, + 0, + 0, + 5545, + 0, + 0, + 0, + 0, + 0, + 2099, + 45158, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14157, + 0, + 26955, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17096, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27050, + 6726, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28554, + 0, + 0, + 7142, + 0, + 0, + 0, + 0, + 16936, + 0, + 0, + 0, + 25833, + 0, + 4399, + 6980, + 0, + 46214, + 0, + 0, + 0, + 0, + 0, + 10630, + 21164, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2446, + 48551, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13381, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15400, + 12135, + 0, + 0, + 0, + 0, + 0, + 4774, + 586, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23751, + 9736, + 4548, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25577, + 29607, + 6250, + 1637, + 0, + 0, + 0, + 0, + 22024, + 0, + 0, + 0, + 0, + 22308, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37414, + 24044, + 0, + 0, + 0, + 14474, + 29735, + 0, + 7077, + 0, + 45990, + 0, + 0, + 0, + 0, + 30568, + 40039, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6150, + 0, + 4228, + 0, + 0, + 0, + 0, + 0, + 27687, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24548, + 21513, + 1350, + 0, + 0, + 0, + 33607, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11784, + 1414, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18244, + 940, + 0, + 0, + 0, + 0, + 0, + 0, + 7270, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16709, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 48935, + 0, + 0, + 0, + 0, + 0, + 0, + 23660, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 53350, + 0, + 0, + 0, + 0, + 0, + 0, + 4236, + 16358, + 0, + 4422, + 6665, + 32644, + 0, + 0, + 744, + 18084, + 0, + 11014, + 0, + 0, + 0, + 0, + 0, + 29508, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7686, + 0, + 0, + 13289, + 5478, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12872, + 0, + 0, + 24134, + 1005, + 22916, + 0, + 31429, + 23400, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28424, + 0, + 0, + 0, + 25706, + 27109, + 0, + 0, + 26345, + 0, + 0, + 0, + 0, + 0, + 0, + 25126, + 0, + 0, + 88, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17032, + 0, + 0, + 21799, + 0, + 0, + 10060, + 0, + 12296, + 21892, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20777, + 14311, + 0, + 58182, + 32232, + 0, + 10282, + 0, + 2121, + 11527, + 0, + 0, + 0, + 12325, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28804, + 2344, + 8133, + 0, + 0, + 0, + 0, + 21864, + 62695, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2771, + 0, + 0, + 23204, + 0, + 0, + 0, + 0, + 0, + 6278, + 0, + 0, + 0, + 0, + 0, + 26597, + 0, + 0, + 0, + 0, + 23144, + 0, + 0, + 0, + 0, + 0, + 31816, + 20070, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24456, + 2118, + 0, + 0, + 0, + 0, + 6570, + 1156, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30406, + 0, + 0, + 0, + 28388, + 3572, + 0, + 0, + 26599, + 12426, + 5286, + 0, + 0, + 0, + 0, + 0, + 4967, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24970, + 24167, + 0, + 0, + 0, + 0, + 28745, + 4678, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1444, + 236, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19428, + 0, + 0, + 0, + 0, + 0, + 0, + 2092, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2827, + 0, + 0, + 0, + 0, + 0, + 19881, + 19204, + 0, + 11749, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17958, + 0, + 17894, + 0, + 18726, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9190, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21510, + 5033, + 0, + 0, + 0, + 0, + 22855, + 0, + 0, + 0, + 0, + 0, + 14598, + 0, + 29605, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 617, + 0, + 0, + 0, + 0, + 47142, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3627, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2225, + 14823, + 0, + 0, + 2637, + 6182, + 78, + 15078, + 0, + 0, + 0, + 0, + 20264, + 0, + 0, + 0, + 0, + 0, + 0, + 36743, + 4140, + 44551, + 17352, + 25703, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14024, + 0, + 0, + 0, + 0, + 0, + 0, + 28004, + 0, + 0, + 0, + 0, + 0, + 7588, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2087, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18028, + 0, + 0, + 0, + 300, + 14212, + 0, + 0, + 1386, + 40327, + 0, + 0, + 0, + 0, + 0, + 0, + 31082, + 0, + 0, + 22374, + 0, + 0, + 0, + 0, + 0, + 35718, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26532, + 7756, + 0, + 0, + 18982, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6440, + 1159, + 7180, + 0, + 0, + 0, + 0, + 0, + 0, + 45766, + 0, + 57798, + 0, + 16740, + 0, + 0, + 6802, + 60454, + 0, + 0, + 0, + 26470, + 0, + 0, + 0, + 0, + 0, + 65382, + 4362, + 7750, + 0, + 0, + 0, + 0, + 0, + 0, + 9096, + 4743, + 334, + 0, + 0, + 0, + 0, + 0, + 0, + 39974, + 0, + 0, + 0, + 25828, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3027, + 0, + 0, + 0, + 15816, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 48327, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16168, + 41799, + 0, + 0, + 24458, + 8581, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12292, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 54503, + 0, + 0, + 0, + 0, + 5097, + 30852, + 18664, + 0, + 0, + 0, + 0, + 0, + 0, + 16484, + 0, + 0, + 27337, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35942, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4356, + 0, + 0, + 0, + 0, + 0, + 57030, + 0, + 0, + 1417, + 41191, + 0, + 0, + 0, + 0, + 0, + 23429, + 0, + 0, + 0, + 0, + 10024, + 21735, + 0, + 0, + 10126, + 0, + 0, + 0, + 0, + 19046, + 0, + 0, + 0, + 0, + 0, + 0, + 24105, + 4710, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4394, + 0, + 0, + 0, + 0, + 13253, + 0, + 56391, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19174, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55974, + 0, + 0, + 0, + 52070, + 0, + 15620, + 0, + 0, + 0, + 0, + 0, + 2660, + 0, + 0, + 0, + 0, + 21644, + 0, + 0, + 52455, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8902, + 0, + 0, + 0, + 0, + 0, + 0, + 3116, + 0, + 464, + 34726, + 0, + 0, + 0, + 0, + 0, + 0, + 25003, + 12423, + 0, + 27172, + 1896, + 7335, + 0, + 0, + 0, + 0, + 0, + 35686, + 0, + 0, + 0, + 0, + 3472, + 0, + 0, + 0, + 0, + 22406, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45254, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21124, + 23594, + 33127, + 0, + 0, + 0, + 0, + 0, + 0, + 16684, + 22087, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8714, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55814, + 0, + 0, + 0, + 0, + 0, + 0, + 4109, + 23460, + 0, + 0, + 8874, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 147, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29960, + 63398, + 1302, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24806, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9799, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31333, + 0, + 0, + 0, + 0, + 0, + 19557, + 0, + 0, + 0, + 0, + 0, + 5701, + 0, + 0, + 0, + 63014, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21254, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12484, + 0, + 0, + 0, + 48326, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15783, + 0, + 0, + 1202, + 0, + 0, + 0, + 0, + 23174, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3086, + 49191, + 0, + 0, + 5387, + 15141, + 0, + 0, + 0, + 3365, + 0, + 0, + 0, + 0, + 20076, + 14021, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 376, + 40198, + 0, + 0, + 0, + 52039, + 0, + 24932, + 0, + 0, + 0, + 0, + 808, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9860, + 0, + 0, + 0, + 0, + 0, + 23719, + 0, + 21476, + 0, + 0, + 0, + 0, + 20776, + 4807, + 0, + 0, + 3177, + 16678, + 0, + 0, + 110, + 10853, + 0, + 0, + 0, + 17382, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43462, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7500, + 4966, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 52102, + 0, + 24516, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26535, + 0, + 0, + 0, + 46247, + 0, + 0, + 0, + 15557, + 0, + 0, + 0, + 0, + 76, + 52327, + 0, + 0, + 0, + 0, + 17866, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46758, + 0, + 0, + 0, + 0, + 0, + 19173, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44038, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2985, + 0, + 0, + 0, + 0, + 0, + 0, + 14310, + 0, + 0, + 2125, + 45831, + 0, + 0, + 0, + 0, + 0, + 0, + 9838, + 0, + 13227, + 19492, + 0, + 0, + 0, + 29764, + 0, + 0, + 0, + 0, + 686, + 30053, + 0, + 0, + 0, + 0, + 0, + 30789, + 139, + 20837, + 0, + 0, + 0, + 0, + 502, + 18533, + 0, + 0, + 0, + 0, + 0, + 19111, + 0, + 0, + 0, + 0, + 0, + 31396, + 0, + 0, + 0, + 17444, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49862, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25610, + 550, + 0, + 0, + 561, + 0, + 29034, + 0, + 0, + 0, + 3528, + 0, + 0, + 0, + 1715, + 14661, + 18, + 63463, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14186, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29578, + 59014, + 0, + 39430, + 0, + 0, + 0, + 0, + 2250, + 16612, + 0, + 31780, + 0, + 0, + 0, + 0, + 0, + 0, + 462, + 16967, + 0, + 29029, + 0, + 0, + 0, + 0, + 0, + 23462, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1768, + 0, + 6025, + 16998, + 1804, + 0, + 0, + 54182, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14124, + 0, + 6154, + 29702, + 0, + 0, + 0, + 0, + 0, + 7716, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 48807, + 0, + 8292, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16389, + 5933, + 0, + 14857, + 51303, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35623, + 9097, + 23047, + 0, + 0, + 23112, + 0, + 0, + 0, + 0, + 0, + 438, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 151, + 9254, + 1390, + 0, + 0, + 0, + 0, + 0, + 0, + 54215, + 0, + 0, + 0, + 0, + 6187, + 0, + 0, + 0, + 0, + 13095, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9866, + 0, + 0, + 59622, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25286, + 0, + 0, + 23848, + 32069, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9255, + 2187, + 15270, + 437, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19493, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11748, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16902, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22212, + 1865, + 17543, + 0, + 0, + 0, + 0, + 0, + 0, + 21996, + 0, + 0, + 0, + 0, + 55975, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32138, + 21156, + 0, + 0, + 0, + 0, + 0, + 0, + 14249, + 0, + 0, + 0, + 2388, + 0, + 0, + 0, + 0, + 6823, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26694, + 0, + 0, + 6059, + 53511, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49542, + 6159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1036, + 24036, + 0, + 2501, + 0, + 0, + 0, + 0, + 0, + 0, + 17419, + 51271, + 3377, + 15142, + 0, + 0, + 0, + 0, + 0, + 0, + 5007, + 62374, + 0, + 56935, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24422, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 942, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28263, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15622, + 0, + 19749, + 0, + 0, + 1611, + 0, + 22219, + 48583, + 25129, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17476, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 721, + 0, + 0, + 0, + 0, + 32518, + 0, + 0, + 0, + 18469, + 0, + 0, + 0, + 0, + 0, + 0, + 5896, + 29927, + 3657, + 23046, + 0, + 0, + 3214, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 112, + 0, + 0, + 0, + 0, + 0, + 3048, + 455, + 0, + 31012, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23270, + 0, + 32677, + 0, + 0, + 0, + 0, + 0, + 38086, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4900, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25541, + 0, + 18788, + 0, + 0, + 22248, + 1351, + 0, + 61734, + 4524, + 30629, + 0, + 14887, + 242, + 29063, + 0, + 0, + 14408, + 4741, + 0, + 0, + 0, + 37318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8106, + 0, + 32107, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1481, + 0, + 0, + 28132, + 0, + 25798, + 0, + 59783, + 0, + 0, + 0, + 0, + 0, + 59078, + 0, + 0, + 0, + 23366, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30887, + 0, + 0, + 0, + 0, + 16200, + 0, + 0, + 0, + 335, + 0, + 0, + 0, + 714, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30730, + 9478, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18790, + 0, + 0, + 0, + 0, + 663, + 0, + 0, + 0, + 1034, + 31431, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30120, + 0, + 0, + 0, + 0, + 13925, + 0, + 0, + 0, + 0, + 0, + 0, + 2280, + 13414, + 0, + 0, + 0, + 0, + 0, + 0, + 22028, + 23687, + 3017, + 11047, + 0, + 0, + 21738, + 18630, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30246, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17257, + 0, + 21896, + 63783, + 0, + 0, + 0, + 21094, + 0, + 18662, + 0, + 25700, + 0, + 22533, + 0, + 0, + 0, + 0, + 0, + 6341, + 5800, + 11111, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15399, + 12970, + 6501, + 0, + 0, + 3179, + 26438, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15750, + 0, + 13062, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 142, + 0, + 0, + 0, + 0, + 21284, + 11177, + 4391, + 0, + 0, + 0, + 0, + 19595, + 40647, + 0, + 0, + 0, + 0, + 0, + 11877, + 0, + 0, + 0, + 26439, + 0, + 0, + 0, + 0, + 695, + 49126, + 27467, + 11972, + 0, + 0, + 0, + 0, + 0, + 0, + 9961, + 0, + 0, + 0, + 31722, + 62982, + 0, + 0, + 0, + 0, + 15817, + 52710, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24614, + 0, + 0, + 0, + 0, + 0, + 20550, + 0, + 0, + 5034, + 3942, + 0, + 0, + 0, + 45927, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2548, + 0, + 0, + 0, + 0, + 0, + 0, + 45606, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3405, + 12582, + 15563, + 54087, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24202, + 5893, + 0, + 0, + 0, + 44230, + 0, + 0, + 0, + 5605, + 0, + 47782, + 0, + 32230, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7014, + 0, + 0, + 0, + 0, + 16488, + 3175, + 0, + 27237, + 0, + 0, + 0, + 0, + 0, + 40902, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32004, + 31434, + 0, + 24392, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29130, + 58214, + 0, + 0, + 0, + 0, + 0, + 0, + 29002, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55366, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37926, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1290, + 0, + 0, + 0, + 4713, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20812, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1803, + 966, + 0, + 17700, + 0, + 0, + 654, + 19109, + 0, + 51655, + 0, + 0, + 0, + 0, + 0, + 10470, + 1584, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2506, + 0, + 0, + 25159, + 4303, + 0, + 0, + 0, + 395, + 15879, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1352, + 6535, + 0, + 19652, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4722, + 7909, + 0, + 0, + 0, + 0, + 30152, + 0, + 0, + 64742, + 0, + 0, + 0, + 0, + 0, + 0, + 2153, + 9125, + 0, + 0, + 279, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41894, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1328, + 17030, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 54151, + 0, + 0, + 0, + 0, + 1775, + 54535, + 0, + 0, + 0, + 0, + 31624, + 0, + 0, + 0, + 7150, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1840, + 35943, + 0, + 0, + 0, + 0, + 0, + 56455, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64486, + 0, + 0, + 0, + 51174, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4134, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17092, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12, + 16134, + 19883, + 39943, + 10281, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44711, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14125, + 2407, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26921, + 0, + 0, + 0, + 0, + 0, + 22188, + 0, + 20810, + 10053, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29220, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28170, + 0, + 15208, + 0, + 0, + 32517, + 5736, + 19271, + 3562, + 10534, + 0, + 0, + 0, + 59655, + 0, + 0, + 0, + 0, + 27084, + 60422, + 0, + 0, + 24969, + 0, + 0, + 0, + 2636, + 0, + 0, + 0, + 0, + 26277, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30596, + 3594, + 0, + 0, + 0, + 8362, + 14565, + 0, + 0, + 0, + 0, + 0, + 0, + 10793, + 12326, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5906, + 59686, + 0, + 0, + 23081, + 517, + 0, + 15556, + 0, + 0, + 0, + 8486, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19877, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7497, + 0, + 0, + 26085, + 0, + 0, + 23784, + 63591, + 6568, + 6310, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10054, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7018, + 14470, + 18858, + 0, + 5641, + 10660, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35526, + 1515, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27656, + 0, + 0, + 9606, + 0, + 39590, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 53926, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 232, + 4327, + 12649, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20199, + 0, + 0, + 0, + 0, + 0, + 0, + 26730, + 0, + 0, + 0, + 19400, + 14695, + 0, + 31334, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19589, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5064, + 11908, + 0, + 27333, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47751, + 0, + 0, + 0, + 26662, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55655, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6245, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23368, + 63911, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1974, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8520, + 24037, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26279, + 0, + 0, + 0, + 22886, + 0, + 0, + 0, + 27782, + 0, + 30694, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 33703, + 0, + 0, + 0, + 30405, + 0, + 34598, + 0, + 51047, + 0, + 0, + 0, + 0, + 1908, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1511, + 21897, + 0, + 0, + 0, + 0, + 0, + 0, + 51398, + 0, + 24870, + 0, + 32647, + 0, + 0, + 0, + 35015, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11204, + 0, + 0, + 0, + 0, + 0, + 0, + 7758, + 57991, + 0, + 0, + 0, + 30949, + 0, + 0, + 22, + 15140, + 9162, + 0, + 0, + 0, + 0, + 0, + 0, + 25540, + 20136, + 7108, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16427, + 10789, + 9805, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4680, + 0, + 0, + 52679, + 0, + 0, + 0, + 0, + 0, + 14884, + 0, + 0, + 0, + 16804, + 0, + 0, + 0, + 0, + 0, + 0, + 9578, + 5287, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 34054, + 0, + 0, + 0, + 0, + 0, + 19076, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7627, + 55719, + 0, + 39463, + 14446, + 58374, + 0, + 0, + 0, + 0, + 23465, + 15845, + 0, + 0, + 0, + 0, + 0, + 38534, + 0, + 0, + 0, + 17893, + 10922, + 0, + 7176, + 678, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3113, + 46279, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23334, + 0, + 0, + 18088, + 23268, + 0, + 62342, + 0, + 0, + 0, + 16613, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 38182, + 0, + 0, + 0, + 0, + 0, + 0, + 25292, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10344, + 71, + 6446, + 0, + 0, + 1893, + 0, + 0, + 1106, + 0, + 28680, + 30756, + 0, + 41126, + 0, + 0, + 1492, + 0, + 15341, + 0, + 0, + 0, + 0, + 17575, + 0, + 21220, + 0, + 0, + 0, + 0, + 0, + 25060, + 2088, + 21828, + 0, + 0, + 0, + 0, + 0, + 358, + 0, + 0, + 0, + 0, + 0, + 16708, + 0, + 0, + 0, + 1668, + 0, + 0, + 0, + 0, + 0, + 12260, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4078, + 0, + 0, + 0, + 0, + 0, + 12713, + 6215, + 0, + 0, + 20329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31204, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3732, + 0, + 1646, + 0, + 0, + 27460, + 0, + 34406, + 17128, + 14341, + 0, + 0, + 0, + 0, + 0, + 19527, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6120, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8551, + 21546, + 10212, + 3020, + 2951, + 0, + 17638, + 0, + 0, + 6985, + 44999, + 2218, + 8197, + 0, + 0, + 30472, + 63366, + 0, + 26660, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1265, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2610, + 0, + 0, + 0, + 11278, + 20295, + 0, + 0, + 0, + 0, + 0, + 19780, + 0, + 0, + 0, + 0, + 0, + 0, + 2353, + 10852, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5421, + 24292, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 34407, + 0, + 0, + 0, + 0, + 0, + 0, + 15432, + 20774, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12360, + 10757, + 0, + 0, + 0, + 33126, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29573, + 0, + 2343, + 0, + 0, + 0, + 0, + 0, + 63079, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43015, + 0, + 16038, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1480, + 25573, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8839, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24645, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5063, + 0, + 0, + 0, + 0, + 0, + 45830, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 823, + 0, + 0, + 64039, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15300, + 0, + 0, + 0, + 0, + 0, + 0, + 2924, + 46759, + 6760, + 19268, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 34182, + 0, + 0, + 3977, + 18149, + 0, + 0, + 0, + 32199, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23524, + 25994, + 0, + 0, + 10343, + 0, + 0, + 0, + 9733, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4740, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16741, + 0, + 0, + 4626, + 23367, + 0, + 0, + 31400, + 0, + 0, + 3557, + 0, + 0, + 4234, + 0, + 0, + 0, + 0, + 0, + 0, + 28486, + 0, + 0, + 0, + 0, + 0, + 14213, + 0, + 57191, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 240, + 0, + 0, + 0, + 0, + 65318, + 29832, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29989, + 0, + 31846, + 0, + 0, + 8170, + 0, + 0, + 4421, + 27626, + 30884, + 0, + 0, + 20204, + 0, + 0, + 0, + 0, + 44614, + 534, + 20868, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28710, + 0, + 10277, + 0, + 0, + 0, + 0, + 0, + 29511, + 0, + 19813, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27020, + 0, + 0, + 0, + 0, + 0, + 0, + 53094, + 0, + 35207, + 0, + 0, + 0, + 37542, + 0, + 61766, + 8584, + 8037, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12488, + 22757, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23814, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19973, + 0, + 0, + 0, + 63943, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36006, + 0, + 0, + 0, + 19012, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8580, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18021, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 80, + 1254, + 0, + 0, + 0, + 42630, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16262, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2124, + 25479, + 0, + 0, + 0, + 0, + 16873, + 0, + 0, + 0, + 0, + 3142, + 0, + 0, + 18443, + 0, + 0, + 0, + 0, + 0, + 3917, + 0, + 8841, + 1190, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20645, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9284, + 0, + 0, + 24394, + 41351, + 0, + 0, + 0, + 42087, + 0, + 62566, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6728, + 4199, + 0, + 0, + 0, + 0, + 25515, + 0, + 1231, + 0, + 374, + 15623, + 0, + 29956, + 0, + 14118, + 0, + 0, + 0, + 0, + 0, + 19047, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31718, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20900, + 0, + 16743, + 0, + 0, + 0, + 28902, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2578, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13838, + 0, + 0, + 10052, + 0, + 0, + 0, + 0, + 7432, + 43783, + 17097, + 0, + 0, + 0, + 0, + 0, + 873, + 0, + 0, + 0, + 398, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8459, + 23559, + 0, + 53030, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35750, + 0, + 4071, + 0, + 0, + 0, + 38662, + 0, + 41414, + 0, + 0, + 0, + 0, + 11656, + 0, + 0, + 0, + 0, + 0, + 4011, + 42695, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25353, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27177, + 22372, + 0, + 0, + 0, + 0, + 0, + 30980, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46278, + 3976, + 12711, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20517, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4072, + 11078, + 0, + 0, + 16553, + 2405, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2670, + 0, + 0, + 0, + 0, + 0, + 0, + 32998, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47046, + 0, + 30533, + 0, + 0, + 11050, + 9734, + 13129, + 0, + 0, + 0, + 0, + 23494, + 0, + 0, + 0, + 0, + 0, + 58310, + 0, + 0, + 0, + 57543, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 454, + 0, + 0, + 0, + 0, + 0, + 0, + 5163, + 59687, + 2220, + 0, + 0, + 0, + 0, + 0, + 0, + 29510, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17316, + 0, + 20069, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5319, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27174, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22949, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19208, + 0, + 0, + 0, + 0, + 0, + 0, + 20933, + 0, + 0, + 6026, + 8742, + 0, + 0, + 0, + 17380, + 0, + 13127, + 2797, + 0, + 0, + 30116, + 0, + 0, + 5963, + 8004, + 0, + 57126, + 0, + 0, + 0, + 0, + 0, + 42854, + 14792, + 30759, + 0, + 24964, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16933, + 0, + 0, + 0, + 0, + 0, + 0, + 15176, + 40839, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 788, + 30341, + 0, + 0, + 0, + 0, + 21036, + 24102, + 0, + 0, + 0, + 0, + 30123, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22597, + 31531, + 26789, + 0, + 59559, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9352, + 29863, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24551, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20516, + 0, + 0, + 0, + 39462, + 3665, + 0, + 28265, + 0, + 8778, + 64262, + 0, + 57414, + 9132, + 0, + 0, + 18276, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26344, + 30725, + 524, + 19751, + 0, + 13796, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18155, + 0, + 12841, + 0, + 74, + 24998, + 13579, + 1061, + 0, + 64199, + 0, + 0, + 8776, + 0, + 0, + 60231, + 0, + 25412, + 0, + 0, + 0, + 59143, + 0, + 0, + 0, + 0, + 0, + 0, + 14344, + 1510, + 0, + 0, + 0, + 38374, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13353, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9446, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32613, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19844, + 0, + 0, + 0, + 0, + 14859, + 0, + 0, + 0, + 0, + 6662, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14154, + 0, + 29770, + 0, + 0, + 0, + 0, + 0, + 16520, + 2182, + 0, + 0, + 0, + 0, + 0, + 36102, + 3340, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25189, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15720, + 0, + 0, + 0, + 0, + 0, + 0, + 22758, + 0, + 0, + 304, + 0, + 3243, + 14117, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5130, + 12679, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21733, + 10441, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36103, + 0, + 0, + 0, + 0, + 0, + 23590, + 0, + 57479, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10824, + 18372, + 0, + 0, + 0, + 0, + 0, + 35078, + 15722, + 12967, + 0, + 0, + 0, + 0, + 0, + 34599, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 53639, + 0, + 38630, + 0, + 0, + 0, + 0, + 0, + 0, + 31017, + 11333, + 0, + 0, + 0, + 0, + 19144, + 0, + 9513, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 56711, + 24042, + 0, + 1197, + 0, + 0, + 58502, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8230, + 6121, + 18628, + 0, + 0, + 0, + 0, + 0, + 0, + 25290, + 0, + 0, + 0, + 0, + 0, + 1514, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14378, + 9798, + 32363, + 0, + 0, + 0, + 0, + 0, + 9577, + 0, + 0, + 0, + 0, + 0, + 0, + 26788, + 0, + 0, + 0, + 0, + 0, + 0, + 330, + 10533, + 0, + 0, + 0, + 0, + 0, + 42246, + 0, + 0, + 0, + 0, + 0, + 0, + 5074, + 21028, + 0, + 38119, + 0, + 0, + 0, + 0, + 0, + 0, + 248, + 0, + 31176, + 62054, + 0, + 53287, + 0, + 0, + 0, + 0, + 271, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9224, + 2117, + 0, + 0, + 0, + 0, + 15818, + 5607, + 0, + 52582, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18248, + 24005, + 23018, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 427, + 0, + 0, + 39910, + 0, + 0, + 7080, + 11399, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22220, + 57894, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13156, + 0, + 1413, + 1007, + 0, + 0, + 0, + 0, + 21415, + 0, + 21543, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41702, + 22538, + 9573, + 0, + 0, + 0, + 8806, + 0, + 0, + 6920, + 56359, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42215, + 0, + 0, + 13708, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16453, + 0, + 0, + 0, + 0, + 0, + 0, + 1582, + 1764, + 3282, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11653, + 0, + 0, + 0, + 0, + 12139, + 0, + 29482, + 31076, + 1673, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40262, + 0, + 0, + 0, + 33862, + 0, + 0, + 0, + 0, + 0, + 20996, + 0, + 0, + 0, + 0, + 0, + 4615, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43943, + 333, + 19367, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26821, + 0, + 32389, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4936, + 11687, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10885, + 0, + 0, + 0, + 0, + 0, + 25926, + 0, + 0, + 0, + 0, + 0, + 0, + 15851, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8360, + 0, + 17130, + 7942, + 0, + 11460, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18150, + 14248, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22310, + 0, + 0, + 0, + 42758, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29354, + 5574, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11236, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9156, + 0, + 0, + 1801, + 14023, + 0, + 0, + 0, + 0, + 0, + 62406, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23620, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31018, + 65510, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26182, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27717, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46950, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31108, + 0, + 11366, + 0, + 0, + 0, + 3717, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8552, + 6054, + 3339, + 0, + 0, + 0, + 0, + 51622, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3718, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28358, + 0, + 2756, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1462, + 0, + 0, + 27622, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 62502, + 14410, + 56743, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12206, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36550, + 0, + 38054, + 0, + 0, + 0, + 21221, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27077, + 0, + 0, + 16906, + 0, + 12587, + 12101, + 0, + 0, + 0, + 0, + 0, + 0, + 10414, + 28775, + 21769, + 60167, + 0, + 56646, + 0, + 0, + 0, + 0, + 0, + 20740, + 0, + 0, + 0, + 0, + 0, + 0, + 5931, + 5351, + 0, + 65478, + 0, + 0, + 0, + 0, + 0, + 0, + 7977, + 52647, + 0, + 4868, + 0, + 0, + 0, + 55463, + 0, + 0, + 0, + 0, + 0, + 32197, + 0, + 0, + 0, + 0, + 0, + 13445, + 0, + 0, + 0, + 26631, + 0, + 0, + 0, + 0, + 0, + 11237, + 0, + 0, + 0, + 0, + 209, + 1285, + 0, + 0, + 1928, + 0, + 0, + 0, + 0, + 43334, + 23849, + 23172, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24712, + 62439, + 8811, + 3463, + 20457, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16008, + 56263, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 60358, + 22761, + 6565, + 0, + 0, + 30888, + 27686, + 0, + 0, + 0, + 17093, + 0, + 0, + 0, + 0, + 22121, + 0, + 0, + 0, + 7593, + 14182, + 0, + 28103, + 0, + 0, + 0, + 0, + 0, + 45126, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31844, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18500, + 0, + 0, + 0, + 0, + 28202, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26308, + 0, + 29541, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29572, + 0, + 0, + 0, + 21285, + 0, + 0, + 0, + 0, + 0, + 60839, + 0, + 0, + 0, + 0, + 0, + 30407, + 15949, + 2981, + 0, + 0, + 0, + 46439, + 0, + 0, + 0, + 0, + 0, + 23911, + 26505, + 25222, + 12811, + 5895, + 0, + 6343, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31815, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19688, + 10245, + 0, + 0, + 0, + 31301, + 26985, + 28964, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27208, + 31172, + 0, + 0, + 0, + 0, + 216, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16292, + 0, + 0, + 0, + 0, + 0, + 8743, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6438, + 0, + 0, + 0, + 33319, + 0, + 0, + 0, + 33286, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22181, + 7499, + 24774, + 0, + 10756, + 0, + 44775, + 724, + 0, + 25768, + 25669, + 24873, + 5349, + 25257, + 0, + 0, + 54566, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 327, + 439, + 357, + 0, + 0, + 6536, + 8452, + 0, + 0, + 1802, + 0, + 0, + 61350, + 0, + 15045, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 38343, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32491, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22885, + 0, + 0, + 32073, + 0, + 0, + 0, + 9546, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27748, + 0, + 0, + 23176, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24583, + 0, + 0, + 0, + 0, + 0, + 34118, + 0, + 0, + 0, + 0, + 2158, + 0, + 5586, + 30340, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24452, + 0, + 0, + 0, + 0, + 2409, + 4390, + 0, + 24196, + 0, + 0, + 0, + 0, + 0, + 0, + 32264, + 26948, + 20587, + 0, + 0, + 0, + 2155, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4328, + 26276, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23564, + 0, + 12458, + 11367, + 0, + 0, + 25162, + 0, + 0, + 0, + 0, + 0, + 0, + 65414, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32966, + 0, + 0, + 0, + 34662, + 0, + 0, + 0, + 0, + 0, + 39238, + 0, + 0, + 0, + 0, + 11400, + 10214, + 266, + 12452, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15173, + 0, + 0, + 0, + 13668, + 0, + 13222, + 0, + 23364, + 0, + 0, + 0, + 0, + 0, + 11941, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25575, + 0, + 0, + 0, + 57383, + 0, + 0, + 0, + 10308, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2865, + 9287, + 75, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21508, + 22380, + 59526, + 0, + 0, + 0, + 23589, + 0, + 0, + 0, + 51590, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4645, + 3980, + 28295, + 0, + 0, + 0, + 0, + 0, + 12388, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21734, + 0, + 17607, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41767, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18436, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21958, + 0, + 19430, + 0, + 0, + 1204, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3240, + 55239, + 0, + 0, + 0, + 0, + 0, + 30660, + 0, + 0, + 0, + 28901, + 0, + 0, + 0, + 0, + 4716, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11754, + 0, + 0, + 0, + 0, + 22086, + 0, + 22564, + 8749, + 0, + 0, + 28391, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2886, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29062, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40358, + 0, + 0, + 15916, + 39526, + 0, + 13735, + 0, + 0, + 0, + 0, + 28938, + 0, + 407, + 4006, + 0, + 0, + 0, + 26916, + 0, + 0, + 0, + 0, + 0, + 27526, + 30280, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24586, + 0, + 24649, + 5126, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8684, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23019, + 0, + 22377, + 18599, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27593, + 9735, + 0, + 20196, + 0, + 0, + 0, + 0, + 28168, + 48423, + 0, + 0, + 0, + 0, + 0, + 31399, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13892, + 0, + 0, + 0, + 0, + 0, + 17606, + 0, + 0, + 15242, + 29767, + 26378, + 17701, + 0, + 0, + 14472, + 0, + 4840, + 0, + 0, + 0, + 0, + 0, + 0, + 24708, + 0, + 9349, + 4330, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16137, + 0, + 0, + 34854, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25063, + 0, + 0, + 0, + 0, + 0, + 0, + 6603, + 12583, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7433, + 29188, + 0, + 0, + 0, + 0, + 0, + 31270, + 0, + 0, + 22920, + 3143, + 0, + 0, + 0, + 0, + 0, + 23461, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 618, + 0, + 0, + 0, + 0, + 21381, + 0, + 11524, + 0, + 0, + 0, + 0, + 0, + 0, + 21004, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 312, + 23239, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2313, + 0, + 0, + 40614, + 0, + 0, + 14825, + 0, + 0, + 0, + 0, + 0, + 0, + 46535, + 0, + 41190, + 7853, + 0, + 31656, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3433, + 5255, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 33958, + 0, + 0, + 0, + 0, + 72, + 15493, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36070, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14724, + 0, + 0, + 0, + 0, + 0, + 29828, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18822, + 20008, + 0, + 0, + 0, + 0, + 2438, + 2952, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3342, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24420, + 0, + 19908, + 0, + 0, + 0, + 8101, + 0, + 17479, + 0, + 0, + 3530, + 0, + 8202, + 29319, + 0, + 0, + 1132, + 6789, + 0, + 0, + 23881, + 0, + 0, + 0, + 4810, + 0, + 0, + 46918, + 0, + 0, + 0, + 41574, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 48582, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39334, + 0, + 0, + 0, + 26117, + 0, + 0, + 0, + 0, + 0, + 0, + 5100, + 0, + 0, + 0, + 0, + 0, + 23496, + 27813, + 4045, + 54918, + 0, + 0, + 0, + 0, + 0, + 0, + 6473, + 7428, + 0, + 0, + 0, + 0, + 6792, + 0, + 0, + 0, + 0, + 0, + 3560, + 32103, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 54790, + 0, + 0, + 6926, + 0, + 0, + 0, + 0, + 16518, + 0, + 0, + 0, + 0, + 0, + 20806, + 0, + 0, + 0, + 0, + 1841, + 3174, + 0, + 0, + 0, + 0, + 9612, + 18374, + 0, + 0, + 0, + 0, + 32744, + 0, + 0, + 9671, + 0, + 59879, + 0, + 23300, + 8073, + 0, + 0, + 14758, + 0, + 0, + 0, + 10342, + 0, + 0, + 0, + 0, + 0, + 0, + 24808, + 14759, + 0, + 0, + 0, + 0, + 0, + 0, + 5515, + 0, + 0, + 14852, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2354, + 23271, + 0, + 32740, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18472, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 33190, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8972, + 21669, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25574, + 0, + 0, + 0, + 0, + 5096, + 0, + 14283, + 55367, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12644, + 0, + 0, + 0, + 0, + 4651, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 661, + 0, + 0, + 13638, + 19466, + 0, + 0, + 0, + 0, + 0, + 31273, + 0, + 8010, + 0, + 0, + 0, + 0, + 0, + 3211, + 0, + 0, + 0, + 0, + 63430, + 0, + 0, + 0, + 0, + 0, + 15237, + 0, + 0, + 0, + 0, + 0, + 0, + 19018, + 2437, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14312, + 0, + 0, + 0, + 0, + 16836, + 0, + 0, + 471, + 35975, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6023, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11593, + 9639, + 0, + 0, + 0, + 55783, + 0, + 5700, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27908, + 0, + 26598, + 0, + 0, + 6667, + 6470, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 62534, + 0, + 0, + 0, + 0, + 16522, + 27911, + 0, + 0, + 10025, + 7172, + 0, + 0, + 779, + 0, + 360, + 17477, + 0, + 0, + 0, + 61991, + 7752, + 7717, + 1494, + 0, + 0, + 0, + 26569, + 40742, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26406, + 10474, + 32196, + 0, + 0, + 0, + 0, + 0, + 50567, + 16521, + 11716, + 0, + 0, + 0, + 0, + 0, + 55558, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 61926, + 0, + 26436, + 0, + 0, + 0, + 0, + 4459, + 10598, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9223, + 0, + 29318, + 0, + 0, + 0, + 0, + 0, + 60423, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47078, + 0, + 50246, + 0, + 12612, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 61799, + 0, + 55015, + 0, + 21060, + 7309, + 0, + 0, + 0, + 0, + 0, + 11976, + 0, + 0, + 0, + 0, + 23527, + 0, + 0, + 0, + 0, + 0, + 0, + 10347, + 15942, + 0, + 34023, + 0, + 0, + 0, + 0, + 4969, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28997, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36454, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3466, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19716, + 28872, + 0, + 0, + 0, + 0, + 0, + 22152, + 0, + 0, + 0, + 0, + 0, + 0, + 26342, + 0, + 0, + 0, + 9764, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21798, + 0, + 0, + 0, + 0, + 13, + 6853, + 32136, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 750, + 0, + 0, + 54502, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46183, + 0, + 0, + 625, + 22854, + 0, + 0, + 0, + 0, + 2061, + 23588, + 0, + 0, + 11049, + 56262, + 0, + 0, + 18538, + 1509, + 0, + 0, + 17258, + 4453, + 0, + 0, + 0, + 0, + 12429, + 0, + 0, + 0, + 0, + 8102, + 0, + 0, + 0, + 0, + 0, + 0, + 8074, + 0, + 23852, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16136, + 3428, + 0, + 27876, + 0, + 0, + 0, + 7332, + 0, + 0, + 0, + 0, + 0, + 28900, + 0, + 0, + 2284, + 0, + 0, + 17573, + 201, + 1508, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31365, + 27688, + 22565, + 0, + 0, + 0, + 5159, + 0, + 0, + 0, + 0, + 4584, + 42599, + 0, + 0, + 0, + 44422, + 1068, + 23173, + 0, + 0, + 0, + 613, + 0, + 0, + 0, + 12645, + 0, + 0, + 0, + 0, + 0, + 27076, + 6732, + 0, + 0, + 0, + 3913, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22244, + 29992, + 15911, + 0, + 0, + 0, + 0, + 0, + 22982, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50598, + 0, + 0, + 0, + 0, + 0, + 0, + 5161, + 1574, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19108, + 0, + 0, + 0, + 35014, + 0, + 0, + 0, + 25956, + 29067, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47079, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1356, + 61927, + 0, + 0, + 0, + 64455, + 2122, + 64231, + 0, + 0, + 18763, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 907, + 34471, + 0, + 0, + 0, + 39078, + 0, + 0, + 1995, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 56518, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 822, + 0, + 15978, + 44423, + 0, + 0, + 3112, + 325, + 0, + 0, + 0, + 0, + 0, + 15397, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1193, + 4294, + 4968, + 15559, + 0, + 46150, + 0, + 0, + 0, + 0, + 0, + 18917, + 0, + 0, + 0, + 0, + 0, + 0, + 9928, + 37543, + 0, + 0, + 0, + 0, + 13097, + 36999, + 0, + 0, + 0, + 15430, + 0, + 0, + 8424, + 29639, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25734, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40487, + 0, + 13284, + 0, + 11141, + 0, + 0, + 0, + 32388, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5298, + 57702, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13060, + 0, + 0, + 0, + 0, + 0, + 0, + 8233, + 42278, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36422, + 0, + 0, + 0, + 7972, + 0, + 0, + 0, + 18437, + 0, + 0, + 0, + 0, + 7406, + 0, + 0, + 0, + 9225, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13865, + 47591, + 18220, + 53703, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2796, + 0, + 0, + 0, + 0, + 0, + 24940, + 17223, + 0, + 0, + 0, + 13221, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15848, + 0, + 0, + 0, + 0, + 0, + 6122, + 1735, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16968, + 18151, + 0, + 0, + 0, + 0, + 0, + 47494, + 0, + 0, + 0, + 0, + 0, + 0, + 26089, + 19494, + 0, + 0, + 0, + 0, + 0, + 15494, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28809, + 0, + 0, + 0, + 0, + 42727, + 0, + 55174, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20485, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 58598, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15172, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35302, + 0, + 48135, + 20972, + 33094, + 0, + 0, + 0, + 0, + 0, + 9765, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39559, + 0, + 0, + 13736, + 6950, + 0, + 0, + 0, + 0, + 23658, + 8903, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22662, + 0, + 0, + 0, + 0, + 0, + 58886, + 7468, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64550, + 0, + 0, + 0, + 0, + 0, + 47622, + 0, + 0, + 0, + 50886, + 0, + 0, + 0, + 0, + 0, + 57606, + 912, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1449, + 0, + 1169, + 0, + 718, + 46151, + 12104, + 0, + 0, + 0, + 0, + 0, + 0, + 48230, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1259, + 0, + 0, + 33734, + 23208, + 62567, + 0, + 65158, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28684, + 59878, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25769, + 0, + 0, + 0, + 0, + 65479, + 0, + 0, + 0, + 0, + 555, + 22789, + 0, + 19748, + 1769, + 10246, + 8680, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14250, + 0, + 5899, + 3303, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21097, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21638, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10795, + 0, + 0, + 0, + 16204, + 0, + 0, + 0, + 0, + 0, + 26986, + 2469, + 0, + 14660, + 0, + 0, + 0, + 0, + 0, + 45447, + 12234, + 3494, + 4555, + 10566, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2801, + 0, + 0, + 0, + 15755, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39654, + 0, + 0, + 0, + 0, + 0, + 0, + 6763, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 33574, + 0, + 10279, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 63527, + 0, + 0, + 3912, + 0, + 0, + 7492, + 0, + 0, + 0, + 35142, + 0, + 0, + 0, + 0, + 0, + 0, + 17576, + 8103, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16713, + 4198, + 0, + 0, + 4782, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16228, + 0, + 0, + 0, + 0, + 25961, + 20166, + 0, + 0, + 0, + 10980, + 0, + 0, + 0, + 0, + 0, + 14340, + 18922, + 14567, + 0, + 44199, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18406, + 0, + 0, + 0, + 0, + 0, + 37606, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20902, + 0, + 0, + 0, + 56358, + 0, + 38342, + 0, + 0, + 0, + 0, + 9514, + 36071, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21700, + 0, + 0, + 5266, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1134, + 0, + 1453, + 0, + 0, + 0, + 0, + 0, + 3882, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4004, + 0, + 0, + 0, + 51910, + 0, + 0, + 0, + 0, + 0, + 23076, + 4648, + 0, + 0, + 0, + 31051, + 25351, + 0, + 0, + 0, + 22884, + 0, + 0, + 0, + 0, + 0, + 63975, + 0, + 0, + 2376, + 16997, + 0, + 0, + 2096, + 0, + 0, + 0, + 3373, + 7046, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30726, + 0, + 0, + 0, + 0, + 20, + 0, + 13707, + 614, + 0, + 0, + 12840, + 3079, + 0, + 0, + 0, + 0, + 0, + 51046, + 3729, + 0, + 32680, + 0, + 0, + 0, + 0, + 0, + 24008, + 62759, + 0, + 0, + 4745, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2414, + 0, + 0, + 44262, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24937, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19140, + 0, + 13575, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39110, + 0, + 0, + 0, + 28036, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4261, + 0, + 0, + 0, + 0, + 5992, + 0, + 264, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13739, + 0, + 21928, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4232, + 15110, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30022, + 0, + 0, + 27977, + 0, + 0, + 0, + 0, + 0, + 24776, + 0, + 0, + 0, + 0, + 0, + 2962, + 0, + 0, + 0, + 0, + 0, + 0, + 26564, + 22441, + 0, + 0, + 0, + 0, + 0, + 13640, + 11205, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19305, + 1894, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9389, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14119, + 5224, + 135, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25796, + 0, + 0, + 0, + 0, + 0, + 0, + 7470, + 0, + 0, + 0, + 0, + 63815, + 0, + 55654, + 0, + 0, + 12584, + 0, + 1524, + 33223, + 0, + 0, + 0, + 9895, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11624, + 0, + 0, + 0, + 5614, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21320, + 0, + 0, + 53607, + 0, + 51206, + 0, + 0, + 0, + 25863, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8964, + 1740, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13476, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7975, + 0, + 0, + 3306, + 8134, + 0, + 8389, + 48, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25766, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 52166, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21477, + 31112, + 31652, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28452, + 0, + 0, + 0, + 44231, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24805, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12428, + 6471, + 0, + 0, + 0, + 0, + 525, + 17926, + 0, + 0, + 0, + 26919, + 0, + 0, + 18120, + 0, + 0, + 0, + 30024, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29189, + 0, + 0, + 0, + 43559, + 0, + 0, + 0, + 0, + 0, + 0, + 19787, + 7557, + 0, + 59334, + 0, + 0, + 10184, + 6085, + 0, + 44039, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11175, + 0, + 0, + 0, + 0, + 30440, + 63110, + 0, + 0, + 0, + 0, + 0, + 0, + 11017, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27204, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29126, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 622, + 0, + 5226, + 2727, + 0, + 15588, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4650, + 0, + 2675, + 0, + 0, + 32420, + 0, + 0, + 0, + 61511, + 0, + 0, + 5419, + 17829, + 2123, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 38183, + 2640, + 0, + 11274, + 14533, + 1842, + 0, + 0, + 42663, + 12681, + 3430, + 0, + 11845, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6533, + 0, + 0, + 0, + 0, + 0, + 54598, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12616, + 38535, + 0, + 0, + 0, + 0, + 0, + 32229, + 0, + 0, + 0, + 54279, + 0, + 48614, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31401, + 0, + 0, + 0, + 0, + 34310, + 0, + 0, + 0, + 22788, + 0, + 52134, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23302, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40678, + 0, + 0, + 0, + 51463, + 535, + 0, + 0, + 0, + 0, + 15525, + 0, + 0, + 0, + 0, + 0, + 0, + 4904, + 869, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 63718, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1678, + 0, + 692, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26216, + 0, + 0, + 0, + 0, + 0, + 29355, + 0, + 0, + 0, + 0, + 25095, + 0, + 0, + 0, + 0, + 4335, + 0, + 0, + 0, + 0, + 0, + 14538, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27273, + 55014, + 0, + 0, + 0, + 0, + 0, + 27271, + 0, + 0, + 0, + 0, + 0, + 30468, + 0, + 0, + 0, + 0, + 18186, + 0, + 0, + 0, + 0, + 0, + 14345, + 0, + 0, + 0, + 2152, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 58438, + 21034, + 0, + 23339, + 21318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21412, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12869, + 0, + 0, + 4875, + 0, + 0, + 0, + 0, + 29191, + 0, + 0, + 0, + 0, + 0, + 0, + 1640, + 10247, + 0, + 14244, + 0, + 0, + 0, + 0, + 9867, + 0, + 0, + 0, + 0, + 0, + 12363, + 0, + 0, + 7653, + 0, + 0, + 4168, + 2663, + 0, + 4580, + 0, + 11143, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30662, + 0, + 0, + 0, + 0, + 0, + 6724, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13764, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 234, + 6821, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25639, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29958, + 0, + 3461, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28324, + 18795, + 7013, + 12746, + 11655, + 0, + 37287, + 0, + 0, + 10953, + 7718, + 9705, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46534, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8137, + 17988, + 0, + 25156, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41415, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15784, + 6918, + 0, + 0, + 0, + 0, + 7019, + 10919, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4171, + 55495, + 4940, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22440, + 19333, + 0, + 0, + 28136, + 0, + 6249, + 21317, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 53414, + 0, + 0, + 0, + 57318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39303, + 0, + 0, + 0, + 0, + 0, + 19940, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25543, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2698, + 3911, + 0, + 0, + 0, + 26790, + 0, + 0, + 0, + 0, + 0, + 0, + 32424, + 0, + 0, + 18470, + 0, + 0, + 0, + 14726, + 29834, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1000, + 4197, + 0, + 0, + 0, + 19366, + 0, + 0, + 0, + 39878, + 0, + 0, + 0, + 0, + 2185, + 8901, + 5288, + 9829, + 25000, + 0, + 0, + 0, + 0, + 0, + 0, + 1062, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35622, + 0, + 0, + 23048, + 62503, + 6506, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13609, + 10438, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7723, + 42119, + 0, + 0, + 0, + 0, + 0, + 13317, + 0, + 0, + 0, + 41606, + 0, + 27111, + 0, + 0, + 21194, + 11461, + 0, + 0, + 0, + 0, + 26856, + 58342, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20940, + 48710, + 0, + 0, + 0, + 0, + 0, + 0, + 5227, + 0, + 0, + 0, + 0, + 0, + 10061, + 31300, + 0, + 0, + 0, + 19236, + 0, + 0, + 0, + 0, + 0, + 30277, + 13896, + 0, + 0, + 0, + 12876, + 13159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 428, + 46951, + 13134, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15462, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21668, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2249, + 0, + 0, + 0, + 0, + 44967, + 0, + 0, + 0, + 0, + 0, + 0, + 3465, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24868, + 0, + 0, + 0, + 0, + 0, + 23909, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2190, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16164, + 0, + 10437, + 0, + 0, + 5263, + 20102, + 20938, + 0, + 0, + 0, + 1192, + 1030, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21385, + 4870, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18596, + 0, + 0, + 0, + 0, + 1422, + 4038, + 2858, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 48998, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6508, + 37350, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17001, + 39431, + 0, + 0, + 0, + 0, + 0, + 30182, + 0, + 21445, + 7403, + 28164, + 0, + 51750, + 0, + 0, + 0, + 62631, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31206, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7751, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13477, + 0, + 0, + 456, + 26693, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14890, + 0, + 0, + 0, + 0, + 0, + 26697, + 22022, + 13225, + 27364, + 0, + 0, + 0, + 18884, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3659, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1448, + 5413, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6340, + 0, + 0, + 18091, + 18725, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22118, + 0, + 0, + 0, + 18981, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29223, + 3724, + 0, + 0, + 0, + 0, + 43526, + 0, + 0, + 0, + 25668, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21545, + 9862, + 0, + 22692, + 32201, + 60646, + 0, + 7300, + 0, + 0, + 0, + 58887, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19460, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50342, + 0, + 65255, + 4360, + 17286, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28708, + 0, + 0, + 30025, + 60102, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47014, + 0, + 31973, + 0, + 9572, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18501, + 0, + 0, + 0, + 0, + 0, + 14597, + 0, + 0, + 0, + 53735, + 5228, + 22183, + 0, + 0, + 0, + 0, + 0, + 0, + 1554, + 24164, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10827, + 0, + 0, + 0, + 0, + 34918, + 0, + 0, + 0, + 0, + 22252, + 0, + 0, + 46855, + 0, + 0, + 0, + 0, + 0, + 31207, + 0, + 0, + 10733, + 0, + 0, + 63334, + 0, + 0, + 0, + 0, + 8616, + 50119, + 20169, + 12678, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 58087, + 20298, + 5, + 0, + 0, + 30920, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 296, + 13190, + 0, + 30663, + 0, + 0, + 18536, + 12228, + 0, + 6788, + 0, + 0, + 0, + 0, + 30890, + 21796, + 0, + 0, + 526, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20965, + 0, + 0, + 0, + 0, + 2161, + 0, + 0, + 0, + 0, + 0, + 0, + 24038, + 0, + 0, + 0, + 0, + 13544, + 7398, + 0, + 0, + 32522, + 9605, + 0, + 0, + 0, + 0, + 3208, + 7590, + 0, + 0, + 0, + 43846, + 0, + 0, + 0, + 38663, + 0, + 0, + 0, + 0, + 0, + 39014, + 4142, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6373, + 0, + 0, + 13676, + 0, + 0, + 0, + 0, + 30374, + 21288, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22791, + 0, + 0, + 0, + 0, + 0, + 37958, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9452, + 9990, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4841, + 0, + 0, + 0, + 0, + 18820, + 152, + 0, + 0, + 0, + 0, + 0, + 13260, + 3334, + 0, + 0, + 24234, + 8422, + 0, + 17957, + 0, + 0, + 0, + 10244, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7204, + 0, + 0, + 0, + 0, + 1201, + 26151, + 0, + 31173, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64838, + 4203, + 7525, + 521, + 0, + 18888, + 37031, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7082, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4490, + 12487, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36615, + 0, + 0, + 0, + 14854, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6539, + 13029, + 9704, + 38983, + 0, + 0, + 0, + 0, + 168, + 10405, + 0, + 0, + 0, + 0, + 394, + 25607, + 0, + 57063, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16141, + 19878, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29446, + 0, + 12036, + 0, + 0, + 0, + 0, + 0, + 6982, + 18572, + 0, + 24584, + 14535, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16, + 0, + 21642, + 0, + 0, + 0, + 0, + 0, + 0, + 5254, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1622, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3853, + 9126, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7241, + 10982, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 950, + 0, + 0, + 57990, + 0, + 0, + 277, + 0, + 0, + 0, + 694, + 36007, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42470, + 0, + 0, + 0, + 0, + 18409, + 51142, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28646, + 0, + 0, + 0, + 30693, + 0, + 0, + 0, + 0, + 0, + 56295, + 5544, + 0, + 0, + 0, + 0, + 8518, + 8366, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45670, + 0, + 0, + 9608, + 33062, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18694, + 0, + 0, + 0, + 0, + 1672, + 23493, + 0, + 0, + 6955, + 7655, + 0, + 36134, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23432, + 647, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13382, + 0, + 0, + 0, + 19621, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20228, + 0, + 0, + 2728, + 31495, + 0, + 0, + 0, + 0, + 29096, + 22213, + 235, + 35495, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5348, + 0, + 0, + 0, + 0, + 8968, + 1989, + 0, + 0, + 1066, + 0, + 0, + 11492, + 5965, + 31367, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18727, + 0, + 0, + 0, + 6757, + 0, + 0, + 10765, + 4646, + 0, + 36166, + 0, + 27943, + 0, + 0, + 26888, + 8420, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29316, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4975, + 0, + 0, + 0, + 14762, + 3111, + 0, + 0, + 0, + 0, + 0, + 43399, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18980, + 0, + 0, + 0, + 0, + 0, + 44550, + 0, + 0, + 0, + 0, + 4051, + 0, + 0, + 0, + 0, + 37734, + 0, + 0, + 0, + 0, + 0, + 5188, + 0, + 0, + 0, + 0, + 0, + 24486, + 0, + 5989, + 0, + 41159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20326, + 0, + 0, + 747, + 6884, + 0, + 0, + 0, + 41798, + 0, + 0, + 3117, + 22919, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21032, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9574, + 0, + 0, + 0, + 0, + 0, + 0, + 4302, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21068, + 34630, + 0, + 0, + 0, + 0, + 0, + 64071, + 0, + 0, + 0, + 0, + 0, + 0, + 26667, + 7943, + 0, + 0, + 0, + 0, + 0, + 52934, + 0, + 0, + 17002, + 0, + 0, + 0, + 0, + 0, + 0, + 20294, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27301, + 18347, + 7974, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16874, + 0, + 0, + 0, + 0, + 45414, + 0, + 0, + 0, + 0, + 0, + 0, + 648, + 1575, + 0, + 0, + 0, + 31749, + 0, + 0, + 0, + 23301, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15912, + 50535, + 0, + 0, + 0, + 0, + 1993, + 8582, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 38438, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15850, + 6183, + 0, + 0, + 0, + 0, + 3402, + 0, + 0, + 27494, + 0, + 0, + 749, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26025, + 29606, + 0, + 0, + 7144, + 19622, + 30504, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21316, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21444, + 0, + 0, + 1289, + 6919, + 0, + 0, + 0, + 0, + 0, + 0, + 8299, + 0, + 0, + 0, + 14090, + 35655, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2377, + 15206, + 0, + 0, + 6028, + 4452, + 0, + 25508, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50310, + 0, + 0, + 0, + 0, + 1269, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 51014, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9286, + 0, + 7429, + 0, + 0, + 28393, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16680, + 452, + 0, + 0, + 0, + 0, + 0, + 23718, + 0, + 0, + 0, + 31750, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3568, + 0, + 0, + 13604, + 0, + 0, + 0, + 0, + 0, + 25255, + 0, + 0, + 0, + 50982, + 0, + 56582, + 0, + 0, + 7467, + 0, + 0, + 0, + 0, + 30181, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30564, + 7208, + 7845, + 0, + 0, + 0, + 0, + 0, + 0, + 7726, + 0, + 0, + 0, + 0, + 62182, + 0, + 0, + 0, + 41094, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22695, + 0, + 0, + 0, + 0, + 0, + 0, + 17736, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50054, + 0, + 0, + 0, + 14180, + 0, + 0, + 0, + 0, + 0, + 0, + 8974, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23332, + 0, + 0, + 0, + 11140, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24262, + 27145, + 9540, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26537, + 45510, + 6062, + 3879, + 0, + 0, + 20233, + 25991, + 0, + 0, + 17803, + 0, + 0, + 0, + 0, + 0, + 13962, + 5508, + 16971, + 27013, + 7437, + 31494, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4714, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17189, + 0, + 0, + 0, + 0, + 0, + 27492, + 0, + 0, + 26953, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41319, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47430, + 19596, + 12549, + 0, + 0, + 0, + 8390, + 1006, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24100, + 17577, + 4, + 0, + 0, + 0, + 0, + 0, + 22277, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26692, + 0, + 0, + 0, + 0, + 0, + 24676, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29477, + 0, + 0, + 0, + 21573, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9864, + 14214, + 0, + 0, + 0, + 0, + 0, + 0, + 25771, + 5766, + 0, + 0, + 8909, + 8679, + 0, + 0, + 6861, + 16166, + 0, + 38887, + 0, + 0, + 0, + 0, + 0, + 0, + 12392, + 8678, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 52646, + 1354, + 2950, + 0, + 14692, + 0, + 0, + 10572, + 49830, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3626, + 582, + 0, + 0, + 0, + 55750, + 0, + 0, + 0, + 30885, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5830, + 0, + 0, + 2090, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31142, + 0, + 0, + 0, + 0, + 0, + 10503, + 0, + 0, + 18825, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 57158, + 0, + 0, + 30792, + 63526, + 0, + 0, + 0, + 9863, + 16267, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18824, + 0, + 0, + 0, + 0, + 0, + 0, + 19653, + 25388, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9292, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36358, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25480, + 23015, + 0, + 0, + 10440, + 6725, + 0, + 0, + 0, + 22436, + 24265, + 15109, + 0, + 0, + 0, + 62311, + 8906, + 34534, + 0, + 0, + 0, + 0, + 0, + 0, + 15913, + 1319, + 0, + 0, + 20296, + 1477, + 30760, + 0, + 25928, + 16772, + 0, + 0, + 1069, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17029, + 0, + 31909, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41638, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41542, + 0, + 21478, + 0, + 0, + 0, + 9796, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22187, + 58343, + 0, + 0, + 0, + 24295, + 0, + 0, + 0, + 0, + 0, + 61831, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2833, + 5829, + 0, + 0, + 0, + 62855, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16676, + 0, + 0, + 0, + 0, + 0, + 0, + 13577, + 27431, + 0, + 0, + 0, + 0, + 21480, + 10501, + 0, + 16932, + 0, + 0, + 0, + 0, + 0, + 22918, + 0, + 48294, + 2574, + 2150, + 0, + 0, + 0, + 0, + 1897, + 4518, + 0, + 0, + 0, + 0, + 0, + 0, + 25064, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47942, + 0, + 0, + 0, + 0, + 10990, + 13767, + 25705, + 37863, + 21672, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43430, + 1712, + 0, + 0, + 0, + 0, + 18886, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10535, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15012, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14734, + 0, + 0, + 55782, + 0, + 0, + 30824, + 10886, + 0, + 0, + 0, + 0, + 0, + 51302, + 0, + 0, + 8012, + 0, + 0, + 0, + 0, + 0, + 20680, + 6981, + 0, + 57415, + 11, + 0, + 0, + 18277, + 0, + 14564, + 0, + 0, + 0, + 32390, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19113, + 5158, + 0, + 11172, + 0, + 16774, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10315, + 13830, + 0, + 0, + 0, + 0, + 0, + 0, + 10410, + 7141, + 0, + 0, + 0, + 0, + 0, + 18116, + 0, + 0, + 0, + 44615, + 15403, + 13958, + 0, + 1540, + 14632, + 19525, + 24201, + 19781, + 0, + 0, + 0, + 24165, + 0, + 38951, + 0, + 0, + 0, + 0, + 0, + 6308, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17416, + 15749, + 3438, + 13255, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32228, + 0, + 0, + 0, + 0, + 176, + 0, + 0, + 50566, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21540, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 58982, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5284, + 0, + 0, + 0, + 0, + 0, + 0, + 25897, + 28326, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15945, + 0, + 0, + 0, + 9804, + 293, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13988, + 23082, + 4677, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5670, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44070, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6405, + 0, + 30692, + 0, + 0, + 0, + 61702, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45926, + 0, + 15398, + 0, + 0, + 0, + 0, + 0, + 0, + 4554, + 2692, + 0, + 0, + 0, + 0, + 0, + 32485, + 0, + 0, + 0, + 10084, + 0, + 0, + 0, + 0, + 0, + 0, + 24297, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22790, + 0, + 0, + 0, + 55110, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7112, + 0, + 31530, + 45255, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40743, + 17226, + 22599, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3695, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 56999, + 0, + 0, + 0, + 0, + 0, + 13799, + 3114, + 21287, + 1353, + 7591, + 0, + 0, + 0, + 8455, + 0, + 0, + 6824, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14569, + 0, + 0, + 0, + 29000, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19979, + 0, + 18376, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11332, + 0, + 0, + 0, + 49863, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2191, + 7527, + 23148, + 58022, + 0, + 0, + 0, + 30631, + 0, + 26565, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 754, + 0, + 0, + 15877, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17510, + 7657, + 2821, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41927, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2569, + 34439, + 0, + 0, + 3790, + 0, + 0, + 0, + 15339, + 8775, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15908, + 0, + 0, + 21419, + 8359, + 0, + 0, + 0, + 0, + 424, + 0, + 0, + 0, + 0, + 0, + 0, + 25318, + 8008, + 20551, + 0, + 0, + 0, + 45735, + 30058, + 30372, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26180, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31432, + 10567, + 0, + 0, + 0, + 0, + 17450, + 0, + 0, + 0, + 0, + 0, + 0, + 30310, + 0, + 38022, + 0, + 0, + 0, + 0, + 0, + 28932, + 0, + 0, + 0, + 0, + 0, + 43910, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22180, + 12075, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22247, + 0, + 0, + 22826, + 12359, + 0, + 0, + 0, + 0, + 4105, + 50407, + 0, + 0, + 0, + 0, + 0, + 0, + 13581, + 28583, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28936, + 0, + 0, + 0, + 0, + 0, + 17673, + 10310, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 905, + 57862, + 1580, + 0, + 0, + 0, + 0, + 58630, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13479, + 0, + 0, + 14153, + 13286, + 0, + 0, + 9259, + 0, + 0, + 0, + 0, + 0, + 6606, + 3524, + 0, + 0, + 0, + 0, + 0, + 6567, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 631, + 49255, + 0, + 0, + 0, + 0, + 0, + 42886, + 0, + 38215, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17580, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55046, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10213, + 0, + 0, + 0, + 0, + 3604, + 37767, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30950, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 62087, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23528, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28715, + 4229, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1226, + 26820, + 0, + 0, + 0, + 12133, + 6984, + 261, + 21130, + 32548, + 0, + 0, + 0, + 0, + 0, + 0, + 3565, + 12390, + 20713, + 28071, + 0, + 0, + 1706, + 25287, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14670, + 0, + 0, + 0, + 0, + 0, + 0, + 30534, + 0, + 0, + 0, + 12615, + 0, + 43750, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28228, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45095, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1224, + 3975, + 10954, + 6375, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23180, + 20100, + 0, + 0, + 0, + 0, + 25736, + 8519, + 0, + 0, + 0, + 0, + 0, + 6663, + 0, + 2534, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23720, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19398, + 0, + 47814, + 26281, + 49702, + 0, + 0, + 4332, + 12965, + 0, + 0, + 5704, + 3206, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15396, + 0, + 0, + 0, + 44102, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25317, + 1064, + 39271, + 27433, + 0, + 14952, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14308, + 0, + 0, + 0, + 0, + 0, + 0, + 2763, + 4100, + 0, + 0, + 0, + 0, + 0, + 0, + 18792, + 0, + 0, + 0, + 22154, + 32583, + 0, + 6244, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49478, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21894, + 0, + 0, + 11048, + 0, + 0, + 0, + 0, + 0, + 0, + 11685, + 0, + 53862, + 0, + 0, + 15114, + 0, + 13870, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 919, + 0, + 0, + 0, + 31916, + 0, + 22570, + 101, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7333, + 0, + 0, + 0, + 0, + 3272, + 0, + 0, + 0, + 0, + 27718, + 32712, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1782, + 0, + 3688, + 0, + 0, + 0, + 0, + 29862, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22469, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55302, + 850, + 15492, + 0, + 0, + 0, + 5927, + 19786, + 13350, + 0, + 25702, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40390, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20260, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15335, + 8394, + 0, + 0, + 0, + 0, + 0, + 0, + 26566, + 0, + 0, + 0, + 0, + 843, + 2245, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6959, + 0, + 20488, + 1638, + 0, + 0, + 11533, + 50759, + 0, + 0, + 0, + 0, + 0, + 20871, + 0, + 0, + 0, + 0, + 0, + 24519, + 0, + 0, + 0, + 0, + 9544, + 23591, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20969, + 7109, + 29001, + 0, + 0, + 32422, + 31720, + 64294, + 0, + 0, + 0, + 0, + 16106, + 0, + 0, + 0, + 6930, + 4933, + 0, + 0, + 0, + 22917, + 0, + 27015, + 0, + 0, + 0, + 0, + 19880, + 8070, + 0, + 0, + 0, + 0, + 23945, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3310, + 0, + 87, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18439, + 0, + 0, + 0, + 20742, + 0, + 0, + 0, + 10597, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20236, + 0, + 0, + 0, + 16584, + 3429, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27241, + 0, + 0, + 0, + 0, + 16132, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 244, + 28261, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29509, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2921, + 31781, + 0, + 0, + 0, + 0, + 0, + 0, + 6408, + 4196, + 344, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11689, + 45863, + 0, + 0, + 0, + 0, + 906, + 3301, + 0, + 0, + 25544, + 32421, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1260, + 61607, + 0, + 27302, + 0, + 0, + 8682, + 16614, + 0, + 0, + 0, + 0, + 10830, + 0, + 0, + 9604, + 15049, + 13413, + 0, + 0, + 0, + 0, + 0, + 0, + 26761, + 0, + 0, + 0, + 0, + 0, + 0, + 61990, + 0, + 0, + 0, + 0, + 0, + 12580, + 0, + 0, + 11432, + 0, + 0, + 0, + 0, + 0, + 22507, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12389, + 0, + 0, + 0, + 0, + 0, + 0, + 2408, + 22661, + 14507, + 43239, + 0, + 9700, + 0, + 0, + 24714, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23972, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 34086, + 0, + 0, + 22955, + 7238, + 0, + 0, + 0, + 0, + 0, + 28485, + 13806, + 20038, + 0, + 0, + 0, + 0, + 22602, + 0, + 0, + 0, + 1645, + 22340, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26502, + 0, + 0, + 554, + 0, + 0, + 0, + 0, + 61735, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2694, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 883, + 27879, + 15948, + 0, + 3242, + 57382, + 0, + 0, + 0, + 0, + 0, + 0, + 13930, + 0, + 0, + 0, + 0, + 0, + 30922, + 0, + 4137, + 52615, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31911, + 16072, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26340, + 0, + 61671, + 0, + 0, + 0, + 0, + 3145, + 56199, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 280, + 0, + 5131, + 33479, + 0, + 15751, + 0, + 0, + 0, + 0, + 0, + 0, + 4136, + 1446, + 0, + 0, + 0, + 0, + 0, + 0, + 11304, + 17863, + 0, + 0, + 0, + 0, + 0, + 25125, + 0, + 0, + 0, + 36646, + 6057, + 0, + 0, + 0, + 855, + 11301, + 0, + 0, + 0, + 0, + 0, + 64774, + 0, + 0, + 0, + 19397, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1040, + 27367, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64358, + 0, + 0, + 178, + 132, + 0, + 0, + 14763, + 24455, + 0, + 0, + 0, + 46374, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46246, + 0, + 0, + 0, + 37382, + 0, + 0, + 0, + 7462, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8166, + 0, + 0, + 6921, + 0, + 0, + 0, + 9163, + 0, + 0, + 0, + 119, + 0, + 0, + 0, + 23146, + 17156, + 0, + 0, + 0, + 0, + 0, + 9127, + 0, + 0, + 0, + 17927, + 0, + 0, + 0, + 0, + 0, + 22084, + 0, + 0, + 0, + 0, + 0, + 39879, + 0, + 0, + 2035, + 0, + 1067, + 0, + 0, + 0, + 0, + 0, + 16652, + 59591, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20171, + 0, + 0, + 0, + 0, + 17733, + 0, + 0, + 0, + 0, + 0, + 32037, + 0, + 0, + 0, + 0, + 0, + 14277, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42022, + 0, + 0, + 26793, + 20358, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8907, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27780, + 0, + 0, + 0, + 0, + 32330, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39399, + 0, + 9732, + 0, + 16199, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 854, + 0, + 2984, + 45063, + 25418, + 26980, + 22539, + 0, + 9133, + 3653, + 15528, + 28743, + 4649, + 0, + 616, + 65127, + 0, + 0, + 0, + 61863, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55303, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23880, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31848, + 62854, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49606, + 0, + 27974, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32580, + 0, + 0, + 0, + 26052, + 4043, + 0, + 0, + 40454, + 0, + 0, + 26056, + 30565, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31398, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29288, + 1797, + 0, + 0, + 3220, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20427, + 0, + 0, + 0, + 0, + 23621, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24261, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35591, + 0, + 0, + 6862, + 0, + 0, + 0, + 4265, + 0, + 6285, + 5383, + 0, + 0, + 0, + 0, + 0, + 36870, + 0, + 39847, + 0, + 0, + 17224, + 5414, + 27882, + 58118, + 0, + 0, + 13224, + 4262, + 0, + 0, + 0, + 31302, + 0, + 0, + 1388, + 2982, + 11881, + 0, + 0, + 0, + 0, + 0, + 0, + 16837, + 809, + 0, + 24140, + 10724, + 0, + 0, + 0, + 0, + 5835, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1256, + 19237, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5796, + 11848, + 0, + 0, + 52870, + 11464, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5645, + 9158, + 0, + 25223, + 0, + 0, + 0, + 0, + 0, + 39142, + 24968, + 8135, + 32104, + 28678, + 0, + 0, + 0, + 46311, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23820, + 0, + 0, + 0, + 0, + 0, + 4050, + 0, + 1323, + 25220, + 0, + 0, + 0, + 20133, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9381, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13444, + 1198, + 60806, + 0, + 0, + 0, + 0, + 17356, + 50247, + 30632, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11944, + 999, + 0, + 0, + 0, + 0, + 4010, + 10404, + 0, + 0, + 0, + 0, + 0, + 0, + 10346, + 0, + 0, + 49510, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 38919, + 0, + 0, + 0, + 0, + 0, + 0, + 6351, + 60966, + 20137, + 487, + 0, + 0, + 0, + 0, + 0, + 0, + 655, + 2406, + 17387, + 43303, + 0, + 0, + 0, + 17063, + 0, + 0, + 213, + 0, + 0, + 0, + 0, + 0, + 0, + 17221, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10820, + 0, + 0, + 0, + 0, + 369, + 6, + 0, + 0, + 9098, + 21093, + 0, + 31653, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27143, + 0, + 0, + 16234, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6020, + 31723, + 28293, + 0, + 0, + 0, + 0, + 1936, + 30695, + 0, + 0, + 0, + 0, + 0, + 52902, + 0, + 0, + 29512, + 10791, + 0, + 20420, + 0, + 0, + 16010, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5324, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13383, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24328, + 0, + 0, + 0, + 0, + 0, + 0, + 40870, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24648, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7786, + 2852, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44678, + 0, + 17925, + 0, + 0, + 105, + 53062, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18762, + 0, + 0, + 40679, + 0, + 0, + 0, + 16165, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20390, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 62310, + 1322, + 14247, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1832, + 6052, + 0, + 0, + 11882, + 0, + 0, + 0, + 0, + 17668, + 0, + 28262, + 0, + 29542, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28007, + 0, + 0, + 0, + 57223, + 1585, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21162, + 0, + 0, + 62247, + 0, + 0, + 0, + 0, + 0, + 25414, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36326, + 0, + 0, + 0, + 23845, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2693, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13125, + 0, + 31236, + 0, + 0, + 0, + 0, + 0, + 22502, + 0, + 0, + 0, + 0, + 0, + 0, + 5994, + 10309, + 0, + 0, + 0, + 7269, + 0, + 0, + 0, + 0, + 17929, + 0, + 1011, + 44647, + 0, + 0, + 0, + 0, + 0, + 14919, + 0, + 0, + 0, + 0, + 20586, + 5350, + 0, + 0, + 0, + 45702, + 0, + 13189, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35782, + 17992, + 0, + 0, + 0, + 0, + 0, + 8203, + 0, + 0, + 0, + 0, + 0, + 0, + 56678, + 0, + 0, + 0, + 0, + 0, + 38087, + 4233, + 0, + 2127, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10148, + 0, + 0, + 0, + 2021, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47206, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9220, + 0, + 0, + 0, + 0, + 19465, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 39206, + 0, + 38055, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46982, + 0, + 0, + 0, + 0, + 0, + 22054, + 3850, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55, + 0, + 10542, + 0, + 0, + 0, + 0, + 7239, + 0, + 0, + 0, + 0, + 0, + 59367, + 0, + 0, + 14761, + 0, + 0, + 0, + 0, + 43079, + 0, + 0, + 0, + 0, + 0, + 2726, + 0, + 0, + 9582, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 37478, + 0, + 0, + 0, + 31364, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20393, + 8933, + 0, + 0, + 0, + 0, + 0, + 9380, + 0, + 0, + 0, + 0, + 16905, + 549, + 0, + 0, + 0, + 0, + 182, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1558, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19242, + 0, + 0, + 0, + 0, + 0, + 0, + 24933, + 0, + 6276, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42310, + 23595, + 24068, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13191, + 6158, + 2567, + 0, + 0, + 268, + 47047, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27940, + 0, + 0, + 0, + 0, + 0, + 26726, + 0, + 0, + 0, + 0, + 8200, + 1222, + 31562, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2922, + 8231, + 8904, + 29157, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23976, + 4836, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31658, + 0, + 0, + 31685, + 0, + 0, + 2889, + 6213, + 0, + 0, + 0, + 0, + 0, + 13605, + 0, + 0, + 0, + 0, + 0, + 24772, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20684, + 26468, + 24075, + 0, + 0, + 0, + 21193, + 0, + 715, + 679, + 0, + 0, + 0, + 0, + 0, + 0, + 3050, + 7654, + 0, + 0, + 0, + 13798, + 0, + 0, + 0, + 0, + 15, + 27973, + 0, + 0, + 8491, + 2086, + 0, + 0, + 0, + 43206, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 60391, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25892, + 0, + 22276, + 0, + 34374, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20165, + 0, + 0, + 25672, + 0, + 0, + 0, + 1811, + 24839, + 0, + 31044, + 0, + 0, + 25513, + 0, + 0, + 0, + 0, + 0, + 12810, + 0, + 0, + 62438, + 0, + 0, + 1325, + 0, + 364, + 3782, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8042, + 19687, + 0, + 0, + 0, + 33415, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7205, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11844, + 0, + 0, + 0, + 0, + 3341, + 1543, + 6698, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29766, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41158, + 0, + 24294, + 0, + 3844, + 12329, + 0, + 0, + 0, + 13738, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26245, + 0, + 0, + 0, + 0, + 0, + 0, + 6378, + 0, + 343, + 4838, + 0, + 0, + 0, + 24358, + 11688, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1489, + 34759, + 0, + 0, + 0, + 0, + 363, + 51974, + 1878, + 11013, + 0, + 0, + 32265, + 59782, + 0, + 0, + 0, + 28421, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22756, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14089, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29257, + 61222, + 0, + 30661, + 0, + 28327, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27108, + 8843, + 0, + 9673, + 2084, + 0, + 0, + 0, + 16327, + 0, + 48455, + 0, + 0, + 0, + 0, + 0, + 0, + 4876, + 9316, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9035, + 18852, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4164, + 0, + 0, + 14827, + 1349, + 0, + 0, + 0, + 0, + 0, + 11909, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21765, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31272, + 63910, + 0, + 0, + 0, + 25924, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44487, + 0, + 0, + 0, + 20612, + 0, + 0, + 27754, + 31428, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17287, + 0, + 3943, + 0, + 0, + 0, + 63302, + 0, + 0, + 0, + 0, + 25256, + 19942, + 0, + 55142, + 0, + 39046, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15367, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28422, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9576, + 63847, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25226, + 5734, + 0, + 0, + 0, + 0, + 0, + 0, + 13801, + 4997, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43942, + 1270, + 2566, + 6284, + 0, + 0, + 16230, + 0, + 0, + 0, + 20678, + 0, + 0, + 0, + 0, + 0, + 38855, + 0, + 0, + 0, + 0, + 29643, + 0, + 0, + 0, + 41, + 3655, + 0, + 0, + 0, + 0, + 0, + 14276, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15686, + 0, + 0, + 0, + 15718, + 0, + 50694, + 0, + 0, + 16232, + 8007, + 0, + 0, + 0, + 5060, + 329, + 11591, + 51, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13065, + 7302, + 27530, + 15366, + 0, + 24934, + 0, + 0, + 0, + 17828, + 0, + 0, + 4552, + 6311, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47686, + 368, + 12103, + 10122, + 33830, + 0, + 0, + 599, + 18534, + 9579, + 49479, + 0, + 5668, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13157, + 0, + 0, + 0, + 0, + 23274, + 14055, + 0, + 0, + 0, + 0, + 0, + 48903, + 0, + 0, + 0, + 0, + 0, + 0, + 1871, + 0, + 15434, + 0, + 0, + 0, + 16174, + 62470, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7749, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30501, + 0, + 0, + 0, + 0, + 25675, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9285, + 0, + 0, + 25323, + 1669, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3588, + 0, + 0, + 0, + 0, + 0, + 32902, + 0, + 0, + 4426, + 0, + 0, + 0, + 0, + 57959, + 0, + 0, + 0, + 0, + 0, + 0, + 29898, + 58278, + 0, + 0, + 0, + 0, + 11880, + 1220, + 0, + 0, + 0, + 41479, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23141, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42566, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40167, + 9484, + 3493, + 0, + 0, + 0, + 0, + 0, + 21126, + 0, + 0, + 0, + 0, + 8649, + 18918, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 34886, + 2601, + 0, + 0, + 0, + 0, + 12518, + 0, + 0, + 0, + 0, + 7976, + 10311, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45190, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16842, + 20229, + 0, + 0, + 0, + 0, + 0, + 0, + 7528, + 4614, + 0, + 0, + 0, + 0, + 0, + 30086, + 0, + 0, + 0, + 1671, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9896, + 6277, + 0, + 0, + 0, + 0, + 0, + 61191, + 0, + 41287, + 0, + 21956, + 0, + 0, + 20010, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13195, + 0, + 0, + 0, + 0, + 1381, + 0, + 0, + 0, + 0, + 365, + 30951, + 24268, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7044, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27944, + 359, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28487, + 0, + 0, + 77, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 56775, + 12586, + 8421, + 0, + 0, + 0, + 0, + 0, + 0, + 26185, + 14599, + 0, + 0, + 8040, + 5702, + 12585, + 3109, + 0, + 0, + 0, + 0, + 0, + 21574, + 5388, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5106, + 52454, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1907, + 29895, + 0, + 6116, + 0, + 0, + 0, + 0, + 11081, + 5285, + 0, + 28069, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4104, + 0, + 0, + 0, + 0, + 0, + 0, + 41511, + 0, + 0, + 0, + 0, + 0, + 0, + 5262, + 0, + 0, + 0, + 503, + 4231, + 7720, + 34343, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7304, + 10374, + 1718, + 0, + 0, + 29127, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23497, + 22567, + 6952, + 2340, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20360, + 12453, + 0, + 45094, + 0, + 0, + 0, + 0, + 0, + 28582, + 0, + 0, + 0, + 0, + 680, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23084, + 0, + 0, + 0, + 30696, + 0, + 0, + 0, + 0, + 45862, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5580, + 6053, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 712, + 70, + 0, + 0, + 26091, + 11335, + 0, + 0, + 0, + 0, + 13612, + 0, + 13160, + 1926, + 435, + 51559, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47302, + 19083, + 0, + 0, + 12742, + 0, + 1607, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6155, + 37095, + 0, + 0, + 0, + 0, + 0, + 18948, + 7146, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7848, + 2055, + 0, + 0, + 0, + 0, + 8910, + 0, + 19336, + 0, + 0, + 48070, + 8490, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9932, + 56423, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4133, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43398, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16173, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32011, + 0, + 0, + 30918, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26854, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20389, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18889, + 0, + 0, + 0, + 0, + 8965, + 0, + 0, + 0, + 44358, + 0, + 0, + 0, + 8997, + 0, + 34055, + 0, + 0, + 0, + 0, + 0, + 29350, + 0, + 0, + 501, + 17767, + 0, + 0, + 32457, + 60262, + 0, + 0, + 0, + 30886, + 0, + 0, + 3757, + 1063, + 0, + 0, + 0, + 25637, + 0, + 0, + 0, + 0, + 0, + 28068, + 0, + 26374, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11684, + 0, + 0, + 0, + 0, + 0, + 0, + 24779, + 229, + 0, + 13766, + 0, + 0, + 7402, + 11525, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26313, + 23686, + 0, + 0, + 29736, + 47527, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27268, + 0, + 0, + 0, + 0, + 553, + 0, + 0, + 0, + 0, + 0, + 0, + 32038, + 0, + 0, + 0, + 0, + 1135, + 26596, + 0, + 0, + 12300, + 14631, + 0, + 0, + 0, + 43238, + 0, + 871, + 0, + 0, + 31496, + 0, + 8457, + 17669, + 0, + 12836, + 0, + 0, + 0, + 22726, + 0, + 38758, + 0, + 0, + 375, + 6564, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 170, + 18535, + 0, + 22948, + 0, + 0, + 32360, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25764, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15652, + 0, + 0, + 0, + 32774, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28551, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15145, + 0, + 0, + 0, + 21100, + 27654, + 0, + 0, + 0, + 0, + 0, + 0, + 4874, + 26215, + 0, + 1639, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4169, + 0, + 0, + 0, + 0, + 0, + 7336, + 0, + 0, + 0, + 0, + 21572, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24644, + 1675, + 2533, + 0, + 0, + 0, + 53318, + 0, + 13094, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6246, + 0, + 22020, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28453, + 5576, + 5124, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27910, + 0, + 29382, + 18216, + 8583, + 0, + 0, + 0, + 39174, + 0, + 43558, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11973, + 0, + 0, + 0, + 0, + 0, + 23397, + 0, + 0, + 0, + 0, + 6091, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6474, + 16197, + 14217, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26728, + 0, + 567, + 48839, + 0, + 0, + 0, + 0, + 0, + 15271, + 0, + 0, + 31818, + 43974, + 2450, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11368, + 9191, + 0, + 44454, + 0, + 0, + 0, + 0, + 0, + 0, + 14568, + 12293, + 0, + 0, + 0, + 8453, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32040, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 902, + 0, + 0, + 0, + 27236, + 5612, + 11495, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9194, + 23684, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27430, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26217, + 44870, + 0, + 0, + 0, + 0, + 0, + 0, + 5581, + 7173, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 52775, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20968, + 18340, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4107, + 11239, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29381, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21990, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 48806, + 0, + 0, + 0, + 32292, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10884, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27562, + 0, + 5643, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3089, + 31525, + 0, + 19684, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 61415, + 0, + 0, + 0, + 0, + 0, + 36198, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7908, + 0, + 0, + 0, + 0, + 872, + 743, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1229, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32484, + 0, + 0, + 0, + 0, + 0, + 34822, + 0, + 0, + 0, + 0, + 0, + 50726, + 0, + 0, + 0, + 0, + 7274, + 0, + 0, + 0, + 15304, + 11526, + 0, + 0, + 0, + 3047, + 0, + 0, + 0, + 0, + 0, + 0, + 22376, + 0, + 0, + 0, + 846, + 0, + 0, + 0, + 0, + 35815, + 0, + 0, + 0, + 23652, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23721, + 2148, + 0, + 0, + 0, + 0, + 0, + 0, + 14856, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1358, + 0, + 3082, + 0, + 0, + 0, + 848, + 10949, + 0, + 0, + 0, + 0, + 0, + 0, + 6504, + 0, + 0, + 14372, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8201, + 9958, + 0, + 0, + 0, + 0, + 0, + 0, + 24266, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26469, + 0, + 0, + 0, + 0, + 18604, + 2053, + 0, + 33511, + 0, + 0, + 0, + 0, + 0, + 9222, + 0, + 0, + 0, + 0, + 0, + 44006, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 41895, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12044, + 390, + 0, + 0, + 0, + 0, + 0, + 4935, + 0, + 48646, + 0, + 56102, + 3052, + 16070, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8612, + 9320, + 38311, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 500, + 0, + 0, + 0, + 0, + 42918, + 0, + 32550, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27434, + 57926, + 17064, + 0, + 0, + 46502, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26760, + 6756, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 624, + 0, + 5000, + 0, + 0, + 0, + 0, + 32293, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26246, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23, + 7301, + 0, + 0, + 0, + 36199, + 0, + 40838, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27178, + 57350, + 0, + 0, + 12457, + 9317, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16810, + 0, + 0, + 0, + 14510, + 0, + 0, + 0, + 0, + 21319, + 0, + 0, + 0, + 13508, + 17, + 11365, + 0, + 0, + 0, + 0, + 5291, + 0, + 8329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27685, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 52006, + 0, + 0, + 0, + 7493, + 0, + 44263, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9800, + 0, + 0, + 0, + 25676, + 61478, + 0, + 0, + 0, + 0, + 0, + 0, + 5773, + 0, + 0, + 0, + 0, + 41991, + 26057, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22629, + 0, + 0, + 0, + 47783, + 362, + 1959, + 23468, + 0, + 0, + 0, + 10921, + 0, + 0, + 0, + 3150, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32456, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4559, + 3270, + 0, + 0, + 983, + 0, + 0, + 26343, + 0, + 33446, + 0, + 0, + 0, + 61767, + 0, + 48390, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2790, + 0, + 39782, + 7849, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1544, + 2183, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4040, + 2471, + 20009, + 30020, + 0, + 0, + 11242, + 0, + 0, + 0, + 5578, + 53382, + 0, + 22631, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12901, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 215, + 0, + 0, + 9030, + 0, + 0, + 0, + 0, + 0, + 0, + 265, + 1412, + 0, + 0, + 11626, + 3687, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17449, + 24359, + 0, + 0, + 26729, + 40134, + 0, + 0, + 0, + 0, + 29768, + 61958, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20908, + 0, + 0, + 0, + 0, + 0, + 11016, + 0, + 0, + 47462, + 21547, + 5926, + 0, + 0, + 14728, + 2983, + 24104, + 15301, + 0, + 0, + 0, + 0, + 0, + 32645, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3300, + 0, + 0, + 0, + 15972, + 0, + 0, + 0, + 0, + 0, + 0, + 6634, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3076, + 0, + 30983, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 106, + 0, + 0, + 0, + 0, + 12775, + 0, + 0, + 0, + 0, + 7177, + 18022, + 0, + 0, + 0, + 0, + 0, + 22534, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 49894, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27560, + 0, + 0, + 0, + 0, + 30278, + 10668, + 23877, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29124, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20870, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 44582, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 48454, + 0, + 0, + 0, + 0, + 6442, + 0, + 16330, + 22951, + 0, + 0, + 16904, + 0, + 0, + 0, + 0, + 644, + 0, + 0, + 0, + 40038, + 0, + 0, + 0, + 37222, + 0, + 0, + 0, + 9830, + 0, + 0, + 0, + 0, + 0, + 34919, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13733, + 0, + 0, + 0, + 28196, + 0, + 0, + 0, + 0, + 0, + 19876, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23558, + 0, + 11142, + 0, + 27781, + 0, + 0, + 0, + 0, + 13864, + 0, + 0, + 0, + 24682, + 47847, + 0, + 0, + 0, + 0, + 6890, + 0, + 0, + 0, + 0, + 0, + 3981, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1772, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3603, + 1991, + 0, + 27396, + 8652, + 0, + 18312, + 0, + 0, + 0, + 0, + 30054, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11270, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20708, + 0, + 0, + 0, + 0, + 338, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7050, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14862, + 0, + 0, + 3492, + 0, + 0, + 0, + 55878, + 0, + 0, + 0, + 16486, + 0, + 0, + 0, + 18119, + 0, + 0, + 0, + 0, + 0, + 0, + 2154, + 1284, + 0, + 0, + 23113, + 31751, + 0, + 0, + 29547, + 0, + 0, + 0, + 0, + 0, + 0, + 36647, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18183, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7913, + 0, + 0, + 0, + 0, + 20644, + 0, + 0, + 10508, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 43622, + 0, + 0, + 0, + 0, + 0, + 40966, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 246, + 901, + 11529, + 5191, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24454, + 0, + 0, + 26665, + 27590, + 0, + 27397, + 0, + 0, + 0, + 0, + 0, + 0, + 23562, + 2949, + 0, + 0, + 30344, + 62214, + 0, + 47334, + 2026, + 18885, + 0, + 0, + 0, + 48678, + 0, + 0, + 0, + 22694, + 0, + 0, + 1972, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15465, + 0, + 0, + 0, + 0, + 38822, + 0, + 0, + 0, + 0, + 945, + 32708, + 0, + 54791, + 0, + 14918, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23396, + 0, + 0, + 0, + 0, + 0, + 0, + 5486, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7722, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30856, + 64166, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 35206, + 0, + 0, + 0, + 30535, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 62663, + 0, + 0, + 1096, + 17574, + 31820, + 0, + 0, + 14375, + 4402, + 27207, + 0, + 0, + 21448, + 4676, + 0, + 0, + 0, + 0, + 16585, + 5094, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4845, + 0, + 0, + 32870, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31466, + 0, + 0, + 0, + 0, + 31783, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4522, + 16039, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14469, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7464, + 4773, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18636, + 0, + 0, + 0, + 25640, + 0, + 0, + 0, + 0, + 0, + 0, + 2244, + 0, + 0, + 11818, + 0, + 1168, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6540, + 23079, + 13770, + 7719, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 58150, + 528, + 34502, + 32682, + 0, + 0, + 12997, + 0, + 0, + 0, + 0, + 0, + 2214, + 0, + 0, + 0, + 0, + 0, + 58567, + 0, + 0, + 0, + 26375, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26437, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26121, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32005, + 22952, + 59047, + 0, + 13543, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16328, + 0, + 0, + 33542, + 0, + 0, + 0, + 19782, + 0, + 0, + 0, + 16644, + 0, + 0, + 0, + 0, + 31688, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10276, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36327, + 0, + 0, + 29480, + 0, + 0, + 0, + 777, + 12709, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27398, + 0, + 0, + 0, + 4455, + 9037, + 31397, + 0, + 9221, + 0, + 0, + 0, + 60487, + 20840, + 1796, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8364, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19752, + 44902, + 0, + 38566, + 0, + 0, + 18027, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10662, + 0, + 0, + 0, + 0, + 0, + 11812, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19910, + 0, + 0, + 0, + 45030, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19978, + 5127, + 0, + 11620, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19817, + 0, + 5579, + 9350, + 0, + 0, + 21002, + 19718, + 0, + 0, + 0, + 21926, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20711, + 0, + 0, + 0, + 20197, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 40550, + 0, + 0, + 0, + 57510, + 0, + 0, + 0, + 53895, + 0, + 0, + 15017, + 0, + 17000, + 39367, + 2347, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8588, + 0, + 0, + 0, + 0, + 0, + 3273, + 17862, + 3498, + 2085, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19048, + 0, + 0, + 0, + 0, + 0, + 11978, + 58631, + 0, + 0, + 0, + 0, + 0, + 0, + 523, + 0, + 12969, + 198, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28197, + 0, + 47846, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4549, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 687, + 14917, + 748, + 8229, + 0, + 0, + 0, + 0, + 0, + 0, + 2476, + 12935, + 0, + 0, + 0, + 0, + 0, + 0, + 22792, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27528, + 59142, + 0, + 0, + 20876, + 20134, + 0, + 0, + 0, + 0, + 440, + 12068, + 0, + 58951, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 48038, + 0, + 0, + 0, + 60999, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15716, + 7498, + 5476, + 0, + 0, + 0, + 0, + 20202, + 37959, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29801, + 0, + 5451, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50790, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24485, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13573, + 0, + 0, + 22856, + 0, + 0, + 0, + 0, + 21927, + 0, + 0, + 0, + 0, + 0, + 0, + 9130, + 0, + 0, + 0, + 0, + 0, + 0, + 13732, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2282, + 583, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3726, + 26503, + 0, + 0, + 0, + 0, + 0, + 0, + 9258, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21604, + 0, + 0, + 0, + 45574, + 0, + 0, + 0, + 0, + 0, + 20710, + 0, + 0, + 0, + 42694, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1163, + 6694, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10948, + 0, + 0, + 0, + 29700, + 0, + 0, + 0, + 0, + 0, + 58823, + 3796, + 27399, + 20939, + 10180, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19, + 29287, + 28649, + 14534, + 0, + 0, + 16428, + 45607, + 0, + 0, + 0, + 0, + 0, + 0, + 25322, + 0, + 4908, + 0, + 0, + 0, + 0, + 0, + 0, + 25476, + 29097, + 14246, + 11053, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18502, + 0, + 0, + 0, + 44390, + 0, + 0, + 0, + 17765, + 0, + 0, + 0, + 0, + 0, + 0, + 24520, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17319, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28166, + 0, + 0, + 0, + 0, + 0, + 48198, + 0, + 0, + 31467, + 0, + 24585, + 0, + 0, + 0, + 0, + 18692, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23596, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7236, + 968, + 13637, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3763, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14791, + 0, + 0, + 0, + 12324, + 0, + 12741, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11108, + 0, + 0, + 0, + 0, + 4009, + 40295, + 20616, + 4357, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15015, + 0, + 0, + 0, + 0, + 0, + 43751, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23013, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45542, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23974, + 0, + 0, + 0, + 0, + 17480, + 20647, + 0, + 0, + 0, + 0, + 0, + 0, + 8876, + 0, + 0, + 40806, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14502, + 17160, + 17764, + 0, + 0, + 31594, + 35431, + 0, + 0, + 2890, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27524, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8228, + 0, + 56583, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 34278, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2662, + 0, + 26724, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64198, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22281, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3049, + 54983, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 837, + 0, + 17604, + 0, + 0, + 0, + 0, + 0, + 28838, + 0, + 0, + 0, + 0, + 0, + 0, + 26312, + 0, + 0, + 3910, + 0, + 0, + 0, + 25830, + 0, + 0, + 0, + 0, + 0, + 8391, + 0, + 19845, + 19240, + 1092, + 0, + 0, + 5449, + 0, + 0, + 0, + 0, + 17188, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10629, + 0, + 0, + 6671, + 61094, + 5832, + 8358, + 0, + 0, + 0, + 55078, + 0, + 0, + 0, + 0, + 0, + 29860, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 51494, + 0, + 28647, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25989, + 0, + 0, + 30153, + 61318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24903, + 0, + 0, + 0, + 4388, + 0, + 42054, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 53158, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 50918, + 0, + 0, + 0, + 0, + 0, + 0, + 26251, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5929, + 2853, + 0, + 37126, + 7372, + 197, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2027, + 934, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55686, + 0, + 0, + 5672, + 5447, + 0, + 62758, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2923, + 0, + 556, + 1415, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8645, + 0, + 9477, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 48742, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24235, + 228, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16970, + 18823, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25158, + 0, + 0, + 0, + 0, + 0, + 18567, + 20072, + 2823, + 14313, + 1830, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27048, + 23526, + 0, + 0, + 0, + 0, + 0, + 997, + 492, + 0, + 14730, + 16677, + 396, + 13574, + 0, + 0, + 0, + 41671, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19045, + 0, + 0, + 0, + 421, + 17545, + 3110, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 47111, + 14475, + 56551, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3697, + 0, + 0, + 0, + 0, + 0, + 0, + 49382, + 0, + 35559, + 0, + 0, + 0, + 0, + 40, + 0, + 11496, + 15621, + 0, + 8550, + 0, + 0, + 0, + 63462, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 36966, + 0, + 50406, + 0, + 46022, + 1001, + 0, + 0, + 12069, + 3249, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15241, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 64743, + 0, + 0, + 0, + 0, + 0, + 58759, + 0, + 0, + 0, + 0, + 1136, + 26981, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17732, + 0, + 0, + 0, + 17157, + 20011, + 6629, + 0, + 43879, + 0, + 0, + 0, + 13572, + 25128, + 10759, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28676, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 875, + 24007, + 0, + 0, + 0, + 0, + 7628, + 0, + 0, + 0, + 0, + 0, + 12268, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19300, + 23210, + 356, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15236, + 0, + 0, + 0, + 0, + 0, + 49670, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21764, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13931, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 45799, + 0, + 0, + 436, + 3589, + 0, + 0, + 11402, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 62822, + 0, + 0, + 0, + 39814, + 588, + 0, + 0, + 0, + 0, + 0, + 0, + 27750, + 0, + 0, + 0, + 0, + 0, + 0, + 1609, + 22660, + 2346, + 18951, + 0, + 16068, + 0, + 0, + 0, + 0, + 0, + 0, + 5162, + 11110, + 0, + 0, + 0, + 0, + 15048, + 1060, + 0, + 7879, + 18280, + 326, + 0, + 14886, + 19656, + 0, + 7594, + 0, + 0, + 0, + 0, + 0, + 781, + 581, + 0, + 16198, + 0, + 0, + 0, + 0, + 0, + 0, + 1078, + 9892, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4489, + 0, + 0, + 0, + 0, + 33798, + 0, + 0, + 0, + 54534, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 33158, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 42086, + 13834, + 2757, + 8456, + 16773, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3434, + 0, + 0, + 0, + 0, + 0, + 3946, + 29668, + 0, + 0, + 30634, + 36775, + 0, + 0, + 0, + 0, + 0, + 24901, + 0, + 16069, + 6280, + 0, + 0, + 0, + 0, + 41990, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27365, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1450, + 44807, + 0, + 0, + 0, + 32100, + 0, + 0, + 0, + 0, + 0, + 35110, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17448, + 19591, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1739, + 0, + 0, + 0, + 0, + 5511, + 0, + 0, + 0, + 32934, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18180, + 0, + 0, + 0, + 23428, + 19754, + 0, + 0, + 31174, + 3021, + 31655, + 23464, + 0, + 0, + 0, + 0, + 0, + 0, + 57255, + 0, + 0, + 21292, + 64487, + 0, + 0, + 0, + 0, + 0, + 0, + 25802, + 9189, + 0, + 0, + 0, + 0, + 0, + 49254, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5837, + 50023, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15495, + 0, + 0, + 0, + 0, + 0, + 51942, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28104, + 58662, + 0, + 50214, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2988, + 0, + 22888, + 31812, + 0, + 0, + 0, + 0, + 0, + 2020, + 0, + 18916, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23973, + 0, + 0, + 0, + 0, + 17516, + 11717, + 0, + 0, + 0, + 55911, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2855, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46822, + 0, + 24710, + 28586, + 0, + 0, + 0, + 1556, + 0, + 0, + 30117, + 0, + 0, + 22090, + 57127, + 3403, + 14087, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1041, + 0, + 10633, + 6916, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27269, + 0, + 0, + 13322, + 18055, + 0, + 29380, + 0, + 56454, + 0, + 0, + 120, + 0, + 0, + 8773, + 0, + 0, + 0, + 0, + 16040, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27242, + 23781, + 0, + 1572, + 0, + 28134, + 0, + 0, + 1512, + 0, + 0, + 0, + 0, + 0, + 0, + 27684, + 0, + 38470, + 0, + 0, + 0, + 0, + 0, + 0, + 1513, + 8709, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46566, + 0, + 0, + 0, + 0, + 28521, + 61159, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24356, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13028, + 0, + 5863, + 0, + 0, + 15693, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1131, + 23398, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26212, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18404, + 0, + 0, + 0, + 0, + 1457, + 26183, + 0, + 0, + 2475, + 7110, + 0, + 0, + 0, + 0, + 27180, + 60166, + 0, + 0, + 0, + 20262, + 0, + 41862, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2762, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26148, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28229, + 0, + 0, + 0, + 29254, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27690, + 0, + 0, + 13636, + 12776, + 1862, + 0, + 0, + 0, + 0, + 0, + 0, + 17225, + 3271, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28039, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4457, + 18117, + 0, + 2023, + 402, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 104, + 3654, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18440, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29861, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22150, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24074, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12004, + 0, + 32358, + 0, + 0, + 3081, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4749, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10792, + 1799, + 21322, + 0, + 7880, + 12613, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13993, + 0, + 0, + 0, + 16202, + 0, + 0, + 0, + 0, + 32102, + 0, + 37223, + 0, + 10500, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 32008, + 0, + 0, + 0, + 0, + 0, + 23816, + 3236, + 0, + 0, + 0, + 0, + 0, + 23237, + 0, + 0, + 5642, + 0, + 4684, + 294, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26852, + 0, + 0, + 0, + 0, + 0, + 0, + 7148, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7890, + 61798, + 939, + 0, + 0, + 56679, + 0, + 0, + 0, + 0, + 0, + 27078, + 202, + 5029, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28005, + 0, + 0, + 15273, + 24741, + 5676, + 20452, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 55910, + 0, + 0, + 0, + 0, + 5069, + 27942, + 0, + 21092, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12517, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21384, + 28260, + 0, + 2502, + 20108, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 46726, + 0, + 30790, + 0, + 0, + 0, + 0, + 0, + 14725, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1099, + 6372, + 0, + 0, + 0, + 12422, + 15182, + 0, + 8683, + 0, + 10665, + 19462, + 0, + 0, + 0, + 0, + 0, + 0, + 1590, + 0, + 31628, + 0, + 22632, + 19750, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24198, + 0, + 0, + 0, + 0, + 0, + 50662, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9131, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11015, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16490, + 54695, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12937, + 0, + 0, + 0, + 0, + 16004, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2181, + 6923, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15624, + 11302, + 0, + 0, + 5673, + 7559, + 0, + 0, + 14668, + 15684, + 0, + 0, + 0, + 0, + 0, + 0, + 24204, + 48134, + 0, + 24230, + 0, + 55527, + 0, + 0, + 3464, + 19141, + 0, + 0, + 0, + 0]; diff --git a/rust/vendor/brotli/src/enc/encode.rs b/rust/vendor/brotli/src/enc/encode.rs new file mode 100755 index 0000000..fdc9dd6 --- /dev/null +++ b/rust/vendor/brotli/src/enc/encode.rs @@ -0,0 +1,3038 @@ +#![allow(dead_code)] +use super::hash_to_binary_tree::InitializeH10; +use super::constants::{BROTLI_WINDOW_GAP, BROTLI_CONTEXT_LUT, BROTLI_CONTEXT, + BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS, BROTLI_MAX_NPOSTFIX, BROTLI_MAX_NDIRECT}; +use super::backward_references::{BrotliCreateBackwardReferences, Struct1, UnionHasher, + BrotliEncoderParams, BrotliEncoderMode, BrotliHasherParams, H2Sub, + H3Sub, H4Sub, H5Sub, H6Sub, H54Sub, HQ5Sub, HQ7Sub, AdvHasher, BasicHasher, H9, + H9_BUCKET_BITS, H9_BLOCK_SIZE, H9_BLOCK_BITS, H9_NUM_LAST_DISTANCES_TO_CHECK, + AnyHasher, HowPrepared, StoreLookaheadThenStore, AdvHashSpecialization}; +use alloc::Allocator; +pub use super::parameters::BrotliEncoderParameter; +use super::combined_alloc::BrotliAlloc; +use super::interface; +use super::bit_cost::{BitsEntropy, ShannonEntropy}; +#[allow(unused_imports)] +use super::block_split::BlockSplit; +#[allow(unused_imports)] +use super::brotli_bit_stream::{BrotliBuildAndStoreHuffmanTreeFast, BrotliStoreHuffmanTree, + BrotliStoreMetaBlock, BrotliStoreMetaBlockFast, + BrotliStoreMetaBlockTrivial, BrotliStoreUncompressedMetaBlock, + BrotliWriteEmptyLastMetaBlock, BrotliWriteMetadataMetaBlock, + MetaBlockSplit, RecoderState, JumpToByteBoundary}; + +use enc::input_pair::InputReferenceMut; +use super::command::{Command, GetLengthCode, BrotliDistanceParams}; +use super::compress_fragment::BrotliCompressFragmentFast; +use super::compress_fragment_two_pass::{BrotliCompressFragmentTwoPass, BrotliWriteBits}; +#[allow(unused_imports)] +use super::entropy_encode::{BrotliConvertBitDepthsToSymbols, BrotliCreateHuffmanTree, HuffmanTree}; +use super::metablock::{BrotliBuildMetaBlock, BrotliBuildMetaBlockGreedy, BrotliOptimizeHistograms, BrotliInitDistanceParams}; +use super::static_dict::{BrotliGetDictionary, kNumDistanceCacheEntries}; +use super::histogram::{ContextType, HistogramLiteral, HistogramCommand, HistogramDistance, CostAccessors}; +use super::super::alloc; +use super::super::alloc::{SliceWrapper, SliceWrapperMut}; +use super::utf8_util::BrotliIsMostlyUTF8; +use super::util::{brotli_min_size_t, Log2FloorNonZero}; +use core; +//fn BrotliCreateHqZopfliBackwardReferences(m: &mut [MemoryManager], +// dictionary: &[BrotliDictionary], +// num_bytes: usize, +// position: usize, +// ringbuffer: &[u8], +// ringbuffer_mask: usize, +// params: &[BrotliEncoderParams], +// hasher: &mut [u8], +// dist_cache: &mut [i32], +// last_insert_len: &mut [usize], +// commands: &mut [Command], +// num_commands: &mut [usize], +// num_literals: &mut [usize]); +//fn BrotliCreateZopfliBackwardReferences(m: &mut [MemoryManager], +// dictionary: &[BrotliDictionary], +// num_bytes: usize, +// position: usize, +// ringbuffer: &[u8], +// ringbuffer_mask: usize, +// params: &[BrotliEncoderParams], +// hasher: &mut [u8], +// dist_cache: &mut [i32], +// last_insert_len: &mut [usize], +// commands: &mut [Command], +// num_commands: &mut [usize], +// num_literals: &mut [usize]); +//fn BrotliInitBlockSplit(xself: &mut BlockSplit); +//fn BrotliInitMemoryManager(m: &mut [MemoryManager], +// alloc_func: fn(&mut [::std::os::raw::c_void], usize) +// -> *mut ::std::os::raw::c_void, +// free_func: fn(*mut ::std::os::raw::c_void, +// *mut ::std::os::raw::c_void), +// opaque: *mut ::std::os::raw::c_void); +//fn BrotliInitZopfliNodes(array: &mut [ZopfliNode], length: usize); +//fn BrotliWipeOutMemoryManager(m: &mut [MemoryManager]); + + + +static kCompressFragmentTwoPassBlockSize: usize = (1i32 << 17i32) as (usize); + +static kMinUTF8Ratio: super::util::floatX = 0.75 as super::util::floatX; + + + +pub struct RingBuffer> { + pub size_: u32, + pub mask_: u32, + pub tail_size_: u32, + pub total_size_: u32, + pub cur_size_: u32, + pub pos_: u32, + pub data_mo: AllocU8::AllocatedMemory, + pub buffer_index: usize, +} + + +#[derive(PartialEq, Eq, Copy, Clone)] +#[repr(i32)] +pub enum BrotliEncoderStreamState { + BROTLI_STREAM_PROCESSING = 0, + BROTLI_STREAM_FLUSH_REQUESTED = 1, + BROTLI_STREAM_FINISHED = 2, + BROTLI_STREAM_METADATA_HEAD = 3, + BROTLI_STREAM_METADATA_BODY = 4, +} + +#[derive(Clone,Copy,Debug)] +enum NextOut { + DynamicStorage(u32), + TinyBuf(u32), + None, +} +fn GetNextOutInternal<'a>( + next_out :&NextOut, + storage : &'a mut [u8], + tiny_buf : &'a mut [u8;16], +) -> &'a mut[u8]{ + match next_out { + &NextOut::DynamicStorage(offset) => + return &mut storage[offset as usize..], + &NextOut::TinyBuf(offset) => + return &mut tiny_buf[offset as usize..], + &NextOut::None => &mut [], + } +} +macro_rules! GetNextOut { + ($s : expr) => { + GetNextOutInternal(&$s.next_out_, + $s.storage_.slice_mut(), + &mut $s.tiny_buf_) + }; +} +fn NextOutIncrement(next_out :&NextOut, inc : i32) -> NextOut{ + match next_out { + &NextOut::DynamicStorage(offset) => + return NextOut::DynamicStorage((offset as i32 + inc) as u32), + &NextOut::TinyBuf(offset) => + return NextOut::TinyBuf((offset as i32 + inc) as u32), + &NextOut::None => NextOut::None, + } +} +fn IsNextOutNull(next_out :&NextOut) -> bool { + match next_out { + &NextOut::DynamicStorage(_) => + false, + &NextOut::TinyBuf(_) => + false, + &NextOut::None => true, + } +} + +#[derive(Clone,Copy,Debug)] +pub enum IsFirst { + NothingWritten, + HeaderWritten, + FirstCatableByteWritten, + BothCatableBytesWritten, +} + +pub struct BrotliEncoderStateStruct +{ + pub params: BrotliEncoderParams, + pub m8: Alloc, + pub hasher_: UnionHasher, + pub input_pos_: u64, + pub ringbuffer_: RingBuffer, + pub cmd_alloc_size_: usize, + pub commands_: >::AllocatedMemory, // not sure about this one + pub num_commands_: usize, + pub num_literals_: usize, + pub last_insert_len_: usize, + pub last_flush_pos_: u64, + pub last_processed_pos_: u64, + pub dist_cache_: [i32; 16], + pub saved_dist_cache_: [i32; kNumDistanceCacheEntries], + pub last_bytes_: u16, + pub last_bytes_bits_: u8, + pub prev_byte_: u8, + pub prev_byte2_: u8, + pub storage_size_: usize, + pub storage_: >::AllocatedMemory, + pub small_table_: [i32; 1024], + pub large_table_: >::AllocatedMemory, +// pub large_table_size_: usize, // <-- get this by doing large_table_.len() + pub cmd_depths_: [u8; 128], + pub cmd_bits_: [u16; 128], + pub cmd_code_: [u8; 512], + pub cmd_code_numbits_: usize, + pub command_buf_: >::AllocatedMemory, + pub literal_buf_: >::AllocatedMemory, + next_out_: NextOut, + pub available_out_: usize, + pub total_out_: u64, + pub tiny_buf_: [u8; 16], + pub remaining_metadata_bytes_: u32, + pub stream_state_: BrotliEncoderStreamState, + pub is_last_block_emitted_: bool, + pub is_initialized_: bool, + pub is_first_mb: IsFirst, + pub literal_scratch_space: ::i32vec, + pub command_scratch_space: ::i32vec, + pub distance_scratch_space: ::i32vec, + pub recoder_state: RecoderState, + custom_dictionary: bool, +} + +pub fn set_parameter(params: &mut BrotliEncoderParams, + p: BrotliEncoderParameter, +value: u32) -> i32 { + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_MODE as (i32) { + params.mode = match value { + 0 => BrotliEncoderMode::BROTLI_MODE_GENERIC, + 1 => BrotliEncoderMode::BROTLI_MODE_TEXT, + 2 => BrotliEncoderMode::BROTLI_MODE_FONT, + 3 => BrotliEncoderMode::BROTLI_FORCE_LSB_PRIOR, + 4 => BrotliEncoderMode::BROTLI_FORCE_MSB_PRIOR, + 5 => BrotliEncoderMode::BROTLI_FORCE_UTF8_PRIOR, + 6 => BrotliEncoderMode::BROTLI_FORCE_SIGNED_PRIOR, + _ => BrotliEncoderMode::BROTLI_MODE_GENERIC, + }; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_QUALITY as (i32) { + params.quality = value as (i32); + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_STRIDE_DETECTION_QUALITY as (i32) { + params.stride_detection_quality = value as (u8); + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_HIGH_ENTROPY_DETECTION_QUALITY as (i32) { + params.high_entropy_detection_quality = value as (u8); + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_CDF_ADAPTATION_DETECTION as (i32) { + params.cdf_adaptation_detection = value as (u8); + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_Q9_5 as (i32) { + params.q9_5 = (value != 0); + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_PRIOR_BITMASK_DETECTION as (i32) { + params.prior_bitmask_detection = value as u8; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_SPEED as (i32) { + params.literal_adaptation[1].0 = value as u16; + if params.literal_adaptation[0] == (0,0) { + params.literal_adaptation[0].0 = value as u16; + } + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_SPEED_MAX as (i32) { + params.literal_adaptation[1].1 = value as u16; + if params.literal_adaptation[0].1 == 0 { + params.literal_adaptation[0].1 = value as u16; + } + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_CM_SPEED as (i32) { + params.literal_adaptation[3].0 = value as u16; + if params.literal_adaptation[2] == (0,0) { + params.literal_adaptation[2].0 = value as u16; + } + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_CM_SPEED_MAX as (i32) { + params.literal_adaptation[3].1 = value as u16; + if params.literal_adaptation[2].1 == 0 { + params.literal_adaptation[2].1 = value as u16; + } + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_SPEED_LOW as (i32) { + params.literal_adaptation[0].0 = value as u16; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_SPEED_LOW_MAX as (i32) { + params.literal_adaptation[0].1 = value as u16; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_CM_SPEED_LOW as (i32) { + params.literal_adaptation[2].0 = value as u16; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_CM_SPEED_LOW_MAX as (i32) { + params.literal_adaptation[2].1 = value as u16; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_LITERAL_BYTE_SCORE as (i32) { + params.hasher.literal_byte_score = value as i32; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_METABLOCK_CALLBACK as (i32) { + params.log_meta_block = if value != 0 {true} else {false}; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_LGWIN as (i32) { + params.lgwin = value as (i32); + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_LGBLOCK as (i32) { + params.lgblock = value as (i32); + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING as (i32) { + if value != 0u32 && (value != 1u32) { + return 0i32; + } + params.disable_literal_context_modeling = if !!!(value == 0) { 1i32 } else { 0i32 }; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT as (i32) { + params.size_hint = value as (usize); + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_LARGE_WINDOW as (i32) { + params.large_window = value != 0; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_AVOID_DISTANCE_PREFIX_SEARCH as (i32) { + params.avoid_distance_prefix_search = value != 0; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_CATABLE as (i32) { + params.catable = value != 0; + if !params.appendable { + params.appendable = value != 0; + } + params.use_dictionary = (value == 0); + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_APPENDABLE as (i32) { + params.appendable = value != 0; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER as (i32) { + params.magic_number = value != 0; + return 1i32; + } + if p as (i32) == BrotliEncoderParameter::BROTLI_PARAM_FAVOR_EFFICIENCY as (i32) { + params.favor_cpu_efficiency = value != 0; + return 1i32; + } + 0i32 +} + +pub fn BrotliEncoderSetParameter + (state: &mut BrotliEncoderStateStruct, + p: BrotliEncoderParameter, + value: u32) + -> i32 { + if (*state).is_initialized_ { + return 0i32; + } + set_parameter(&mut state.params, p, value) +} +/* "Large Window Brotli" */ +pub const BROTLI_LARGE_MAX_DISTANCE_BITS: u32 = 62; +pub const BROTLI_LARGE_MIN_WBITS: u32 = 10; +pub const BROTLI_LARGE_MAX_WBITS: u32 = 30; + +pub const BROTLI_MAX_DISTANCE_BITS:u32 = 24; +pub const BROTLI_MAX_WINDOW_BITS:usize = BROTLI_MAX_DISTANCE_BITS as usize; +pub const BROTLI_MAX_DISTANCE:usize = 0x3FFFFFC; +pub const BROTLI_MAX_ALLOWED_DISTANCE:usize = 0x7FFFFFC; +pub const BROTLI_NUM_DISTANCE_SHORT_CODES:u32 = 16; +pub fn BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX: u32, NDIRECT:u32, MAXNBITS: u32) -> u32 { + BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) + + ((MAXNBITS) << ((NPOSTFIX) + 1)) +} + +//#define BROTLI_NUM_DISTANCE_SYMBOLS \ +// BROTLI_DISTANCE_ALPHABET_SIZE( \ +// BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANCE_BITS) + +pub const BROTLI_NUM_DISTANCE_SYMBOLS:usize = 1128; + +pub fn BrotliEncoderInitParams() -> BrotliEncoderParams { + return BrotliEncoderParams { + dist: BrotliDistanceParams { + distance_postfix_bits:0, + num_direct_distance_codes:0, + alphabet_size: BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_MAX_DISTANCE_BITS), + max_distance: BROTLI_MAX_DISTANCE, + }, + mode: BrotliEncoderMode::BROTLI_MODE_GENERIC, + log_meta_block: false, + large_window:false, + avoid_distance_prefix_search:false, + quality: 11, + q9_5: false, + lgwin: 22i32, + lgblock: 0i32, + size_hint: 0usize, + disable_literal_context_modeling: 0i32, + stride_detection_quality: 0, + high_entropy_detection_quality: 0, + cdf_adaptation_detection: 0, + prior_bitmask_detection: 0, + literal_adaptation: [(0,0);4], + catable: false, + use_dictionary: true, + appendable: false, + magic_number: false, + favor_cpu_efficiency:false, + hasher: BrotliHasherParams { + type_: 6, + block_bits: 9 - 1, + bucket_bits: 15, + hash_len: 5, + num_last_distances_to_check: 16, + literal_byte_score: 0, + }, + }; +} + +fn ExtendLastCommand( + s: &mut BrotliEncoderStateStruct, + bytes: &mut u32, + wrapped_last_processed_pos: &mut u32 +) { + let last_command = &mut s.commands_.slice_mut()[s.num_commands_ - 1]; + + let mask = s.ringbuffer_.mask_; + let max_backward_distance:u64 = (1u64 << s.params.lgwin) - BROTLI_WINDOW_GAP as u64; + let last_copy_len = u64::from(last_command.copy_len_) & 0x1ffffff; + let last_processed_pos:u64 = s.last_processed_pos_ - last_copy_len; + let max_distance:u64 = if last_processed_pos < max_backward_distance { + last_processed_pos + } else { + max_backward_distance + }; + let cmd_dist:u64 = s.dist_cache_[0] as u64; + let distance_code:u32 = super::command::CommandRestoreDistanceCode(last_command, &s.params.dist); + if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES || + distance_code as u64 - (BROTLI_NUM_DISTANCE_SHORT_CODES - 1) as u64 == cmd_dist) { + if (cmd_dist <= max_distance) { + while (*bytes != 0 && + s.ringbuffer_.data_mo.slice()[s.ringbuffer_.buffer_index + (*wrapped_last_processed_pos as usize & mask as usize)] == + s.ringbuffer_.data_mo.slice()[s.ringbuffer_.buffer_index + (((*wrapped_last_processed_pos as usize).wrapping_sub(cmd_dist as usize)) & mask as usize)]) { + last_command.copy_len_+=1; + (*bytes)-=1; + (*wrapped_last_processed_pos)+=1; + } + } + /* The copy length is at most the metablock size, and thus expressible. */ + GetLengthCode(last_command.insert_len_ as usize, + ((last_command.copy_len_ & 0x1FFFFFF) as i32 + + (last_command.copy_len_ >> 25) as i32) as usize, + ((last_command.dist_prefix_ & 0x3FF) == 0) as i32, + &mut last_command.cmd_prefix_); + } +} + + +fn RingBufferInit>() -> RingBuffer { + return RingBuffer { + size_: 0, + mask_: 0, // 0xff?? + tail_size_: 0, + total_size_: 0, + + cur_size_: 0, + pos_: 0, + data_mo: AllocU8::AllocatedMemory::default(), + buffer_index: 0usize, + }; +} + +pub fn BrotliEncoderCreateInstance + (m8: Alloc) + -> BrotliEncoderStateStruct { + let cache: [i32; 16] = [4, 11, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + BrotliEncoderStateStruct:: { + params: BrotliEncoderInitParams(), + input_pos_: 0, + num_commands_: 0usize, + num_literals_: 0usize, + last_insert_len_: 0usize, + last_flush_pos_: 0, + last_processed_pos_: 0, + prev_byte_: 0i32 as (u8), + prev_byte2_: 0i32 as (u8), + storage_size_: 0usize, + storage_: >::AllocatedMemory::default(), + hasher_: UnionHasher::::default(), + large_table_: >::AllocatedMemory::default(), +// large_table_size_: 0usize, + cmd_code_numbits_: 0usize, + command_buf_: >::AllocatedMemory::default(), + literal_buf_: >::AllocatedMemory::default(), + next_out_: NextOut::None, + available_out_: 0usize, + total_out_: 0u64, + is_first_mb: IsFirst::NothingWritten, + stream_state_: BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING, + is_last_block_emitted_: false, + is_initialized_: false, + ringbuffer_: RingBufferInit(), + commands_: >::AllocatedMemory::default(), + cmd_alloc_size_: 0usize, + dist_cache_: cache, + saved_dist_cache_: [cache[0], cache[1], cache[2], cache[3]], + cmd_bits_: [0; 128], + cmd_depths_: [0; 128], + last_bytes_: 0, + last_bytes_bits_: 0, + cmd_code_: [0; 512], + m8: m8, + remaining_metadata_bytes_: 0, + small_table_: [0; 1024], + tiny_buf_: [0; 16], + literal_scratch_space: HistogramLiteral::make_nnz_storage(), + command_scratch_space: HistogramCommand::make_nnz_storage(), + distance_scratch_space: HistogramDistance::make_nnz_storage(), + recoder_state: RecoderState::new(), + custom_dictionary: false, + } +} + +fn RingBufferFree>(m: &mut AllocU8, + rb: &mut RingBuffer) { + m.free_cell(core::mem::replace(&mut rb.data_mo, AllocU8::AllocatedMemory::default())); +} +fn DestroyHasher + alloc::Allocator>( +m16: &mut Alloc, handle: &mut UnionHasher){ + handle.free(m16); +} +/* +fn DestroyHasher, AllocU32:alloc::Allocator>( +m16: &mut AllocU16, m32:&mut AllocU32, handle: &mut UnionHasher){ + match handle { + &mut UnionHasher::H2(ref mut hasher) => { + m32.free_cell(core::mem::replace(&mut hasher.buckets_.buckets_, >::AllocatedMemory::default())); + } + &mut UnionHasher::H3(ref mut hasher) => { + m32.free_cell(core::mem::replace(&mut hasher.buckets_.buckets_, >::AllocatedMemory::default())); + } + &mut UnionHasher::H4(ref mut hasher) => { + m32.free_cell(core::mem::replace(&mut hasher.buckets_.buckets_, >::AllocatedMemory::default())); + } + &mut UnionHasher::H54(ref mut hasher) => { + m32.free_cell(core::mem::replace(&mut hasher.buckets_.buckets_, >::AllocatedMemory::default())); + } + &mut UnionHasher::H5(ref mut hasher) => { + m16.free_cell(core::mem::replace(&mut hasher.num, AllocU16::AllocatedMemory::default())); + m32.free_cell(core::mem::replace(&mut hasher.buckets, >::AllocatedMemory::default())); + } + &mut UnionHasher::H6(ref mut hasher) => { + m16.free_cell(core::mem::replace(&mut hasher.num, AllocU16::AllocatedMemory::default())); + m32.free_cell(core::mem::replace(&mut hasher.buckets, >::AllocatedMemory::default())); + } + &mut UnionHasher::H9(ref mut hasher) => { + m16.free_cell(core::mem::replace(&mut hasher.num_, AllocU16::AllocatedMemory::default())); + m32.free_cell(core::mem::replace(&mut hasher.buckets_, >::AllocatedMemory::default())); + } + _ => {} + } + *handle = UnionHasher::::default(); +} +*/ + +fn BrotliEncoderCleanupState + (s: &mut BrotliEncoderStateStruct) { + { + >::free_cell(&mut s.m8, core::mem::replace(&mut (*s).storage_, + >::AllocatedMemory::default())); + } + { + >::free_cell(&mut s.m8, core::mem::replace(&mut (*s).commands_, + >::AllocatedMemory::default())); + } + RingBufferFree(&mut s.m8, &mut (*s).ringbuffer_); + DestroyHasher(&mut s.m8, &mut (*s).hasher_); + { + >::free_cell(&mut s.m8, core::mem::replace(&mut (*s).large_table_, + >::AllocatedMemory::default())); + } + { + >::free_cell(&mut s.m8, core::mem::replace(&mut (*s).command_buf_, + >::AllocatedMemory::default())); + } + { + >::free_cell(&mut s.m8, core::mem::replace(&mut (*s).literal_buf_, >::AllocatedMemory::default())); + } +} + +pub fn BrotliEncoderDestroyInstance + (s: &mut BrotliEncoderStateStruct) { + BrotliEncoderCleanupState(s); +} + +fn brotli_min_int(a: i32, b: i32) -> i32 { + if a < b { a } else { b } +} + +fn brotli_max_int(a: i32, b: i32) -> i32 { + if a > b { a } else { b } +} + +#[cfg(not(feature="disallow_large_window_size"))] +fn check_large_window_ok() -> bool { + true +} +#[cfg(feature="disallow_large_window_size")] +fn check_large_window_ok() -> bool { + false +} + + +pub fn SanitizeParams(params: &mut BrotliEncoderParams) { + (*params).quality = brotli_min_int(11i32, brotli_max_int(0i32, (*params).quality)); + if (*params).lgwin < 10i32 { + (*params).lgwin = 10i32; + } else if (*params).lgwin > 24i32 { + if params.large_window && check_large_window_ok() { + if (*params).lgwin > 30i32 { + (*params).lgwin = 30i32; + } + } else { + (*params).lgwin = 24i32; + } + } + if params.catable { + params.appendable = true; + } +} + +fn ComputeLgBlock(params: &BrotliEncoderParams) -> i32 { + let mut lgblock: i32 = (*params).lgblock; + if (*params).quality == 0i32 || (*params).quality == 1i32 { + lgblock = (*params).lgwin; + } else if (*params).quality < 4i32 { + lgblock = 14i32; + } else if lgblock == 0i32 { + lgblock = 16i32; + if (*params).quality >= 9i32 && ((*params).lgwin > lgblock) { + lgblock = brotli_min_int(18i32, (*params).lgwin); + } + } else { + lgblock = brotli_min_int(24i32, brotli_max_int(16i32, lgblock)); + } + lgblock +} + +fn ComputeRbBits(params: &BrotliEncoderParams) -> i32 { + 1i32 + brotli_max_int((*params).lgwin, (*params).lgblock) +} + +fn RingBufferSetup>(params: &BrotliEncoderParams, + rb: &mut RingBuffer) { + let window_bits: i32 = ComputeRbBits(params); + let tail_bits: i32 = (*params).lgblock; + *(&mut (*rb).size_) = 1u32 << window_bits; + *(&mut (*rb).mask_) = (1u32 << window_bits).wrapping_sub(1u32); + *(&mut (*rb).tail_size_) = 1u32 << tail_bits; + *(&mut (*rb).total_size_) = (*rb).size_.wrapping_add((*rb).tail_size_); +} + +fn EncodeWindowBits(lgwin: i32, large_window: bool, last_bytes: &mut u16, last_bytes_bits: &mut u8) { + if large_window { + *last_bytes = (((lgwin & 0x3F) << 8) | 0x11) as u16; + *last_bytes_bits = 14; + } else { + if lgwin == 16i32 { + *last_bytes = 0i32 as (u16); + *last_bytes_bits = 1i32 as (u8); + } else if lgwin == 17i32 { + *last_bytes = 1i32 as (u16); + *last_bytes_bits = 7i32 as (u8); + } else if lgwin > 17i32 { + *last_bytes = (lgwin - 17i32 << 1i32 | 1i32) as (u16); + *last_bytes_bits = 4i32 as (u8); + } else { + *last_bytes = (lgwin - 8i32 << 4i32 | 1i32) as (u16); + *last_bytes_bits = 7i32 as (u8); + } + } +} + +fn InitCommandPrefixCodes(cmd_depths: &mut [u8], + cmd_bits: &mut [u16], + cmd_code: &mut [u8], + cmd_code_numbits: &mut usize) { + static kDefaultCommandDepths: [u8; 128] = [ + 0,4,4,5,6,6,7,7,7,7,7,8,8,8,8,8,0,0,0,4,4,4,4,4,5,5,6,6,6,6,7,7,7,7, + 10,10,10,10,10,10,0,4,4,5,5,5,6,6,7,8,8,9,10,10,10,10,10,10,10,10,10,10,10,10, + 5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,5,5,5,5,5,5, + 6,6,7,7,7,8,10,12,12,12,12,12,12,12,12,12,12,12,12,0,0,0,0]; + static kDefaultCommandBits: [u16; 128] = [ + 0,0,8,9,3,35,7,71,39,103,23,47,175,111,239,31,0,0,0,4,12,2,10,6,13,29, + 11,43,27,59,87,55,15,79,319,831,191,703,447,959,0,14,1,25,5,21,19,51, + 119,159,95,223,479,991,63,575,127,639,383,895,255,767,511,1023,14, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,59,7,39,23,55,30,1,17,9,25,5,0,8,4,12, + 2,10,6,21,13,29,3,19,11,15,47,31,95,63,127,255,767,2815,1791,3839, + 511,2559,1535,3583,1023,3071,2047,4095,0,0,0,0]; + static kDefaultCommandCode: [u8; 57] = [ + 0xff,0x77,0xd5,0xbf,0xe7,0xde,0xea,0x9e,0x51,0x5d,0xde,0xc6,0x70,0x57, + 0xbc,0x58,0x58,0x58,0xd8,0xd8,0x58,0xd5,0xcb,0x8c,0xea,0xe0,0xc3,0x87, + 0x1f,0x83,0xc1,0x60,0x1c,0x67,0xb2,0xaa,0x6,0x83,0xc1,0x60,0x30,0x18, + 0xcc,0xa1,0xce,0x88,0x54,0x94,0x46,0xe1,0xb0,0xd0,0x4e,0xb2,0xf7,0x4,0x0]; + static kDefaultCommandCodeNumBits: usize = 448usize; + cmd_depths[..].clone_from_slice(&kDefaultCommandDepths[..]); + cmd_bits[..].clone_from_slice(&kDefaultCommandBits[..]); + cmd_code[..kDefaultCommandCode.len()].clone_from_slice(&kDefaultCommandCode[..]); + *cmd_code_numbits = kDefaultCommandCodeNumBits; +} + +fn EnsureInitialized + (s: &mut BrotliEncoderStateStruct) + -> i32 { + if (*s).is_initialized_ { + return 1i32; + } + SanitizeParams(&mut (*s).params); + (*s).params.lgblock = ComputeLgBlock(&mut (*s).params); + ChooseDistanceParams(&mut s.params); + (*s).remaining_metadata_bytes_ = !(0u32); + RingBufferSetup(&mut (*s).params, &mut (*s).ringbuffer_); + { + let mut lgwin: i32 = (*s).params.lgwin; + if (*s).params.quality == 0i32 || (*s).params.quality == 1i32 { + lgwin = brotli_max_int(lgwin, 18i32); + } + EncodeWindowBits(lgwin, s.params.large_window, &mut (*s).last_bytes_, &mut (*s).last_bytes_bits_); + } + if (*s).params.quality == 0i32 { + InitCommandPrefixCodes(&mut (*s).cmd_depths_[..], + &mut (*s).cmd_bits_[..], + &mut (*s).cmd_code_[..], + &mut (*s).cmd_code_numbits_); + } + if s.params.catable { + // if we want to properly concatenate, then we need to ignore any distances + // this value 0x7ffffff0 was chosen to be larger than max_distance + gap + // but small enough so that +/-3 will not overflow (due to distance modifications) + for item in s.dist_cache_.iter_mut() { + *item = 0x7ffffff0; + } + for item in s.saved_dist_cache_.iter_mut() { + *item = 0x7ffffff0; + } + } + (*s).is_initialized_ = true; + 1i32 +} + +fn RingBufferInitBuffer>(m: &mut AllocU8, + buflen: u32, + rb: &mut RingBuffer) { + static kSlackForEightByteHashingEverywhere: usize = 7usize; + let mut new_data = + m.alloc_cell(((2u32).wrapping_add(buflen) as (usize)) + .wrapping_add(kSlackForEightByteHashingEverywhere)); + let mut i: usize; + if (*rb).data_mo.slice().len() != 0 { + let lim: usize = ((2u32).wrapping_add((*rb).cur_size_) as (usize)) + .wrapping_add(kSlackForEightByteHashingEverywhere); + new_data.slice_mut()[..lim].clone_from_slice(&(*rb).data_mo.slice()[..lim]); + m.free_cell(core::mem::replace(&mut (*rb).data_mo, AllocU8::AllocatedMemory::default())); + } + let _ = core::mem::replace(&mut (*rb).data_mo, new_data); + (*rb).cur_size_ = buflen; + (*rb).buffer_index = 2usize; + (*rb).data_mo.slice_mut()[((*rb).buffer_index.wrapping_sub(2usize))] = 0; + (*rb).data_mo.slice_mut()[((*rb).buffer_index.wrapping_sub(1usize))] = 0; + i = 0usize; + while i < kSlackForEightByteHashingEverywhere { + { + (*rb).data_mo.slice_mut()[((*rb) + .buffer_index + .wrapping_add((*rb).cur_size_ as (usize)) + .wrapping_add(i) as (usize))] = 0; + } + i = i.wrapping_add(1 as (usize)); + } +} + + +fn RingBufferWriteTail>(bytes: &[u8], + n: usize, + rb: &mut RingBuffer) { + let masked_pos: usize = ((*rb).pos_ & (*rb).mask_) as (usize); + if masked_pos < (*rb).tail_size_ as (usize) { + let p: usize = ((*rb).size_ as (usize)).wrapping_add(masked_pos); + let begin = ((*rb).buffer_index.wrapping_add(p) as (usize)); + let lim = brotli_min_size_t(n, ((*rb).tail_size_ as (usize)).wrapping_sub(masked_pos)); + (*rb).data_mo.slice_mut()[begin..(begin + lim)].clone_from_slice(&bytes[..lim]); + } +} + +fn RingBufferWrite>(m: &mut AllocU8, + bytes: &[u8], + n: usize, + rb: &mut RingBuffer) { + if (*rb).pos_ == 0u32 && (n < (*rb).tail_size_ as (usize)) { + (*rb).pos_ = n as (u32); + RingBufferInitBuffer(m, (*rb).pos_, rb); + (*rb).data_mo.slice_mut()[((*rb).buffer_index as (usize))..(((*rb).buffer_index as (usize)) + n)] + .clone_from_slice(&bytes[..n]); + return; + } + if (*rb).cur_size_ < (*rb).total_size_ { + RingBufferInitBuffer(m, (*rb).total_size_, rb); + if !(0i32 == 0) { + return; + } + (*rb).data_mo.slice_mut()[((*rb) + .buffer_index + .wrapping_add((*rb).size_ as (usize)) + .wrapping_sub(2usize) as (usize))] = 0i32 as (u8); + (*rb).data_mo.slice_mut()[((*rb) + .buffer_index + .wrapping_add((*rb).size_ as (usize)) + .wrapping_sub(1usize) as (usize))] = 0i32 as (u8); + } + { + let masked_pos: usize = ((*rb).pos_ & (*rb).mask_) as (usize); + RingBufferWriteTail(bytes, n, rb); + if masked_pos.wrapping_add(n) <= (*rb).size_ as (usize) { + // a single write fits + let start = ((*rb).buffer_index.wrapping_add(masked_pos) as (usize)); + (*rb).data_mo.slice_mut()[start..(start + n)].clone_from_slice(&bytes[..n]); + } else { + { + let start = ((*rb).buffer_index.wrapping_add(masked_pos) as (usize)); + let mid = brotli_min_size_t(n, ((*rb).total_size_ as (usize)).wrapping_sub(masked_pos)); + (*rb).data_mo.slice_mut()[start..(start + mid)].clone_from_slice(&bytes[..mid]); + } + let xstart = ((*rb).buffer_index.wrapping_add(0usize) as (usize)); + let size = n.wrapping_sub(((*rb).size_ as (usize)).wrapping_sub(masked_pos)); + let bytes_start = (((*rb).size_ as (usize)).wrapping_sub(masked_pos) as (usize)); + (*rb).data_mo.slice_mut()[xstart..(xstart + size)].clone_from_slice(&bytes[bytes_start.. + (bytes_start + + size)]); + } + } + let data_2 = (*rb).data_mo.slice()[((*rb) + .buffer_index + .wrapping_add((*rb).size_ as (usize)) + .wrapping_sub(2usize) as (usize))]; + (*rb).data_mo.slice_mut()[((*rb).buffer_index.wrapping_sub(2usize) as (usize))] = data_2; + let data_1 = (*rb).data_mo.slice()[((*rb) + .buffer_index + .wrapping_add((*rb).size_ as (usize)) + .wrapping_sub(1usize) as (usize))]; + (*rb).data_mo.slice_mut()[((*rb).buffer_index.wrapping_sub(1usize) as (usize))] = data_1; + (*rb).pos_ = (*rb).pos_.wrapping_add(n as (u32)); + if (*rb).pos_ > 1u32 << 30i32 { + (*rb).pos_ = (*rb).pos_ & (1u32 << 30i32).wrapping_sub(1u32) | 1u32 << 30i32; + } +} + +fn CopyInputToRingBuffer + (s: &mut BrotliEncoderStateStruct, + input_size: usize, + input_buffer: &[u8]) { + if EnsureInitialized(s) == 0 { + return; + } + RingBufferWrite(&mut s.m8, input_buffer, input_size, &mut s.ringbuffer_); + if !(0i32 == 0) { + return; + } + (*s).input_pos_ = (*s).input_pos_.wrapping_add(input_size as u64); + if (s.ringbuffer_).pos_ <= (s.ringbuffer_).mask_ { + let start = ((s.ringbuffer_).buffer_index.wrapping_add((s.ringbuffer_).pos_ as (usize)) as + (usize)); + for item in (s.ringbuffer_).data_mo.slice_mut()[start..(start + 7)].iter_mut() { + *item = 0; + } + } +} + + +fn ChooseHasher(params: &mut BrotliEncoderParams) { + let hparams = &mut params.hasher; + if (*params).quality >= 10 && !params.q9_5{ + (*hparams).type_ = 10; + } else if (*params).quality == 10 { // we are using quality 10 as a proxy for "9.5" + (*hparams).type_ = 9; + (*hparams).num_last_distances_to_check = H9_NUM_LAST_DISTANCES_TO_CHECK as i32; + (*hparams).block_bits = H9_BLOCK_BITS as i32; + (*hparams).bucket_bits = H9_BUCKET_BITS as i32; + (*hparams).hash_len = 4; + } else if (*params).quality == 9 { + (*hparams).type_ = 9; + (*hparams).num_last_distances_to_check = H9_NUM_LAST_DISTANCES_TO_CHECK as i32; + (*hparams).block_bits = H9_BLOCK_BITS as i32; + (*hparams).bucket_bits = H9_BUCKET_BITS as i32; + (*hparams).hash_len = 4; + } else if (*params).quality == 4 && ((*params).size_hint >= (1i32 << 20i32) as (usize)) { + (*hparams).type_ = 54i32; + } else if (*params).quality < 5 { + (*hparams).type_ = (*params).quality; + } else if (*params).lgwin <= 16 { + (*hparams).type_ = if (*params).quality < 7 { + 40i32 + } else if (*params).quality < 9 { + 41i32 + } else { + 42i32 + }; + } else if ((params.q9_5 && (*params).size_hint > (1usize << 20i32)) + || (*params).size_hint > (1usize << 22i32)) && ((*params).lgwin >= 19i32) { + (*hparams).type_ = 6i32; + (*hparams).block_bits = core::cmp::min((*params).quality - 1, 9); + (*hparams).bucket_bits = 15i32; + (*hparams).hash_len = 5i32; + (*hparams).num_last_distances_to_check = if (*params).quality < 7 { + 4i32 + } else if (*params).quality < 9 { + 10i32 + } else { + 16i32 + }; + } else { + (*hparams).type_ = 5i32; + (*hparams).block_bits = core::cmp::min((*params).quality - 1, 9); + (*hparams).bucket_bits = if (*params).quality < 7 && (*params).size_hint <= (1usize << 20i32) { + 14i32 + } else { + 15i32 + }; + (*hparams).num_last_distances_to_check = if (*params).quality < 7 { + 4i32 + } else if (*params).quality < 9 { + 10i32 + } else { + 16i32 + }; + } +} + +fn InitializeH2>(m32: &mut AllocU32, params : &BrotliEncoderParams) -> BasicHasher> { + BasicHasher { + GetHasherCommon:Struct1{ + params:params.hasher, + is_prepared_:1, + dict_num_lookups:0, + dict_num_matches:0, + }, + buckets_:H2Sub{buckets_:m32.alloc_cell(65537 + 8)}, + h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), + } +} +fn InitializeH3>(m32: &mut AllocU32, params : &BrotliEncoderParams) -> BasicHasher> { + BasicHasher { + GetHasherCommon:Struct1{ + params:params.hasher, + is_prepared_:1, + dict_num_lookups:0, + dict_num_matches:0, + }, + buckets_:H3Sub{buckets_:m32.alloc_cell(65538 + 8)}, + h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), + } +} +fn InitializeH4>(m32: &mut AllocU32, params : &BrotliEncoderParams) -> BasicHasher> { + BasicHasher { + GetHasherCommon:Struct1{ + params:params.hasher, + is_prepared_:1, + dict_num_lookups:0, + dict_num_matches:0, + }, + buckets_:H4Sub{buckets_:m32.alloc_cell(131072 + 8)}, + h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), + } +} +fn InitializeH54>(m32: &mut AllocU32, params : &BrotliEncoderParams) -> BasicHasher> { + BasicHasher { + GetHasherCommon:Struct1{ + params:params.hasher, + is_prepared_:1, + dict_num_lookups:0, + dict_num_matches:0, + }, + buckets_:H54Sub{buckets_:m32.alloc_cell(1048580 + 8)}, + h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), + } +} + +fn InitializeH9 + alloc::Allocator>(m16: &mut Alloc, + params : &BrotliEncoderParams) -> H9 { + H9 { + dict_search_stats_:Struct1{ + params:params.hasher, + is_prepared_:1, + dict_num_lookups:0, + dict_num_matches:0, + }, + num_:>::alloc_cell(m16, 1<>::alloc_cell(m16, H9_BLOCK_SIZE< + alloc::Allocator> + (m16: &mut Alloc, + params: &BrotliEncoderParams, +) -> UnionHasher { + let block_size = 1u64 << params.hasher.block_bits; + let bucket_size = 1u64 << params.hasher.bucket_bits; + let buckets : >::AllocatedMemory = >::alloc_cell(m16, (bucket_size * block_size) as usize); + let num : >::AllocatedMemory = >::alloc_cell(m16, bucket_size as usize); + + if params.hasher.block_bits == (HQ5Sub{}).block_bits() && (1< + alloc::Allocator> + (m16: &mut Alloc, + params: &BrotliEncoderParams) + -> UnionHasher { + let block_size = 1u64 << params.hasher.block_bits; + let bucket_size = 1u64 << params.hasher.bucket_bits; + let buckets: >::AllocatedMemory = >::alloc_cell(m16, (bucket_size * block_size) as usize); + let num: >::AllocatedMemory = >::alloc_cell(m16, bucket_size as usize); + UnionHasher::H6(AdvHasher { + buckets: buckets, + num: num, + h9_opts: super::backward_references::H9Opts::new(¶ms.hasher), + GetHasherCommon: Struct1 { + params: params.hasher, + is_prepared_: 1, + dict_num_lookups: 0, + dict_num_matches: 0, + }, + specialization: H6Sub { + bucket_size_: 1u32 << params.hasher.bucket_bits, + block_bits_: params.hasher.block_bits, + block_mask_: block_size.wrapping_sub(1) as u32, + hash_mask: 0xffffffffffffffffu64 >> 64i32 - 8i32 * params.hasher.hash_len, + hash_shift_: 64i32 - params.hasher.bucket_bits, + }, + }) +} + +fn BrotliMakeHasher + alloc::Allocator> + (m: &mut Alloc, + params: &BrotliEncoderParams) + -> UnionHasher { + let hasher_type: i32 = params.hasher.type_; + if hasher_type == 2i32 { + return UnionHasher::H2(InitializeH2(m, params)); + } + if hasher_type == 3i32 { + return UnionHasher::H3(InitializeH3(m, params)); + } + if hasher_type == 4i32 { + return UnionHasher::H4(InitializeH4(m, params)); + } + if hasher_type == 5i32 { + return InitializeH5(m, params); + } + if hasher_type == 6i32 { + return InitializeH6(m, params); + } + if hasher_type == 9i32 { + return UnionHasher::H9(InitializeH9(m, params)); + } + /* + if hasher_type == 40i32 { + return InitializeH40(params); + } + if hasher_type == 41i32 { + return InitializeH41(params); + } + if hasher_type == 42i32 { + return InitializeH42(params); + } +*/ + if hasher_type == 54i32 { + return UnionHasher::H54(InitializeH54(m, params)); + } + if hasher_type == 10i32 { + return UnionHasher::H10(InitializeH10(m, false, params, 0)); + } + // since we don't support all of these, fall back to something sane + return InitializeH6(m, params); + +// return UnionHasher::Uninit; +} +fn HasherReset + alloc::Allocator,>(t: &mut UnionHasher){ + match t { + &mut UnionHasher::Uninit => {} + _ => (t.GetHasherCommon()).is_prepared_ = 0i32, + }; +} +fn GetHasherCommon + alloc::Allocator> + (t: &mut UnionHasher) + -> &mut Struct1 { + t.GetHasherCommon() +} + +pub fn HasherSetup + alloc::Allocator>(m16: &mut Alloc, + handle: &mut UnionHasher, + params: &mut BrotliEncoderParams, + data: &[u8], + position: usize, + input_size: usize, + is_last: i32){ + let one_shot: i32 = (position == 0usize && (is_last != 0)) as (i32); + let is_uninit = match (handle) { + &mut UnionHasher::Uninit => true, + _ => false, + }; + if is_uninit { + //let alloc_size: usize; + ChooseHasher(&mut (*params)); + //alloc_size = HasherSize(params, one_shot, input_size); + //xself = BrotliAllocate(m, alloc_size.wrapping_mul(::std::mem::size_of::())) + *handle = BrotliMakeHasher(m16, params); + handle.GetHasherCommon().params = (*params).hasher; + HasherReset(handle); // this sets everything to zero, unlike in C + handle.GetHasherCommon().is_prepared_ = 1; + } else { + match handle.Prepare(one_shot != 0, input_size, data) { + HowPrepared::ALREADY_PREPARED => {} + HowPrepared::NEWLY_PREPARED => { + if position == 0usize { + let common = handle.GetHasherCommon(); + (*common).dict_num_lookups = 0usize; + (*common).dict_num_matches = 0usize; + } + } + } + } +} + +fn HasherPrependCustomDictionary + alloc::Allocator> + (m: &mut Alloc, + handle: &mut UnionHasher, + params: &mut BrotliEncoderParams, + size: usize, + dict: &[u8]) { + HasherSetup(m, handle, params, dict, 0usize, size, 0i32); + match handle { + &mut UnionHasher::H2(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), + &mut UnionHasher::H3(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), + &mut UnionHasher::H4(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), + &mut UnionHasher::H5(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), + &mut UnionHasher::H5q7(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), + &mut UnionHasher::H5q5(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), + &mut UnionHasher::H6(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), + &mut UnionHasher::H9(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), + &mut UnionHasher::H54(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), + &mut UnionHasher::H10(ref mut hasher) => StoreLookaheadThenStore(hasher, size, dict), + &mut UnionHasher::Uninit => panic!("Uninitialized"), + } +} + +pub fn BrotliEncoderSetCustomDictionary + (s: &mut BrotliEncoderStateStruct, + size: usize, + dict: &[u8]) { + BrotliEncoderSetCustomDictionaryWithOptionalPrecomputedHasher(s, size, dict, UnionHasher::Uninit) +} + + +pub fn BrotliEncoderSetCustomDictionaryWithOptionalPrecomputedHasher + (s: &mut BrotliEncoderStateStruct, + size: usize, + mut dict: &[u8], + opt_hasher: UnionHasher, +) { + let has_optional_hasher = if let UnionHasher::Uninit = opt_hasher { false } else {true}; + let max_dict_size: usize = (1usize << (*s).params.lgwin).wrapping_sub(16usize); + s.hasher_ = opt_hasher; + let mut dict_size: usize = size; + if EnsureInitialized(s) == 0 { + return; + } + if dict_size == 0usize || (*s).params.quality == 0i32 || (*s).params.quality == 1i32 || size <= 1 { + (*s).params.catable = true; // don't risk a too-short dictionary + (*s).params.appendable = true; // don't risk a too-short dictionary + return; + } + s.custom_dictionary = true; + if size > max_dict_size { + dict = &dict[(size.wrapping_sub(max_dict_size) as (usize))..]; + dict_size = max_dict_size; + } + CopyInputToRingBuffer(s, dict_size, dict); + (*s).last_flush_pos_ = dict_size as u64; + (*s).last_processed_pos_ = dict_size as u64; + if dict_size > 0 { + (*s).prev_byte_ = dict[(dict_size.wrapping_sub(1usize) as (usize))]; + } + if dict_size > 1usize { + (*s).prev_byte2_ = dict[(dict_size.wrapping_sub(2usize) as (usize))]; + } + let m16 = &mut s.m8; + if cfg!(debug_assertions) || !has_optional_hasher { + let mut orig_hasher = UnionHasher::Uninit; + if has_optional_hasher { + orig_hasher = core::mem::replace(&mut s.hasher_, UnionHasher::Uninit); + } + HasherPrependCustomDictionary(m16, + &mut (*s).hasher_, + &mut (*s).params, + dict_size, + dict); + if has_optional_hasher { + debug_assert!(orig_hasher == s.hasher_); + DestroyHasher(m16, &mut orig_hasher); + } + } +} +pub fn BrotliEncoderMaxCompressedSizeMulti(input_size: usize, num_threads: usize) -> usize { + BrotliEncoderMaxCompressedSize(input_size) + num_threads * 8 +} + +pub fn BrotliEncoderMaxCompressedSize(input_size: usize) -> usize { + let magic_size = 16usize; + let num_large_blocks: usize = input_size >> 14i32; + let tail: usize = input_size.wrapping_sub(num_large_blocks << 24i32); + let tail_overhead: usize = (if tail > (1i32 << 20i32) as (usize) { + 4i32 + } else { + 3i32 + }) as (usize); + let overhead: usize = (2usize) + .wrapping_add((4usize).wrapping_mul(num_large_blocks)) + .wrapping_add(tail_overhead) + .wrapping_add(1usize); + let result: usize = input_size.wrapping_add(overhead); + if input_size == 0usize { + return 1usize + magic_size; + } + if result < input_size { 0usize } else { result + magic_size } +} + +fn InitOrStitchToPreviousBlock + alloc::Allocator> + (m: &mut Alloc, + handle: &mut UnionHasher, + data: &[u8], + mask: usize, + params: &mut BrotliEncoderParams, + position: usize, + input_size: usize, + is_last: i32) { + HasherSetup(m, + handle, + params, + data, + position, + input_size, + is_last); + handle.StitchToPreviousBlock(input_size, position, data, mask); +} + +pub fn InitInsertCommand(xself: &mut Command, insertlen: usize) { + (*xself).insert_len_ = insertlen as (u32); + (*xself).copy_len_ = (4i32 << 25i32) as (u32); + (*xself).dist_extra_ = 0u32; + (*xself).dist_prefix_ = (1u16 << 10) | BROTLI_NUM_DISTANCE_SHORT_CODES as (u16); + GetLengthCode(insertlen, 4usize, 0i32, &mut (*xself).cmd_prefix_); +} + + + +fn ShouldCompress(data: &[u8], + mask: usize, + last_flush_pos: u64, + bytes: usize, + num_literals: usize, + num_commands: usize) + -> i32 { + if num_commands < (bytes >> 8i32).wrapping_add(2usize) { + if num_literals as (super::util::floatX) > 0.99 as super::util::floatX * bytes as (super::util::floatX) { + let mut literal_histo: [u32; 256] = + [0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32]; + static kSampleRate: u32 = 13u32; + static kMinEntropy: super::util::floatX = 7.92 as super::util::floatX; + let bit_cost_threshold: super::util::floatX = bytes as (super::util::floatX) * kMinEntropy / kSampleRate as (super::util::floatX); + let t: usize = bytes.wrapping_add(kSampleRate as (usize)) + .wrapping_sub(1usize) + .wrapping_div(kSampleRate as (usize)); + let mut pos: u32 = last_flush_pos as (u32); + let mut i: usize; + i = 0usize; + while i < t { + { + { + let _rhs = 1; + let _lhs = &mut literal_histo[data[((pos as (usize) & mask) as (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + pos = pos.wrapping_add(kSampleRate); + } + i = i.wrapping_add(1 as (usize)); + } + if BitsEntropy(&literal_histo[..], 256usize) > bit_cost_threshold { + return 0i32; + } + } + } + 1i32 +} + +/* Chooses the literal context mode for a metablock */ +fn ChooseContextMode(params: &BrotliEncoderParams, + data: &[u8], pos: usize, mask: usize, + length: usize) -> ContextType{ + /* We only do the computation for the option of something else than + CONTEXT_UTF8 for the highest qualities */ + match params.mode { + BrotliEncoderMode::BROTLI_FORCE_LSB_PRIOR => return ContextType::CONTEXT_LSB6, + BrotliEncoderMode::BROTLI_FORCE_MSB_PRIOR => return ContextType::CONTEXT_MSB6, + BrotliEncoderMode::BROTLI_FORCE_UTF8_PRIOR => return ContextType::CONTEXT_UTF8, + BrotliEncoderMode::BROTLI_FORCE_SIGNED_PRIOR => return ContextType::CONTEXT_SIGNED, + _ => {}, + } + if (params.quality >= 10 && + BrotliIsMostlyUTF8(data, pos, mask, length, kMinUTF8Ratio) == 0) { + return ContextType::CONTEXT_SIGNED; + } + return ContextType::CONTEXT_UTF8; +} + + +#[derive(PartialEq, Eq, Copy, Clone)] +pub enum BrotliEncoderOperation { + BROTLI_OPERATION_PROCESS = 0, + BROTLI_OPERATION_FLUSH = 1, + BROTLI_OPERATION_FINISH = 2, + BROTLI_OPERATION_EMIT_METADATA = 3, +} + +fn MakeUncompressedStream(input: &[u8], input_size: usize, output: &mut [u8]) -> usize { + let mut size: usize = input_size; + let mut result: usize = 0usize; + let mut offset: usize = 0usize; + if input_size == 0usize { + output[(0usize)] = 6i32 as (u8); + return 1usize; + } + output[({ + let _old = result; + result = result.wrapping_add(1 as (usize)); + _old + } as (usize))] = 0x21i32 as (u8); + output[({ + let _old = result; + result = result.wrapping_add(1 as (usize)); + _old + } as (usize))] = 0x3i32 as (u8); + while size > 0usize { + let mut nibbles: u32 = 0u32; + let chunk_size: u32; + let bits: u32; + chunk_size = if size > (1u32 << 24i32) as (usize) { + 1u32 << 24i32 + } else { + size as (u32) + }; + if chunk_size > 1u32 << 16i32 { + nibbles = if chunk_size > 1u32 << 20i32 { + 2i32 + } else { + 1i32 + } as (u32); + } + bits = nibbles << 1i32 | chunk_size.wrapping_sub(1u32) << 3i32 | + 1u32 << (19u32).wrapping_add((4u32).wrapping_mul(nibbles)); + output[({ + let _old = result; + result = result.wrapping_add(1 as (usize)); + _old + } as (usize))] = bits as (u8); + output[({ + let _old = result; + result = result.wrapping_add(1 as (usize)); + _old + } as (usize))] = (bits >> 8i32) as (u8); + output[({ + let _old = result; + result = result.wrapping_add(1 as (usize)); + _old + } as (usize))] = (bits >> 16i32) as (u8); + if nibbles == 2u32 { + output[({ + let _old = result; + result = result.wrapping_add(1 as (usize)); + _old + } as (usize))] = (bits >> 24i32) as (u8); + } + output[(result as usize)..(result + chunk_size as usize)].clone_from_slice( + &input[offset .. (offset + chunk_size as usize)]); + result = result.wrapping_add(chunk_size as (usize)); + offset = offset.wrapping_add(chunk_size as (usize)); + size = size.wrapping_sub(chunk_size as (usize)); + } + output[({ + let _old = result; + result = result.wrapping_add(1 as (usize)); + _old + } as (usize))] = 3i32 as (u8); + result +} +pub fn BrotliEncoderCompress, + &mut [interface::StaticCommand], + interface::InputPair, &mut Alloc)>( + empty_m8: Alloc, + m8: &mut Alloc, + quality: i32, + lgwin: i32, + mode: BrotliEncoderMode, + input_size: usize, + input_buffer: &[u8], + encoded_size: &mut usize, + encoded_buffer: &mut [u8], + metablock_callback: &mut MetablockCallback) + -> i32 { + let out_size: usize = *encoded_size; + let input_start = input_buffer; + let output_start = encoded_buffer; + let max_out_size: usize = BrotliEncoderMaxCompressedSize(input_size); + if out_size == 0usize { + return 0i32; + } + if input_size == 0usize { + *encoded_size = 1; + output_start[0] = 6; + return 1i32; + } + let mut is_fallback: i32 = 0i32; + if quality == 10i32 { + panic!("Unimplemented: need to set 9.5 here"); + } + if is_fallback == 0 { + + let mut s_orig = BrotliEncoderCreateInstance(core::mem::replace(m8, empty_m8)); + let mut result: i32; + { + let s = &mut s_orig; + let mut available_in: usize = input_size; + let mut next_in_array: &[u8] = input_buffer; + let mut next_in_offset: usize = 0; + let mut available_out: usize = *encoded_size; + let mut next_out_array: &mut [u8] = output_start; + let mut next_out_offset: usize = 0; + let mut total_out = Some(0usize); + BrotliEncoderSetParameter(s, + BrotliEncoderParameter::BROTLI_PARAM_QUALITY, + quality as (u32)); + BrotliEncoderSetParameter(s, + BrotliEncoderParameter::BROTLI_PARAM_LGWIN, + lgwin as (u32)); + BrotliEncoderSetParameter(s, BrotliEncoderParameter::BROTLI_PARAM_MODE, mode as (u32)); + BrotliEncoderSetParameter(s, + BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, + input_size as (u32)); + if lgwin > BROTLI_MAX_WINDOW_BITS as i32 { + BrotliEncoderSetParameter(s, BrotliEncoderParameter::BROTLI_PARAM_LARGE_WINDOW, 1); + } + result = BrotliEncoderCompressStream(s, + BrotliEncoderOperation::BROTLI_OPERATION_FINISH, + &mut available_in, + &mut next_in_array, + &mut next_in_offset, + &mut available_out, + &mut next_out_array, + &mut next_out_offset, + &mut total_out, + metablock_callback); + if BrotliEncoderIsFinished(s) == 0 { + result = 0i32; + } + + *encoded_size = total_out.unwrap(); + BrotliEncoderDestroyInstance(s); + } + let _ = core::mem::replace(m8, s_orig.m8); + if result == 0 || max_out_size != 0 && (*encoded_size > max_out_size) { + is_fallback = 1i32; + } else { + return 1i32; + } + } + assert!(is_fallback != 0); + *encoded_size = 0usize; + if max_out_size == 0 { + return 0i32; + } + if out_size >= max_out_size { + *encoded_size = MakeUncompressedStream(input_start, input_size, output_start); + return 1i32; + } + 0i32 +} + +fn InjectBytePaddingBlock(s: &mut BrotliEncoderStateStruct) { + let mut seal: u32 = (*s).last_bytes_ as (u32); + let mut seal_bits: usize = (*s).last_bytes_bits_ as (usize); + let destination: &mut [u8]; + (*s).last_bytes_ = 0; + (*s).last_bytes_bits_ = 0; + seal = seal | 0x6u32 << seal_bits; + seal_bits = seal_bits.wrapping_add(6usize); + if !IsNextOutNull(&(*s).next_out_) { + destination = &mut GetNextOut!(*s)[((*s).available_out_ as (usize))..]; + } else { + destination = &mut (*s).tiny_buf_[..]; + (*s).next_out_ = NextOut::TinyBuf(0); + } + destination[(0usize)] = seal as (u8); + if seal_bits > 8usize { + destination[(1usize)] = (seal >> 8i32) as (u8); + } + if seal_bits > 16usize { + destination[(2usize)] = (seal >> 16i32) as (u8); + } + (*s).available_out_ = (*s).available_out_.wrapping_add(seal_bits.wrapping_add(7usize) >> 3i32); +} +fn InjectFlushOrPushOutput( + s: &mut BrotliEncoderStateStruct, + available_out: &mut usize, + next_out_array: &mut [u8], + next_out_offset: &mut usize, + total_out: &mut Option) + -> i32 { + if (*s).stream_state_ as (i32) == + BrotliEncoderStreamState::BROTLI_STREAM_FLUSH_REQUESTED as (i32) && + ((*s).last_bytes_bits_ as (i32) != 0i32) { + InjectBytePaddingBlock(s); + return 1i32; + } + if (*s).available_out_ != 0usize && (*available_out != 0usize) { + let copy_output_size: usize = brotli_min_size_t((*s).available_out_, *available_out); + (*next_out_array)[(*next_out_offset)..(*next_out_offset + copy_output_size)].clone_from_slice(&GetNextOut!(s)[..copy_output_size]); + //memcpy(*next_out, (*s).next_out_, copy_output_size); + *next_out_offset = (*next_out_offset).wrapping_add(copy_output_size); + *available_out = (*available_out).wrapping_sub(copy_output_size); + (*s).next_out_ = NextOutIncrement(&(*s).next_out_, (copy_output_size as (i32))); + (*s).available_out_ = (*s).available_out_.wrapping_sub(copy_output_size); + (*s).total_out_ = (*s).total_out_.wrapping_add(copy_output_size as u64); + if let &mut Some(ref mut total_out_inner) = total_out { + *total_out_inner = (*s).total_out_ as usize; + } + return 1i32; + } + 0i32 +} + +fn UnprocessedInputSize( + s: &BrotliEncoderStateStruct) -> u64 { + (*s).input_pos_.wrapping_sub((*s).last_processed_pos_) +} + +fn UpdateSizeHint(s: &mut BrotliEncoderStateStruct, + available_in: usize) { + if (*s).params.size_hint == 0usize { + let delta: u64 = UnprocessedInputSize(s); + let tail: u64 = available_in as u64; + let limit: u32 = 1u32 << 30i32; + let total: u32; + if delta >= u64::from(limit) || tail >= u64::from(limit) || + delta.wrapping_add(tail) >= u64::from(limit) { + total = limit; + } else { + total = delta.wrapping_add(tail) as (u32); + } + (*s).params.size_hint = total as (usize); + } +} + + +fn WrapPosition(position: u64) -> u32 { + let mut result: u32 = position as (u32); + let gb: u64 = position >> 30i32; + if gb > 2 { + result = result & (1u32 << 30i32).wrapping_sub(1u32) | + ((gb.wrapping_sub(1) & 1) as (u32)).wrapping_add(1u32) << 30i32; + } + result +} + +fn InputBlockSize(s: &mut BrotliEncoderStateStruct) -> usize { + if EnsureInitialized(s) == 0 { + return 0usize; + } + 1usize << (*s).params.lgblock +} + +fn GetBrotliStorage(s: &mut BrotliEncoderStateStruct, + size: usize) { + if (*s).storage_size_ < size { + >::free_cell(&mut (*s).m8, core::mem::replace(&mut (*s).storage_, >::AllocatedMemory::default())); + (*s).storage_ = >::alloc_cell(&mut (*s).m8, size); + (*s).storage_size_ = size; + } +} + +fn MaxHashTableSize(quality: i32) -> usize { + (if quality == 0i32 { + 1i32 << 15i32 + } else { + 1i32 << 17i32 + }) as (usize) +} + +fn HashTableSize(max_table_size: usize, input_size: usize) -> usize { + let mut htsize: usize = 256usize; + while htsize < max_table_size && (htsize < input_size) { + htsize = htsize << 1i32; + } + htsize +} + +macro_rules! GetHashTable { + ($s : expr, $quality: expr, $input_size : expr, $table_size : expr) => { + GetHashTableInternal(&mut $s.m8, &mut $s.small_table_, &mut $s.large_table_, + $quality, $input_size, $table_size) + }; +} +fn GetHashTableInternal<'a, AllocI32: alloc::Allocator>(mi32: &mut AllocI32, + small_table_: &'a mut [i32; 1024], + large_table_: &'a mut AllocI32::AllocatedMemory, + quality: i32, + input_size: usize, + table_size: &mut usize) + -> &'a mut [i32] { + let max_table_size: usize = MaxHashTableSize(quality); + let mut htsize: usize = HashTableSize(max_table_size, input_size); + let table: &mut [i32]; + if quality == 0i32 { + if htsize & 0xaaaaausize == 0usize { + htsize = htsize << 1i32; + } + } + if htsize <= small_table_.len() { + table = &mut small_table_[..]; + } else { + if htsize > large_table_.slice().len() { + //(*s).large_table_size_ = htsize; + { + mi32.free_cell(core::mem::replace(large_table_, + AllocI32::AllocatedMemory::default())); + } + *large_table_ = mi32.alloc_cell(htsize); + } + table = large_table_.slice_mut(); + } + *table_size = htsize; + for item in table[..htsize].iter_mut() { + *item = 0; + } + table // FIXME: probably need a macro to do this without borrowing the whole EncoderStateStruct +} +fn UpdateLastProcessedPos(s: &mut BrotliEncoderStateStruct) -> i32 { + let wrapped_last_processed_pos: u32 = WrapPosition((*s).last_processed_pos_); + let wrapped_input_pos: u32 = WrapPosition((*s).input_pos_); + (*s).last_processed_pos_ = (*s).input_pos_; + if !!(wrapped_input_pos < wrapped_last_processed_pos) { + 1i32 + } else { + 0i32 + } +} + +fn MaxMetablockSize(params: &BrotliEncoderParams) -> usize { + let bits: i32 = brotli_min_int(ComputeRbBits(params), 24i32); + 1usize << bits +} + + + +fn ChooseContextMap(quality: i32, + bigram_histo: &mut [u32], + num_literal_contexts: &mut usize, + literal_context_map: &mut &[u32]) { + static kStaticContextMapContinuation: [u32; 64] = + [1u32, 1u32, 2u32, 2u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32]; + static kStaticContextMapSimpleUTF8: [u32; 64] = + [0u32, 0u32, 1u32, 1u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, + 0u32, 0u32, 0u32, 0u32]; + let mut monogram_histo: [u32; 3] = [0u32, 0u32, 0u32]; + let mut two_prefix_histo: [u32; 6] = [0u32, 0u32, 0u32, 0u32, 0u32, 0u32]; + let total: usize; + let mut i: usize; + let mut dummy: usize = 0; + let mut entropy: [super::util::floatX; 4] = [0.0 as super::util::floatX;4]; + i = 0usize; + while i < 9usize { + { + { + let _rhs = bigram_histo[(i as (usize))]; + let _lhs = &mut monogram_histo[i.wrapping_rem(3usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs); + } + { + let _rhs = bigram_histo[(i as (usize))]; + let _lhs = &mut two_prefix_histo[i.wrapping_rem(6usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs); + } + } + i = i.wrapping_add(1 as (usize)); + } + entropy[1usize] = ShannonEntropy(&monogram_histo[..], 3usize, &mut dummy); + entropy[2usize] = ShannonEntropy(&two_prefix_histo[..], 3usize, &mut dummy) + + ShannonEntropy(&two_prefix_histo[3i32 as (usize)..], + 3usize, + &mut dummy); + entropy[3usize] = 0i32 as (super::util::floatX); + i = 0usize; + while i < 3usize { + { + let _rhs = ShannonEntropy(&bigram_histo[((3usize).wrapping_mul(i) as (usize))..], + 3usize, + &mut dummy); + let _lhs = &mut entropy[3usize]; + *_lhs = *_lhs + _rhs; + } + i = i.wrapping_add(1 as (usize)); + } + total = monogram_histo[0usize] + .wrapping_add(monogram_histo[1usize]) + .wrapping_add(monogram_histo[2usize]) as (usize); + 0i32; + entropy[0usize] = 1.0 as super::util::floatX / total as (super::util::floatX); + { + let _rhs = entropy[0usize]; + let _lhs = &mut entropy[1usize]; + *_lhs = *_lhs * _rhs; + } + { + let _rhs = entropy[0usize]; + let _lhs = &mut entropy[2usize]; + *_lhs = *_lhs * _rhs; + } + { + let _rhs = entropy[0usize]; + let _lhs = &mut entropy[3usize]; + *_lhs = *_lhs * _rhs; + } + if quality < 7i32 { + entropy[3usize] = entropy[1usize] * 10i32 as (super::util::floatX); + } + if entropy[1usize] - entropy[2usize] < 0.2 as super::util::floatX && (entropy[1usize] - entropy[3usize] < 0.2 as super::util::floatX) { + *num_literal_contexts = 1usize; + } else if entropy[2usize] - entropy[3usize] < 0.02 as super::util::floatX { + *num_literal_contexts = 2usize; + *literal_context_map = &kStaticContextMapSimpleUTF8[..]; + } else { + *num_literal_contexts = 3usize; + *literal_context_map = &kStaticContextMapContinuation[..]; + } +} + +static kStaticContextMapComplexUTF8: [u32; 64] = [ + 11, 11, 12, 12, /* 0 special */ + 0, 0, 0, 0, /* 4 lf */ + 1, 1, 9, 9, /* 8 space */ + 2, 2, 2, 2, /* !, first after space/lf and after something else. */ + 1, 1, 1, 1, /* " */ + 8, 3, 3, 3, /* % */ + 1, 1, 1, 1, /* ({[ */ + 2, 2, 2, 2, /* }]) */ + 8, 4, 4, 4, /* :; */ + 8, 7, 4, 4, /* . */ + 8, 0, 0, 0, /* > */ + 3, 3, 3, 3, /* [0..9] */ + 5, 5, 10, 5, /* [A-Z] */ + 5, 5, 10, 5, + 6, 6, 6, 6, /* [a-z] */ + 6, 6, 6, 6, + ]; +/* Decide if we want to use a more complex static context map containing 13 + context values, based on the entropy reduction of histograms over the + first 5 bits of literals. */ +fn ShouldUseComplexStaticContextMap(input: &[u8], + mut start_pos: usize, length : usize, mask : usize, quality: i32, + size_hint: usize, + num_literal_contexts: &mut usize, literal_context_map: &mut &[u32]) -> bool { + let _ = quality; + //BROTLI_UNUSED(quality); + /* Try the more complex static context map only for long data. */ + if (size_hint < (1 << 20)) { + return false; + } else { + let end_pos = start_pos + length; + /* To make entropy calculations faster and to fit on the stack, we collect + histograms over the 5 most significant bits of literals. One histogram + without context and 13 additional histograms for each context value. */ + let mut combined_histo:[u32; 32] = [0;32]; + let mut context_histo:[[u32;32]; 13] = [[0;32];13]; + let mut total = 0u32; + let mut entropy = [0.0 as super::util::floatX;3]; + let mut dummy = 0usize; + let utf8_lut = BROTLI_CONTEXT_LUT(ContextType::CONTEXT_UTF8); + while start_pos + 64 <= end_pos { + let stride_end_pos = start_pos + 64; + let mut prev2 = input[start_pos & mask]; + let mut prev1 = input[(start_pos + 1) & mask]; + + /* To make the analysis of the data faster we only examine 64 byte long + strides at every 4kB intervals. */ + for pos in start_pos + 2..stride_end_pos { + let literal = input[pos & mask]; + let context = kStaticContextMapComplexUTF8[ + BROTLI_CONTEXT(prev1, prev2, utf8_lut) as usize] as u8; + total += 1; + combined_histo[(literal >> 3) as usize] += 1; + context_histo[context as usize][(literal >> 3) as usize] += 1; + prev2 = prev1; + prev1 = literal; + } + start_pos += 4096; + } + entropy[1] = ShannonEntropy(&combined_histo[..], 32, &mut dummy); + entropy[2] = 0.0 as super::util::floatX; + for i in 0..13 { + assert!(i < 13); + entropy[2] += ShannonEntropy(&context_histo[i][..], 32, &mut dummy); + } + entropy[0] = (1.0 as super::util::floatX) / (total as super::util::floatX); + entropy[1] *= entropy[0]; + entropy[2] *= entropy[0]; + /* The triggering heuristics below were tuned by compressing the individual + files of the silesia corpus. If we skip this kind of context modeling + for not very well compressible input (i.e. entropy using context modeling + is 60% of maximal entropy) or if expected savings by symbol are less + than 0.2 bits, then in every case when it triggers, the final compression + ratio is improved. Note however that this heuristics might be too strict + for some cases and could be tuned further. */ + if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) { + return false; + } else { + *num_literal_contexts = 13; + *literal_context_map = &kStaticContextMapComplexUTF8; + return true; + } + } +} + +fn DecideOverLiteralContextModeling(input: &[u8], + mut start_pos: usize, + length: usize, + mask: usize, + quality: i32, + size_hint: usize, + num_literal_contexts: &mut usize, + literal_context_map: &mut &[u32]) { + + if quality < 5i32 || length < 64usize { + } else if ShouldUseComplexStaticContextMap(input, start_pos, length, mask, quality, size_hint, + num_literal_contexts, literal_context_map) { + } else { + let end_pos: usize = start_pos.wrapping_add(length); + let mut bigram_prefix_histo: [u32; 9] = [0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32, 0u32]; + while start_pos.wrapping_add(64usize) <= end_pos { + { + static lut: [i32; 4] = [0i32, 0i32, 1i32, 2i32]; + let stride_end_pos: usize = start_pos.wrapping_add(64usize); + let mut prev: i32 = lut[(input[((start_pos & mask) as (usize))] as (i32) >> 6i32) as + (usize)] * 3i32; + let mut pos: usize; + pos = start_pos.wrapping_add(1usize); + while pos < stride_end_pos { + { + let literal: u8 = input[((pos & mask) as (usize))]; + { + let _rhs = 1; + let cur_ind = (prev + lut[(literal as (i32) >> 6i32) as (usize)]); + let _lhs = &mut bigram_prefix_histo[cur_ind as + (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } + prev = lut[(literal as (i32) >> 6i32) as (usize)] * 3i32; + } + pos = pos.wrapping_add(1 as (usize)); + } + } + start_pos = start_pos.wrapping_add(4096usize); + } + ChooseContextMap(quality, + &mut bigram_prefix_histo[..], + num_literal_contexts, + literal_context_map); + } +} +fn WriteMetaBlockInternal + (alloc: &mut Alloc, + data: &[u8], + mask: usize, + last_flush_pos: u64, + bytes: usize, + mut is_last: i32, + literal_context_mode: ContextType, + params: &BrotliEncoderParams, + lit_scratch_space: &mut ::i32vec, + cmd_scratch_space: &mut ::i32vec, + dst_scratch_space: &mut ::i32vec, + prev_byte: u8, + prev_byte2: u8, + num_literals: usize, + num_commands: usize, + commands: &mut [Command], + saved_dist_cache: &[i32;kNumDistanceCacheEntries], + dist_cache: &mut [i32;16], + recoder_state: &mut RecoderState, + storage_ix: &mut usize, + storage: &mut [u8], + cb: &mut Cb) where Cb: FnMut(&mut interface::PredictionModeContextMap, + &mut [interface::StaticCommand], + interface::InputPair, &mut Alloc) { + let actual_is_last = is_last; + if params.appendable { + is_last = 0; + } else { + assert_eq!(params.catable, false); // Sanitize Params senforces this constraint + } + let wrapped_last_flush_pos: u32 = WrapPosition(last_flush_pos); + let last_bytes: u16; + let last_bytes_bits: u8; + let literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode); + let mut block_params = params.clone(); + if bytes == 0usize { + BrotliWriteBits(2usize, 3, storage_ix, storage); + *storage_ix = (*storage_ix).wrapping_add(7u32 as (usize)) & !7u32 as (usize); + return; + } + if ShouldCompress(data, + mask, + last_flush_pos, + bytes, + num_literals, + num_commands) == 0 { + dist_cache[..4].clone_from_slice(&saved_dist_cache[..4]); + BrotliStoreUncompressedMetaBlock(alloc, + is_last, + data, + wrapped_last_flush_pos as (usize), + mask, + params, + bytes, + recoder_state, + storage_ix, + storage, + false, + cb); + if actual_is_last != is_last { + BrotliWriteEmptyLastMetaBlock(storage_ix, storage) + } + return; + } + let saved_byte_location = (*storage_ix) >> 3; + last_bytes = ((storage[saved_byte_location + 1] as u16) << 8) | storage[saved_byte_location] as u16; + last_bytes_bits = *storage_ix as u8; + /*if params.dist.num_direct_distance_codes != 0 || + params.dist.distance_postfix_bits != 0 { + RecomputeDistancePrefixes(commands, + num_commands, + params.dist.num_direct_distance_codes, + params.dist.distance_postfix_bits); + }*/ // why was this removed?? + if (*params).quality <= 2i32 { + BrotliStoreMetaBlockFast(alloc, + data, + wrapped_last_flush_pos as (usize), + bytes, + mask, + is_last, + params, + saved_dist_cache, + commands, + num_commands, + recoder_state, + storage_ix, + storage, + cb); + } else if (*params).quality < 4i32 { + BrotliStoreMetaBlockTrivial(alloc, + data, + wrapped_last_flush_pos as (usize), + bytes, + mask, + is_last, + params, + saved_dist_cache, + commands, + num_commands, + recoder_state, + storage_ix, + storage, + cb); + } else { + //let mut literal_context_mode: ContextType = ContextType::CONTEXT_UTF8; + + let mut mb = MetaBlockSplit::::new(); + if (*params).quality < 10i32 { + let mut num_literal_contexts: usize = 1usize; + let mut literal_context_map: &[u32] = &[]; + if (*params).disable_literal_context_modeling == 0 { + DecideOverLiteralContextModeling(data, + wrapped_last_flush_pos as (usize), + bytes, + mask, + (*params).quality, + (*params).size_hint, + &mut num_literal_contexts, + &mut literal_context_map); + } + BrotliBuildMetaBlockGreedy(alloc, + data, + wrapped_last_flush_pos as (usize), + mask, + prev_byte, + prev_byte2, + literal_context_mode, + literal_context_lut, + num_literal_contexts, + literal_context_map, + commands, + num_commands, + &mut mb); + } else { + BrotliBuildMetaBlock(alloc, + data, + wrapped_last_flush_pos as (usize), + mask, + &mut block_params, + prev_byte, + prev_byte2, + commands, + num_commands, + literal_context_mode, + lit_scratch_space, + cmd_scratch_space, + dst_scratch_space, + &mut mb); + } + if (*params).quality >= 4i32 { + let mut num_effective_dist_codes = block_params.dist.alphabet_size; + if num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS as u32 { + num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS as u32; + } + BrotliOptimizeHistograms(num_effective_dist_codes as usize, + &mut mb); + } + BrotliStoreMetaBlock(alloc, + data, + wrapped_last_flush_pos as (usize), + bytes, + mask, + prev_byte, + prev_byte2, + is_last, + &block_params, + literal_context_mode, + saved_dist_cache, + commands, + num_commands, + &mut mb, + recoder_state, + storage_ix, + storage, + cb); + mb.destroy(alloc); + } + if bytes + 4 + saved_byte_location < (*storage_ix >> 3i32) { + dist_cache[..4].clone_from_slice(&saved_dist_cache[..4]); + //memcpy(dist_cache, + // saved_dist_cache, + // (4usize).wrapping_mul(::std::mem::size_of::())); + storage[saved_byte_location] = last_bytes as u8; + storage[saved_byte_location + 1] = (last_bytes >> 8) as u8; + *storage_ix = last_bytes_bits as (usize); + BrotliStoreUncompressedMetaBlock(alloc, + is_last, + data, + wrapped_last_flush_pos as (usize), + mask, + params, + bytes, + recoder_state, + storage_ix, + storage, + true, + cb); + } + if actual_is_last != is_last { + BrotliWriteEmptyLastMetaBlock(storage_ix, storage) + } +} + +fn ChooseDistanceParams(params: &mut BrotliEncoderParams) { + let mut num_direct_distance_codes = 0u32; + let mut distance_postfix_bits = 0u32; + + if params.quality >= 4 { + let ndirect_msb; + if params.mode == BrotliEncoderMode::BROTLI_MODE_FONT { + distance_postfix_bits = 1; + num_direct_distance_codes = 12; + } else { + distance_postfix_bits = params.dist.distance_postfix_bits; + num_direct_distance_codes = params.dist.num_direct_distance_codes; + } + ndirect_msb = (num_direct_distance_codes >> distance_postfix_bits) & 0x0f; + if distance_postfix_bits > BROTLI_MAX_NPOSTFIX as u32 || num_direct_distance_codes > BROTLI_MAX_NDIRECT as u32 || (ndirect_msb << distance_postfix_bits) != num_direct_distance_codes { + distance_postfix_bits = 0; + num_direct_distance_codes = 0; + } + } + BrotliInitDistanceParams(params, distance_postfix_bits, num_direct_distance_codes); + /*( + if (params.large_window) { + max_distance = BROTLI_MAX_ALLOWED_DISTANCE; + if (num_direct_distance_codes != 0 || distance_postfix_bits != 0) { + max_distance = (3 << 29) - 4; + } + alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE( + num_direct_distance_codes, distance_postfix_bits, + BROTLI_LARGE_MAX_DISTANCE_BITS); + } else { + alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE( + num_direct_distance_codes, distance_postfix_bits, + BROTLI_MAX_DISTANCE_BITS); + + } + + params.dist.num_direct_distance_codes = num_direct_distance_codes; + params.dist.distance_postfix_bits = distance_postfix_bits; + params.dist.alphabet_size = alphabet_size; + params.dist.max_distance = max_distance;*/ +} + + +fn EncodeData( + s: &mut BrotliEncoderStateStruct, + is_last: i32, + force_flush: i32, + out_size: &mut usize, + callback: &mut MetablockCallback +// mut output: &'a mut &'a mut [u8] +) -> i32 where MetablockCallback: FnMut(&mut interface::PredictionModeContextMap, + &mut [interface::StaticCommand], + interface::InputPair, &mut Alloc){ + let mut delta: u64 = UnprocessedInputSize(s); + let mut bytes: u32 = delta as (u32); + let mask = (*s).ringbuffer_.mask_; + if EnsureInitialized(s) == 0 { + return 0i32; + } + let dictionary = BrotliGetDictionary(); + if (*s).is_last_block_emitted_ { + return 0i32; + } + if is_last != 0 { + (*s).is_last_block_emitted_ = true; + } + if delta > InputBlockSize(s) as u64 { + return 0i32; + } + let mut storage_ix: usize = usize::from((*s).last_bytes_bits_); + { + let meta_size = core::cmp::max(bytes as usize, + (*s).input_pos_.wrapping_sub((*s).last_flush_pos_) as usize); + GetBrotliStorage(s, + (2usize).wrapping_mul(meta_size).wrapping_add(503 + 24)); + } + { + (*s).storage_.slice_mut()[0] = (*s).last_bytes_ as u8; + (*s).storage_.slice_mut()[1] = ((*s).last_bytes_ >> 8) as u8; + } + let mut catable_header_size = 0; + if let IsFirst::NothingWritten = s.is_first_mb { + if s.params.magic_number { + BrotliWriteMetadataMetaBlock(&s.params, &mut storage_ix, (*s).storage_.slice_mut()); + (*s).last_bytes_ = (*s).storage_.slice()[((storage_ix >> 3i32) as (usize))] as u16 | ( + ((*s).storage_.slice()[1 + ((storage_ix >> 3i32) as (usize))] as u16)<<8); + (*s).last_bytes_bits_ = (storage_ix & 7u32 as (usize)) as (u8); + (*s).next_out_ = NextOut::DynamicStorage(0); + catable_header_size = storage_ix >> 3; + *out_size = catable_header_size; + s.is_first_mb = IsFirst::HeaderWritten; + } + } + if let IsFirst::BothCatableBytesWritten = s.is_first_mb { + // nothing to do here, move along + } else if !s.params.catable { + s.is_first_mb = IsFirst::BothCatableBytesWritten; + } else if bytes != 0 { + assert!(s.last_processed_pos_ < 2 || s.custom_dictionary); + let num_bytes_to_write_uncompressed:usize = core::cmp::min(2, bytes as usize); + { + let data = &mut (*s).ringbuffer_.data_mo.slice_mut ()[((*s).ringbuffer_.buffer_index as (usize))..]; + BrotliStoreUncompressedMetaBlock(&mut s.m8, + 0, + data, + s.last_flush_pos_ as usize, + mask as usize, + &s.params, + num_bytes_to_write_uncompressed, + &mut (*s).recoder_state, + &mut storage_ix, + (*s).storage_.slice_mut(), + false /* suppress meta-block logging */, + callback); + (*s).last_bytes_ = (*s).storage_.slice()[((storage_ix >> 3i32) as (usize))] as u16 | ( + ((*s).storage_.slice()[1 + ((storage_ix >> 3i32) as (usize))] as u16)<<8); + (*s).last_bytes_bits_ = (storage_ix & 7u32 as (usize)) as (u8); + s.prev_byte2_ = s.prev_byte_; + s.prev_byte_ = data[s.last_flush_pos_ as usize & mask as usize]; + if num_bytes_to_write_uncompressed == 2 { + s.prev_byte2_ = s.prev_byte_; + s.prev_byte_ = data[(s.last_flush_pos_ + 1) as usize & mask as usize]; + } + } + s.last_flush_pos_ += num_bytes_to_write_uncompressed as u64; + bytes -= num_bytes_to_write_uncompressed as u32; + (*s).last_processed_pos_ += num_bytes_to_write_uncompressed as u64; + if num_bytes_to_write_uncompressed >= 2 { + s.is_first_mb = IsFirst::BothCatableBytesWritten; + } else if num_bytes_to_write_uncompressed == 1 { + if let IsFirst::FirstCatableByteWritten = s.is_first_mb { + s.is_first_mb = IsFirst::BothCatableBytesWritten; + } else { + s.is_first_mb = IsFirst::FirstCatableByteWritten; + } + } + catable_header_size = storage_ix >> 3; + (*s).next_out_ = NextOut::DynamicStorage(0); + *out_size = catable_header_size; + delta = UnprocessedInputSize(s); + } + let mut wrapped_last_processed_pos: u32 = WrapPosition((*s).last_processed_pos_); + if (*s).params.quality == 1i32 && (*s).command_buf_.slice().len() == 0 { + let new_buf = >::alloc_cell(&mut (*s).m8, kCompressFragmentTwoPassBlockSize); + (*s).command_buf_ = new_buf; + let new_buf8 = >::alloc_cell(&mut (*s).m8, kCompressFragmentTwoPassBlockSize); + (*s).literal_buf_ = new_buf8; + } + if (*s).params.quality == 0i32 || (*s).params.quality == 1i32 { + let mut table_size: usize = 0; + { + let table: &mut [i32]; + if delta == 0 && (is_last == 0) { + *out_size = catable_header_size; + return 1i32; + } + let data = &mut (*s).ringbuffer_.data_mo.slice_mut ()[((*s).ringbuffer_.buffer_index as (usize))..]; + + //(*s).storage_.slice_mut()[0] = (*s).last_bytes_ as u8; + // (*s).storage_.slice_mut()[1] = ((*s).last_bytes_ >> 8) as u8; + + table = GetHashTable!(s, (*s).params.quality, bytes as (usize), &mut table_size); + + if (*s).params.quality == 0i32 { + BrotliCompressFragmentFast(&mut s.m8, + &mut data[((wrapped_last_processed_pos & mask) as (usize))..], + bytes as (usize), + is_last, + table, + table_size, + &mut (*s).cmd_depths_[..], + &mut (*s).cmd_bits_[..], + &mut (*s).cmd_code_numbits_, + &mut (*s).cmd_code_[..], + &mut storage_ix, + (*s).storage_.slice_mut()); + } else { + BrotliCompressFragmentTwoPass(&mut s.m8, + &mut data[((wrapped_last_processed_pos & mask) as (usize))..], + bytes as (usize), + is_last, + (*s).command_buf_.slice_mut(), + (*s).literal_buf_.slice_mut(), + table, + table_size, + &mut storage_ix, + (*s).storage_.slice_mut()); + } + (*s).last_bytes_ = (*s).storage_.slice()[((storage_ix >> 3i32) as (usize))] as u16 | (( + (*s).storage_.slice()[((storage_ix >> 3i32) as (usize)) + 1] as u16) << 8); + (*s).last_bytes_bits_ = (storage_ix & 7u32 as (usize)) as (u8); + } + UpdateLastProcessedPos(s); + // *output = &mut (*s).storage_.slice_mut(); + (*s).next_out_ = NextOut::DynamicStorage(0); // this always returns that + *out_size = storage_ix >> 3i32; + return 1i32; + } + { + let mut newsize: usize = + (*s).num_commands_.wrapping_add(bytes.wrapping_div(2u32) as (usize)).wrapping_add(1usize); + if newsize > (*s).cmd_alloc_size_ { + newsize = newsize.wrapping_add(bytes.wrapping_div(4u32).wrapping_add(16u32) as (usize)); + (*s).cmd_alloc_size_ = newsize; + let mut new_commands = >::alloc_cell(&mut s.m8, newsize); + if (*s).commands_.slice().len() != 0 { + new_commands.slice_mut()[..(*s).num_commands_].clone_from_slice(&(*s).commands_.slice()[..(*s).num_commands_]); + >::free_cell(&mut s.m8, core::mem::replace(&mut (*s).commands_, >::AllocatedMemory::default())); + } + (*s).commands_ = new_commands; + } + } + InitOrStitchToPreviousBlock(&mut (*s).m8, + &mut (*s).hasher_, + &mut (*s).ringbuffer_.data_mo.slice_mut()[((*s).ringbuffer_.buffer_index as (usize))..], + mask as (usize), + &mut (*s).params, + wrapped_last_processed_pos as (usize), + bytes as (usize), + is_last); + let literal_context_mode = ChooseContextMode( + &s.params, (*s).ringbuffer_.data_mo.slice(), WrapPosition(s.last_flush_pos_) as usize, + mask as usize, (s.input_pos_.wrapping_sub(s.last_flush_pos_)) as usize); + if s.num_commands_ != 0 && s.last_insert_len_ == 0 { + ExtendLastCommand(s, &mut bytes, &mut wrapped_last_processed_pos); + } + if false { // we are remapping 10 as quality=9.5 since Zopfli doesn't seem to offer much benefits here + panic!(r####" + BrotliCreateZopfliBackwardReferences(m, + dictionary, + bytes as (usize), + wrapped_last_processed_pos as (usize), + data, + mask as (usize), + &mut (*s).params, + (*s).hasher_, + (*s).dist_cache_.as_mut_ptr(), + &mut (*s).last_insert_len_, + &mut *(*s).commands_[((*s).num_commands_ as (usize))..], + &mut (*s).num_commands_, + &mut (*s).num_literals_);"####); + } else if false && (*s).params.quality == 11i32 { + panic!(r####"BrotliCreateHqZopfliBackwardReferences(m, + dictionary, + bytes as (usize), + wrapped_last_processed_pos as (usize), + data, + mask as (usize), + &mut (*s).params, + (*s).hasher_, + (*s).dist_cache_.as_mut_ptr(), + &mut (*s).last_insert_len_, + &mut *(*s).commands_[((*s).num_commands_ as (usize))..], + &mut (*s).num_commands_, + &mut (*s).num_literals_);"####); + } else { + BrotliCreateBackwardReferences(&mut (*s).m8, &dictionary, + bytes as (usize), + wrapped_last_processed_pos as (usize), + &mut (*s).ringbuffer_.data_mo.slice_mut()[((*s).ringbuffer_.buffer_index as usize)..], + mask as (usize), + &mut (*s).params, + &mut (*s).hasher_, + &mut (*s).dist_cache_, + &mut (*s).last_insert_len_, + &mut (*s).commands_.slice_mut()[((*s).num_commands_ as (usize))..], + &mut (*s).num_commands_, + &mut (*s).num_literals_); + } + { + let max_length: usize = MaxMetablockSize(&mut (*s).params); + let max_literals: usize = max_length.wrapping_div(8usize); + let max_commands: usize = max_length.wrapping_div(8usize); + let processed_bytes: usize = (*s).input_pos_.wrapping_sub((*s).last_flush_pos_) as usize; + let next_input_fits_metablock: i32 = if !!(processed_bytes.wrapping_add(InputBlockSize(s)) <= + max_length) { + 1i32 + } else { + 0i32 + }; + let should_flush: i32 = if !!((*s).params.quality < 4i32 && + ((*s).num_literals_.wrapping_add((*s).num_commands_) >= + 0x2fffusize)) { + 1i32 + } else { + 0i32 + }; + if is_last == 0 && (force_flush == 0) && (should_flush == 0) && + (next_input_fits_metablock != 0) && ((*s).num_literals_ < max_literals) && + ((*s).num_commands_ < max_commands) { + if UpdateLastProcessedPos(s) != 0 { + HasherReset(&mut (*s).hasher_); + } + *out_size = catable_header_size; + return 1i32; + } + } + if (*s).last_insert_len_ > 0usize { + InitInsertCommand(&mut (*s).commands_.slice_mut()[({ + let _old = (*s).num_commands_; + (*s).num_commands_ = (*s).num_commands_.wrapping_add(1 as (usize)); + _old + } as (usize))], + (*s).last_insert_len_); + (*s).num_literals_ = (*s).num_literals_.wrapping_add((*s).last_insert_len_); + (*s).last_insert_len_ = 0usize; + } + if is_last == 0 && ((*s).input_pos_ == (*s).last_flush_pos_) { + *out_size = catable_header_size; + return 1i32; + } + { + let metablock_size: u32 = (*s).input_pos_.wrapping_sub((*s).last_flush_pos_) as (u32); + //let mut storage_ix: usize = (*s).last_bytes_bits_ as (usize); + //(*s).storage_.slice_mut()[(0usize)] = (*s).last_bytes_ as u8; + //(*s).storage_.slice_mut()[(1usize)] = ((*s).last_bytes_ >> 8) as u8; + + WriteMetaBlockInternal(&mut (*s).m8, + &mut (*s).ringbuffer_.data_mo.slice_mut()[((*s).ringbuffer_.buffer_index as usize)..], + mask as (usize), + (*s).last_flush_pos_, + metablock_size as (usize), + is_last, + literal_context_mode, + &mut (*s).params, + &mut (*s).literal_scratch_space, + &mut (*s).command_scratch_space, + &mut (*s).distance_scratch_space, + (*s).prev_byte_, + (*s).prev_byte2_, + (*s).num_literals_, + (*s).num_commands_, + (*s).commands_.slice_mut(), + &mut (*s).saved_dist_cache_, + &mut (*s).dist_cache_, + &mut (*s).recoder_state, + &mut storage_ix, + (*s).storage_.slice_mut(), + callback); + + (*s).last_bytes_ = (*s).storage_.slice()[((storage_ix >> 3i32) as (usize))] as u16 | ( + ((*s).storage_.slice()[1 + ((storage_ix >> 3i32) as (usize))] as u16)<<8); + (*s).last_bytes_bits_ = (storage_ix & 7u32 as (usize)) as (u8); + (*s).last_flush_pos_ = (*s).input_pos_; + if UpdateLastProcessedPos(s) != 0 { + HasherReset(&mut (*s).hasher_); + } + let data = &(*s).ringbuffer_.data_mo.slice()[(*s).ringbuffer_.buffer_index as usize..]; + if (*s).last_flush_pos_ > 0 { + (*s).prev_byte_ = data[((((*s).last_flush_pos_ as (u32)).wrapping_sub(1u32) & mask) as + (usize))]; + } + if (*s).last_flush_pos_ > 1 { + (*s).prev_byte2_ = data[(((*s).last_flush_pos_.wrapping_sub(2) as (u32) & mask) as + (usize))]; + } + (*s).num_commands_ = 0usize; + (*s).num_literals_ = 0usize; + (*s).saved_dist_cache_.clone_from_slice(&(*s).dist_cache_.split_at(4).0); + (*s).next_out_ = NextOut::DynamicStorage(0); // this always returns that + *out_size = storage_ix >> 3i32; + 1i32 + } +} + +fn WriteMetadataHeader(s: &mut BrotliEncoderStateStruct) + -> usize { + let block_size = (*s).remaining_metadata_bytes_ as (usize); + let header = GetNextOut!(*s); + let mut storage_ix: usize; + storage_ix = (*s).last_bytes_bits_ as (usize); + header[(0usize)] = (*s).last_bytes_ as u8; + header[(1usize)] = ((*s).last_bytes_ >> 8) as u8; + (*s).last_bytes_ = 0; + (*s).last_bytes_bits_ = 0; + BrotliWriteBits(1usize, 0, &mut storage_ix, header); + BrotliWriteBits(2usize, 3, &mut storage_ix, header); + BrotliWriteBits(1usize, 0, &mut storage_ix, header); + if block_size == 0usize { + BrotliWriteBits(2usize, 0, &mut storage_ix, header); + } else { + let nbits: u32 = if block_size == 1usize { + 0u32 + } else { + Log2FloorNonZero((block_size as (u32)).wrapping_sub(1u32) as (u64)).wrapping_add(1u32) + }; + let nbytes: u32 = nbits.wrapping_add(7u32).wrapping_div(8u32); + BrotliWriteBits(2usize, nbytes as (u64), &mut storage_ix, header); + BrotliWriteBits((8u32).wrapping_mul(nbytes) as (usize), + block_size.wrapping_sub(1usize) as u64, + &mut storage_ix, + header); + } + storage_ix.wrapping_add(7u32 as (usize)) >> 3i32 +} + +fn brotli_min_uint32_t(a: u32, b: u32) -> u32 { + if a < b { a } else { b } +} +fn ProcessMetadata, + &mut [interface::StaticCommand], + interface::InputPair, &mut Alloc)>( + s: &mut BrotliEncoderStateStruct, + available_in: &mut usize, + next_in_array: &[u8], + next_in_offset: &mut usize, + available_out: &mut usize, + next_out_array: &mut[u8], + next_out_offset: &mut usize, + total_out: &mut Option, + metablock_callback: &mut MetaBlockCallback) + -> i32 { + if *available_in > (1u32 << 24i32) as (usize) { + return 0i32; + } + if (*s).stream_state_ as (i32) == BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING as (i32) { + (*s).remaining_metadata_bytes_ = *available_in as (u32); + (*s).stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_METADATA_HEAD; + } + if (*s).stream_state_ as (i32) != + BrotliEncoderStreamState::BROTLI_STREAM_METADATA_HEAD as (i32) && + ((*s).stream_state_ as (i32) != + BrotliEncoderStreamState::BROTLI_STREAM_METADATA_BODY as (i32)) { + return 0i32; + } + while 1i32 != 0 { + if InjectFlushOrPushOutput(s, available_out, next_out_array, next_out_offset, total_out) != 0 { + { + continue; + } + } + if (*s).available_out_ != 0usize { + { + break; + } + } + if (*s).input_pos_ != (*s).last_flush_pos_ { + let mut avail_out : usize = (*s).available_out_; + let result: i32 = + EncodeData(s, 0i32, 1i32, &mut avail_out, metablock_callback); + (*s).available_out_ = avail_out; + if result == 0 { + return 0i32; + } + { + { + continue; + } + } + } + if (*s).stream_state_ as (i32) == + BrotliEncoderStreamState::BROTLI_STREAM_METADATA_HEAD as (i32) { + (*s).next_out_ = NextOut::TinyBuf(0); + (*s).available_out_ = WriteMetadataHeader(s); + (*s).stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_METADATA_BODY; + { + { + continue; + } + } + } else { + if (*s).remaining_metadata_bytes_ == 0u32 { + (*s).remaining_metadata_bytes_ = !(0u32); + (*s).stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING; + { + { + break; + } + } + } + if *available_out != 0 { + let copy: u32 = brotli_min_size_t((*s).remaining_metadata_bytes_ as (usize), + *available_out) as (u32); + next_out_array[*next_out_offset .. (*next_out_offset + copy as usize)].clone_from_slice( + &next_in_array[*next_in_offset ..(*next_in_offset + copy as usize)]); + //memcpy(*next_out, *next_in, copy as (usize)); + // *next_in = (*next_in).offset(copy as (isize)); + *next_in_offset += copy as usize; + *available_in = (*available_in).wrapping_sub(copy as (usize)); + (*s).remaining_metadata_bytes_ = (*s).remaining_metadata_bytes_.wrapping_sub(copy); + *next_out_offset += copy as usize; + // *next_out = (*next_out).offset(copy as (isize)); + *available_out = (*available_out).wrapping_sub(copy as (usize)); + } else { + let copy: u32 = brotli_min_uint32_t((*s).remaining_metadata_bytes_, 16u32); + (*s).next_out_ = NextOut::TinyBuf(0); + GetNextOut!(s)[..(copy as usize)].clone_from_slice( + &next_in_array[*next_in_offset ..(*next_in_offset + copy as usize)]); + //memcpy((*s).next_out_, *next_in, copy as (usize)); + // *next_in = (*next_in).offset(copy as (isize)); + *next_in_offset += copy as usize; + *available_in = (*available_in).wrapping_sub(copy as (usize)); + (*s).remaining_metadata_bytes_ = (*s).remaining_metadata_bytes_.wrapping_sub(copy); + (*s).available_out_ = copy as (usize); + } + { + { + continue; + } + } + } + } + 1i32 +} +fn CheckFlushCompleteInner(stream_state: &mut BrotliEncoderStreamState, + available_out: usize, + next_out: &mut NextOut) { + + if *stream_state == + BrotliEncoderStreamState::BROTLI_STREAM_FLUSH_REQUESTED && + (available_out == 0) { + *stream_state = BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING; + *next_out = NextOut::None; + } +} + +fn CheckFlushComplete(s: &mut BrotliEncoderStateStruct) { + CheckFlushCompleteInner(&mut (*s).stream_state_, + (*s).available_out_, + &mut (*s).next_out_); +} + + +fn BrotliEncoderCompressStreamFast( + s: &mut BrotliEncoderStateStruct, + op: BrotliEncoderOperation, + available_in: &mut usize, + next_in_array: &[u8], + next_in_offset: &mut usize, + available_out: &mut usize, + next_out_array: &mut [u8], + next_out_offset: &mut usize, + total_out: &mut Option) + -> i32 { + let block_size_limit: usize = 1usize << (*s).params.lgwin; + let buf_size: usize = brotli_min_size_t(kCompressFragmentTwoPassBlockSize, + brotli_min_size_t(*available_in, block_size_limit)); + let mut command_buf = >::AllocatedMemory::default(); + let mut literal_buf = >::AllocatedMemory::default(); + if (*s).params.quality != 0i32 && ((*s).params.quality != 1i32) { + return 0i32; + } + if (*s).params.quality == 1i32 { + if (*s).command_buf_.slice().len() == 0 && (buf_size == kCompressFragmentTwoPassBlockSize) { + (*s).command_buf_ = >::alloc_cell(&mut s.m8, kCompressFragmentTwoPassBlockSize); + (*s).literal_buf_ = >::alloc_cell(&mut s.m8, kCompressFragmentTwoPassBlockSize); + } + if (*s).command_buf_.slice().len() != 0 { + command_buf = core::mem::replace(&mut (*s).command_buf_, >::AllocatedMemory::default()); + literal_buf = core::mem::replace(&mut (*s).literal_buf_, >::AllocatedMemory::default()); + } else { + command_buf = >::alloc_cell(&mut s.m8, buf_size); + literal_buf = >::alloc_cell(&mut s.m8, buf_size); + } + } + while 1i32 != 0 { + if InjectFlushOrPushOutput(s, available_out, next_out_array, next_out_offset, total_out) != 0 { + { + continue; + } + } + if (*s).available_out_ == 0usize && + ((*s).stream_state_ as (i32) == + BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING as (i32)) && + (*available_in != 0usize || + op as (i32) != BrotliEncoderOperation::BROTLI_OPERATION_PROCESS as (i32)) { + let block_size: usize = brotli_min_size_t(block_size_limit, *available_in); + let is_last: i32 = (*available_in == block_size && + (op as (i32) == + BrotliEncoderOperation::BROTLI_OPERATION_FINISH as (i32))) as + (i32); + let force_flush: i32 = + (*available_in == block_size && + (op as (i32) == BrotliEncoderOperation::BROTLI_OPERATION_FLUSH as (i32))) as (i32); + let max_out_size: usize = (2usize).wrapping_mul(block_size).wrapping_add(503usize); + let mut inplace: i32 = 1i32; + let storage: &mut [u8]; + let mut storage_ix: usize = (*s).last_bytes_bits_ as (usize); + let mut table_size: usize = 0; + let table: &mut [i32]; + if force_flush != 0 && (block_size == 0usize) { + (*s).stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_FLUSH_REQUESTED; + { + { + continue; + } + } + } + if max_out_size <= *available_out { + storage = &mut next_out_array[*next_out_offset..];//GetNextOut!(s); + } else { + inplace = 0i32; + GetBrotliStorage(s, max_out_size); + storage = (*s).storage_.slice_mut(); + } + storage[(0usize)] = (*s).last_bytes_ as u8; + storage[(1usize)] = ((*s).last_bytes_ >> 8) as u8; + table = GetHashTable!(s, (*s).params.quality, block_size, &mut table_size); + if (*s).params.quality == 0i32 { + BrotliCompressFragmentFast(&mut s.m8, + &(next_in_array)[*next_in_offset..], + block_size, + is_last, + table, + table_size, + &mut (*s).cmd_depths_[..], + &mut (*s).cmd_bits_[..], + &mut (*s).cmd_code_numbits_, + &mut (*s).cmd_code_[..], + &mut storage_ix, + storage); + } else { + BrotliCompressFragmentTwoPass(&mut s.m8, + &(next_in_array)[*next_in_offset..], + block_size, + is_last, + command_buf.slice_mut(), + literal_buf.slice_mut(), + table, + table_size, + &mut storage_ix, + storage); + } + *next_in_offset += block_size as usize; + *available_in = (*available_in).wrapping_sub(block_size); + if inplace != 0 { + let out_bytes: usize = storage_ix >> 3i32; + 0i32; + 0i32; + *next_out_offset += out_bytes as (usize); + *available_out = (*available_out).wrapping_sub(out_bytes); + (*s).total_out_ = (*s).total_out_.wrapping_add(out_bytes as u64); + if let &mut Some(ref mut total_out_inner) = total_out { + *total_out_inner = (*s).total_out_ as usize; + } + } else { + let out_bytes: usize = storage_ix >> 3i32; + (*s).next_out_ = NextOut::DynamicStorage(0); + (*s).available_out_ = out_bytes; + } + (*s).last_bytes_ = storage[((storage_ix >> 3i32) as (usize))] as u16 | ( + ((storage[1 + ((storage_ix >> 3i32) as (usize))] as u16)<< 8)); + (*s).last_bytes_bits_ = (storage_ix & 7u32 as (usize)) as (u8); + if force_flush != 0 { + (*s).stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_FLUSH_REQUESTED; + } + if is_last != 0 { + (*s).stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_FINISHED; + } + { + { + continue; + } + } + } + { + { + break; + } + } + } + if command_buf.slice().len() == kCompressFragmentTwoPassBlockSize && s.command_buf_.slice().len() == 0 { + // undo temporary aliasing of command_buf and literal_buf + (*s).command_buf_ = core::mem::replace(&mut command_buf, >::AllocatedMemory::default()); + (*s).literal_buf_ = core::mem::replace(&mut literal_buf, >::AllocatedMemory::default()); + } else { + >::free_cell(&mut s.m8, command_buf); + >::free_cell(&mut s.m8, literal_buf); + } + CheckFlushComplete(s); + 1i32 +} +fn RemainingInputBlockSize(s: &mut BrotliEncoderStateStruct) -> usize { + let delta: u64 = UnprocessedInputSize(s); + let block_size: usize = InputBlockSize(s); + if delta >= block_size as u64 { + return 0usize; + } + (block_size as u64).wrapping_sub(delta) as usize +} + +pub fn BrotliEncoderCompressStream, + &mut [interface::StaticCommand], + interface::InputPair, &mut Alloc)>( + s: &mut BrotliEncoderStateStruct, + op: BrotliEncoderOperation, + available_in: &mut usize, + next_in_array: &[u8], + next_in_offset: &mut usize, + available_out: &mut usize, + next_out_array: &mut [u8], + next_out_offset: &mut usize, + total_out: &mut Option, + metablock_callback: &mut MetablockCallback) + -> i32 { + if EnsureInitialized(s) == 0 { + return 0i32; + } + if (*s).remaining_metadata_bytes_ != !(0u32) { + if *available_in != (*s).remaining_metadata_bytes_ as (usize) { + return 0i32; + } + if op as (i32) != BrotliEncoderOperation::BROTLI_OPERATION_EMIT_METADATA as (i32) { + return 0i32; + } + } + if op as (i32) == BrotliEncoderOperation::BROTLI_OPERATION_EMIT_METADATA as (i32) { + UpdateSizeHint(s, 0usize); + return ProcessMetadata(s, available_in, next_in_array, next_in_offset, available_out, next_out_array, next_out_offset, total_out, metablock_callback); + } + if (*s).stream_state_ as (i32) == + BrotliEncoderStreamState::BROTLI_STREAM_METADATA_HEAD as (i32) || + (*s).stream_state_ as (i32) == BrotliEncoderStreamState::BROTLI_STREAM_METADATA_BODY as (i32) { + return 0i32; + } + if (*s).stream_state_ as (i32) != + BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING as (i32) && (*available_in != 0usize) { + return 0i32; + } + if ((*s).params.quality == 0i32 || (*s).params.quality == 1i32) && !s.params.catable { // this part of the code does not support concatability + return BrotliEncoderCompressStreamFast(s, + op, + available_in, + next_in_array, + next_in_offset, + available_out, + next_out_array, + next_out_offset, + total_out); + } + while 1i32 != 0 { + let remaining_block_size: usize = RemainingInputBlockSize(s); + if remaining_block_size != 0usize && (*available_in != 0usize) { + let copy_input_size: usize = brotli_min_size_t(remaining_block_size, *available_in); + CopyInputToRingBuffer(s, copy_input_size, &next_in_array[*next_in_offset..]); + *next_in_offset += copy_input_size as (usize); + *available_in = (*available_in).wrapping_sub(copy_input_size); + { + { + continue; + } + } + } + if InjectFlushOrPushOutput(s, available_out, next_out_array, next_out_offset, total_out) != 0 { + { + continue; + } + } + if (*s).available_out_ == 0usize && + ((*s).stream_state_ as (i32) == + BrotliEncoderStreamState::BROTLI_STREAM_PROCESSING as (i32)) { + if remaining_block_size == 0usize || + op as (i32) != BrotliEncoderOperation::BROTLI_OPERATION_PROCESS as (i32) { + let is_last: i32 = if !!(*available_in == 0usize && + (op as (i32) == + BrotliEncoderOperation::BROTLI_OPERATION_FINISH as (i32))) { + 1i32 + } else { + 0i32 + }; + let force_flush: i32 = + if !!(*available_in == 0usize && + (op as (i32) == BrotliEncoderOperation::BROTLI_OPERATION_FLUSH as (i32))) { + 1i32 + } else { + 0i32 + }; + let result: i32; + UpdateSizeHint(s, *available_in); + let mut avail_out = (*s).available_out_; + result = EncodeData(s, + is_last, + force_flush, + &mut avail_out, + metablock_callback); + (*s).available_out_ = avail_out; + //this function set next_out to &storage[0] + if result == 0 { + return 0i32; + } + if force_flush != 0 { + (*s).stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_FLUSH_REQUESTED; + } + if is_last != 0 { + (*s).stream_state_ = BrotliEncoderStreamState::BROTLI_STREAM_FINISHED; + } + { + { + continue; + } + } + } + } + { + { + break; + } + } + } + CheckFlushComplete(s); + 1i32 +} + +pub fn BrotliEncoderIsFinished(s: &BrotliEncoderStateStruct) -> i32 { + if !!((*s).stream_state_ as (i32) == BrotliEncoderStreamState::BROTLI_STREAM_FINISHED as (i32) && + (BrotliEncoderHasMoreOutput(s) == 0)) { + 1i32 + } else { + 0i32 + } +} + + +pub fn BrotliEncoderHasMoreOutput( + s: &BrotliEncoderStateStruct) -> i32 { + if !!((*s).available_out_ != 0usize) { + 1i32 + } else { + 0i32 + } +} + + +pub fn BrotliEncoderTakeOutput<'a, Alloc:BrotliAlloc>(s: &'a mut BrotliEncoderStateStruct, + size: &mut usize) + -> &'a [u8] { + let mut consumed_size: usize = (*s).available_out_; + let mut result: &[u8] = GetNextOut!(*s); + if *size != 0 { + consumed_size = brotli_min_size_t(*size, (*s).available_out_); + } + if consumed_size != 0 { + (*s).next_out_ = NextOutIncrement(&(*s).next_out_, consumed_size as i32); + (*s).available_out_ = (*s).available_out_.wrapping_sub(consumed_size); + (*s).total_out_ = (*s).total_out_.wrapping_add(consumed_size as u64); + CheckFlushCompleteInner(&mut (*s).stream_state_, + (*s).available_out_, + &mut (*s).next_out_); + *size = consumed_size; + } else { + *size = 0usize; + result = &[]; + } + result +} + + +pub fn BrotliEncoderVersion() -> u32 { + 0x1000f01u32 +} + + +pub fn BrotliEncoderInputBlockSize(s: &mut BrotliEncoderStateStruct) -> usize { + InputBlockSize(s) +} + + +pub fn BrotliEncoderCopyInputToRingBuffer(s: &mut BrotliEncoderStateStruct, + input_size: usize, + input_buffer: &[u8]) { + CopyInputToRingBuffer(s, input_size, input_buffer); +} + + +pub fn BrotliEncoderWriteData<'a, Alloc: BrotliAlloc, + MetablockCallback:FnMut(&mut interface::PredictionModeContextMap, + &mut [interface::StaticCommand], + interface::InputPair, &mut Alloc)>( + s: &'a mut BrotliEncoderStateStruct, + is_last: i32, + force_flush: i32, + out_size: &mut usize, + output: &'a mut &'a mut [u8], + metablock_callback: &mut MetablockCallback) + -> i32 { + let ret = EncodeData(s, is_last, force_flush, out_size, metablock_callback); + *output = (*s).storage_.slice_mut(); + ret +} diff --git a/rust/vendor/brotli/src/enc/entropy_encode.rs b/rust/vendor/brotli/src/enc/entropy_encode.rs new file mode 100644 index 0000000..a543dc4 --- /dev/null +++ b/rust/vendor/brotli/src/enc/entropy_encode.rs @@ -0,0 +1,692 @@ +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Entropy encoding (Huffman) utilities. */ +#![allow(dead_code)] +use super::util::brotli_max_uint32_t; + + +#[derive(Clone, Copy)] +pub struct HuffmanTree { + pub total_count_: u32, + pub index_left_: i16, + pub index_right_or_value_: i16, +} +impl Default for HuffmanTree { + fn default() -> HuffmanTree { + HuffmanTree { + total_count_: 0, + index_left_: 0, + index_right_or_value_: 0, + } + } +} + +pub fn NewHuffmanTree(count: u32, left: i16, right: i16) -> HuffmanTree { + return HuffmanTree { + total_count_: count, + index_left_: left, + index_right_or_value_: right, + }; +} +pub fn InitHuffmanTree(xself: &mut HuffmanTree, count: u32, left: i16, right: i16) { + *xself = NewHuffmanTree(count, left, right); +} + + +pub fn BrotliSetDepth(p0: i32, pool: &mut [HuffmanTree], depth: &mut [u8], max_depth: i32) -> bool { + let mut stack: [i32; 16] = [0; 16]; + let mut level: i32 = 0i32; + let mut p: i32 = p0; + 0i32; + stack[0usize] = -1i32; + loop { + if (pool[(p as (usize))]).index_left_ as (i32) >= 0i32 { + level = level + 1; + if level > max_depth { + return false; + } + stack[level as (usize)] = (pool[(p as (usize))]).index_right_or_value_ as (i32); + p = (pool[(p as (usize))]).index_left_ as (i32); + { + { + continue; + } + } + } else { + let pp = pool[(p as (usize))]; + depth[((pp).index_right_or_value_ as (usize))] = level as (u8); + } + while level >= 0i32 && (stack[level as (usize)] == -1i32) { + level = level - 1; + } + if level < 0i32 { + return true; + } + p = stack[level as (usize)]; + stack[level as (usize)] = -1i32; + } +} + + +pub trait HuffmanComparator { + fn Cmp(self: &Self, a: &HuffmanTree, b: &HuffmanTree) -> bool; +} +pub struct SortHuffmanTree {} +impl HuffmanComparator for SortHuffmanTree { + fn Cmp(self: &Self, v0: &HuffmanTree, v1: &HuffmanTree) -> bool { + if (*v0).total_count_ != (*v1).total_count_ { + if !!((*v0).total_count_ < (*v1).total_count_) { + true + } else { + false + } + } else if !!((*v0).index_right_or_value_ as (i32) > (*v1).index_right_or_value_ as (i32)) { + true + } else { + false + } + } +} +pub fn SortHuffmanTreeItems(items: &mut [HuffmanTree], + n: usize, + comparator: Comparator) { + + static gaps: [usize; 6] = [132usize, 57usize, 23usize, 10usize, 4usize, 1usize]; + if n < 13usize { + let mut i: usize; + i = 1usize; + while i < n { + { + let mut tmp: HuffmanTree = items[(i as (usize))]; + let mut k: usize = i; + let mut j: usize = i.wrapping_sub(1usize); + while comparator.Cmp(&mut tmp, &mut items[(j as (usize))]) { + items[(k as (usize))] = items[(j as (usize))]; + k = j; + if { + let _old = j; + j = j.wrapping_sub(1 as (usize)); + _old + } == 0 { + { + break; + } + } + } + items[(k as (usize))] = tmp; + } + i = i.wrapping_add(1 as (usize)); + } + } else { + let mut g: i32 = if n < 57usize { 2i32 } else { 0i32 }; + while g < 6i32 { + { + let gap: usize = gaps[g as (usize)]; + let mut i: usize; + i = gap; + while i < n { + { + let mut j: usize = i; + let mut tmp: HuffmanTree = items[(i as (usize))]; + while j >= gap && + (comparator.Cmp(&mut tmp, &mut items[(j.wrapping_sub(gap) as (usize))])) { + { + items[(j as (usize))] = items[(j.wrapping_sub(gap) as (usize))]; + } + j = j.wrapping_sub(gap); + } + items[(j as (usize))] = tmp; + } + i = i.wrapping_add(1 as (usize)); + } + } + g = g + 1; + } + } +} + + + +/* This function will create a Huffman tree. + + The catch here is that the tree cannot be arbitrarily deep. + Brotli specifies a maximum depth of 15 bits for "code trees" + and 7 bits for "code length code trees." + + count_limit is the value that is to be faked as the minimum value + and this minimum value is raised until the tree matches the + maximum length requirement. + + This algorithm is not of excellent performance for very long data blocks, + especially when population counts are longer than 2**tree_limit, but + we are not planning to use this with extremely long blocks. + + See https://en.wikipedia.org/wiki/Huffman_coding */ +pub fn BrotliCreateHuffmanTree(data: &[u32], + length: usize, + tree_limit: i32, + tree: &mut [HuffmanTree], + depth: &mut [u8]) { + let mut count_limit: u32; + let mut sentinel: HuffmanTree = HuffmanTree { + total_count_: 0, + index_left_: 0, + index_right_or_value_: 0, + }; + InitHuffmanTree(&mut sentinel, !(0u32), -1i32 as (i16), -1i32 as (i16)); + count_limit = 1u32; + 'break1: loop { + { + let mut n: usize = 0usize; + let mut i: usize; + let mut j: usize; + let mut k: usize; + i = length; + while i != 0usize { + i = i.wrapping_sub(1 as (usize)); + if data[(i as (usize))] != 0 { + let count: u32 = brotli_max_uint32_t(data[(i as (usize))], count_limit); + InitHuffmanTree(&mut tree[({ + let _old = n; + n = n.wrapping_add(1 as (usize)); + _old + } as (usize))], + count, + -1i32 as (i16), + i as (i16)); + } + } + if n == 1usize { + depth[((tree[(0usize)]).index_right_or_value_ as (usize))] = 1i32 as (u8); + { + { + break 'break1; + } + } + } + SortHuffmanTreeItems(tree, n, SortHuffmanTree {}); + tree[(n as (usize))] = sentinel; + tree[(n.wrapping_add(1usize) as (usize))] = sentinel; + i = 0usize; + j = n.wrapping_add(1usize); + k = n.wrapping_sub(1usize); + while k != 0usize { + { + let left: usize; + let right: usize; + if (tree[(i as (usize))]).total_count_ <= (tree[(j as (usize))]).total_count_ { + left = i; + i = i.wrapping_add(1 as (usize)); + } else { + left = j; + j = j.wrapping_add(1 as (usize)); + } + if (tree[(i as (usize))]).total_count_ <= (tree[(j as (usize))]).total_count_ { + right = i; + i = i.wrapping_add(1 as (usize)); + } else { + right = j; + j = j.wrapping_add(1 as (usize)); + } + { + let j_end: usize = (2usize).wrapping_mul(n).wrapping_sub(k); + (tree[(j_end as (usize))]).total_count_ = + (tree[(left as (usize))]) + .total_count_ + .wrapping_add((tree[(right as (usize))]).total_count_); + (tree[(j_end as (usize))]).index_left_ = left as (i16); + (tree[(j_end as (usize))]).index_right_or_value_ = right as (i16); + tree[(j_end.wrapping_add(1usize) as (usize))] = sentinel; + } + } + k = k.wrapping_sub(1 as (usize)); + } + if BrotliSetDepth((2usize).wrapping_mul(n).wrapping_sub(1usize) as (i32), + tree, + depth, + tree_limit) { + { + break 'break1; + } + } + } + count_limit = count_limit.wrapping_mul(2u32); + } +} +pub fn BrotliOptimizeHuffmanCountsForRle(mut length: usize, + counts: &mut [u32], + good_for_rle: &mut [u8]) { + let mut nonzero_count: usize = 0usize; + let mut stride: usize; + let mut limit: usize; + let mut sum: usize; + let streak_limit: usize = 1240usize; + let mut i: usize; + i = 0usize; + while i < length { + { + if counts[(i as (usize))] != 0 { + nonzero_count = nonzero_count.wrapping_add(1 as (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } + if nonzero_count < 16usize { + return; + } + while length != 0usize && (counts[(length.wrapping_sub(1usize) as (usize))] == 0u32) { + length = length.wrapping_sub(1 as (usize)); + } + if length == 0usize { + return; + } + { + let mut nonzeros: usize = 0usize; + let mut smallest_nonzero: u32 = (1i32 << 30i32) as (u32); + i = 0usize; + while i < length { + { + if counts[(i as (usize))] != 0u32 { + nonzeros = nonzeros.wrapping_add(1 as (usize)); + if smallest_nonzero > counts[(i as (usize))] { + smallest_nonzero = counts[(i as (usize))]; + } + } + } + i = i.wrapping_add(1 as (usize)); + } + if nonzeros < 5usize { + return; + } + if smallest_nonzero < 4u32 { + let zeros: usize = length.wrapping_sub(nonzeros); + if zeros < 6usize { + i = 1usize; + while i < length.wrapping_sub(1usize) { + { + if counts[(i.wrapping_sub(1usize) as (usize))] != 0u32 && + (counts[(i as (usize))] == 0u32) && + (counts[(i.wrapping_add(1usize) as (usize))] != 0u32) { + counts[(i as (usize))] = 1u32; + } + } + i = i.wrapping_add(1 as (usize)); + } + } + } + if nonzeros < 28usize { + return; + } + } + for rle_item in good_for_rle.iter_mut() { + *rle_item = 0; + } + { + let mut symbol: u32 = counts[(0usize)]; + let mut step: usize = 0usize; + i = 0usize; + while i <= length { + { + if i == length || counts[(i as (usize))] != symbol { + if symbol == 0u32 && (step >= 5usize) || symbol != 0u32 && (step >= 7usize) { + let mut k: usize; + k = 0usize; + while k < step { + { + good_for_rle[(i.wrapping_sub(k).wrapping_sub(1usize) as (usize))] = 1i32 as (u8); + } + k = k.wrapping_add(1 as (usize)); + } + } + step = 1usize; + if i != length { + symbol = counts[(i as (usize))]; + } + } else { + step = step.wrapping_add(1 as (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } + } + stride = 0usize; + limit = (256u32) + .wrapping_mul((counts[(0usize)]).wrapping_add(counts[(1usize)]).wrapping_add(counts + [(2usize)])) + .wrapping_div(3u32) + .wrapping_add(420u32) as (usize); + sum = 0usize; + i = 0usize; + while i <= length { + { + if i == length || good_for_rle[(i as (usize))] != 0 || + i != 0usize && (good_for_rle[(i.wrapping_sub(1usize) as (usize))] != 0) || + ((256u32).wrapping_mul(counts[(i as (usize))]) as (usize)) + .wrapping_sub(limit) + .wrapping_add(streak_limit) >= (2usize).wrapping_mul(streak_limit) { + if stride >= 4usize || stride >= 3usize && (sum == 0usize) { + let mut k: usize; + let mut count: usize = sum.wrapping_add(stride.wrapping_div(2usize)).wrapping_div(stride); + if count == 0usize { + count = 1usize; + } + if sum == 0usize { + count = 0usize; + } + k = 0usize; + while k < stride { + { + counts[(i.wrapping_sub(k).wrapping_sub(1usize) as (usize))] = count as (u32); + } + k = k.wrapping_add(1 as (usize)); + } + } + stride = 0usize; + sum = 0usize; + if i < length.wrapping_sub(2usize) { + limit = (256u32) + .wrapping_mul((counts[(i as (usize))]) + .wrapping_add(counts[(i.wrapping_add(1usize) as (usize))]) + .wrapping_add(counts[(i.wrapping_add(2usize) as (usize))])) + .wrapping_div(3u32) + .wrapping_add(420u32) as (usize); + } else if i < length { + limit = (256u32).wrapping_mul(counts[(i as (usize))]) as (usize); + } else { + limit = 0usize; + } + } + stride = stride.wrapping_add(1 as (usize)); + if i != length { + sum = sum.wrapping_add(counts[(i as (usize))] as (usize)); + if stride >= 4usize { + limit = (256usize) + .wrapping_mul(sum) + .wrapping_add(stride.wrapping_div(2usize)) + .wrapping_div(stride); + } + if stride == 4usize { + limit = limit.wrapping_add(120usize); + } + } + } + i = i.wrapping_add(1 as (usize)); + } +} + + +pub fn DecideOverRleUse(depth: &[u8], + length: usize, + use_rle_for_non_zero: &mut i32, + use_rle_for_zero: &mut i32) { + let mut total_reps_zero: usize = 0usize; + let mut total_reps_non_zero: usize = 0usize; + let mut count_reps_zero: usize = 1usize; + let mut count_reps_non_zero: usize = 1usize; + let mut i: usize; + i = 0usize; + while i < length { + let value: u8 = depth[(i as (usize))]; + let mut reps: usize = 1usize; + let mut k: usize; + k = i.wrapping_add(1usize); + while k < length && (depth[(k as (usize))] as (i32) == value as (i32)) { + { + reps = reps.wrapping_add(1 as (usize)); + } + k = k.wrapping_add(1 as (usize)); + } + if reps >= 3usize && (value as (i32) == 0i32) { + total_reps_zero = total_reps_zero.wrapping_add(reps); + count_reps_zero = count_reps_zero.wrapping_add(1 as (usize)); + } + if reps >= 4usize && (value as (i32) != 0i32) { + total_reps_non_zero = total_reps_non_zero.wrapping_add(reps); + count_reps_non_zero = count_reps_non_zero.wrapping_add(1 as (usize)); + } + i = i.wrapping_add(reps); + } + *use_rle_for_non_zero = if !!(total_reps_non_zero > count_reps_non_zero.wrapping_mul(2usize)) { + 1i32 + } else { + 0i32 + }; + *use_rle_for_zero = if !!(total_reps_zero > count_reps_zero.wrapping_mul(2usize)) { + 1i32 + } else { + 0i32 + }; +} + + + +fn Reverse(v: &mut [u8], mut start: usize, mut end: usize) { + end = end.wrapping_sub(1 as (usize)); + while start < end { + let tmp: u8 = v[(start as (usize))]; + v[(start as (usize))] = v[(end as (usize))]; + v[(end as (usize))] = tmp; + start = start.wrapping_add(1 as (usize)); + end = end.wrapping_sub(1 as (usize)); + } +} + + +fn BrotliWriteHuffmanTreeRepetitions(previous_value: u8, + value: u8, + mut repetitions: usize, + tree_size: &mut usize, + tree: &mut [u8], + extra_bits_data: &mut [u8]) { + 0i32; + if previous_value as (i32) != value as (i32) { + tree[(*tree_size as (usize))] = value; + extra_bits_data[(*tree_size as (usize))] = 0i32 as (u8); + *tree_size = (*tree_size).wrapping_add(1 as (usize)); + repetitions = repetitions.wrapping_sub(1 as (usize)); + } + if repetitions == 7usize { + tree[(*tree_size as (usize))] = value; + extra_bits_data[(*tree_size as (usize))] = 0i32 as (u8); + *tree_size = (*tree_size).wrapping_add(1 as (usize)); + repetitions = repetitions.wrapping_sub(1 as (usize)); + } + if repetitions < 3usize { + let mut i: usize; + i = 0usize; + while i < repetitions { + { + tree[(*tree_size as (usize))] = value; + extra_bits_data[(*tree_size as (usize))] = 0i32 as (u8); + *tree_size = (*tree_size).wrapping_add(1 as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } + } else { + let start: usize = *tree_size; + repetitions = repetitions.wrapping_sub(3usize); + while 1i32 != 0 { + tree[(*tree_size as (usize))] = 16i32 as (u8); + extra_bits_data[(*tree_size as (usize))] = (repetitions & 0x3usize) as (u8); + *tree_size = (*tree_size).wrapping_add(1 as (usize)); + repetitions = repetitions >> 2i32; + if repetitions == 0usize { + { + break; + } + } + repetitions = repetitions.wrapping_sub(1 as (usize)); + } + Reverse(tree, start, *tree_size); + Reverse(extra_bits_data, start, *tree_size); + } +} + + +fn BrotliWriteHuffmanTreeRepetitionsZeros(mut repetitions: usize, + tree_size: &mut usize, + tree: &mut [u8], + extra_bits_data: &mut [u8]) { + if repetitions == 11usize { + tree[(*tree_size as (usize))] = 0i32 as (u8); + extra_bits_data[(*tree_size as (usize))] = 0i32 as (u8); + *tree_size = (*tree_size).wrapping_add(1 as (usize)); + repetitions = repetitions.wrapping_sub(1 as (usize)); + } + if repetitions < 3usize { + let mut i: usize; + i = 0usize; + while i < repetitions { + { + tree[(*tree_size as (usize))] = 0i32 as (u8); + extra_bits_data[(*tree_size as (usize))] = 0i32 as (u8); + *tree_size = (*tree_size).wrapping_add(1 as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } + } else { + let start: usize = *tree_size; + repetitions = repetitions.wrapping_sub(3usize); + while 1i32 != 0 { + tree[(*tree_size as (usize))] = 17i32 as (u8); + extra_bits_data[(*tree_size as (usize))] = (repetitions & 0x7usize) as (u8); + *tree_size = (*tree_size).wrapping_add(1 as (usize)); + repetitions = repetitions >> 3i32; + if repetitions == 0usize { + { + break; + } + } + repetitions = repetitions.wrapping_sub(1 as (usize)); + } + Reverse(tree, start, *tree_size); + Reverse(extra_bits_data, start, *tree_size); + } +} + + +pub fn BrotliWriteHuffmanTree(depth: &[u8], + length: usize, + tree_size: &mut usize, + tree: &mut [u8], + extra_bits_data: &mut [u8]) { + let mut previous_value: u8 = 8i32 as (u8); + let mut i: usize; + let mut use_rle_for_non_zero: i32 = 0i32; + let mut use_rle_for_zero: i32 = 0i32; + let mut new_length: usize = length; + i = 0usize; + 'break27: while i < length { + { + if depth[(length.wrapping_sub(i).wrapping_sub(1usize) as (usize))] as (i32) == 0i32 { + new_length = new_length.wrapping_sub(1 as (usize)); + } else { + break 'break27; + } + } + i = i.wrapping_add(1 as (usize)); + } + if length > 50usize { + DecideOverRleUse(depth, + new_length, + &mut use_rle_for_non_zero, + &mut use_rle_for_zero); + } + i = 0usize; + while i < new_length { + let value: u8 = depth[(i as (usize))]; + let mut reps: usize = 1usize; + if value as (i32) != 0i32 && (use_rle_for_non_zero != 0) || + value as (i32) == 0i32 && (use_rle_for_zero != 0) { + let mut k: usize; + k = i.wrapping_add(1usize); + while k < new_length && (depth[(k as (usize))] as (i32) == value as (i32)) { + { + reps = reps.wrapping_add(1 as (usize)); + } + k = k.wrapping_add(1 as (usize)); + } + } + if value as (i32) == 0i32 { + BrotliWriteHuffmanTreeRepetitionsZeros(reps, tree_size, tree, extra_bits_data); + } else { + BrotliWriteHuffmanTreeRepetitions(previous_value, + value, + reps, + tree_size, + tree, + extra_bits_data); + previous_value = value; + } + i = i.wrapping_add(reps); + } +} + + + +fn BrotliReverseBits(num_bits: usize, mut bits: u16) -> u16 { + static kLut: [usize; 16] = [0x0usize, 0x8usize, 0x4usize, 0xcusize, 0x2usize, 0xausize, + 0x6usize, 0xeusize, 0x1usize, 0x9usize, 0x5usize, 0xdusize, + 0x3usize, 0xbusize, 0x7usize, 0xfusize]; + let mut retval: usize = kLut[(bits as (i32) & 0xfi32) as (usize)]; + let mut i: usize; + i = 4usize; + while i < num_bits { + { + retval = retval << 4i32; + bits = (bits as (i32) >> 4i32) as (u16); + retval = retval | kLut[(bits as (i32) & 0xfi32) as (usize)]; + } + i = i.wrapping_add(4usize); + } + retval = retval >> ((0usize).wrapping_sub(num_bits) & 0x3usize); + retval as (u16) +} +const MAX_HUFFMAN_BITS: usize = 16; +pub fn BrotliConvertBitDepthsToSymbols(depth: &[u8], len: usize, bits: &mut [u16]) { + /* In Brotli, all bit depths are [1..15] + 0 bit depth means that the symbol does not exist. */ + + let mut bl_count: [u16; MAX_HUFFMAN_BITS] = [0; MAX_HUFFMAN_BITS]; + let mut next_code: [u16; MAX_HUFFMAN_BITS] = [0; MAX_HUFFMAN_BITS]; + let mut i: usize; + let mut code: i32 = 0i32; + i = 0usize; + while i < len { + { + let _rhs = 1; + let _lhs = &mut bl_count[depth[(i as (usize))] as (usize)]; + *_lhs = (*_lhs as (i32) + _rhs) as (u16); + } + i = i.wrapping_add(1 as (usize)); + } + bl_count[0usize] = 0i32 as (u16); + next_code[0usize] = 0i32 as (u16); + i = 1usize; + while i < MAX_HUFFMAN_BITS { + { + code = code + bl_count[i.wrapping_sub(1usize)] as (i32) << 1i32; + next_code[i] = code as (u16); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < len { + { + if depth[(i as (usize))] != 0 { + bits[(i as (usize))] = BrotliReverseBits(depth[(i as (usize))] as (usize), { + let _rhs = 1; + let _lhs = &mut next_code[depth[(i as (usize))] as (usize)]; + let _old = *_lhs; + *_lhs = (*_lhs as (i32) + _rhs) as (u16); + _old + }); + } + } + i = i.wrapping_add(1 as (usize)); + } +} diff --git a/rust/vendor/brotli/src/enc/fast_log.rs b/rust/vendor/brotli/src/enc/fast_log.rs new file mode 100644 index 0000000..b1b2f7d --- /dev/null +++ b/rust/vendor/brotli/src/enc/fast_log.rs @@ -0,0 +1,257 @@ +#[allow(dead_code)] +static mut kLog2Table: [f32; 256] = [0.0000000000000000f32, + 0.0000000000000000f32, + 1.0000000000000000f32, + 1.5849625007211563f32, + 2.0000000000000000f32, + 2.3219280948873622f32, + 2.5849625007211561f32, + 2.8073549220576042f32, + 3.0000000000000000f32, + 3.1699250014423126f32, + 3.3219280948873626f32, + 3.4594316186372978f32, + 3.5849625007211565f32, + 3.7004397181410922f32, + 3.8073549220576037f32, + 3.9068905956085187f32, + 4.0000000000000000f32, + 4.0874628412503400f32, + 4.1699250014423122f32, + 4.2479275134435852f32, + 4.3219280948873626f32, + 4.3923174227787607f32, + 4.4594316186372973f32, + 4.5235619560570131f32, + 4.5849625007211570f32, + 4.6438561897747244f32, + 4.7004397181410926f32, + 4.7548875021634691f32, + 4.8073549220576037f32, + 4.8579809951275728f32, + 4.9068905956085187f32, + 4.9541963103868758f32, + 5.0000000000000000f32, + 5.0443941193584534f32, + 5.0874628412503400f32, + 5.1292830169449664f32, + 5.1699250014423122f32, + 5.2094533656289501f32, + 5.2479275134435852f32, + 5.2854022188622487f32, + 5.3219280948873626f32, + 5.3575520046180838f32, + 5.3923174227787607f32, + 5.4262647547020979f32, + 5.4594316186372973f32, + 5.4918530963296748f32, + 5.5235619560570131f32, + 5.5545888516776376f32, + 5.5849625007211570f32, + 5.6147098441152083f32, + 5.6438561897747244f32, + 5.6724253419714961f32, + 5.7004397181410926f32, + 5.7279204545631996f32, + 5.7548875021634691f32, + 5.7813597135246599f32, + 5.8073549220576046f32, + 5.8328900141647422f32, + 5.8579809951275719f32, + 5.8826430493618416f32, + 5.9068905956085187f32, + 5.9307373375628867f32, + 5.9541963103868758f32, + 5.9772799234999168f32, + 6.0000000000000000f32, + 6.0223678130284544f32, + 6.0443941193584534f32, + 6.0660891904577721f32, + 6.0874628412503400f32, + 6.1085244567781700f32, + 6.1292830169449672f32, + 6.1497471195046822f32, + 6.1699250014423122f32, + 6.1898245588800176f32, + 6.2094533656289510f32, + 6.2288186904958804f32, + 6.2479275134435861f32, + 6.2667865406949019f32, + 6.2854022188622487f32, + 6.3037807481771031f32, + 6.3219280948873617f32, + 6.3398500028846252f32, + 6.3575520046180847f32, + 6.3750394313469254f32, + 6.3923174227787598f32, + 6.4093909361377026f32, + 6.4262647547020979f32, + 6.4429434958487288f32, + 6.4594316186372982f32, + 6.4757334309663976f32, + 6.4918530963296748f32, + 6.5077946401986964f32, + 6.5235619560570131f32, + 6.5391588111080319f32, + 6.5545888516776376f32, + 6.5698556083309478f32, + 6.5849625007211561f32, + 6.5999128421871278f32, + 6.6147098441152092f32, + 6.6293566200796095f32, + 6.6438561897747253f32, + 6.6582114827517955f32, + 6.6724253419714952f32, + 6.6865005271832185f32, + 6.7004397181410917f32, + 6.7142455176661224f32, + 6.7279204545631988f32, + 6.7414669864011465f32, + 6.7548875021634691f32, + 6.7681843247769260f32, + 6.7813597135246599f32, + 6.7944158663501062f32, + 6.8073549220576037f32, + 6.8201789624151887f32, + 6.8328900141647422f32, + 6.8454900509443757f32, + 6.8579809951275719f32, + 6.8703647195834048f32, + 6.8826430493618416f32, + 6.8948177633079437f32, + 6.9068905956085187f32, + 6.9188632372745955f32, + 6.9307373375628867f32, + 6.9425145053392399f32, + 6.9541963103868758f32, + 6.9657842846620879f32, + 6.9772799234999168f32, + 6.9886846867721664f32, + 7.0000000000000000f32, + 7.0112272554232540f32, + 7.0223678130284544f32, + 7.0334230015374501f32, + 7.0443941193584534f32, + 7.0552824355011898f32, + 7.0660891904577721f32, + 7.0768155970508317f32, + 7.0874628412503400f32, + 7.0980320829605272f32, + 7.1085244567781700f32, + 7.1189410727235076f32, + 7.1292830169449664f32, + 7.1395513523987937f32, + 7.1497471195046822f32, + 7.1598713367783891f32, + 7.1699250014423130f32, + 7.1799090900149345f32, + 7.1898245588800176f32, + 7.1996723448363644f32, + 7.2094533656289492f32, + 7.2191685204621621f32, + 7.2288186904958804f32, + 7.2384047393250794f32, + 7.2479275134435861f32, + 7.2573878426926521f32, + 7.2667865406949019f32, + 7.2761244052742384f32, + 7.2854022188622487f32, + 7.2946207488916270f32, + 7.3037807481771031f32, + 7.3128829552843557f32, + 7.3219280948873617f32, + 7.3309168781146177f32, + 7.3398500028846243f32, + 7.3487281542310781f32, + 7.3575520046180847f32, + 7.3663222142458151f32, + 7.3750394313469254f32, + 7.3837042924740528f32, + 7.3923174227787607f32, + 7.4008794362821844f32, + 7.4093909361377026f32, + 7.4178525148858991f32, + 7.4262647547020979f32, + 7.4346282276367255f32, + 7.4429434958487288f32, + 7.4512111118323299f32, + 7.4594316186372973f32, + 7.4676055500829976f32, + 7.4757334309663976f32, + 7.4838157772642564f32, + 7.4918530963296748f32, + 7.4998458870832057f32, + 7.5077946401986964f32, + 7.5156998382840436f32, + 7.5235619560570131f32, + 7.5313814605163119f32, + 7.5391588111080319f32, + 7.5468944598876373f32, + 7.5545888516776376f32, + 7.5622424242210728f32, + 7.5698556083309478f32, + 7.5774288280357487f32, + 7.5849625007211561f32, + 7.5924570372680806f32, + 7.5999128421871278f32, + 7.6073303137496113f32, + 7.6147098441152075f32, + 7.6220518194563764f32, + 7.6293566200796095f32, + 7.6366246205436488f32, + 7.6438561897747244f32, + 7.6510516911789290f32, + 7.6582114827517955f32, + 7.6653359171851765f32, + 7.6724253419714952f32, + 7.6794800995054464f32, + 7.6865005271832185f32, + 7.6934869574993252f32, + 7.7004397181410926f32, + 7.7073591320808825f32, + 7.7142455176661224f32, + 7.7210991887071856f32, + 7.7279204545631996f32, + 7.7347096202258392f32, + 7.7414669864011465f32, + 7.7481928495894596f32, + 7.7548875021634691f32, + 7.7615512324444795f32, + 7.7681843247769260f32, + 7.7747870596011737f32, + 7.7813597135246608f32, + 7.7879025593914317f32, + 7.7944158663501062f32, + 7.8008998999203047f32, + 7.8073549220576037f32, + 7.8137811912170374f32, + 7.8201789624151887f32, + 7.8265484872909159f32, + 7.8328900141647422f32, + 7.8392037880969445f32, + 7.8454900509443757f32, + 7.8517490414160571f32, + 7.8579809951275719f32, + 7.8641861446542798f32, + 7.8703647195834048f32, + 7.8765169465650002f32, + 7.8826430493618425f32, + 7.8887432488982601f32, + 7.8948177633079446f32, + 7.9008668079807496f32, + 7.9068905956085187f32, + 7.9128893362299619f32, + 7.9188632372745955f32, + 7.9248125036057813f32, + 7.9307373375628867f32, + 7.9366379390025719f32, + 7.9425145053392399f32, + 7.9483672315846778f32, + 7.9541963103868758f32, + 7.9600019320680806f32, + 7.9657842846620870f32, + 7.9715435539507720f32, + 7.9772799234999168f32, + 7.9829935746943104f32, + 7.9886846867721664f32, + 7.9943534368588578f32]; diff --git a/rust/vendor/brotli/src/enc/find_stride.rs b/rust/vendor/brotli/src/enc/find_stride.rs new file mode 100644 index 0000000..4a3f2d2 --- /dev/null +++ b/rust/vendor/brotli/src/enc/find_stride.rs @@ -0,0 +1,668 @@ +use super::interface; +use super::super::alloc; +use super::super::alloc::{SliceWrapper, SliceWrapperMut}; +use core::mem; +use core::cmp; +use core::ops::{Index, IndexMut, Range}; +use super::input_pair::{InputReference, InputPair}; +use super::util::FastLog2; +// float32 doesn't have enough resolution for blocks of data more than 3.5 megs +pub type floatY = f64; +// the cost of storing a particular population of data including the approx +// cost of a huffman table to describe the frequencies of each symbol +pub fn HuffmanCost(population: &[u32]) -> floatY{ + assert_eq!(population.len(), 256 * 256); + let mut cost : floatY = 0.0 as floatY; + let mut sum : floatY = 0.0 as floatY; + let mut buckets : floatY = 0.0 as floatY; + for pop in population.iter() { + if *pop == 0 { + continue; + } + cost -= *pop as floatY * FastLog2(*pop as u64) as floatY; + sum += *pop as floatY; + buckets += 1.0 as floatY; + } + let cost = 16.0 as floatY * buckets + cost + sum * FastLog2(sum as u64) as floatY; + //println!("Observed {} nonzero buckets with a sum of {}, hc={}", buckets, sum, cost); + cost +} + +// this holds a population of data assuming 1 byte of prior for that data +// bucket_populations is therefore a 65536-long dynamically allocated buffer +pub struct EntropyBucketPopulation > { + pub bucket_populations: AllocU32::AllocatedMemory, + pub cached_bit_entropy: floatY, +} +impl> EntropyBucketPopulation { + pub fn new(m32: &mut AllocU32) -> Self { + let size = 256 * 256; + EntropyBucketPopulation:: { + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + } + } + pub fn free(&mut self, m32: &mut AllocU32) { + m32.free_cell(mem::replace(&mut self.bucket_populations, + AllocU32::AllocatedMemory::default())); + + } + fn clone_from(&mut self, other: &EntropyBucketPopulation) { + self.bucket_populations.slice_mut().clone_from_slice(other.bucket_populations.slice()); + } + fn add_assign(&mut self, other: &EntropyBucketPopulation) { + assert_eq!(self.bucket_populations.slice().len(), other.bucket_populations.slice().len()); + for (item, other_item) in self.bucket_populations.slice_mut().iter_mut().zip(other.bucket_populations.slice().iter()) { + *item += *other_item; + } + self.cached_bit_entropy = HuffmanCost(self.bucket_populations.slice()); + } + // clear the allocated memory and reset literal population to zero + fn bzero(&mut self) { + self.cached_bit_entropy = 0.0; + for bp in self.bucket_populations.slice_mut().iter_mut() { + *bp = 0; + } + } + // setup population to the sum of an array of populations where the stride of that row matches. Additionally allow another optional + fn initiate_from(&mut self, rows: [&[Self];2], rows_stride:[&[u8];2], stride: u8, do_clear: bool) { + self.cached_bit_entropy = 0.0; + let mut found_any = false; + for (sub_row, sub_stride) in rows.iter().zip(rows_stride.iter()) { + for (item, istride) in sub_row.iter().zip(sub_stride.iter()) { + if *istride != stride { + continue; // if we chain, then optional was already filtered by stride + } + if do_clear && !found_any { + self.bucket_populations.slice_mut().clone_from_slice(item.bucket_populations.slice()); + found_any = true; + } else{ + for (dst, src) in self.bucket_populations.slice_mut().iter_mut().zip(item.bucket_populations.slice().iter()) { + *dst += *src; + } + } + } + } + if do_clear && !found_any { + self.bzero(); + } else { + self.cached_bit_entropy = HuffmanCost(self.bucket_populations.slice()); + } + } + fn bit_cost_of_data_subset(&mut self, + data0:&[u8], + mut stride: u8, + mut prev_bytes: [u8;NUM_STRIDES], + scratch: &mut EntropyBucketPopulation) -> floatY{ + prev_bytes.reverse(); + stride = cmp::max(1, stride); // we return stride=1 to mean 1 away + scratch.bucket_populations.slice_mut().clone_from_slice(self.bucket_populations.slice()); + scratch.bucket_populations.slice_mut()[65535] += 1; // to demonstrate that we have + scratch.bucket_populations.slice_mut()[65535] -= 1; // to demonstrate that we have write capability + let mut stray_count = 0.0 as floatY; + assert_eq!((NUM_STRIDES - 1) & NUM_STRIDES, 0); // must be power of two + for (index,val) in data0.iter().enumerate() { + let prior_byte = prev_bytes[(index + (NUM_STRIDES - stride as usize)) & (NUM_STRIDES - 1)]; + let loc = &mut scratch.bucket_populations.slice_mut()[prior_byte as usize * 256 + *val as usize]; + if *loc == 0 { + stray_count += 1.0; + } else { + *loc -= 1; + } + prev_bytes[index & (NUM_STRIDES - 1)] = *val; + } + if self.cached_bit_entropy == 0.0 as floatY { + self.cached_bit_entropy = HuffmanCost(self.bucket_populations.slice()); + } + debug_assert_eq!(HuffmanCost(self.bucket_populations.slice()), + self.cached_bit_entropy); + + scratch.cached_bit_entropy = HuffmanCost(scratch.bucket_populations.slice()); + self.cached_bit_entropy - scratch.cached_bit_entropy + stray_count * 8.0 + } +} + +const NUM_STRIDES:usize = 8; +#[derive(Copy,Clone)] +pub struct BucketPopIndex { + pub val: u8, + pub six_bits: u8, + pub stride: u8, +} + +impl > Index for EntropyBucketPopulation { + type Output = u32; + fn index<'a>(&'a self, index: BucketPopIndex) -> &'a u32 { + &self.bucket_populations.slice()[index.val as usize + index.six_bits as usize * 256 + index.stride as usize * 256 * 64] + } +} +impl > IndexMut for EntropyBucketPopulation { + fn index_mut<'a>(&'a mut self, index: BucketPopIndex) -> &'a mut u32 { + &mut self.bucket_populations.slice_mut()[index.val as usize + index.six_bits as usize * 256 + index.stride as usize * 256 * 64] + } +} + +pub struct EntropyTally > { + pop:[EntropyBucketPopulation;NUM_STRIDES], +} + +const NUM_LEVELS: usize = 4; +const NUM_NODES: usize = (1<<(NUM_LEVELS)) - 1; +pub const NUM_LEAF_NODES: usize = (NUM_NODES + 1) >> 1; + +pub struct EntropyPyramid > { + pop: [EntropyBucketPopulation;NUM_NODES], + stride: [u8;NUM_NODES], +} + +impl> EntropyPyramid { + pub fn last_level_range(&self) -> Range { + (NUM_NODES - (1 << (NUM_LEVELS - 1)))..NUM_NODES + } + pub fn byte_index_to_pyramid_index(&self, byte_index: usize, metablock_size: usize) -> usize { + let range = self.last_level_range(); + cmp::min(range.start + (range.end - range.start) * byte_index / metablock_size, + range.end - 1) // since we tally after the end of the literal block, it could be after the pyramid + } + pub fn reset_scratch_to_deepest_level(&self, output: &mut EntropyTally) { + let mut has_modified = [false; NUM_STRIDES]; + //println!("Last level range {:?}", self.last_level_range()); + for index in self.last_level_range() { + if has_modified[self.stride[index] as usize] { + output.pop[self.stride[index] as usize].add_assign(&self.pop[index]); + } else { + output.pop[self.stride[index] as usize].clone_from(&self.pop[index]); + has_modified[self.stride[index] as usize] = true; + } + } + for stride in 0..NUM_STRIDES { + if !has_modified[stride] { + output.pop[stride].bzero(); + output.pop[stride].cached_bit_entropy = 0.0; + } else { + output.pop[stride].cached_bit_entropy = HuffmanCost(output.pop[stride].bucket_populations.slice()); + } + //println!("BASE PYRAMID {} = {}", stride,output.pop[stride].cached_bit_entropy); + } + } + pub fn stride_last_level_range(&self) -> [u8; NUM_LEAF_NODES] { + let mut ret = [0u8; NUM_LEAF_NODES]; + ret.clone_from_slice(self.stride.split_at(self.stride.len() - NUM_LEAF_NODES).1); + ret + } + pub fn free(&mut self, m32: &mut AllocU32) { + for item in self.pop.iter_mut() { + item.free(m32); + } + } + pub fn disabled_placeholder(_m32: &mut AllocU32) -> Self { + EntropyPyramid:: { + pop: [ + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:AllocU32::AllocatedMemory::default(), + }, + ], + stride:[0;NUM_NODES], + } + } + pub fn new(m32: &mut AllocU32) -> Self { + let size = 256 * 256; + EntropyPyramid:: { + pop: [ + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:m32.alloc_cell(size), + }, + ], + stride:[0;NUM_NODES], + } + } + pub fn bit_cost_of_literals(&mut self, + data0: &[u8], + start_index: u32, + metablock_len: usize, + stride:u8, + previous_bytes: [u8; NUM_STRIDES], + scratch: &mut EntropyTally) -> floatY { + assert!(stride as usize <= NUM_STRIDES); + let cost = self.pop[self.byte_index_to_pyramid_index(start_index as usize, metablock_len)].bit_cost_of_data_subset( + data0, + stride, + previous_bytes, + &mut scratch.pop[0]); + cost + } + fn populate_entry_stride1(&mut self, input:InputPair, index: u32) { + let mut prev_val = 0; + let pyr_item = &mut self.pop[index as usize]; + pyr_item.bzero(); + assert_eq!(pyr_item.bucket_populations.slice()[65535], 0); + for val in input.0.slice().iter().chain(input.1.slice().iter()) { + pyr_item.bucket_populations.slice_mut()[prev_val as usize * 256 + *val as usize] += 1; + prev_val = *val; + } + pyr_item.cached_bit_entropy = HuffmanCost(pyr_item.bucket_populations.slice()); + self.stride[index as usize] = 0; + } + fn populate_entry(&mut self, input:InputPair, scratch: &mut EntropyTally, index: u32, mirror_range: Option>, prev_range: Option>) { + let mut initial_entropies = [0.0 as floatY; NUM_STRIDES]; + let nothing: &[EntropyBucketPopulation] = &[]; + let nothing_u8: &[u8] = &[]; + { + let pop_ranges = [match mirror_range{ + None => nothing, + Some(ref ir) => &self.pop[ir.clone()], + }, + match prev_range { + None => nothing, + Some(ref pr) => &self.pop[pr.clone()], + }]; + let stride_ranges = [match mirror_range{ + None => nothing_u8, + Some(ref ir) => &self.stride[ir.clone()], + }, + match prev_range { + None => nothing_u8, + Some(ref pr) => &self.stride[pr.clone()], + }]; + for stride in 0..NUM_STRIDES { + scratch.pop[stride].initiate_from(pop_ranges, stride_ranges, + stride as u8, true); + initial_entropies[stride] = scratch.pop[stride].cached_bit_entropy; + } + } + scratch.observe_input_stream(input.0.slice(), input.1.slice()); + let mut best_entropy_index = 0; + let mut min_entropy_value = (scratch.pop[0].cached_bit_entropy - initial_entropies[0]); + //println!("{} OLD ENTROPY {:} NEW_ENTROPY {:}", best_entropy_index, scratch.pop[0].cached_bit_entropy, initial_entropies[0]); + for stride in 1..NUM_STRIDES { + let entropy_value = scratch.pop[stride].cached_bit_entropy - initial_entropies[stride]; + //println!("{} OLD ENTROPY {:} NEW_ENTROPY {:}", stride, scratch.pop[stride].cached_bit_entropy, initial_entropies[stride]); + if entropy_value < min_entropy_value { + best_entropy_index = stride; + min_entropy_value = entropy_value; + } + } + self.pop[index as usize].clone_from(&scratch.pop[best_entropy_index]); + self.stride[index as usize] = best_entropy_index as u8; + } + pub fn populate_stride1(&mut self, input0:&[u8], input1:&[u8]) { + let input = InputPair(InputReference{data:input0,orig_offset:0}, InputReference{data:input1,orig_offset:input0.len()}); + for i in 0..2 { + let first_range = if i == 0 { + input.split_at(input.len() >> 1).0 + } else { + input.split_at(input.len() >> 1).1 + }; + for j in 0..2 { + let second_range = if j == 0 { + first_range.split_at(input.len() >> 2).0 + } else { + first_range.split_at(input.len() >> 2).1 + }; + if NUM_LEVELS == 4 { + for k in 0..2 { + let third_range = if j == 0 { + second_range.split_at(input.len() >> 3).0 + } else { + second_range.split_at(input.len() >> 3).1 + }; + self.populate_entry_stride1(third_range, 7 + ((i << 2) + (j << 1) + k)); + } + } else { + assert_eq!(NUM_LEVELS, 3); // we hard coded the 3 levels for now... we can add more later or make this into some kind of recursion + self.populate_entry_stride1(second_range, 3 + ((i << 1) + j)); + } + } + } + } + pub fn populate(&mut self, input0:&[u8], input1:&[u8], scratch: &mut EntropyTally) { + let input = InputPair(InputReference{data:input0,orig_offset:0}, InputReference{data:input1,orig_offset:input0.len()}); + self.populate_entry(input, scratch, 0, None, None); // BASE + + // LEVEL 1 + self.populate_entry(input.split_at(input.len() >> 1).0, scratch, 1, Some(0..1), None); + self.populate_entry(input.split_at(input.len() >> 1).1, scratch, 2, None, Some(1..2)); // should we use the range from 0..1?? + + // LEVEL 2 + self.populate_entry(input.split_at(input.len() >> 2).0, scratch, 3, Some(1..3), None); + self.populate_entry(input.split_at(input.len() >> 1).0.split_at(input.len() >>2).1, scratch, 4, Some(2..3), Some(3..4)); + self.populate_entry(input.split_at(input.len() >> 1).1.split_at(input.len() >>2).0, scratch, 5, Some(3..5), None); + self.populate_entry(input.split_at(input.len() >> 1).1.split_at(input.len() >>2).1, scratch, 6, Some(3..6), None); + if NUM_LEVELS == 4 { + // level 4 + self.populate_entry(input.split_at(input.len() >> 1).0.split_at(input.len() >> 2).0.split_at(input.len() >> 3).0, scratch, 7, Some(4..7), None); + self.populate_entry(input.split_at(input.len() >> 1).0.split_at(input.len() >> 2).0.split_at(input.len() >>3).1, scratch, 8, Some(4..7), Some(7..8)); + self.populate_entry(input.split_at(input.len() >> 1).0.split_at(input.len() >> 2).1.split_at(input.len() >>3).0, scratch, 9, Some(5..7), Some(7..9)); + self.populate_entry(input.split_at(input.len() >> 1).0.split_at(input.len() >> 2).1.split_at(input.len() >>3).1, scratch, 0xa, Some(5..7), Some(7..0xa)); + + self.populate_entry(input.split_at(input.len() >> 1).1.split_at(input.len() >> 2).0.split_at(input.len() >> 3).0, scratch, 0xb, Some(6..7), Some(7..0xb)); + self.populate_entry(input.split_at(input.len() >> 1).1.split_at(input.len() >> 2).0.split_at(input.len() >>3).1, scratch, 0xc, Some(6..7), Some(7..0xc)); + self.populate_entry(input.split_at(input.len() >> 1).1 +.split_at(input.len() >> 2).1.split_at(input.len() >>3).0, scratch, 0xd, None, Some(7..0xd)); + self.populate_entry(input.split_at(input.len() >> 1).1.split_at(input.len() >> 2).1.split_at(input.len() >>3).1, scratch, 0xe, None, Some(7..0xe)); + + } else { + assert_eq!(NUM_LEVELS, 3); // we hard coded the 3 levels for now... we can add more later or make this into some kind of recursion + } + } +} + + +impl > EntropyTally { + pub fn new(m32: &mut AllocU32, max_stride_arg: Option) -> EntropyTally { + let size = 256 * 256; + let max_stride = max_stride_arg.unwrap_or(NUM_STRIDES as u8); + EntropyTally:: { + pop:[ + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:if 0 < max_stride { + m32.alloc_cell(size) + } else { + AllocU32::AllocatedMemory::default() + }, + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:if 1 < max_stride { + m32.alloc_cell(size) + } else { + AllocU32::AllocatedMemory::default() + }, + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:if 2 < max_stride { + m32.alloc_cell(size) + } else { + AllocU32::AllocatedMemory::default() + }, + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:if 3 < max_stride { + m32.alloc_cell(size) + } else { + AllocU32::AllocatedMemory::default() + }, + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:if 4 < max_stride { + m32.alloc_cell(size) + } else { + AllocU32::AllocatedMemory::default() + }, + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:if 5 < max_stride { + m32.alloc_cell(size) + } else { + AllocU32::AllocatedMemory::default() + }, + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:if 6 < max_stride { + m32.alloc_cell(size) + } else { + AllocU32::AllocatedMemory::default() + }, + }, + EntropyBucketPopulation::{ + cached_bit_entropy:0.0, + bucket_populations:if 7 < max_stride { + m32.alloc_cell(size) + } else { + AllocU32::AllocatedMemory::default() + }, + }, + ]} + } + pub fn disabled_placeholder(m32: &mut AllocU32) -> EntropyTally { + Self::new(m32, Some(0)) + } + fn observe_input_stream(&mut self, input0:&[u8], input1:&[u8]) { + let mut priors = [0u8;NUM_STRIDES]; + for val in input0.iter().chain(input1.iter()) { + for stride in 0..NUM_STRIDES { + self.pop[stride].bucket_populations.slice_mut()[priors[stride] as usize * 256 + (*val as usize)] += 1; + } + { + let mut tmp = [0u8;NUM_STRIDES - 1]; + tmp.clone_from_slice(&priors[..(NUM_STRIDES - 1)]); + priors[1..].clone_from_slice(&tmp[..]); + priors[0] = *val; + } + } + for stride in 0..NUM_STRIDES { + self.pop[stride].cached_bit_entropy = HuffmanCost(self.pop[stride].bucket_populations.slice()); + } + } + fn identify_best_population_and_update_cache(&mut self) -> u8 { + let mut old_bit_entropy : [floatY; NUM_STRIDES] = [0.0; NUM_STRIDES]; + for (obe, be) in old_bit_entropy.iter_mut().zip(self.pop.iter_mut()) { + *obe = be.cached_bit_entropy; + if *obe != 0.0 { + be.cached_bit_entropy = HuffmanCost(be.bucket_populations.slice()); + } + } + let mut best_stride = 0u8; + let mut best_entropy = self.pop[0].cached_bit_entropy - old_bit_entropy[0]; + //println!("Weighing {} as {}", best_stride, best_entropy); + for index in 1..NUM_STRIDES { + let cur = self.pop[index].cached_bit_entropy - old_bit_entropy[index]; + //println!("Weighing {} as {} = [{} - {}]", index, cur, self.pop[index].cached_bit_entropy, old_bit_entropy[index]); + if (best_entropy == 0.0 || cur < best_entropy) && old_bit_entropy[index] > 0.0 { + best_stride = index as u8; + best_entropy = cur; + } + } + return best_stride; + } + pub fn peek(&mut self) -> &mut EntropyBucketPopulation { + &mut self.pop[0] + } + pub fn get_previous_bytes(&self, input0:&[u8], input1:&[u8], bytes_processed: usize) -> [u8; NUM_STRIDES] { + let mut retval = [0u8; NUM_STRIDES]; + for index in 0..NUM_STRIDES { + let bp_offset = index + 1; + if bp_offset <= bytes_processed { + let offset = bytes_processed - bp_offset; + if offset >= input0.len() { + retval[index] = input1[offset - input0.len()]; + } else { + retval[index] = input0[offset]; + } + } + } + retval + } + pub fn pick_best_stride>(&mut self, + commands: &[interface::Command], + input0: &[u8], + input1: &[u8], + bytes_processed: &mut usize, + entropy_pyramid: &EntropyPyramid, + stride_detection_quality: u8) -> u8 { + if stride_detection_quality == 0 { + return 0; + } + //println!("ENTROPY PYRAMID {:?}", entropy_pyramid.stride); + if stride_detection_quality > 1 { + entropy_pyramid.reset_scratch_to_deepest_level(self); + } + let mut pyramid_byte_index: usize = 0; + for cmd in commands.iter() { + match *cmd { + interface::Command::Copy(ref copy) => { + *bytes_processed += copy.num_bytes as usize; + }, + interface::Command::Dict(ref dict) => { + *bytes_processed += dict.final_size as usize; + }, + interface::Command::Literal(ref lit) => { + if stride_detection_quality > 1 { + let mut priors = self.get_previous_bytes(input0, input1, *bytes_processed); + for (lindex, val) in lit.data.slice().iter().enumerate() { + if lindex == NUM_STRIDES { + let vpriors = self.get_previous_bytes(input0, input1, NUM_STRIDES+*bytes_processed); + assert_eq!(vpriors, priors); + } + for (index, prior) in priors.iter().enumerate() { + self.pop[index].bucket_populations.slice_mut()[256 * (*prior as usize) + *val as usize] += 1; + // increment the population value of this literal + // for the respective prior for the stride index + } + { //reset prior values for the next item + let mut tmp = [0u8;7]; + tmp.clone_from_slice(&priors[..7]); + priors[1..].clone_from_slice(&tmp[..]); + priors[0] = *val; + } + } + } + *bytes_processed += lit.data.slice().len(); + pyramid_byte_index = *bytes_processed; + }, + interface::Command::BlockSwitchCommand(_) | + interface::Command::BlockSwitchLiteral(_) | + interface::Command::BlockSwitchDistance(_) | + interface::Command::PredictionMode(_) => {}, + } + } + + let best_stride = if stride_detection_quality > 1 { + self.identify_best_population_and_update_cache() + 1 + } else { + entropy_pyramid.stride[ + entropy_pyramid.byte_index_to_pyramid_index(pyramid_byte_index, + input0.len() + input1.len())] + 1 + }; + //println!("ENTROPY PYRAMID {:?} selected {}", entropy_pyramid.stride, best_stride); + best_stride + } + pub fn free(&mut self, m32: &mut AllocU32) { + for item in self.pop.iter_mut() { + m32.free_cell(mem::replace(&mut item.bucket_populations, AllocU32::AllocatedMemory::default())) + } + } + pub fn is_free(&mut self) -> bool { + self.pop[0].bucket_populations.slice().len() == 0 + } +} diff --git a/rust/vendor/brotli/src/enc/fixed_queue.rs b/rust/vendor/brotli/src/enc/fixed_queue.rs new file mode 100644 index 0000000..0a37a1a --- /dev/null +++ b/rust/vendor/brotli/src/enc/fixed_queue.rs @@ -0,0 +1,72 @@ +use core; +pub const MAX_THREADS: usize = 16; + + +pub struct FixedQueue{ + data: [Option;MAX_THREADS], + size: usize, + start: usize, +} +impl Default for FixedQueue { + fn default() -> Self { + Self::new() + } +} +impl FixedQueue { + pub fn new() -> Self { + FixedQueue{ + data:[None,None,None,None,None,None,None,None, + None,None,None,None,None,None,None,None, + ], + size:0, + start:0, + } + } + pub fn can_push(&self) -> bool { + self.size < self.data.len() + } + pub fn size(&self) -> usize { + self.size + } + pub fn push(&mut self, item: T) -> Result<(), ()> { + if self.size == self.data.len() { + return Err(()); + } + let index = (self.start + self.size) % self.data.len(); + self.data[index] = Some(item); + self.size += 1; + Ok(()) + } + pub fn pop(&mut self) -> Option { + if self.size == 0 { + return None; + } + let index = self.start%self.data.len(); + let ret = core::mem::replace(&mut self.data[index], None); + self.start += 1; + self.size -= 1; + ret + } + pub fn how_much_free_space(&self) -> usize { + self.data.len() - self.size + } + pub fn remove) ->bool>(&mut self,f:F) -> Option { + if self.size == 0 { + return None; + } + for index in 0..self.size { + if f(&self.data[(self.start + index)%self.data.len()]) { + let start_index = self.start%self.data.len(); + let target_index = (self.start + index)%self.data.len(); + let ret = core::mem::replace(&mut self.data[target_index], None); + let replace = core::mem::replace(&mut self.data[start_index], None); + let is_none = core::mem::replace(&mut self.data[target_index], replace); + assert!(is_none.is_none()); + self.start += 1; + self.size -= 1; + return ret + } + } + None + } +} diff --git a/rust/vendor/brotli/src/enc/histogram.rs b/rust/vendor/brotli/src/enc/histogram.rs new file mode 100755 index 0000000..147751d --- /dev/null +++ b/rust/vendor/brotli/src/enc/histogram.rs @@ -0,0 +1,545 @@ +#![allow(dead_code)] + +use super::block_split::BlockSplit; +use super::command::{Command, CommandCopyLen, CommandDistanceContext}; +use super::constants::{kSigned3BitContextLookup, kUTF8ContextLookup}; +use super::super::alloc; +use super::super::alloc::{SliceWrapper, SliceWrapperMut}; +use super::vectorization::{Mem256i}; +use core; +use core::cmp::min; +static kBrotliMinWindowBits: i32 = 10i32; + +static kBrotliMaxWindowBits: i32 = 24i32; + +//#[derive(Clone)] clone is broken for arrays > 32 +pub struct HistogramLiteral { + pub data_: [u32; 256], + pub total_count_: usize, + pub bit_cost_: super::util::floatX, +} +impl Clone for HistogramLiteral { + #[inline(always)] + fn clone(&self) -> HistogramLiteral { + return HistogramLiteral { + data_: self.data_, + total_count_: self.total_count_, + bit_cost_: self.bit_cost_, + }; + } +} +impl Default for HistogramLiteral { + #[inline(always)] + fn default() -> HistogramLiteral { + return HistogramLiteral { + data_: [0; 256], + total_count_: 0, + bit_cost_: 3.402e+38 as super::util::floatX, + }; + } +} +//#[derive(Clone)] clone is broken for arrays > 32 +pub struct HistogramCommand { + pub data_: [u32; 704], + pub total_count_: usize, + pub bit_cost_: super::util::floatX, +} +impl Clone for HistogramCommand { + #[inline(always)] + fn clone(&self) -> HistogramCommand { + return HistogramCommand { + data_: self.data_, + total_count_: self.total_count_, + bit_cost_: self.bit_cost_, + }; + } +} +impl Default for HistogramCommand { + #[inline(always)] + fn default() -> HistogramCommand { + return HistogramCommand { + data_: [0; 704], + total_count_: 0, + bit_cost_: 3.402e+38 as super::util::floatX, + }; + } +} +//#[derive(Clone)] // #derive is broken for arrays > 32 + +#[cfg(not(feature="disallow_large_window_size"))] +const BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS: usize = 544; +#[cfg(feature="disallow_large_window_size")] +const BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS: usize = 520; + +pub struct HistogramDistance { + pub data_: [u32; BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS], + pub total_count_: usize, + pub bit_cost_: super::util::floatX, +} +impl Clone for HistogramDistance { + fn clone(&self) -> HistogramDistance { + return HistogramDistance { + data_: self.data_, + total_count_: self.total_count_, + bit_cost_: self.bit_cost_, + }; + } +} +impl Default for HistogramDistance { + fn default() -> HistogramDistance { + return HistogramDistance { + data_: [0; BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS], + total_count_: 0, + bit_cost_: 3.402e+38 as super::util::floatX, + }; + } +} + +pub trait CostAccessors { + type i32vec : Sized + SliceWrapper+SliceWrapperMut; + fn make_nnz_storage() -> Self::i32vec; + fn total_count(&self) -> usize; + fn bit_cost(&self) -> super::util::floatX; + fn set_bit_cost(&mut self, cost: super::util::floatX); + fn set_total_count(&mut self, count: usize); +} +impl SliceWrapper for HistogramLiteral { + #[inline(always)] + fn slice(&self) -> &[u32] { + return &self.data_[..]; + } +} +impl SliceWrapperMut for HistogramLiteral { + #[inline(always)] + fn slice_mut(&mut self) -> &mut [u32] { + return &mut self.data_[..]; + } +} +pub struct Array264i([Mem256i;33]); +impl SliceWrapperMut for Array264i { + #[inline(always)] + fn slice_mut(&mut self) -> &mut [Mem256i] { + return &mut self.0[..] + } +} + +impl SliceWrapper for Array264i { + #[inline(always)] + fn slice(&self) -> & [Mem256i] { + return &self.0[..] + } +} +impl Default for Array264i { + #[inline(always)] + fn default() -> Array264i { + return Array264i([Mem256i::default().clone();33]); + } +} +pub struct Array528i([Mem256i;66]); +impl SliceWrapperMut for Array528i { + #[inline(always)] + fn slice_mut(&mut self) -> &mut [Mem256i] { + return &mut self.0[..] + } +} +impl SliceWrapper for Array528i { + #[inline(always)] + fn slice(&self) -> & [Mem256i] { + return &self.0[..] + } +} +impl Default for Array528i { + #[inline(always)] + fn default() -> Array528i { + return Array528i([Mem256i::default();66]); + } +} + +pub struct Array712i([Mem256i;89]); +impl SliceWrapperMut for Array712i { + #[inline(always)] + fn slice_mut(&mut self) -> &mut [Mem256i] { + return &mut self.0[..] + } +} +impl SliceWrapper for Array712i { + #[inline(always)] + fn slice(&self) -> & [Mem256i] { + return &self.0[..] + } +} +impl Default for Array712i { + #[inline(always)] + fn default() -> Array712i { + return Array712i([Mem256i::default();89]); + } +} + + +pub struct EmptyIVec{} + +impl SliceWrapperMut for EmptyIVec { + #[inline(always)] + fn slice_mut(&mut self) -> &mut [Mem256i] { + return &mut [] + } +} +impl SliceWrapper for EmptyIVec { + #[inline(always)] + fn slice(&self) -> & [Mem256i] { + return & [] + } +} + +impl Default for EmptyIVec { + #[inline(always)] + fn default() -> EmptyIVec { + return EmptyIVec{}; + } +} + +#[cfg(feature="vector_scratch_space")] +pub type HistogramLiteralScratch = Array264i; + +#[cfg(not(feature="vector_scratch_space"))] +pub type HistogramLiteralScratch = EmptyIVec; + +impl CostAccessors for HistogramLiteral { + type i32vec = HistogramLiteralScratch; + fn make_nnz_storage() -> Self::i32vec { + return HistogramLiteralScratch::default(); + } + #[inline(always)] + fn total_count(&self) -> usize { + return self.total_count_; + } + #[inline(always)] + fn bit_cost(&self) -> super::util::floatX { + return self.bit_cost_; + } + #[inline(always)] + fn set_bit_cost(&mut self, data: super::util::floatX) { + self.bit_cost_ = data; + } + #[inline(always)] + fn set_total_count(&mut self, data: usize) { + self.total_count_ = data; + } +} + +impl SliceWrapper for HistogramCommand { + #[inline(always)] + fn slice(&self) -> &[u32] { + return &self.data_[..]; + } +} +impl SliceWrapperMut for HistogramCommand { + #[inline(always)] + fn slice_mut(&mut self) -> &mut [u32] { + return &mut self.data_[..]; + } +} + +#[cfg(feature="vector_scratch_space")] +pub type HistogramCommandScratch = Array712i; + +#[cfg(not(feature="vector_scratch_space"))] +pub type HistogramCommandScratch = EmptyIVec; + + +impl CostAccessors for HistogramCommand { + type i32vec = HistogramCommandScratch; + fn make_nnz_storage() -> Self::i32vec { + return HistogramCommandScratch::default(); + } + #[inline(always)] + fn total_count(&self) -> usize { + return self.total_count_; + } + #[inline(always)] + fn bit_cost(&self) -> super::util::floatX { + return self.bit_cost_; + } + #[inline(always)] + fn set_bit_cost(&mut self, data: super::util::floatX) { + self.bit_cost_ = data; + } + #[inline(always)] + fn set_total_count(&mut self, data: usize) { + self.total_count_ = data; + } +} + +impl SliceWrapper for HistogramDistance { + #[inline(always)] + fn slice(&self) -> &[u32] { + return &self.data_[..]; + } +} +impl SliceWrapperMut for HistogramDistance { + #[inline(always)] + fn slice_mut(&mut self) -> &mut [u32] { + return &mut self.data_[..]; + } +} + +#[cfg(feature="vector_scratch_space")] +pub type HistogramDistanceScratch = Array528i; + +#[cfg(not(feature="vector_scratch_space"))] +pub type HistogramDistanceScratch = EmptyIVec; + + +impl CostAccessors for HistogramDistance { + type i32vec = HistogramDistanceScratch; + fn make_nnz_storage() -> Self::i32vec { + return HistogramDistanceScratch::default(); + } + + #[inline(always)] + fn total_count(&self) -> usize { + return self.total_count_; + } + #[inline(always)] + fn bit_cost(&self) -> super::util::floatX { + return self.bit_cost_; + } + #[inline(always)] + fn set_bit_cost(&mut self, data: super::util::floatX) { + self.bit_cost_ = data; + } + #[inline(always)] + fn set_total_count(&mut self, data: usize) { + self.total_count_ = data; + } +} + + + +#[derive(Copy,Clone)] +pub enum ContextType { + CONTEXT_LSB6 = 0, + CONTEXT_MSB6 = 1, + CONTEXT_UTF8 = 2, + CONTEXT_SIGNED = 3, +} + +impl Default for ContextType { + #[inline(always)] + fn default() -> ContextType { + ContextType::CONTEXT_LSB6 + } +} + + +pub struct BlockSplitIterator<'a, + Alloc: alloc::Allocator + 'a + alloc::Allocator + 'a> +{ + pub split_: &'a BlockSplit, + pub idx_: usize, + pub type_: usize, + pub length_: usize, +} + + + +fn NewBlockSplitIterator<'a, Alloc: alloc::Allocator + alloc::Allocator> + (split: &'a BlockSplit) + -> BlockSplitIterator<'a, Alloc> { + return BlockSplitIterator::<'a> { + split_: split, + idx_: 0i32 as (usize), + type_: 0i32 as (usize), + length_: if (*split).lengths.slice().len() != 0 { + (*split).lengths.slice()[0] as usize + } else { + 0i32 as (usize) + }, + }; +} + + +fn InitBlockSplitIterator<'a, + Alloc:alloc::Allocator + alloc::Allocator>( + xself: &'a mut BlockSplitIterator<'a, Alloc>, +split: &'a BlockSplit){ + (*xself).split_ = split; + (*xself).idx_ = 0i32 as (usize); + (*xself).type_ = 0i32 as (usize); + (*xself).length_ = if (*split).lengths.slice().len() != 0 { + (*split).lengths.slice()[0] as u32 + } else { + 0i32 as (u32) + } as (usize); +} +fn BlockSplitIteratorNext<'a, + Alloc: alloc::Allocator + alloc::Allocator>(xself: &mut BlockSplitIterator){ + if (*xself).length_ == 0i32 as (usize) { + (*xself).idx_ = (*xself).idx_.wrapping_add(1 as (usize)); + (*xself).type_ = (*(*xself).split_).types.slice()[(*xself).idx_ as (usize)] as (usize); + (*xself).length_ = (*(*xself).split_).lengths.slice()[(*xself).idx_ as (usize)] as (usize); + } + (*xself).length_ = (*xself).length_.wrapping_sub(1 as (usize)); +} +pub fn HistogramAddItem + SliceWrapperMut + CostAccessors> + (xself: &mut HistogramType, + val: usize) { + { + let _rhs = 1; + let _lhs = &mut (*xself).slice_mut()[val]; + let val = (*_lhs).wrapping_add(_rhs as (u32)); + *_lhs = val; + } + let new_count = (*xself).total_count().wrapping_add(1 as (usize)); + (*xself).set_total_count(new_count); +} +pub fn HistogramAddVector + SliceWrapperMut + CostAccessors, + IntegerType: Sized + Clone> + (xself: &mut HistogramType, + p: &[IntegerType], + n: usize) + where u64: core::convert::From +{ + let new_tc = (*xself).total_count().wrapping_add(n); + (*xself).set_total_count(new_tc); + for p_item in p[..n].iter() { + let _rhs = 1; + let index: usize = u64::from(p_item.clone()) as usize; + let _lhs = &mut (*xself).slice_mut()[index]; + *_lhs = (*_lhs).wrapping_add(_rhs as (u32)); + } +} + +#[inline(always)] +pub fn HistogramClear+CostAccessors>(xself: &mut HistogramType){ + for data_elem in xself.slice_mut().iter_mut() { + *data_elem = 0; + } + (*xself).set_total_count(0); + (*xself).set_bit_cost(3.402e+38 as super::util::floatX); +} +pub fn ClearHistograms+CostAccessors>(array: &mut [HistogramType], length: usize){ + for item in array[..length].iter_mut() { + HistogramClear(item) + } +} + +#[inline(always)] +pub fn HistogramAddHistogram + SliceWrapper + CostAccessors>( + xself : &mut HistogramType, v : &HistogramType +){ + let old_total_count = (*xself).total_count(); + (*xself).set_total_count(old_total_count + (*v).total_count()); + let h0 = xself.slice_mut(); + let h1 = v.slice(); + let n = min(h0.len(), h1.len()); + for i in 0..n { + let h0val = &mut h0[i]; + let val = h0val.wrapping_add(h1[i]); + *h0val = val; + } +} +pub fn HistogramSelfAddHistogram + SliceWrapper + CostAccessors>( + xself : &mut [HistogramType], i0 : usize, i1 : usize +){ + let tc_new = xself[i1].total_count(); + let tc_old = xself[i0].total_count(); + xself[i0].set_total_count(tc_old.wrapping_add(tc_new)); + let h0 = xself[i0].slice().len(); + let h0a = xself[i0].slice().len(); + let h1 = xself[i1].slice().len(); + let n = min(h0, min(h0a, h1)); + for h_index in 0..n { + let val = xself[i0].slice()[h_index].wrapping_add(xself[i1].slice()[h_index]); + xself[i0].slice_mut()[h_index] = val; + } +} + +#[inline(always)] +pub fn Context(p1: u8, p2: u8, mode: ContextType) -> u8 { + match mode { + ContextType::CONTEXT_SIGNED => { + ((kSigned3BitContextLookup[p1 as (usize)] as (i32) << 3i32) + + kSigned3BitContextLookup[p2 as (usize)] as (i32)) as (u8) + } + ContextType::CONTEXT_UTF8 => { + (kUTF8ContextLookup[p1 as (usize)] as (i32) | + kUTF8ContextLookup[(p2 as (i32) + 256i32) as (usize)] as (i32)) as (u8) + } + ContextType::CONTEXT_MSB6 => (p1 as (i32) >> 2i32) as (u8), + ContextType::CONTEXT_LSB6 => (p1 as (i32) & 0x3fi32) as (u8),/* else { + 0i32 as (u8) + }*/ + } +} + +pub fn BrotliBuildHistogramsWithContext<'a, + Alloc: alloc::Allocator + alloc::Allocator> + (cmds: &[Command], + num_commands: usize, + literal_split: &BlockSplit, + insert_and_copy_split: &BlockSplit, + dist_split: &BlockSplit, + ringbuffer: &[u8], + start_pos: usize, + mask: usize, + mut prev_byte: u8, + mut prev_byte2: u8, + context_modes: &[ContextType], + literal_histograms: &mut [HistogramLiteral], + insert_and_copy_histograms: &mut [HistogramCommand], + copy_dist_histograms: &mut [HistogramDistance]) { + let mut pos: usize = start_pos; + let mut literal_it: BlockSplitIterator; + let mut insert_and_copy_it: BlockSplitIterator; + let mut dist_it: BlockSplitIterator; + let mut i: usize; + literal_it = NewBlockSplitIterator(literal_split); + insert_and_copy_it = NewBlockSplitIterator(insert_and_copy_split); + dist_it = NewBlockSplitIterator(dist_split); + i = 0usize; + while i < num_commands { + { + let cmd = &cmds[(i as (usize))]; + let mut j: usize; + BlockSplitIteratorNext(&mut insert_and_copy_it); + HistogramAddItem(&mut insert_and_copy_histograms[(insert_and_copy_it.type_ as (usize))], + (*cmd).cmd_prefix_ as (usize)); + j = (*cmd).insert_len_ as (usize); + while j != 0usize { + { + let context: usize; + BlockSplitIteratorNext(&mut literal_it); + context = if context_modes.len() != 0 { + (literal_it.type_ << 6i32).wrapping_add(Context(prev_byte, + prev_byte2, + context_modes[(literal_it.type_ as + (usize))]) as + (usize)) + } else { + literal_it.type_ + }; + HistogramAddItem(&mut literal_histograms[(context as (usize))], + ringbuffer[((pos & mask) as (usize))] as (usize)); + prev_byte2 = prev_byte; + prev_byte = ringbuffer[((pos & mask) as (usize))]; + pos = pos.wrapping_add(1 as (usize)); + } + j = j.wrapping_sub(1 as (usize)); + } + pos = pos.wrapping_add(CommandCopyLen(cmd) as (usize)); + if CommandCopyLen(cmd) != 0 { + prev_byte2 = ringbuffer[((pos.wrapping_sub(2usize) & mask) as (usize))]; + prev_byte = ringbuffer[((pos.wrapping_sub(1usize) & mask) as (usize))]; + if (*cmd).cmd_prefix_ as (i32) >= 128i32 { + let context: usize; + BlockSplitIteratorNext(&mut dist_it); + context = (dist_it.type_ << 2i32).wrapping_add(CommandDistanceContext(cmd) as (usize)); + HistogramAddItem(&mut copy_dist_histograms[(context as (usize))], + (*cmd).dist_prefix_ as (usize) & 0x3ff); + } + } + } + i = i.wrapping_add(1 as (usize)); + } +} diff --git a/rust/vendor/brotli/src/enc/input_pair.rs b/rust/vendor/brotli/src/enc/input_pair.rs new file mode 100644 index 0000000..766a9e6 --- /dev/null +++ b/rust/vendor/brotli/src/enc/input_pair.rs @@ -0,0 +1,133 @@ +use core; +use super::super::alloc::SliceWrapper; +use super::super::alloc::SliceWrapperMut; +use super::interface::Freezable; +#[derive(Copy,Clone,Default,Debug)] +pub struct InputReference<'a> { + pub data: &'a [u8], + pub orig_offset: usize, // offset into the original slice of data +} +impl<'a> SliceWrapper for InputReference<'a> { + fn slice(&self) -> & [u8] { + self.data + } +} + +impl<'a> Freezable for InputReference<'a> { + fn freeze(&self) -> super::interface::SliceOffset { + debug_assert!(self.data.len() <= 0xffffffff); + super::interface::SliceOffset(self.orig_offset, self.data.len() as u32) + } +} + +pub struct InputReferenceMut<'a> { + pub data: &'a mut [u8], + pub orig_offset: usize, // offset into the original slice of data +} + +impl<'a> SliceWrapper for InputReferenceMut<'a> { + fn slice(&self) -> & [u8] { + self.data + } +} +impl<'a> SliceWrapperMut for InputReferenceMut<'a> { + fn slice_mut(&mut self) -> &mut [u8] { + self.data + } +} +impl <'a> Default for InputReferenceMut<'a> { + fn default() -> Self { + InputReferenceMut { + data:&mut[], + orig_offset:0, + } + } +} +impl <'a> From> for InputReference<'a> { + fn from(val: InputReferenceMut<'a>) -> InputReference<'a> { + InputReference{ + data: val.data, + orig_offset: val.orig_offset, + } + } +} + +impl <'a> From<&'a InputReferenceMut<'a>> for InputReference<'a> { + fn from(val: &'a InputReferenceMut<'a>) -> InputReference<'a> { + InputReference{ + data: val.data, + orig_offset: val.orig_offset, + } + } +} + +#[derive(Clone, Debug,Copy)] +pub struct InputPair<'a>(pub InputReference<'a>, pub InputReference<'a>); + +impl<'a> core::cmp::PartialEq for InputPair<'a> { + fn eq<'b>(&self, other: &InputPair<'b>) -> bool { + if self.0.len() + self.1.len() != other.0.len() + other.1.len() { + return false; + } + for (a_iter, b_iter) in self.0.data.iter().chain(self.1.data.iter()).zip(other.0.data.iter().chain(other.1.data.iter())) { + if *a_iter != *b_iter { + return false; + } + } + return true; + } +} +impl<'a> core::ops::Index for InputPair<'a> { + type Output = u8; + fn index(&self, index:usize) -> &u8 { + if index >= self.0.len() { + &self.1.data[index - self.0.len()] + } else { + &self.0.data[index] + } + } +} +impl<'a> core::fmt::LowerHex for InputPair<'a> { + fn fmt(&self, fmtr: &mut core::fmt::Formatter) -> Result<(), core::fmt::Error> { + for item in self.0.data { + if let Err(e) = fmtr.write_fmt(format_args!("{:02x}", item)) { + return Err(e) + } + } + for item in self.1.data { + if let Err(e) = fmtr.write_fmt(format_args!("{:02x}", item)) { + return Err(e); + } + } + Ok(()) + } +} + +impl<'a> InputPair<'a> { + pub fn split_at(&self, loc : usize) -> (InputPair<'a>, InputPair<'a>) { + if loc >= self.0.len() { + let offset_from_self_1 = loc - self.0.len(); + let (first, second) = self.1.data.split_at(core::cmp::min(offset_from_self_1, + self.1.len())); + return (InputPair::<'a>(self.0, + InputReference::<'a>{data:first, + orig_offset:self.1.orig_offset}), + InputPair::<'a>(InputReference::<'a>::default(), + InputReference::<'a>{data:second, + orig_offset:offset_from_self_1 + self.1.orig_offset, + }), + ); + } + let (first, second) = self.0.data.split_at(core::cmp::min(loc, + self.0.len())); + (InputPair::<'a>(InputReference::<'a>{data:first, + orig_offset:self.0.orig_offset}, + InputReference::<'a>::default()), + InputPair::<'a>(InputReference::<'a>{data:second, + orig_offset:self.0.orig_offset + loc}, + self.1)) + } + pub fn len(&self) -> usize { + self.0.len() + self.1.len() + } +} diff --git a/rust/vendor/brotli/src/enc/interface.rs b/rust/vendor/brotli/src/enc/interface.rs new file mode 100644 index 0000000..3c7e666 --- /dev/null +++ b/rust/vendor/brotli/src/enc/interface.rs @@ -0,0 +1,791 @@ +#[allow(unused_imports)] // right now just used in feature flag +use core; +use alloc::{SliceWrapper, Allocator, SliceWrapperMut}; +pub use super::input_pair::{InputPair,InputReference, InputReferenceMut}; +use super::histogram; +#[derive(Debug,Copy,Clone,Default)] +pub struct BlockSwitch(pub u8); +// Commands that can instantiate as a no-op should implement this. +pub trait Nop { + fn nop() -> T; +} + +impl BlockSwitch { + #[inline(always)] + pub fn new(block_type: u8) -> Self { + BlockSwitch(block_type) + } + #[inline(always)] + pub fn block_type(&self) -> u8 { + self.0 + } +} + +#[derive(Debug,Copy,Clone,Default)] +pub struct LiteralBlockSwitch(pub BlockSwitch, pub u8); + +impl LiteralBlockSwitch { + pub fn new(block_type: u8, stride: u8) -> Self { + LiteralBlockSwitch(BlockSwitch::new(block_type), stride) + } + #[inline(always)] + pub fn block_type(&self) -> u8 { + self.0.block_type() + } + #[inline(always)] + pub fn stride(&self) -> u8 { + self.1 + } + #[inline(always)] + pub fn update_stride(&mut self, new_stride: u8) { + self.1 = new_stride; + } +} + +pub const LITERAL_PREDICTION_MODE_SIGN: u8 = 3; +pub const LITERAL_PREDICTION_MODE_UTF8: u8 = 2; +pub const LITERAL_PREDICTION_MODE_MSB6: u8 = 1; +pub const LITERAL_PREDICTION_MODE_LSB6: u8 = 0; + +#[derive(Default, Copy, Clone, Debug, PartialEq, Eq, Hash)] +pub struct LiteralPredictionModeNibble(pub u8); + +impl LiteralPredictionModeNibble { + #[inline(always)] + pub fn new(prediction_mode: u8) -> Result { + if prediction_mode < 16 { + return Ok(LiteralPredictionModeNibble(prediction_mode)); + } + return Err(()); + } + #[inline(always)] + pub fn prediction_mode(&self) -> u8 { + self.0 + } + #[inline(always)] + pub fn signed() -> Self { + LiteralPredictionModeNibble(LITERAL_PREDICTION_MODE_SIGN) + } + #[inline(always)] + pub fn utf8() -> Self { + LiteralPredictionModeNibble(LITERAL_PREDICTION_MODE_UTF8) + } + #[inline(always)] + pub fn msb6() -> Self { + LiteralPredictionModeNibble(LITERAL_PREDICTION_MODE_MSB6) + } + #[inline(always)] + pub fn lsb6() -> Self { + LiteralPredictionModeNibble(LITERAL_PREDICTION_MODE_LSB6) + } + #[inline(always)] + pub fn to_context_enum(&self) -> Result{ + match self.0 { + LITERAL_PREDICTION_MODE_LSB6 => Ok(histogram::ContextType::CONTEXT_LSB6), + LITERAL_PREDICTION_MODE_MSB6 => Ok(histogram::ContextType::CONTEXT_MSB6), + LITERAL_PREDICTION_MODE_UTF8 => Ok(histogram::ContextType::CONTEXT_UTF8), + LITERAL_PREDICTION_MODE_SIGN => Ok(histogram::ContextType::CONTEXT_SIGNED), + _ => Err(()), + } + } +} +pub const NUM_SPEED_VALUES: usize = 12; +pub const NUM_MIXING_VALUES: usize = 16 * 256 + 16 * 256; +pub const NUM_PREDMODE_SETUP_VALUES: usize = 4; +pub const RESERVED_OFFSET: usize = 3; +pub const ADV_CONTEXT_MAP_OFFSET: usize = 2; +pub const MIXING_MATH_OFFSET: usize = 1; +pub const PREDMODE_OFFSET: usize = 0; +pub const MIXING_OFFSET:usize = NUM_PREDMODE_SETUP_VALUES + PREDMODE_OFFSET; +pub const SPEED_OFFSET: usize = MIXING_OFFSET + NUM_MIXING_VALUES; +pub const DISTANCE_CONTEXT_MAP_OFFSET: usize = SPEED_OFFSET + NUM_SPEED_VALUES; +pub const MAX_PREDMODE_SPEED_AND_DISTANCE_CONTEXT_MAP_SIZE: usize = DISTANCE_CONTEXT_MAP_OFFSET + 256 * 4; +pub const MAX_LITERAL_CONTEXT_MAP_SIZE: usize = 256 * 64; +pub const MAX_ADV_LITERAL_CONTEXT_MAP_SIZE: usize = 256 * 64 * 2; +#[derive(Debug)] +pub struct PredictionModeContextMap> { + pub literal_context_map: SliceType, + pub predmode_speed_and_distance_context_map: SliceType, +} +impl+SliceWrapperMut> PredictionModeContextMap { + #[inline] + pub fn distance_context_map_mut(&mut self) -> &mut [u8] { + self.predmode_speed_and_distance_context_map.slice_mut().split_at_mut(DISTANCE_CONTEXT_MAP_OFFSET).1 + } + #[inline] + pub fn set_stride_context_speed(&mut self, speed_max: [(u16, u16);2]) { + let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); + for high in 0..2 { + cm_slice[Self::stride_context_speed_offset()+high] = Self::u16_to_f8(speed_max[high].0); + cm_slice[Self::stride_context_speed_max_offset()+high] = Self::u16_to_f8(speed_max[high].1); + } + } + #[inline] + pub fn set_context_map_speed(&mut self, speed_max: [(u16, u16);2]) { + let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); + for high in 0..2 { + cm_slice[Self::context_map_speed_offset()+high] = Self::u16_to_f8(speed_max[high].0); + cm_slice[Self::context_map_speed_max_offset()+high] = Self::u16_to_f8(speed_max[high].1); + } + } + pub fn set_mixing_math(&mut self, math_enum: u8) { + let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); + cm_slice[MIXING_MATH_OFFSET] = math_enum; + } + pub fn set_adv_context_map(&mut self, is_adv: u8) { + let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); + cm_slice[ADV_CONTEXT_MAP_OFFSET] = is_adv; + } + #[inline] + pub fn set_mixing_values(&mut self, mixing_mask: &[u8; NUM_MIXING_VALUES]) { + let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); + cm_slice[MIXING_OFFSET..(MIXING_OFFSET + NUM_MIXING_VALUES)].clone_from_slice(&mixing_mask[..]); + } + #[inline] + pub fn get_mixing_values_mut(&mut self) -> &mut [u8] { + let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); + &mut cm_slice[MIXING_OFFSET..(MIXING_OFFSET + NUM_MIXING_VALUES)] + } + #[inline] + pub fn set_combined_stride_context_speed(&mut self, speed_max: [(u16, u16);2]) { + let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); + for high in 0..2 { + cm_slice[Self::combined_stride_context_speed_offset()+high] = Self::u16_to_f8(speed_max[high].0); + cm_slice[Self::combined_stride_context_speed_max_offset()+high] = Self::u16_to_f8(speed_max[high].1); + } + } + pub fn set_literal_prediction_mode(&mut self, val: LiteralPredictionModeNibble) { + let cm_slice = self.predmode_speed_and_distance_context_map.slice_mut(); + cm_slice[PREDMODE_OFFSET] = val.0; + } +} +impl> PredictionModeContextMap { + #[inline] + pub fn from_mut>(other: PredictionModeContextMap) -> PredictionModeContextMap where SliceType: From{ + PredictionModeContextMap::{ + literal_context_map:SliceType::from(other.literal_context_map), + predmode_speed_and_distance_context_map: SliceType::from(other.predmode_speed_and_distance_context_map), + } + } + #[inline] + pub fn get_mixing_values(&self) -> &[u8] { + let cm_slice = self.predmode_speed_and_distance_context_map.slice(); + &cm_slice[MIXING_OFFSET..(MIXING_OFFSET + NUM_MIXING_VALUES)] + } + #[inline] + pub fn get_mixing_math(&self) ->u8 { + let cm_slice = self.predmode_speed_and_distance_context_map.slice(); + if cm_slice.len() <= MIXING_MATH_OFFSET { + return 1; + } + cm_slice[MIXING_MATH_OFFSET] + } + #[inline] + pub fn get_is_adv_context_map(&self) -> u8 { + let cm_slice = self.predmode_speed_and_distance_context_map.slice(); + if cm_slice.len() <= ADV_CONTEXT_MAP_OFFSET { + return 0; + } + cm_slice[ADV_CONTEXT_MAP_OFFSET] + } + #[inline] + pub fn has_context_speeds(&self) -> bool { + self.predmode_speed_and_distance_context_map.slice().len() >= DISTANCE_CONTEXT_MAP_OFFSET + } + #[inline] + pub fn size_of_combined_array(distance_context_map_size: usize) -> usize { + distance_context_map_size + DISTANCE_CONTEXT_MAP_OFFSET + } + #[inline] + pub fn context_speeds_standard_len(&self) -> usize { + NUM_SPEED_VALUES + } + #[inline] + pub fn context_speeds_f8(&self) -> &[u8] { + &self.predmode_speed_and_distance_context_map.slice()[SPEED_OFFSET..DISTANCE_CONTEXT_MAP_OFFSET] + } + #[inline] + pub fn distance_context_map(&self) -> &[u8] { + self.predmode_speed_and_distance_context_map.slice().split_at(DISTANCE_CONTEXT_MAP_OFFSET).1 + } + #[inline] + pub fn f8_to_u16(data: u8) -> u16 { + self::u8_to_speed(data) + } + #[inline] + pub fn u16_to_f8(data: u16) -> u8 { + self::speed_to_u8(data) + } + #[inline] + pub fn stride_context_speed_offset() -> usize { + SPEED_OFFSET + } + #[inline] + pub fn stride_context_speed_max_offset() -> usize { + SPEED_OFFSET + 2 + } + #[inline] + pub fn context_map_speed_offset() -> usize { + SPEED_OFFSET + 4 + } + #[inline] + pub fn context_map_speed_max_offset() -> usize { + SPEED_OFFSET + 6 + } + #[inline] + pub fn combined_stride_context_speed_offset() -> usize { + SPEED_OFFSET + 8 + } + #[inline] + pub fn combined_stride_context_speed_max_offset() -> usize { + SPEED_OFFSET + 10 + } + #[inline] + pub fn literal_prediction_mode(&self) -> LiteralPredictionModeNibble { + let cm_slice = self.predmode_speed_and_distance_context_map.slice(); + if PREDMODE_OFFSET < cm_slice.len() { + LiteralPredictionModeNibble(cm_slice[PREDMODE_OFFSET]) + } else { + LiteralPredictionModeNibble::default() + } + } + pub fn stride_context_speed(&self) -> [(u16, u16);2] { + let v = self.stride_context_speed_f8(); + [(self::u8_to_speed(v[0].0), self::u8_to_speed(v[0].1)), + (self::u8_to_speed(v[1].0), self::u8_to_speed(v[1].1))] + } + pub fn context_map_speed(&self) -> [(u16, u16);2] { + let v = self.context_map_speed_f8(); + [(self::u8_to_speed(v[0].0), self::u8_to_speed(v[0].1)), + (self::u8_to_speed(v[1].0), self::u8_to_speed(v[1].1))] + } + pub fn combined_stride_context_speed(&self) -> [(u16, u16);2] { + let v = self.combined_stride_context_speed_f8(); + [(self::u8_to_speed(v[0].0), self::u8_to_speed(v[0].1)), + (self::u8_to_speed(v[1].0), self::u8_to_speed(v[1].1))] + } + #[inline] + pub fn stride_context_speed_f8(&self) -> [(u8, u8);2] { + let cm_slice = self.predmode_speed_and_distance_context_map.slice(); + let low_speed = cm_slice[Self::stride_context_speed_offset()]; + let high_speed = cm_slice[Self::stride_context_speed_offset() + 1]; + let low_max = cm_slice[Self::stride_context_speed_max_offset()]; + let high_max = cm_slice[Self::stride_context_speed_max_offset() + 1]; + [(low_speed, low_max), (high_speed, high_max)] + } + #[inline] + pub fn combined_stride_context_speed_f8(&self) -> [(u8, u8);2] { + let cm_slice = self.predmode_speed_and_distance_context_map.slice(); + let low_speed = cm_slice[Self::combined_stride_context_speed_offset()]; + let high_speed = cm_slice[Self::combined_stride_context_speed_offset() + 1]; + let low_max = cm_slice[Self::combined_stride_context_speed_max_offset()]; + let high_max = cm_slice[Self::combined_stride_context_speed_max_offset() + 1]; + [(low_speed, low_max), (high_speed, high_max)] + } + #[inline] + pub fn context_map_speed_f8(&self) -> [(u8, u8);2] { + let cm_slice = self.predmode_speed_and_distance_context_map.slice(); + let low_speed = cm_slice[Self::context_map_speed_offset()]; + let high_speed = cm_slice[Self::context_map_speed_offset() + 1]; + let low_max = cm_slice[Self::context_map_speed_max_offset()]; + let high_max = cm_slice[Self::context_map_speed_max_offset() + 1]; + [(low_speed, low_max), (high_speed, high_max)] + } +} + +impl+Clone> Clone for PredictionModeContextMap { + #[inline(always)] + fn clone(&self) -> Self { + PredictionModeContextMap:: { + literal_context_map:self.literal_context_map.clone(), + predmode_speed_and_distance_context_map:self.predmode_speed_and_distance_context_map.clone(), + } + } +} +impl+Clone+Copy> Copy for PredictionModeContextMap { +} + + +#[derive(Debug,Clone,Copy)] +pub struct CopyCommand { + pub distance: u32, + pub num_bytes: u32, +} + +impl Nop for CopyCommand { + #[inline(always)] + fn nop() -> Self { + CopyCommand { + distance: 1, + num_bytes: 0 + } + } +} + +#[derive(Debug,Clone,Copy)] +pub struct DictCommand { + pub word_size: u8, + pub transform: u8, + pub final_size: u8, + pub empty: u8, + pub word_id: u32, +} + +impl Nop for DictCommand { + #[inline(always)] + fn nop() -> Self { + DictCommand { + word_size: 0, + transform: 0, + final_size: 0, + empty: 1, + word_id: 0 + } + } +} + +#[derive(Debug)] +#[cfg(not(feature="external-literal-probability"))] +pub struct FeatureFlagSliceType >(core::marker::PhantomData); + +#[cfg(not(feature="external-literal-probability"))] +impl> SliceWrapper for FeatureFlagSliceType { + fn slice(&self) -> &[u8] { + &[] + } +} + +#[cfg(not(feature="external-literal-probability"))] +impl+Default> Default for FeatureFlagSliceType { + fn default() -> Self { + FeatureFlagSliceType::(core::marker::PhantomData::::default()) + } +} + + + +#[derive(Debug)] +#[cfg(feature="external-literal-probability")] +pub struct FeatureFlagSliceType >(pub SliceType); + +#[cfg(feature="external-literal-probability")] +impl> SliceWrapper for FeatureFlagSliceType { + #[inline(always)] + fn slice(&self) -> &[u8] { + self.0.slice() + } +} + +#[cfg(feature="external-literal-probability")] +impl+Default> Default for FeatureFlagSliceType { + #[inline(always)] + fn default() -> Self { + FeatureFlagSliceType::(SliceType::default()) + } +} + + + +impl+Clone> Clone for FeatureFlagSliceType { + #[inline(always)] + fn clone(&self) -> Self { + FeatureFlagSliceType::(self.0.clone()) + } +} +impl+Clone+Copy> Copy for FeatureFlagSliceType { +} + + +#[derive(Debug)] +pub struct LiteralCommand> { + pub data: SliceType, + pub prob: FeatureFlagSliceType, + pub high_entropy: bool, // this block of bytes is high entropy with a few patterns never seen again; adapt slower +} +impl> SliceWrapper for LiteralCommand { + #[inline(always)] + fn slice(&self) -> &[u8] { + self.data.slice() + } +} +impl+SliceWrapperMut> SliceWrapperMut for LiteralCommand { + #[inline(always)] + fn slice_mut(&mut self) -> &mut [u8] { + self.data.slice_mut() + } +} + +impl+Default> Nop> for LiteralCommand { + #[inline(always)] + fn nop() -> Self { + LiteralCommand { + data: SliceType::default(), + prob: FeatureFlagSliceType::::default(), + high_entropy: false, + } + } +} +impl+Clone> Clone for LiteralCommand { + #[inline(always)] + fn clone(&self) -> LiteralCommand{ + LiteralCommand::{data:self.data.clone(), prob:self.prob.clone(),high_entropy: self.high_entropy.clone(),} + } +} +impl+Clone+Copy> Copy for LiteralCommand { +} + + +#[derive(Debug)] +pub enum Command > { + Copy(CopyCommand), + Dict(DictCommand), + Literal(LiteralCommand), + BlockSwitchCommand(BlockSwitch), + BlockSwitchLiteral(LiteralBlockSwitch), + BlockSwitchDistance(BlockSwitch), + PredictionMode(PredictionModeContextMap), +} +impl+Default> Command { + #[inline] + pub fn free_array(&mut self, apply_func: &mut F) where F: FnMut(SliceType) { + match self { + &mut Command::Literal(ref mut lit) => { + apply_func(core::mem::replace(&mut lit.data, SliceType::default())) + }, + &mut Command::PredictionMode(ref mut pm) => { + apply_func(core::mem::replace(&mut pm.literal_context_map, SliceType::default())); + apply_func(core::mem::replace(&mut pm.predmode_speed_and_distance_context_map, SliceType::default())); + }, + _ => {}, + } + } +} + + +impl> Default for Command { + #[inline(always)] + fn default() -> Self { + Command::::nop() + } +} + +impl> Nop> for Command { + #[inline(always)] + fn nop() -> Command { + Command::Copy(CopyCommand::nop()) + } +} + +impl+Clone> Clone for Command { + #[inline] + fn clone(&self) -> Command{ + match self { + &Command::Copy(ref copy) => Command::Copy(copy.clone()), + &Command::Dict(ref dict) => Command::Dict(dict.clone()), + &Command::Literal(ref literal) => Command::Literal(literal.clone()), + &Command::BlockSwitchCommand(ref switch) => Command::BlockSwitchCommand(switch.clone()), + &Command::BlockSwitchLiteral(ref switch) => Command::BlockSwitchLiteral(switch.clone()), + &Command::BlockSwitchDistance(ref switch) => Command::BlockSwitchDistance(switch.clone()), + &Command::PredictionMode(ref pm) => Command::PredictionMode(pm.clone()), + } + } +} + +impl+Clone+Copy> Copy for Command { +} + + + +#[inline(always)] +pub fn free_cmd_inline> (xself: &mut Command, m8: &mut SliceTypeAllocator) { + match *xself { + Command::Literal(ref mut lit) => { + m8.free_cell(core::mem::replace(&mut lit.data, SliceTypeAllocator::AllocatedMemory::default())) + }, + Command::PredictionMode(ref mut pm) => { + m8.free_cell(core::mem::replace(&mut pm.literal_context_map, SliceTypeAllocator::AllocatedMemory::default())); + m8.free_cell(core::mem::replace(&mut pm.predmode_speed_and_distance_context_map, SliceTypeAllocator::AllocatedMemory::default())); + }, + Command::Dict(_) | + Command::Copy(_) | + Command::BlockSwitchCommand(_) | + Command::BlockSwitchLiteral(_) | + Command::BlockSwitchDistance(_) => {}, + } +} + +#[inline(never)] +pub fn free_cmd> (xself: &mut Command, m8: &mut SliceTypeAllocator) { + free_cmd_inline(xself, m8) +} + +#[derive(Clone, Copy, Default, Debug)] +pub struct SliceOffset(pub usize, pub u32); +impl SliceWrapper for SliceOffset { + fn slice(&self) -> &[u8] { + // not perfect--shouldn't be calling this without thawing the wrapper + &[] + } +} + +pub trait Freezable { + fn freeze(&self) -> SliceOffset; +} + +pub trait Unfreezable { + fn thaw<'a>(&self, data: &'a [u8]) -> InputReference<'a>; + fn thaw_mut<'a>(&self, data: &'a mut [u8]) -> InputReferenceMut<'a>; + fn thaw_pair<'a>(&self, pair: &InputPair<'a>) -> Result, ()>; +} + +impl<'a> From> for SliceOffset { + fn from(f: InputReference<'a>) -> Self { + debug_assert!(f.data.len() <= 0xffffffff); + SliceOffset(f.orig_offset, f.data.len() as u32) + } +} +impl Unfreezable for SliceOffset { + fn thaw<'a>(&self, data: &'a [u8]) -> InputReference<'a> { + InputReference{ + data: data.split_at(self.0).1.split_at(self.1 as usize).0, + orig_offset: self.0, + } + } + fn thaw_mut<'a>(&self, data: &'a mut [u8]) -> InputReferenceMut<'a> { + InputReferenceMut{ + data: data.split_at_mut(self.0).1.split_at_mut(self.1 as usize).0, + orig_offset: self.0, + } + } + fn thaw_pair<'a>(&self, pair: &InputPair<'a>) -> Result, ()> { + if self.0 >= pair.1.orig_offset { + return Ok(InputReference{ + data: pair.1.data.split_at(self.0 - pair.1.orig_offset).1.split_at(self.1 as usize).0, + orig_offset: self.0, + }); + } + let offset = self.0 - pair.0.orig_offset; + if offset + self.1 as usize <= pair.0.data.len() { // overlap + Ok(InputReference{ + data: pair.0.data.split_at(offset).1.split_at(self.1 as usize).0, + orig_offset: self.0, + }) + } else { + Err(()) + } + } +} +impl SliceOffset { + pub fn offset(&self) -> usize { + self.0 + } + pub fn len(&self) -> usize { + self.1 as usize + } + pub fn len32(&self) -> u32 { + self.1 + } +} + + + +pub type StaticCommand = Command; + + +pub trait CommandProcessor<'a> { + fn push(&mut self, + val: Command >); + fn push_literals(&mut self, data:&InputPair<'a>) { + if data.0.len() != 0 { + self.push(Command::Literal(LiteralCommand{ + data: data.0, + prob:FeatureFlagSliceType::::default(), + high_entropy: false, + })); + } + if data.1.len() != 0 { + self.push(Command::Literal(LiteralCommand{ + data: data.1, + prob:FeatureFlagSliceType::::default(), + high_entropy: false, + })); + } + } + fn push_rand_literals(&mut self, data:&InputPair<'a>) { + if data.0.len() != 0 { + self.push(Command::Literal(LiteralCommand{ + data:data.0, + prob:FeatureFlagSliceType::::default(), + high_entropy: true, + })); + } + if data.1.len() != 0 { + self.push(Command::Literal(LiteralCommand{ + data:data.1, + prob:FeatureFlagSliceType::::default(), + high_entropy: true, + })); + } + } + fn push_block_switch_literal(&mut self, block_type: u8) { + self.push(Command::BlockSwitchLiteral(LiteralBlockSwitch::new(block_type, 0))) + } +} + + +pub fn thaw_pair<'a, SliceType: Unfreezable + SliceWrapper>(xself: &Command, data: &InputPair<'a>) -> Command> { + match *xself { + Command::Literal(ref lit) => { + Command::Literal(LiteralCommand{ + data:lit.data.thaw_pair(data).unwrap(), + prob:FeatureFlagSliceType::default(), + high_entropy: lit.high_entropy, + }) + }, + Command::PredictionMode(ref pm) => { + Command::PredictionMode(PredictionModeContextMap{ + literal_context_map:pm.literal_context_map.thaw_pair(data).unwrap(), + predmode_speed_and_distance_context_map:pm.predmode_speed_and_distance_context_map.thaw_pair(data).unwrap(), + }) + }, + Command::Dict(ref d) => { + Command::Dict(d.clone()) + }, + Command::Copy(ref c) => { + Command::Copy(c.clone()) + }, + Command::BlockSwitchCommand(ref c) => { + Command::BlockSwitchCommand(c.clone()) + }, + Command::BlockSwitchLiteral(ref c) => { + Command::BlockSwitchLiteral(c.clone()) + }, + Command::BlockSwitchDistance(ref c) => { + Command::BlockSwitchDistance(c.clone()) + }, + } +} + +pub fn thaw<'a, SliceType: Unfreezable + SliceWrapper>(xself: &Command, data: &'a[u8]) -> Command> { + match *xself { + Command::Literal(ref lit) => { + Command::Literal(LiteralCommand{ + data:lit.data.thaw(data), + prob:FeatureFlagSliceType::default(), + high_entropy: lit.high_entropy, + }) + }, + Command::PredictionMode(ref pm) => { + Command::PredictionMode(PredictionModeContextMap{ + literal_context_map:pm.literal_context_map.thaw(data), + predmode_speed_and_distance_context_map:pm.predmode_speed_and_distance_context_map.thaw(data), + }) + }, + Command::Dict(ref d) => { + Command::Dict(d.clone()) + }, + Command::Copy(ref c) => { + Command::Copy(c.clone()) + }, + Command::BlockSwitchCommand(ref c) => { + Command::BlockSwitchCommand(c.clone()) + }, + Command::BlockSwitchLiteral(ref c) => { + Command::BlockSwitchLiteral(c.clone()) + }, + Command::BlockSwitchDistance(ref c) => { + Command::BlockSwitchDistance(c.clone()) + }, + } +} + +impl +Freezable> Command { + pub fn freeze(&self) -> Command { + match *self { + Command::Literal(ref lit) => { + Command::Literal(LiteralCommand{ + data:lit.data.freeze(), + prob:FeatureFlagSliceType::default(), + high_entropy: lit.high_entropy, + }) + }, + Command::PredictionMode(ref pm) => { + Command::PredictionMode(PredictionModeContextMap{ + literal_context_map:pm.literal_context_map.freeze(), + predmode_speed_and_distance_context_map:pm.predmode_speed_and_distance_context_map.freeze(), + }) + }, + Command::Dict(ref d) => { + Command::Dict(d.clone()) + }, + Command::Copy(ref c) => { + Command::Copy(c.clone()) + }, + Command::BlockSwitchCommand(ref c) => { + Command::BlockSwitchCommand(c.clone()) + }, + Command::BlockSwitchLiteral(ref c) => { + Command::BlockSwitchLiteral(c.clone()) + }, + Command::BlockSwitchDistance(ref c) => { + Command::BlockSwitchDistance(c.clone()) + }, + } + } +} + + +#[inline(always)] +pub fn speed_to_u8(data: u16) -> u8 { + let length = 16 - data.leading_zeros() as u8; + let mantissa = if data != 0 { + let rem = data - (1 << (length - 1)); + (rem << 3) >> (length - 1) + } else { + 0 + }; + (length << 3) | mantissa as u8 +} + +#[inline(always)] +pub fn u8_to_speed(data: u8) -> u16 { + if data < 8 { + 0 + } else { + let log_val = (data >> 3) - 1; + let rem = (u16::from(data) & 0x7) << log_val; + (1u16 << log_val) | (rem >> 3) + } +} +#[cfg(test)] +mod test { + use super::speed_to_u8; + use super::u8_to_speed; + fn tst_u8_to_speed(data: u16) { + assert_eq!(u8_to_speed(speed_to_u8(data)), data); + } + #[test] + fn test_u8_to_speed() { + tst_u8_to_speed(0); + tst_u8_to_speed(1); + tst_u8_to_speed(2); + tst_u8_to_speed(3); + tst_u8_to_speed(4); + tst_u8_to_speed(5); + tst_u8_to_speed(6); + tst_u8_to_speed(7); + tst_u8_to_speed(8); + tst_u8_to_speed(10); + tst_u8_to_speed(12); + tst_u8_to_speed(16); + tst_u8_to_speed(24); + tst_u8_to_speed(32); + tst_u8_to_speed(48); + tst_u8_to_speed(64); + tst_u8_to_speed(96); + tst_u8_to_speed(768); + tst_u8_to_speed(1280); + tst_u8_to_speed(1536); + tst_u8_to_speed(1664); + } +} diff --git a/rust/vendor/brotli/src/enc/ir_interpret.rs b/rust/vendor/brotli/src/enc/ir_interpret.rs new file mode 100644 index 0000000..b7bdd12 --- /dev/null +++ b/rust/vendor/brotli/src/enc/ir_interpret.rs @@ -0,0 +1,103 @@ +use super::interface; +use super::super::alloc::SliceWrapper; +use super::histogram::ContextType; +use super::input_pair::InputReference; +use super::constants::{kSigned3BitContextLookup, kUTF8ContextLookup}; +use super::interface::LiteralPredictionModeNibble; +pub trait IRInterpreter { + fn inc_local_byte_offset(&mut self, inc:usize); + fn local_byte_offset(&self) -> usize; + fn update_block_type(&mut self, new_type: u8, new_stride: u8); + fn block_type(&self) -> u8; + fn literal_data_at_offset(&self, index: usize) -> u8; + fn literal_context_map(&self) -> &[u8]; + fn prediction_mode(&self) -> ::interface::LiteralPredictionModeNibble; + fn update_cost(&mut self, stride_prior: [u8;8], stride_byte_offset: usize, selected_bits:u8, cm_prior: usize, literal: u8); +} + + +pub fn push_base<'a, + Interpreter: IRInterpreter>(xself: &mut Interpreter, + val: interface::Command>) { + match val { + interface::Command::BlockSwitchCommand(_) | + interface::Command::BlockSwitchDistance(_) | + interface::Command::PredictionMode(_) => {} + interface::Command::Copy(ref copy) => { + xself.inc_local_byte_offset(copy.num_bytes as usize); + }, + interface::Command::Dict(ref dict) => { + xself.inc_local_byte_offset(dict.final_size as usize); + }, + interface::Command::BlockSwitchLiteral(block_type) => xself.update_block_type(block_type.block_type(), + block_type.stride()), + interface::Command::Literal(ref lit) => { + //let stride = xself.get_stride(xself.local_byte_offset()) as usize; + let mut priors= [0u8; 8]; + for poffset in 0..8 { + if xself.local_byte_offset() > poffset { + let input_offset = xself.local_byte_offset() - poffset - 1; + priors[7 - poffset] = xself.literal_data_at_offset(input_offset); + } + } + let mut cur = 0usize; + for literal in lit.data.slice().iter() { + let (huffman_table_index, selected_bits) = compute_huffman_table_index_for_context_map(priors[(cur + 7)&7], priors[(cur + 6) &7], xself.literal_context_map(), xself.prediction_mode(), xself.block_type()); + xself.update_cost(priors, (cur + 7) & 7, selected_bits, huffman_table_index, *literal); + priors[cur & 7] = *literal; + cur += 1; + cur &= 7; + } + xself.inc_local_byte_offset(lit.data.slice().len()); + } + } + } + + +// not sure why this fails +//impl<'a> interface::CommandProcessor<'a> for IRInterpreter { +// fn push])>(&mut self, +// val: interface::Command>, +// callback: &mut Cb) { +// push_base(self, val, callback) +// } +//} + + + +fn compute_huffman_table_index_for_context_map ( + prev_byte: u8, + prev_prev_byte: u8, + literal_context_map: &[u8],//interface::PredictionModeContextMap, + prediction_mode: LiteralPredictionModeNibble, + block_type: u8, +) -> (usize, u8) { + let prior = Context(prev_byte, prev_prev_byte, prediction_mode.to_context_enum().unwrap()); + assert!(prior < 64); + let context_map_index = ((block_type as usize)<< 6) | prior as usize; + if context_map_index < literal_context_map.len() { + (literal_context_map[context_map_index] as usize, prior) + } else { + (prior as usize, prior) + } +} + +pub fn Context(p1: u8, p2: u8, mode: ContextType) -> u8 { + match mode { + ContextType::CONTEXT_LSB6 => { + return (p1 as (i32) & 0x3fi32) as (u8); + } + ContextType::CONTEXT_MSB6 => { + return (p1 as (i32) >> 2i32) as (u8); + } + ContextType::CONTEXT_UTF8 => { + return (kUTF8ContextLookup[p1 as (usize)] as (i32) | + kUTF8ContextLookup[(p2 as (i32) + 256i32) as (usize)] as (i32)) as (u8); + } + ContextType::CONTEXT_SIGNED => { + return ((kSigned3BitContextLookup[p1 as (usize)] as (i32) << 3i32) + + kSigned3BitContextLookup[p2 as (usize)] as (i32)) as (u8); + } + } + // 0i32 as (u8) +} diff --git a/rust/vendor/brotli/src/enc/literal_cost.rs b/rust/vendor/brotli/src/enc/literal_cost.rs new file mode 100755 index 0000000..b0139da --- /dev/null +++ b/rust/vendor/brotli/src/enc/literal_cost.rs @@ -0,0 +1,234 @@ +#![allow(dead_code)] +use super::utf8_util::BrotliIsMostlyUTF8; +use super::util::FastLog2f64; + +static kMinUTF8Ratio: super::util::floatX = 0.75 as super::util::floatX; + +fn brotli_min_size_t(a: usize, b: usize) -> usize { + if a < b { a } else { b } +} + +fn UTF8Position(last: usize, c: usize, clamp: usize) -> usize { + if c < 128i32 as (usize) { + 0i32 as (usize) + } else if c >= 192i32 as (usize) { + brotli_min_size_t(1i32 as (usize), clamp) + } else if last < 0xe0i32 as (usize) { + 0i32 as (usize) + } else { + brotli_min_size_t(2i32 as (usize), clamp) + } +} + +fn DecideMultiByteStatsLevel(pos: usize, len: usize, mask: usize, data: &[u8]) -> usize { + let mut counts: [usize; 3] = [0usize, 0usize, 0usize]; + let mut max_utf8: usize = 1usize; + let mut last_c: usize = 0usize; + let mut i: usize; + i = 0usize; + while i < len { + { + let c: usize = data[((pos.wrapping_add(i) & mask) as (usize))] as (usize); + { + let _rhs = 1; + let _lhs = &mut counts[UTF8Position(last_c, c, 2usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (usize)); + } + last_c = c; + } + i = i.wrapping_add(1 as (usize)); + } + if counts[2usize] < 500usize { + max_utf8 = 1usize; + } + if counts[1usize].wrapping_add(counts[2usize]) < 25usize { + max_utf8 = 0usize; + } + max_utf8 +} + +fn EstimateBitCostsForLiteralsUTF8(pos: usize, + len: usize, + mask: usize, + data: &[u8], + cost: &mut [super::util::floatX]) { + let max_utf8: usize = DecideMultiByteStatsLevel(pos, len, mask, data); + let mut histogram: [[usize; 256]; 3] = [[0; 256]; 3]; + let window_half: usize = 495usize; + let in_window: usize = brotli_min_size_t(window_half, len); + let mut in_window_utf8: [usize; 3] = [0usize, 0usize, 0usize]; + let mut i: usize; + { + let mut last_c: usize = 0usize; + let mut utf8_pos: usize = 0usize; + i = 0usize; + while i < in_window { + { + let c: usize = data[((pos.wrapping_add(i) & mask) as (usize))] as (usize); + { + let _rhs = 1; + let _lhs = &mut histogram[utf8_pos][c]; + *_lhs = (*_lhs).wrapping_add(_rhs as (usize)); + } + { + let _rhs = 1; + let _lhs = &mut in_window_utf8[utf8_pos]; + *_lhs = (*_lhs).wrapping_add(_rhs as (usize)); + } + utf8_pos = UTF8Position(last_c, c, max_utf8); + last_c = c; + } + i = i.wrapping_add(1 as (usize)); + } + } + i = 0usize; + while i < len { + { + if i >= window_half { + let c: usize = (if i < window_half.wrapping_add(1usize) { + 0i32 + } else { + data[((pos.wrapping_add(i).wrapping_sub(window_half).wrapping_sub(1usize) & + mask) as (usize))] as (i32) + }) as (usize); + let last_c: usize = + (if i < window_half.wrapping_add(2usize) { + 0i32 + } else { + data[((pos.wrapping_add(i).wrapping_sub(window_half).wrapping_sub(2usize) & + mask) as (usize))] as (i32) + }) as (usize); + let utf8_pos2: usize = UTF8Position(last_c, c, max_utf8); + { + let _rhs = 1; + let _lhs = &mut histogram[utf8_pos2][data[((pos.wrapping_add(i).wrapping_sub(window_half) & mask) as + (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_sub(_rhs as (usize)); + } + { + let _rhs = 1; + let _lhs = &mut in_window_utf8[utf8_pos2]; + *_lhs = (*_lhs).wrapping_sub(_rhs as (usize)); + } + } + if i.wrapping_add(window_half) < len { + let c: usize = data[((pos.wrapping_add(i) + .wrapping_add(window_half) + .wrapping_sub(1usize) & mask) as (usize))] as (usize); + let last_c: usize = data[((pos.wrapping_add(i) + .wrapping_add(window_half) + .wrapping_sub(2usize) & mask) as (usize))] as (usize); + let utf8_pos2: usize = UTF8Position(last_c, c, max_utf8); + { + let _rhs = 1; + let _lhs = &mut histogram[utf8_pos2][data[((pos.wrapping_add(i).wrapping_add(window_half) & mask) as + (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (usize)); + } + { + let _rhs = 1; + let _lhs = &mut in_window_utf8[utf8_pos2]; + *_lhs = (*_lhs).wrapping_add(_rhs as (usize)); + } + } + { + let c: usize = (if i < 1usize { + 0i32 + } else { + data[((pos.wrapping_add(i).wrapping_sub(1usize) & mask) as (usize))] as + (i32) + }) as (usize); + let last_c: usize = (if i < 2usize { + 0i32 + } else { + data[((pos.wrapping_add(i).wrapping_sub(2usize) & mask) as + (usize))] as (i32) + }) as (usize); + let utf8_pos: usize = UTF8Position(last_c, c, max_utf8); + let masked_pos: usize = pos.wrapping_add(i) & mask; + let mut histo: usize = histogram[utf8_pos][data[(masked_pos as (usize))] as (usize)]; + //precision is vital here: lets keep double precision + let mut lit_cost: f64; + if histo == 0usize { + histo = 1usize; + } + lit_cost = FastLog2f64(in_window_utf8[utf8_pos] as u64) as f64 - FastLog2f64(histo as u64) as f64; + lit_cost = lit_cost + 0.02905; + if lit_cost < 1.0 { + lit_cost = lit_cost * 0.5; + lit_cost = lit_cost + 0.5; + } + if i < 2000usize { + lit_cost = lit_cost + + (0.7 - (2000usize).wrapping_sub(i) as (f64) / 2000.0 * 0.35 ); + } + cost[(i as (usize))] = lit_cost as (super::util::floatX); + } + } + i = i.wrapping_add(1 as (usize)); + } +} + +pub fn BrotliEstimateBitCostsForLiterals(pos: usize, + len: usize, + mask: usize, + data: &[u8], + cost: &mut [super::util::floatX]) { + if BrotliIsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio) != 0 { + EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost); + } else { + let mut histogram: [usize; 256] = [0; 256]; + + let window_half: usize = 2000usize; + let mut in_window: usize = brotli_min_size_t(window_half, len); + let mut i: usize; + i = 0usize; + while i < in_window { + { + let _rhs = 1; + let _lhs = &mut histogram[data[((pos.wrapping_add(i) & mask) as (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < len { + { + let mut histo: usize; + if i >= window_half { + { + let _rhs = 1; + let _lhs = &mut histogram[data[((pos.wrapping_add(i).wrapping_sub(window_half) & + mask) as (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_sub(_rhs as (usize)); + } + in_window = in_window.wrapping_sub(1 as (usize)); + } + if i.wrapping_add(window_half) < len { + { + let _rhs = 1; + let _lhs = &mut histogram[data[((pos.wrapping_add(i).wrapping_add(window_half) & + mask) as (usize))] as (usize)]; + *_lhs = (*_lhs).wrapping_add(_rhs as (usize)); + } + in_window = in_window.wrapping_add(1 as (usize)); + } + histo = histogram[data[((pos.wrapping_add(i) & mask) as (usize))] as (usize)]; + if histo == 0usize { + histo = 1usize; + } + { + //precision is vital here: lets keep double precision + let mut lit_cost: f64 = FastLog2f64(in_window as u64) as f64 - FastLog2f64(histo as u64) as f64; + lit_cost = lit_cost + 0.029; + if lit_cost < 1.0 { + lit_cost = lit_cost * 0.5; + lit_cost = lit_cost + 0.5; + } + cost[(i as (usize))] = lit_cost as (super::util::floatX); + } + } + i = i.wrapping_add(1 as (usize)); + } + } +} diff --git a/rust/vendor/brotli/src/enc/metablock.rs b/rust/vendor/brotli/src/enc/metablock.rs new file mode 100755 index 0000000..9b24fc0 --- /dev/null +++ b/rust/vendor/brotli/src/enc/metablock.rs @@ -0,0 +1,1065 @@ +#![allow(dead_code)] +use super::combined_alloc::BrotliAlloc; +use super::backward_references::{BrotliEncoderParams}; +use super::encode::{BROTLI_DISTANCE_ALPHABET_SIZE, BROTLI_MAX_DISTANCE_BITS, BROTLI_LARGE_MAX_DISTANCE_BITS, BROTLI_MAX_ALLOWED_DISTANCE}; +use super::constants::BROTLI_MAX_NPOSTFIX; +use super::bit_cost::{BitsEntropy, BrotliPopulationCost}; +use super::block_split::BlockSplit; +use super::block_splitter::BrotliSplitBlock; +use super::brotli_bit_stream::MetaBlockSplit; +use super::cluster::BrotliClusterHistograms; +use super::command::{Command, CommandCopyLen, CommandRestoreDistanceCode, PrefixEncodeCopyDistance, BrotliDistanceParams}; +use super::entropy_encode::BrotliOptimizeHuffmanCountsForRle; +use super::histogram::{BrotliBuildHistogramsWithContext, CostAccessors, HistogramLiteral, + HistogramCommand, HistogramDistance, HistogramClear, ClearHistograms, + ContextType, HistogramAddHistogram, HistogramAddItem, Context, + }; +use super::super::alloc; +use super::super::alloc::{SliceWrapper, SliceWrapperMut, Allocator}; +use super::util::{brotli_min_size_t, brotli_max_size_t}; +use core; + +pub fn BrotliInitDistanceParams(params: &mut BrotliEncoderParams, + npostfix: u32, ndirect: u32) { + let dist_params = &mut params.dist; + let mut alphabet_size; + let mut max_distance; + + dist_params.distance_postfix_bits = npostfix; + dist_params.num_direct_distance_codes = ndirect; + + alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE( + npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS); + max_distance = ndirect + (1u32 << (BROTLI_MAX_DISTANCE_BITS + npostfix + 2)) - + (1u32 << (npostfix + 2)); + + if (params.large_window) { + let bound:[u32;BROTLI_MAX_NPOSTFIX + 1] = [0, 4, 12, 28]; + let postfix = 1u32 << npostfix; + alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE( + npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS); + /* The maximum distance is set so that no distance symbol used can encode + a distance larger than BROTLI_MAX_ALLOWED_DISTANCE with all + its extra bits set. */ + if (ndirect < bound[npostfix as usize]) { + max_distance = BROTLI_MAX_ALLOWED_DISTANCE as u32 - (bound[npostfix as usize] - ndirect); + } else if (ndirect >= bound[npostfix as usize ] + postfix) { + max_distance = (3u32 << 29) - 4 + (ndirect - bound[npostfix as usize]); + } else { + max_distance = BROTLI_MAX_ALLOWED_DISTANCE as u32; + } + } + + dist_params.alphabet_size = alphabet_size; + dist_params.max_distance = max_distance as usize; +} + +fn RecomputeDistancePrefixes(cmds: &mut [Command], + num_commands: usize, + orig_params:&BrotliDistanceParams, + new_params: &BrotliDistanceParams) { + + + if orig_params.distance_postfix_bits == new_params.distance_postfix_bits && orig_params.num_direct_distance_codes == new_params.num_direct_distance_codes { + return; + } + + for cmd in cmds.split_at_mut(num_commands).0.iter_mut() { + if (CommandCopyLen(cmd) != 0 && cmd.cmd_prefix_ >= 128) { + let ret = CommandRestoreDistanceCode(cmd, orig_params); + PrefixEncodeCopyDistance(ret as usize, + new_params.num_direct_distance_codes as usize, + new_params.distance_postfix_bits as u64, + &mut cmd.dist_prefix_, + &mut cmd.dist_extra_); + } + } +} + +fn ComputeDistanceCost(cmds: &[Command], + num_commands: usize, + orig_params: &BrotliDistanceParams, + new_params: &BrotliDistanceParams, + scratch: &mut ::i32vec, + cost: &mut f64) -> bool { + + let mut equal_params = false; + let mut dist_prefix: u16 = 0; + let mut dist_extra: u32 = 0; + let mut extra_bits: f64 = 0.0; + let mut histo = HistogramDistance::default(); + + + if (orig_params.distance_postfix_bits == new_params.distance_postfix_bits && + orig_params.num_direct_distance_codes == + new_params.num_direct_distance_codes) { + equal_params = true; + } + for cmd in cmds.split_at(num_commands).0 { + if CommandCopyLen(cmd) != 0 && cmd.cmd_prefix_ >= 128 { + if (equal_params) { + dist_prefix = cmd.dist_prefix_; + } else { + let distance = CommandRestoreDistanceCode(cmd, orig_params); + if distance > new_params.max_distance as u32 { + return false; + } + PrefixEncodeCopyDistance(distance as usize, + new_params.num_direct_distance_codes as usize, + new_params.distance_postfix_bits as u64, + &mut dist_prefix, + &mut dist_extra); + } + HistogramAddItem(&mut histo, (dist_prefix & 0x3FF) as usize); + extra_bits += (dist_prefix >> 10) as f64; + } + } + + *cost = BrotliPopulationCost(&histo, scratch) as f64 + extra_bits; + return true; +} + + +pub fn BrotliBuildMetaBlock + (alloc: &mut Alloc, + ringbuffer: &[u8], + pos: usize, + mask: usize, + params: &mut BrotliEncoderParams, + prev_byte: u8, + prev_byte2: u8, + cmds: &mut [Command], + num_commands: usize, + literal_context_mode: ContextType, + lit_scratch_space: &mut ::i32vec, + cmd_scratch_space: &mut ::i32vec, + dst_scratch_space: &mut ::i32vec, + mb: &mut MetaBlockSplit) { + + static kMaxNumberOfHistograms: usize = 256usize; + let mut distance_histograms: >::AllocatedMemory; + let mut literal_histograms: >::AllocatedMemory; + let mut literal_context_modes: >::AllocatedMemory = >::AllocatedMemory::default(); + let literal_histograms_size: usize; + let distance_histograms_size: usize; + let mut i: usize; + let mut literal_context_multiplier: usize = 1usize; + let mut ndirect_msb:u32 = 0; + let mut check_orig = true; + if !params.avoid_distance_prefix_search { + let mut best_dist_cost: f64 = 1e99; + let orig_params = params.clone(); + let mut new_params = params.clone(); + + for npostfix in 0..(BROTLI_MAX_NPOSTFIX + 1) { + while ndirect_msb < 16 { + let ndirect = ndirect_msb << npostfix; + let skip: bool; + let mut dist_cost: f64 = 0.0; + BrotliInitDistanceParams(&mut new_params, npostfix as u32, ndirect as u32); + if npostfix as u32 == orig_params.dist.distance_postfix_bits && + ndirect == orig_params.dist.num_direct_distance_codes { + check_orig = false; + } + skip = !ComputeDistanceCost( + cmds, num_commands, + &orig_params.dist, &new_params.dist, dst_scratch_space, &mut dist_cost); + if skip || (dist_cost > best_dist_cost) { + break; + } + best_dist_cost = dist_cost; + params.dist = new_params.dist; + ndirect_msb += 1; + } + if ndirect_msb > 0 { + ndirect_msb -= 1; + } + ndirect_msb /= 2; + } + if check_orig { + let mut dist_cost: f64 = 0.0; + ComputeDistanceCost(cmds, num_commands, + &orig_params.dist, &orig_params.dist, dst_scratch_space, &mut dist_cost); + if dist_cost < best_dist_cost { + // best_dist_cost = dist_cost; unused + params.dist = orig_params.dist; + } + } + RecomputeDistancePrefixes(cmds, num_commands, + &orig_params.dist, ¶ms.dist); + + } + BrotliSplitBlock(alloc, + cmds, + num_commands, + ringbuffer, + pos, + mask, + params, + lit_scratch_space, + cmd_scratch_space, + dst_scratch_space, + &mut (*mb).literal_split, + &mut (*mb).command_split, + &mut (*mb).distance_split); + if (*params).disable_literal_context_modeling == 0 { + literal_context_multiplier = (1i32 << 6i32) as (usize); + literal_context_modes = >::alloc_cell(alloc, (*mb).literal_split.num_types); + for item in literal_context_modes.slice_mut().iter_mut() { + *item = literal_context_mode; + } + } + literal_histograms_size = (*mb).literal_split.num_types.wrapping_mul(literal_context_multiplier); + literal_histograms = >::alloc_cell(alloc, literal_histograms_size); + distance_histograms_size = (*mb).distance_split.num_types << 2i32; + distance_histograms = >::alloc_cell(alloc, distance_histograms_size); + (*mb).command_histograms_size = (*mb).command_split.num_types; + (*mb).command_histograms = >::alloc_cell(alloc, (*mb).command_histograms_size); + BrotliBuildHistogramsWithContext(cmds, + num_commands, + &mut (*mb).literal_split, + &mut (*mb).command_split, + &mut (*mb).distance_split, + ringbuffer, + pos, + mask, + prev_byte, + prev_byte2, + literal_context_modes.slice(), + literal_histograms.slice_mut(), + (*mb).command_histograms.slice_mut(), + distance_histograms.slice_mut()); + >::free_cell(alloc, literal_context_modes); + (*mb).literal_context_map_size = (*mb).literal_split.num_types << 6i32; + (*mb).literal_context_map = >::alloc_cell(alloc, (*mb).literal_context_map_size); + (*mb).literal_histograms_size = (*mb).literal_context_map_size; + (*mb).literal_histograms = >::alloc_cell(alloc, (*mb).literal_histograms_size); + BrotliClusterHistograms(alloc, + literal_histograms.slice(), + literal_histograms_size, + kMaxNumberOfHistograms, + lit_scratch_space, + (*mb).literal_histograms.slice_mut(), + &mut (*mb).literal_histograms_size, + (*mb).literal_context_map.slice_mut()); + >::free_cell(alloc, literal_histograms); + if (*params).disable_literal_context_modeling != 0 { + i = (*mb).literal_split.num_types; + while i != 0usize { + let mut j: usize = 0usize; + i = i.wrapping_sub(1 as (usize)); + while j < (1i32 << 6i32) as (usize) { + { + let val = (*mb).literal_context_map.slice()[(i as (usize))]; + (*mb).literal_context_map.slice_mut()[((i << 6i32).wrapping_add(j) as (usize))] = val; + } + j = j.wrapping_add(1 as (usize)); + } + } + } + (*mb).distance_context_map_size = (*mb).distance_split.num_types << 2i32; + (*mb).distance_context_map = >::alloc_cell(alloc, (*mb).distance_context_map_size); + (*mb).distance_histograms_size = (*mb).distance_context_map_size; + (*mb).distance_histograms = >::alloc_cell(alloc, (*mb).distance_histograms_size); + BrotliClusterHistograms(alloc, + distance_histograms.slice(), + (*mb).distance_context_map_size, + kMaxNumberOfHistograms, + dst_scratch_space, + (*mb).distance_histograms.slice_mut(), + &mut (*mb).distance_histograms_size, + (*mb).distance_context_map.slice_mut()); + >::free_cell(alloc, distance_histograms); +} + +/* +pub struct BlockSplitter<'a, HistogramType:SliceWrapper+SliceWrapperMut +CostAccessors, + AllocU8:alloc::Allocator+'a, + AllocU32:alloc::Allocator+'a, + AllocHT:alloc::Allocator+'a > { + */ +pub struct BlockSplitter { + pub alphabet_size_: usize, + pub min_block_size_: usize, + pub split_threshold_: super::util::floatX, + pub num_blocks_: usize, + // pub split_: &'a mut BlockSplit, + // pub histograms_: AllocHT::AllocatedMemory, // FIXME: pull this one out at the end + // pub histograms_size_: &'a mut usize, // FIXME: pull this one out at the end + pub target_block_size_: usize, + pub block_size_: usize, + pub curr_histogram_ix_: usize, + pub last_histogram_ix_: [usize; 2], + pub last_entropy_: [super::util::floatX; 2], + pub merge_last_count_: usize, +} + + + +pub struct ContextBlockSplitter { + pub alphabet_size_: usize, + pub num_contexts_: usize, + pub max_block_types_: usize, + pub min_block_size_: usize, + pub split_threshold_: super::util::floatX, + pub num_blocks_: usize, + // pub split_: &'a mut BlockSplit, + // pub histograms_: AllocHL::AllocatedMemory, + // pub histograms_size_: &'a mut usize, // FIXME: pull this one out at the end + pub target_block_size_: usize, + pub block_size_: usize, + pub curr_histogram_ix_: usize, + pub last_histogram_ix_: [usize; 2], + pub last_entropy_: [super::util::floatX; 2 * BROTLI_MAX_STATIC_CONTEXTS], + pub merge_last_count_: usize, +} + + + +enum LitBlocks { + plain(BlockSplitter), //<'a, HistogramLiteral, AllocU8, AllocU32, AllocHL>, + ctx(ContextBlockSplitter), //<'a, AllocU8, AllocU32, AllocHL>, +} + +/* + +pub struct BlockSplitterCommand { + pub alphabet_size_: usize, + pub min_block_size_: usize, + pub split_threshold_: super::util::floatX, + pub num_blocks_: usize, + pub split_: *mut BlockSplit, + pub histograms_: *mut HistogramCommand, + pub histograms_size_: *mut usize, + pub target_block_size_: usize, + pub block_size_: usize, + pub curr_histogram_ix_: usize, + pub last_histogram_ix_: [usize; 2], + pub last_entropy_: [super::util::floatX; 2], + pub merge_last_count_: usize, +} + + + +pub struct BlockSplitterDistance { + pub alphabet_size_: usize, + pub min_block_size_: usize, + pub split_threshold_: super::util::floatX, + pub num_blocks_: usize, + pub split_: *mut BlockSplit, + pub histograms_: *mut HistogramDistance, + pub histograms_size_: *mut usize, + pub target_block_size_: usize, + pub block_size_: usize, + pub curr_histogram_ix_: usize, + pub last_histogram_ix_: [usize; 2], + pub last_entropy_: [super::util::floatX; 2], + pub merge_last_count_: usize, +} +*/ + +fn InitBlockSplitter + SliceWrapperMut + CostAccessors, + Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> + (alloc: &mut Alloc, + alphabet_size: usize, + min_block_size: usize, + split_threshold: super::util::floatX, + num_symbols: usize, + split: &mut BlockSplit, + histograms: &mut >::AllocatedMemory, + histograms_size: &mut usize) + -> BlockSplitter { + let max_num_blocks: usize = num_symbols.wrapping_div(min_block_size).wrapping_add(1usize); + let max_num_types: usize = brotli_min_size_t(max_num_blocks, (256i32 + 1i32) as (usize)); + let mut xself = BlockSplitter { + last_entropy_: [0.0 as super::util::floatX; 2], + alphabet_size_: alphabet_size, + min_block_size_: min_block_size, + split_threshold_: split_threshold, + num_blocks_: 0usize, + //(*xself).split_ : split, + //(*xself).histograms_size_ : histograms_size, + target_block_size_: min_block_size, + block_size_: 0usize, + curr_histogram_ix_: 0usize, + merge_last_count_: 0usize, + last_histogram_ix_: [0usize; 2], + }; + { + if (*split).types.slice().len() < max_num_blocks { + let mut _new_size: usize = if (*split).types.slice().len() == 0usize { + max_num_blocks + } else { + (*split).types.slice().len() + }; + let mut new_array: >::AllocatedMemory; + while _new_size < max_num_blocks { + _new_size = _new_size.wrapping_mul(2usize); + } + new_array = >::alloc_cell(alloc, _new_size); + if ((*split).types.slice().len() != 0usize) { + new_array.slice_mut()[..(*split).types.slice().len()].clone_from_slice((*split) + .types + .slice()); + } + >::free_cell(alloc, core::mem::replace(&mut (*split).types, new_array)); + } + } + { + if (*split).lengths.slice().len() < max_num_blocks { + let mut _new_size: usize = if (*split).lengths.slice().len() == 0usize { + max_num_blocks + } else { + (*split).lengths.slice().len() + }; + while _new_size < max_num_blocks { + _new_size = _new_size.wrapping_mul(2usize); + } + let mut new_array = >::alloc_cell(alloc, _new_size); + new_array.slice_mut()[..(*split).lengths.slice().len()].clone_from_slice((*split) + .lengths + .slice()); + >::free_cell(alloc, core::mem::replace(&mut (*split).lengths, new_array)); + } + } + (*split).num_blocks = max_num_blocks; + *histograms_size = max_num_types; + let hlocal = >::alloc_cell(alloc, *histograms_size); + >::free_cell(alloc, core::mem::replace(&mut *histograms, hlocal)); + HistogramClear(&mut histograms.slice_mut()[0]); + xself.last_histogram_ix_[0] = 0; + xself.last_histogram_ix_[1] = 0; + return xself; +} +fn InitContextBlockSplitter + alloc::Allocator + alloc::Allocator> + (alloc: &mut Alloc, + alphabet_size: usize, + num_contexts: usize, + min_block_size: usize, + split_threshold: super::util::floatX, + num_symbols: usize, + split: &mut BlockSplit, + histograms: &mut >::AllocatedMemory, + histograms_size: &mut usize) + -> ContextBlockSplitter { + let max_num_blocks: usize = num_symbols.wrapping_div(min_block_size).wrapping_add(1usize); + let max_num_types: usize; + assert!(num_contexts <= BROTLI_MAX_STATIC_CONTEXTS); + let mut xself = ContextBlockSplitter { + alphabet_size_: alphabet_size, + num_contexts_: num_contexts, + max_block_types_: (256usize).wrapping_div(num_contexts), + min_block_size_: min_block_size, + split_threshold_: split_threshold, + num_blocks_: 0usize, + // histograms_size_: histograms_size, + target_block_size_: min_block_size, + block_size_: 0usize, + curr_histogram_ix_: 0usize, + merge_last_count_: 0usize, + last_histogram_ix_: [0; 2], + last_entropy_: [0.0 as super::util::floatX; 2 * BROTLI_MAX_STATIC_CONTEXTS], + }; + max_num_types = brotli_min_size_t(max_num_blocks, xself.max_block_types_.wrapping_add(1usize)); + { + if (*split).types.slice().len() < max_num_blocks { + let mut _new_size: usize = if (*split).types.slice().len() == 0usize { + max_num_blocks + } else { + (*split).types.slice().len() + }; + while _new_size < max_num_blocks { + _new_size = _new_size.wrapping_mul(2usize); + } + let mut new_array = >::alloc_cell(alloc, _new_size); + if ((*split).types.slice().len() != 0usize) { + new_array.slice_mut()[..(*split).types.slice().len()].clone_from_slice((*split) + .types + .slice()); + } + >::free_cell(alloc, core::mem::replace(&mut (*split).types, new_array)); + } + } + { + if (*split).lengths.slice().len() < max_num_blocks { + let mut _new_size: usize = if (*split).lengths.slice().len() == 0usize { + max_num_blocks + } else { + (*split).lengths.slice().len() + }; + while _new_size < max_num_blocks { + _new_size = _new_size.wrapping_mul(2usize); + } + let mut new_array = >::alloc_cell(alloc, _new_size); + if ((*split).lengths.slice().len() != 0usize) { + new_array.slice_mut()[..(*split).lengths.slice().len()].clone_from_slice((*split) + .lengths + .slice()); + } + >::free_cell(alloc, core::mem::replace(&mut (*split).lengths, new_array)); + } + } + (*split).num_blocks = max_num_blocks; + *histograms_size = max_num_types.wrapping_mul(num_contexts); + *histograms = >::alloc_cell(alloc, *histograms_size); + //(*xself).histograms_ = *histograms; + ClearHistograms(&mut histograms.slice_mut()[(0usize)..], num_contexts); + xself.last_histogram_ix_[0] = 0; + xself.last_histogram_ix_[1] = 0; + return xself; +} + +fn BlockSplitterFinishBlock + +SliceWrapperMut + +CostAccessors + +Clone, + Alloc:alloc::Allocator + alloc::Allocator>(xself: &mut BlockSplitter, + split: &mut BlockSplit, + histograms: &mut [HistogramType], + histograms_size: &mut usize, +is_final: i32){ + (*xself).block_size_ = brotli_max_size_t((*xself).block_size_, (*xself).min_block_size_); + if (*xself).num_blocks_ == 0usize { + (*split).lengths.slice_mut()[(0usize)] = (*xself).block_size_ as (u32); + (*split).types.slice_mut()[(0usize)] = 0i32 as (u8); + (*xself).last_entropy_[(0usize)] = BitsEntropy((histograms[(0usize)]).slice(), + (*xself).alphabet_size_); + (*xself).last_entropy_[(1usize)] = (*xself).last_entropy_[(0usize)]; + (*xself).num_blocks_ = (*xself).num_blocks_.wrapping_add(1 as (usize)); + (*split).num_types = (*split).num_types.wrapping_add(1 as (usize)); + (*xself).curr_histogram_ix_ = (*xself).curr_histogram_ix_.wrapping_add(1 as (usize)); + if (*xself).curr_histogram_ix_ < *histograms_size { + HistogramClear(&mut histograms[((*xself).curr_histogram_ix_ as (usize))]); + } + (*xself).block_size_ = 0usize; + } else if (*xself).block_size_ > 0usize { + let entropy: super::util::floatX = BitsEntropy((histograms[((*xself).curr_histogram_ix_ as (usize))]).slice(), + (*xself).alphabet_size_); + let mut combined_histo: [HistogramType; 2] = [histograms[(*xself).curr_histogram_ix_].clone(), + histograms[(*xself).curr_histogram_ix_].clone()]; + + let mut combined_entropy: [super::util::floatX; 2] = [0.0 as super::util::floatX, 0.0 as super::util::floatX]; + let mut diff: [super::util::floatX; 2] = [0.0 as super::util::floatX, 0.0 as super::util::floatX]; + for j in 0..2 { + { + let last_histogram_ix: usize = (*xself).last_histogram_ix_[j]; + HistogramAddHistogram(&mut combined_histo[j], + &histograms[(last_histogram_ix as (usize))]); + combined_entropy[j] = BitsEntropy(&mut combined_histo[j].slice_mut()[0usize..], + (*xself).alphabet_size_); + diff[j] = combined_entropy[j] - entropy - (*xself).last_entropy_[(j as (usize))]; + } + } + if (*split).num_types < 256usize && (diff[0usize] > (*xself).split_threshold_) && + (diff[1usize] > (*xself).split_threshold_) { + (*split).lengths.slice_mut()[((*xself).num_blocks_ as (usize))] = (*xself).block_size_ as + (u32); + (*split).types.slice_mut()[((*xself).num_blocks_ as (usize))] = (*split).num_types as (u8); + (*xself).last_histogram_ix_[1usize] = (*xself).last_histogram_ix_[0usize]; + (*xself).last_histogram_ix_[0usize] = (*split).num_types as (u8) as (usize); + (*xself).last_entropy_[(1usize)] = (*xself).last_entropy_[(0usize)]; + (*xself).last_entropy_[(0usize)] = entropy; + (*xself).num_blocks_ = (*xself).num_blocks_.wrapping_add(1 as (usize)); + (*split).num_types = (*split).num_types.wrapping_add(1 as (usize)); + (*xself).curr_histogram_ix_ = (*xself).curr_histogram_ix_.wrapping_add(1 as (usize)); + if (*xself).curr_histogram_ix_ < *histograms_size { + HistogramClear(&mut histograms[((*xself).curr_histogram_ix_ as (usize))]); + } + (*xself).block_size_ = 0usize; + (*xself).merge_last_count_ = 0usize; + (*xself).target_block_size_ = (*xself).min_block_size_; + } else if diff[1usize] < diff[0usize] - 20.0 as super::util::floatX { + (*split).lengths.slice_mut()[((*xself).num_blocks_ as (usize))] = (*xself).block_size_ as + (u32); + (*split).types.slice_mut()[((*xself).num_blocks_ as (usize))] = (*split).types.slice() + [((*xself).num_blocks_.wrapping_sub(2usize) as (usize))]; //FIXME: investigate copy? + { + let mut __brotli_swap_tmp: usize = (*xself).last_histogram_ix_[0usize]; + (*xself).last_histogram_ix_[0usize] = (*xself).last_histogram_ix_[1usize]; + (*xself).last_histogram_ix_[1usize] = __brotli_swap_tmp; + } + histograms[((*xself).last_histogram_ix_[0usize] as (usize))] = combined_histo[1usize].clone(); + (*xself).last_entropy_[(1usize)] = (*xself).last_entropy_[(0usize)]; + (*xself).last_entropy_[(0usize)] = combined_entropy[1usize]; + (*xself).num_blocks_ = (*xself).num_blocks_.wrapping_add(1 as (usize)); + (*xself).block_size_ = 0usize; + HistogramClear(&mut histograms[((*xself).curr_histogram_ix_ as (usize))]); + (*xself).merge_last_count_ = 0usize; + (*xself).target_block_size_ = (*xself).min_block_size_; + } else { + { + let _rhs = (*xself).block_size_ as (u32); + let _lhs = &mut (*split).lengths.slice_mut()[((*xself).num_blocks_.wrapping_sub(1usize) as + (usize))]; + *_lhs = (*_lhs).wrapping_add(_rhs); + } + histograms[((*xself).last_histogram_ix_[0usize] as (usize))] = combined_histo[0usize].clone(); + (*xself).last_entropy_[(0usize)] = combined_entropy[0usize]; + if (*split).num_types == 1usize { + (*xself).last_entropy_[(1usize)] = (*xself).last_entropy_[(0usize)]; + } + (*xself).block_size_ = 0usize; + HistogramClear(&mut histograms[((*xself).curr_histogram_ix_ as (usize))]); + if { + (*xself).merge_last_count_ = (*xself).merge_last_count_.wrapping_add(1 as (usize)); + (*xself).merge_last_count_ + } > 1usize { + (*xself).target_block_size_ = + (*xself).target_block_size_.wrapping_add((*xself).min_block_size_); + } + } + } + if is_final != 0 { + *histograms_size = (*split).num_types; + (*split).num_blocks = (*xself).num_blocks_; + } +} +const BROTLI_MAX_STATIC_CONTEXTS: usize = 13; + +fn ContextBlockSplitterFinishBlock + alloc::Allocator + alloc::Allocator, + AllocHL:alloc::Allocator> + (xself: &mut ContextBlockSplitter, + m : &mut AllocHL, + split: &mut BlockSplit, + histograms: &mut [HistogramLiteral], + histograms_size: &mut usize, + is_final: i32) { + let num_contexts: usize = (*xself).num_contexts_; + if (*xself).block_size_ < (*xself).min_block_size_ { + (*xself).block_size_ = (*xself).min_block_size_; + } + if (*xself).num_blocks_ == 0usize { + let mut i: usize; + (*split).lengths.slice_mut()[(0usize)] = (*xself).block_size_ as (u32); + (*split).types.slice_mut()[(0usize)] = 0i32 as (u8); + i = 0usize; + while i < num_contexts { + { + (*xself).last_entropy_[(i as (usize))] = BitsEntropy((histograms[(i as (usize))]).slice(), + (*xself).alphabet_size_); + (*xself).last_entropy_[(num_contexts.wrapping_add(i) as (usize))] = (*xself).last_entropy_ + [(i as (usize))]; + } + i = i.wrapping_add(1 as (usize)); + } + (*xself).num_blocks_ = (*xself).num_blocks_.wrapping_add(1 as (usize)); + (*split).num_types = (*split).num_types.wrapping_add(1 as (usize)); + (*xself).curr_histogram_ix_ = (*xself).curr_histogram_ix_.wrapping_add(num_contexts); + if (*xself).curr_histogram_ix_ < *histograms_size { + ClearHistograms(&mut histograms[((*xself).curr_histogram_ix_ as (usize))..], + (*xself).num_contexts_); + } + (*xself).block_size_ = 0usize; + } else if (*xself).block_size_ > 0usize { + let mut entropy = [0.0 as super::util::floatX; BROTLI_MAX_STATIC_CONTEXTS]; + let mut combined_histo = m.alloc_cell(2 * num_contexts); + let mut combined_entropy = [0.0 as super::util::floatX; 2 * BROTLI_MAX_STATIC_CONTEXTS]; + let mut diff: [super::util::floatX; 2] = [0.0 as super::util::floatX; 2]; + let mut i: usize; + i = 0usize; + while i < num_contexts { + { + let curr_histo_ix: usize = (*xself).curr_histogram_ix_.wrapping_add(i); + let mut j: usize; + entropy[i] = BitsEntropy(&(histograms[(curr_histo_ix as (usize))]).slice(), + (*xself).alphabet_size_); + j = 0usize; + while j < 2usize { + { + let jx: usize = j.wrapping_mul(num_contexts).wrapping_add(i); + let last_histogram_ix: usize = (*xself).last_histogram_ix_[j].wrapping_add(i); + combined_histo.slice_mut()[jx] = histograms[(curr_histo_ix as (usize))].clone(); + HistogramAddHistogram(&mut combined_histo.slice_mut()[jx], + &mut histograms[(last_histogram_ix as (usize))]); + combined_entropy[jx] = BitsEntropy(combined_histo.slice()[jx].slice(), (*xself).alphabet_size_); + { + let _rhs = combined_entropy[jx] - entropy[i] - + (*xself).last_entropy_[(jx as (usize))]; + let _lhs = &mut diff[j]; + *_lhs = *_lhs + _rhs; + } + } + j = j.wrapping_add(1 as (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } + if (*split).num_types < (*xself).max_block_types_ && + (diff[0usize] > (*xself).split_threshold_) && + (diff[1usize] > (*xself).split_threshold_) { + (*split).lengths.slice_mut()[((*xself).num_blocks_ as (usize))] = (*xself).block_size_ as + (u32); + (*split).types.slice_mut()[((*xself).num_blocks_ as (usize))] = (*split).num_types as (u8); + (*xself).last_histogram_ix_[1usize] = (*xself).last_histogram_ix_[0usize]; + (*xself).last_histogram_ix_[0usize] = (*split).num_types.wrapping_mul(num_contexts); + i = 0usize; + while i < num_contexts { + { + (*xself).last_entropy_[(num_contexts.wrapping_add(i) as (usize))] = + (*xself).last_entropy_[(i as (usize))]; + (*xself).last_entropy_[(i as (usize))] = entropy[i]; + } + i = i.wrapping_add(1 as (usize)); + } + (*xself).num_blocks_ = (*xself).num_blocks_.wrapping_add(1 as (usize)); + (*split).num_types = (*split).num_types.wrapping_add(1 as (usize)); + (*xself).curr_histogram_ix_ = (*xself).curr_histogram_ix_.wrapping_add(num_contexts); + if (*xself).curr_histogram_ix_ < *histograms_size { + ClearHistograms(&mut histograms[((*xself).curr_histogram_ix_ as (usize))..], + (*xself).num_contexts_); + } + (*xself).block_size_ = 0usize; + (*xself).merge_last_count_ = 0usize; + (*xself).target_block_size_ = (*xself).min_block_size_; + } else if diff[1usize] < diff[0usize] - 20.0 as super::util::floatX { + (*split).lengths.slice_mut()[((*xself).num_blocks_ as (usize))] = (*xself).block_size_ as + (u32); + let nbm2 = (*split).types.slice()[((*xself).num_blocks_.wrapping_sub(2usize) as (usize))]; + (*split).types.slice_mut()[((*xself).num_blocks_ as (usize))] = nbm2; + + { + let mut __brotli_swap_tmp: usize = (*xself).last_histogram_ix_[0usize]; + (*xself).last_histogram_ix_[0usize] = (*xself).last_histogram_ix_[1usize]; + (*xself).last_histogram_ix_[1usize] = __brotli_swap_tmp; + } + i = 0usize; + while i < num_contexts { + { + histograms[((*xself).last_histogram_ix_[0usize].wrapping_add(i) as (usize))] = + combined_histo.slice()[num_contexts.wrapping_add(i)].clone(); + (*xself).last_entropy_[(num_contexts.wrapping_add(i) as (usize))] = + (*xself).last_entropy_[(i as (usize))]; + (*xself).last_entropy_[(i as (usize))] = combined_entropy[num_contexts.wrapping_add(i)]; + HistogramClear(&mut histograms[((*xself).curr_histogram_ix_.wrapping_add(i) as (usize))]); + } + i = i.wrapping_add(1 as (usize)); + } + (*xself).num_blocks_ = (*xself).num_blocks_.wrapping_add(1 as (usize)); + (*xself).block_size_ = 0usize; + (*xself).merge_last_count_ = 0usize; + (*xself).target_block_size_ = (*xself).min_block_size_; + } else { + { + let _rhs = (*xself).block_size_ as (u32); + let _lhs = &mut (*split).lengths.slice_mut()[((*xself).num_blocks_.wrapping_sub(1usize) as + (usize))]; + let old_split_length = *_lhs; + *_lhs = old_split_length.wrapping_add(_rhs); + } + i = 0usize; + while i < num_contexts { + { + histograms[((*xself).last_histogram_ix_[0usize].wrapping_add(i) as (usize))] = + combined_histo.slice()[i].clone(); + (*xself).last_entropy_[(i as (usize))] = combined_entropy[i]; + if (*split).num_types == 1usize { + (*xself).last_entropy_[(num_contexts.wrapping_add(i) as (usize))] = + (*xself).last_entropy_[(i as (usize))]; + } + HistogramClear(&mut histograms[((*xself).curr_histogram_ix_.wrapping_add(i) as (usize))]); + } + i = i.wrapping_add(1 as (usize)); + } + (*xself).block_size_ = 0usize; + if { + (*xself).merge_last_count_ = (*xself).merge_last_count_.wrapping_add(1 as (usize)); + (*xself).merge_last_count_ + } > 1usize { + (*xself).target_block_size_ = + (*xself).target_block_size_.wrapping_add((*xself).min_block_size_); + } + } + m.free_cell(combined_histo); + } + if is_final != 0 { + *histograms_size = (*split).num_types.wrapping_mul(num_contexts); + (*split).num_blocks = (*xself).num_blocks_; + } +} + +fn BlockSplitterAddSymbol + +SliceWrapperMut + +CostAccessors + +Clone, + Alloc:alloc::Allocator + alloc::Allocator>(xself: &mut BlockSplitter, + split: &mut BlockSplit, + histograms: &mut [HistogramType], + histograms_size: &mut usize, + symbol: usize){ + HistogramAddItem(&mut histograms[((*xself).curr_histogram_ix_ as (usize))], + symbol); + (*xself).block_size_ = (*xself).block_size_.wrapping_add(1 as (usize)); + if (*xself).block_size_ == (*xself).target_block_size_ { + BlockSplitterFinishBlock(xself, split, histograms, histograms_size, 0i32); + } +} + +fn ContextBlockSplitterAddSymbol + alloc::Allocator + alloc::Allocator> + (xself: &mut ContextBlockSplitter, + m : &mut Alloc, + split: &mut BlockSplit, + histograms: &mut [HistogramLiteral], + histograms_size: &mut usize, + symbol: usize, + context: usize) { + HistogramAddItem(&mut histograms[((*xself).curr_histogram_ix_.wrapping_add(context) as (usize))], + symbol); + (*xself).block_size_ = (*xself).block_size_.wrapping_add(1 as (usize)); + if (*xself).block_size_ == (*xself).target_block_size_ { + ContextBlockSplitterFinishBlock(xself, m, split, histograms, histograms_size, 0i32); + } +} + +fn MapStaticContexts + alloc::Allocator + alloc::Allocator+ alloc::Allocator + alloc::Allocator> + (m32: &mut Alloc, + num_contexts: usize, + static_context_map: &[u32], + mb: &mut MetaBlockSplit) { + let mut i: usize; + (*mb).literal_context_map_size = (*mb).literal_split.num_types << 6i32; + let new_literal_context_map = >::alloc_cell(m32, (*mb).literal_context_map_size); + >::free_cell(m32, core::mem::replace(&mut (*mb).literal_context_map, new_literal_context_map)); + i = 0usize; + while i < (*mb).literal_split.num_types { + { + let offset: u32 = i.wrapping_mul(num_contexts) as (u32); + let mut j: usize; + j = 0usize; + while j < (1u32 << 6i32) as (usize) { + { + (*mb).literal_context_map.slice_mut()[((i << 6i32).wrapping_add(j) as (usize))] = + offset.wrapping_add(static_context_map[(j as (usize))]); + } + j = j.wrapping_add(1 as (usize)); + } + } + i = i.wrapping_add(1 as (usize)); + } +} +pub fn BrotliBuildMetaBlockGreedyInternal + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator> + (alloc: &mut Alloc, + ringbuffer: &[u8], + mut pos: usize, + mask: usize, + mut prev_byte: u8, + mut prev_byte2: u8, + literal_context_mode: ContextType, + num_contexts: usize, + static_context_map: &[u32], + commands: &[Command], + n_commands: usize, + mb: &mut MetaBlockSplit) { + let mut lit_blocks: LitBlocks; + let mut cmd_blocks: BlockSplitter; + let mut dist_blocks: BlockSplitter; + let mut num_literals: usize = 0usize; + let mut i: usize; + i = 0usize; + while i < n_commands { + { + num_literals = num_literals.wrapping_add((commands[(i as (usize))]).insert_len_ as (usize)); + } + i = i.wrapping_add(1 as (usize)); + } + lit_blocks = if num_contexts == 1usize { + LitBlocks::plain(InitBlockSplitter::(alloc, + 256usize, + 512usize, + 400.0 as super::util::floatX, + num_literals, + &mut (*mb).literal_split, + &mut (*mb).literal_histograms, + &mut (*mb).literal_histograms_size)) + } else { + LitBlocks::ctx(InitContextBlockSplitter::(alloc, + 256usize, + num_contexts, + 512usize, + 400.0 as super::util::floatX, + num_literals, + &mut (*mb).literal_split, + &mut (*mb).literal_histograms, + &mut (*mb).literal_histograms_size)) + }; + cmd_blocks = InitBlockSplitter::(alloc, + 704usize, + 1024usize, + 500.0 as super::util::floatX, + n_commands, + &mut (*mb).command_split, + &mut (*mb).command_histograms, + &mut (*mb).command_histograms_size); + dist_blocks = InitBlockSplitter::(alloc, + 64usize, + 512usize, + 100.0 as super::util::floatX, + n_commands, + &mut (*mb).distance_split, + &mut (*mb).distance_histograms, + &mut (*mb).distance_histograms_size); + + i = 0usize; + while i < n_commands { + { + let cmd: Command = commands[(i as (usize))].clone(); + let mut j: usize; + BlockSplitterAddSymbol(&mut cmd_blocks, + &mut (*mb).command_split, + &mut (*mb).command_histograms.slice_mut(), + &mut (*mb).command_histograms_size, + cmd.cmd_prefix_ as (usize)); + j = cmd.insert_len_ as (usize); + while j != 0usize { + { + let literal: u8 = ringbuffer[((pos & mask) as (usize))]; + match (&mut lit_blocks) { + &mut LitBlocks::plain(ref mut lit_blocks_plain) => { + BlockSplitterAddSymbol(lit_blocks_plain, + &mut (*mb).literal_split, + &mut (*mb).literal_histograms.slice_mut(), + &mut (*mb).literal_histograms_size, + literal as (usize)) + } + &mut LitBlocks::ctx(ref mut lit_blocks_ctx) => { + let context: usize = Context(prev_byte, prev_byte2, literal_context_mode) as (usize); + ContextBlockSplitterAddSymbol(lit_blocks_ctx, + alloc, + &mut (*mb).literal_split, + &mut (*mb).literal_histograms.slice_mut(), + &mut (*mb).literal_histograms_size, + literal as (usize), + static_context_map[(context as (usize))] as (usize)); + } + } + prev_byte2 = prev_byte; + prev_byte = literal; + pos = pos.wrapping_add(1 as (usize)); + } + j = j.wrapping_sub(1 as (usize)); + } + pos = pos.wrapping_add(CommandCopyLen(&cmd) as (usize)); + if CommandCopyLen(&cmd) != 0 { + prev_byte2 = ringbuffer[((pos.wrapping_sub(2usize) & mask) as (usize))]; + prev_byte = ringbuffer[((pos.wrapping_sub(1usize) & mask) as (usize))]; + if cmd.cmd_prefix_ as (i32) >= 128i32 { + BlockSplitterAddSymbol(&mut dist_blocks, + &mut (*mb).distance_split, + &mut (*mb).distance_histograms.slice_mut(), + &mut (*mb).distance_histograms_size, + cmd.dist_prefix_ as (usize) & 0x3ff); + } + } + } + i = i.wrapping_add(1 as (usize)); + } + match (&mut lit_blocks) { + &mut LitBlocks::plain(ref mut lit_blocks_plain) => { + BlockSplitterFinishBlock(lit_blocks_plain, + &mut (*mb).literal_split, + &mut (*mb).literal_histograms.slice_mut(), + &mut (*mb).literal_histograms_size, + 1i32) + } + &mut LitBlocks::ctx(ref mut lit_blocks_ctx) => { + ContextBlockSplitterFinishBlock(lit_blocks_ctx, + alloc, + &mut (*mb).literal_split, + &mut (*mb).literal_histograms.slice_mut(), + &mut (*mb).literal_histograms_size, + 1i32) + } + } + BlockSplitterFinishBlock(&mut cmd_blocks, + &mut (*mb).command_split, + &mut (*mb).command_histograms.slice_mut(), + &mut (*mb).command_histograms_size, + 1i32); + BlockSplitterFinishBlock(&mut dist_blocks, + &mut (*mb).distance_split, + &mut (*mb).distance_histograms.slice_mut(), + &mut (*mb).distance_histograms_size, + 1i32); + if num_contexts > 1usize { + MapStaticContexts(alloc, num_contexts, static_context_map, mb); + } +} +pub fn BrotliBuildMetaBlockGreedy + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator> + (alloc: &mut Alloc, + ringbuffer: &[u8], + pos: usize, + mask: usize, + prev_byte: u8, + prev_byte2: u8, + literal_context_mode: ContextType, + _literal_context_lut: &[u8], + num_contexts: usize, + static_context_map: &[u32], + commands: &[Command], + n_commands: usize, + mb: &mut MetaBlockSplit) { + if num_contexts == 1usize { + BrotliBuildMetaBlockGreedyInternal(alloc, + ringbuffer, + pos, + mask, + prev_byte, + prev_byte2, + literal_context_mode, + 1usize, + &[], + commands, + n_commands, + mb); + } else { + BrotliBuildMetaBlockGreedyInternal(alloc, + ringbuffer, + pos, + mask, + prev_byte, + prev_byte2, + literal_context_mode, + num_contexts, + static_context_map, + commands, + n_commands, + mb); + } +} + + +pub fn BrotliOptimizeHistograms + alloc::Allocator + alloc::Allocator + alloc::Allocator + alloc::Allocator> + (num_distance_codes: usize, + mb: &mut MetaBlockSplit) { + let mut good_for_rle: [u8; 704] = [0; 704]; + let mut i: usize; + i = 0usize; + while i < (*mb).literal_histograms_size { + { + BrotliOptimizeHuffmanCountsForRle(256usize, + (*mb).literal_histograms.slice_mut()[(i as (usize))] + .slice_mut(), + &mut good_for_rle[..]); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < (*mb).command_histograms_size { + { + BrotliOptimizeHuffmanCountsForRle(704usize, + (*mb).command_histograms.slice_mut()[(i as (usize))] + .slice_mut(), + &mut good_for_rle[..]); + } + i = i.wrapping_add(1 as (usize)); + } + i = 0usize; + while i < (*mb).distance_histograms_size { + { + BrotliOptimizeHuffmanCountsForRle(num_distance_codes, + (*mb).distance_histograms.slice_mut()[(i as (usize))] + .slice_mut(), + &mut good_for_rle[..]); + } + i = i.wrapping_add(1 as (usize)); + } +} diff --git a/rust/vendor/brotli/src/enc/mod.rs b/rust/vendor/brotli/src/enc/mod.rs new file mode 100755 index 0000000..e18930a --- /dev/null +++ b/rust/vendor/brotli/src/enc/mod.rs @@ -0,0 +1,318 @@ +#![cfg_attr(not(feature="std"), allow(unused_imports))] +#[macro_use] +pub mod vectorization; +pub mod input_pair; +pub mod fast_log; +pub mod command; +pub mod block_split; +pub mod brotli_bit_stream; +pub mod constants; +pub mod entropy_encode; +pub mod static_dict; +pub mod combined_alloc; +pub mod static_dict_lut; +pub mod dictionary_hash; +pub mod util; +pub mod utf8_util; +pub mod bit_cost; +pub mod cluster; +pub mod literal_cost; +pub mod histogram; +pub mod backward_references; +pub use self::backward_references::hash_to_binary_tree; +pub use self::backward_references::hq as backward_references_hq; +pub mod block_splitter; +pub mod metablock; +pub mod compress_fragment_two_pass; +pub mod compress_fragment; +pub mod encode; +pub mod reader; +pub mod writer; +pub mod find_stride; +pub mod interface; +pub mod ir_interpret; +pub mod prior_eval; +pub mod stride_eval; +pub mod context_map_entropy; +pub mod pdf; +pub use self::combined_alloc::{CombiningAllocator, BrotliAlloc}; +mod compat; +pub mod threading; +pub mod singlethreading; +pub mod multithreading; +pub mod fixed_queue; +pub mod worker_pool; +#[cfg(feature="simd")] +use packed_simd_2::{i16x16, f32x8, i32x8}; +#[cfg(feature="simd")] +pub type s16 = i16x16; +#[cfg(feature="simd")] +pub type v8 = f32x8; +#[cfg(feature="simd")] +pub type s8 = i32x8; +#[cfg(not(feature="simd"))] +pub type s16 = compat::Compat16x16; +#[cfg(not(feature="simd"))] +pub type v8 = compat::CompatF8; +#[cfg(not(feature="simd"))] +pub type s8 = compat::Compat32x8; + +mod test; +mod weights; +mod parameters; +pub use self::util::floatX; +pub use self::pdf::PDF; +pub use self::hash_to_binary_tree::ZopfliNode; +pub use self::backward_references::{BrotliEncoderParams, UnionHasher}; +pub use self::encode::{ + BrotliEncoderInitParams, + BrotliEncoderSetParameter, + BrotliEncoderMaxCompressedSizeMulti, + BrotliEncoderMaxCompressedSize, +}; +use self::encode::{BrotliEncoderCreateInstance, BrotliEncoderDestroyInstance, + BrotliEncoderOperation, + BrotliEncoderSetCustomDictionary, + BrotliEncoderCompressStream, BrotliEncoderIsFinished}; +pub use self::interface::StaticCommand; +use brotli_decompressor::{CustomRead, CustomWrite}; +pub use self::vectorization::{v256,v256i, Mem256f}; +pub use interface::{InputReference,InputPair, InputReferenceMut}; + + +#[cfg(feature="std")] +use std::io::{Read,Write, Error, ErrorKind}; +#[cfg(feature="std")] +use std::io; +#[cfg(feature="std")] +pub use alloc_stdlib::StandardAlloc; +pub use alloc::{AllocatedStackMemory, Allocator, SliceWrapper, SliceWrapperMut, StackAllocator}; + +#[cfg(feature="std")] +pub use brotli_decompressor::{IntoIoReader, IoReaderWrapper, IoWriterWrapper}; + +pub use self::threading::{SendAlloc, + Owned, + BrotliEncoderThreadError, + BatchSpawnableLite, + CompressionThreadResult, +}; +#[cfg(feature="std")] +pub use self::worker_pool::{ + compress_worker_pool, + new_work_pool, + WorkerPool, +}; +#[cfg(not(feature="std"))] +pub use self::singlethreading::{ + compress_worker_pool, + new_work_pool, + WorkerPool, +}; +#[cfg(feature="std")] +pub fn compress_multi+Send+'static+Sync> ( + params:&BrotliEncoderParams, + owned_input: &mut Owned, + output: &mut [u8], + alloc_per_thread:&mut [SendAlloc, + backward_references::UnionHasher, + Alloc, + , backward_references::UnionHasher, Alloc, (SliceW, BrotliEncoderParams)> as BatchSpawnableLite, backward_references::UnionHasher, Alloc, (SliceW, BrotliEncoderParams)>>::JoinHandle>], +) -> Result + where >::AllocatedMemory: Send, + >::AllocatedMemory: Send+Sync, + >::AllocatedMemory: Send+Sync { + let mut work_pool = self::worker_pool::new_work_pool(alloc_per_thread.len() - 1); + compress_worker_pool(params, owned_input,output, alloc_per_thread,&mut work_pool) +} + +#[cfg(not(feature="std"))] +pub use self::singlethreading::compress_multi; +#[cfg(not(feature="std"))] +pub use self::singlethreading::compress_multi as compress_multi_no_threadpool; +#[cfg(feature="std")] +pub use self::multithreading::compress_multi as compress_multi_no_threadpool; + + +#[cfg(feature="std")] +pub fn BrotliCompress(r: &mut InputType, + w: &mut OutputType, + params: &BrotliEncoderParams) + -> Result + where InputType: Read, + OutputType: Write +{ + let mut input_buffer: [u8; 4096] = [0; 4096]; + let mut output_buffer: [u8; 4096] = [0; 4096]; + BrotliCompressCustomAlloc(r, + w, + &mut input_buffer[..], + &mut output_buffer[..], + params, + StandardAlloc::default(), + ) +} + +#[cfg(feature="std")] +pub fn BrotliCompressCustomAlloc + (r: &mut InputType, + w: &mut OutputType, + input_buffer: &mut [u8], + output_buffer: &mut [u8], + params: &BrotliEncoderParams, + alloc: Alloc) + -> Result + where InputType: Read, + OutputType: Write +{ + let mut nop_callback = |_data:&mut interface::PredictionModeContextMap, + _cmds: &mut [interface::StaticCommand], + _mb: interface::InputPair, _m: &mut Alloc|(); + BrotliCompressCustomIo(&mut IoReaderWrapper::(r), + &mut IoWriterWrapper::(w), + input_buffer, + output_buffer, + params, + alloc, + &mut nop_callback, + Error::new(ErrorKind::UnexpectedEof, "Unexpected EOF")) +} + +pub fn BrotliCompressCustomIo, + &mut [interface::StaticCommand], + interface::InputPair, &mut Alloc)> + (r: &mut InputType, + w: &mut OutputType, + input_buffer: &mut [u8], + output_buffer: &mut [u8], + params: &BrotliEncoderParams, + alloc: Alloc, + metablock_callback: &mut MetablockCallback, + unexpected_eof_error_constant: ErrType) + -> Result + where InputType: CustomRead, + OutputType: CustomWrite +{ + BrotliCompressCustomIoCustomDict(r,w,input_buffer,output_buffer, params, alloc, metablock_callback, &[], unexpected_eof_error_constant) +} +pub fn BrotliCompressCustomIoCustomDict, + &mut [interface::StaticCommand], + interface::InputPair, &mut Alloc)> + (r: &mut InputType, + w: &mut OutputType, + input_buffer: &mut [u8], + output_buffer: &mut [u8], + params: &BrotliEncoderParams, + alloc: Alloc, + metablock_callback: &mut MetablockCallback, + dict: &[u8], + unexpected_eof_error_constant: ErrType) + -> Result + where InputType: CustomRead, + OutputType: CustomWrite +{ + assert!(input_buffer.len() != 0); + assert!(output_buffer.len() != 0); + let mut s_orig = BrotliEncoderCreateInstance(alloc); + s_orig.params = params.clone(); + if dict.len() != 0 { + BrotliEncoderSetCustomDictionary(&mut s_orig, dict.len(), dict); + } + let mut next_in_offset: usize = 0; + let mut next_out_offset: usize = 0; + let mut total_out = Some(0usize); + let mut read_err: Result<(), ErrType> = Ok(()); + { + let s = &mut s_orig; + + //BrotliEncoderSetParameter(s, BrotliEncoderParameter::BROTLI_PARAM_MODE, 0 as (u32)); // gen, text, font + //BrotliEncoderSetParameter(s, + // BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, + // input.len() as (u32)); + let mut available_in: usize = 0; + let mut available_out: usize = output_buffer.len(); + let mut eof = false; + loop { + if available_in == 0 && !eof { + next_in_offset = 0; + match r.read(input_buffer) { + Err(e) => { + read_err = Err(e); + available_in = 0; + eof = true; + }, + Ok(size) => { + if size == 0 { + eof = true; + } + available_in = size; + } + } + } + let op : BrotliEncoderOperation; + if available_in == 0 { + op = BrotliEncoderOperation::BROTLI_OPERATION_FINISH; + } else { + op = BrotliEncoderOperation::BROTLI_OPERATION_PROCESS; + } + let result = BrotliEncoderCompressStream(s, + op, + &mut available_in, + input_buffer, + &mut next_in_offset, + &mut available_out, + output_buffer, + &mut next_out_offset, + &mut total_out, + metablock_callback); + let fin = BrotliEncoderIsFinished(s); + if available_out == 0 || fin != 0 { + let lim = output_buffer.len() - available_out; + assert_eq!(next_out_offset, lim); + next_out_offset = 0; + while next_out_offset < lim { + match w.write(&mut output_buffer[next_out_offset..lim]) { + Err(e) => { + BrotliEncoderDestroyInstance(s); + if let Err(err) = read_err { + return Err(err); + } + return Err(e); + } + Ok(size) => { + next_out_offset += size; + } + } + } + available_out = output_buffer.len(); + next_out_offset = 0; + } + if result <= 0 { + if let Ok(_) = read_err { + read_err = Err(unexpected_eof_error_constant); + } + break; + } + if fin != 0 { + break; + } + } + BrotliEncoderDestroyInstance(s); + } + if let Err(err) = read_err { + return Err(err) + } + Ok(total_out.unwrap()) +} + diff --git a/rust/vendor/brotli/src/enc/multithreading.rs b/rust/vendor/brotli/src/enc/multithreading.rs new file mode 100755 index 0000000..a6d740a --- /dev/null +++ b/rust/vendor/brotli/src/enc/multithreading.rs @@ -0,0 +1,148 @@ +#![cfg(feature="std")] +use core::mem; +use std; +use core::marker::PhantomData; +use std::thread::{ + JoinHandle, +}; +use alloc::{SliceWrapper, Allocator}; +use enc::BrotliAlloc; +use enc::BrotliEncoderParams; +use enc::backward_references::UnionHasher; +use enc::threading::{ + CompressMulti, + SendAlloc, + InternalSendAlloc, + BatchSpawnable, + BatchSpawnableLite, + Joinable, + Owned, + OwnedRetriever, + CompressionThreadResult, + InternalOwned, + BrotliEncoderThreadError, + AnyBoxConstructor, + PoisonedThreadError, +}; + +// in-place thread create + +use std::sync::RwLock; + + +pub struct MultiThreadedJoinable(JoinHandle, PhantomData); + +impl Joinable for MultiThreadedJoinable { + fn join(self) -> Result { + match self.0.join() { + Ok(t) => Ok(t), + Err(e) => Err(::new(e)), + } + } +} +pub struct MultiThreadedOwnedRetriever(RwLock); + +impl OwnedRetriever for MultiThreadedOwnedRetriever { + fn viewT>(&self, f:F) -> Result { + match self.0.read() { + Ok(u) => Ok(f(&*u)), + Err(_) => Err(PoisonedThreadError::default()), + } + } + fn unwrap(self) -> Result { + match self.0.into_inner() { + Ok(u) => Ok(u), + Err(_) => Err(PoisonedThreadError::default()), + } + } +} + + +#[derive(Default)] +pub struct MultiThreadedSpawner{} + + +fn spawn_work ReturnValue+Send+'static, + Alloc:BrotliAlloc+Send+'static, + U:Send+'static+Sync>( + extra_input: ExtraInput, + index: usize, num_threads: + usize, locked_input:std::sync::Arc>, + alloc:Alloc, f:F, +) -> std::thread::JoinHandle where >::AllocatedMemory:Send+'static { + std::thread::spawn(move || { + let t:ReturnValue = locked_input.view(move |guard:&U|->ReturnValue { + f(extra_input, index, num_threads, guard, alloc) + }).unwrap(); + t + }) +} + +impl BatchSpawnable for MultiThreadedSpawner +where >::AllocatedMemory:Send+'static { + type JoinHandle = MultiThreadedJoinable; + type FinalJoinHandle = std::sync::Arc>; + fn make_spawner( + &mut self, + input: &mut Owned, + ) -> Self::FinalJoinHandle { + std::sync::Arc::>::new(RwLock::new(mem::replace(input, Owned(InternalOwned::Borrowed)).unwrap())) + } + fn spawn ReturnValue+Send+'static+Copy>( + &mut self, + input: &mut Self::FinalJoinHandle, + work:&mut SendAlloc, + index: usize, + num_threads: usize, + f: F, + ) { + let (alloc, extra_input) = work.replace_with_default(); + let ret = spawn_work(extra_input, index, num_threads, input.clone(), alloc, f); + *work = SendAlloc(InternalSendAlloc::Join(MultiThreadedJoinable(ret, PhantomData::default()))); + } +} +impl + BatchSpawnableLite for MultiThreadedSpawner + where >::AllocatedMemory:Send+'static, + >::AllocatedMemory: Send+Sync, + >::AllocatedMemory: Send+Sync { + type JoinHandle = >::JoinHandle; + type FinalJoinHandle = >::FinalJoinHandle; + fn make_spawner( + &mut self, + input: &mut Owned, + ) -> Self::FinalJoinHandle { + >::make_spawner(self, input) + } + fn spawn( + &mut self, + handle:&mut Self::FinalJoinHandle, + alloc_per_thread:&mut SendAlloc, + index: usize, + num_threads: usize, + f: fn(ExtraInput, usize, usize, &U, Alloc) -> ReturnValue, + ) { + >::spawn(self, handle, alloc_per_thread, index, num_threads, f) + } +} + +pub fn compress_multi+Send+'static+Sync> ( + params:&BrotliEncoderParams, + owned_input: &mut Owned, + output: &mut [u8], + alloc_per_thread:&mut [SendAlloc, + UnionHasher, + Alloc, + ,UnionHasher, Alloc, SliceW>>::JoinHandle>], +) -> Result + where >::AllocatedMemory: Send, + >::AllocatedMemory: Send+Sync, + >::AllocatedMemory: Send+Sync { + CompressMulti(params, owned_input, output, alloc_per_thread, &mut MultiThreadedSpawner::default()) +} + diff --git a/rust/vendor/brotli/src/enc/parameters.rs b/rust/vendor/brotli/src/enc/parameters.rs new file mode 100644 index 0000000..e1903fa --- /dev/null +++ b/rust/vendor/brotli/src/enc/parameters.rs @@ -0,0 +1,259 @@ +#[derive(PartialEq, Eq, Copy, Clone, Debug)] +#[repr(C)] +pub enum BrotliEncoderParameter { + BROTLI_PARAM_MODE = 0, + BROTLI_PARAM_QUALITY = 1, + BROTLI_PARAM_LGWIN = 2, + BROTLI_PARAM_LGBLOCK = 3, + BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING = 4, + BROTLI_PARAM_SIZE_HINT = 5, + BROTLI_PARAM_LARGE_WINDOW = 6, + BROTLI_PARAM_Q9_5 = 150, + BROTLI_METABLOCK_CALLBACK = 151, + BROTLI_PARAM_STRIDE_DETECTION_QUALITY = 152, + BROTLI_PARAM_HIGH_ENTROPY_DETECTION_QUALITY = 153, + BROTLI_PARAM_LITERAL_BYTE_SCORE = 154, + BROTLI_PARAM_CDF_ADAPTATION_DETECTION = 155, + BROTLI_PARAM_PRIOR_BITMASK_DETECTION = 156, + BROTLI_PARAM_SPEED = 157, + BROTLI_PARAM_SPEED_MAX = 158, + BROTLI_PARAM_CM_SPEED = 159, + BROTLI_PARAM_CM_SPEED_MAX = 160, + BROTLI_PARAM_SPEED_LOW = 161, + BROTLI_PARAM_SPEED_LOW_MAX = 162, + BROTLI_PARAM_CM_SPEED_LOW = 164, + BROTLI_PARAM_CM_SPEED_LOW_MAX = 165, + BROTLI_PARAM_AVOID_DISTANCE_PREFIX_SEARCH = 166, + BROTLI_PARAM_CATABLE = 167, + BROTLI_PARAM_APPENDABLE = 168, + BROTLI_PARAM_MAGIC_NUMBER = 169, + BROTLI_PARAM_NO_DICTIONARY = 170, + BROTLI_PARAM_FAVOR_EFFICIENCY = 171, + UNUSED7=7, + UNUSED8=8, + UNUSED9=9, + UNUSED10=10, + UNUSED11=11, + UNUSED12=12, + UNUSED13=13, + UNUSED14=14, + UNUSED15=15, + UNUSED16=16, + UNUSED17=17, + UNUSED18=18, + UNUSED19=19, + UNUSED20=20, + UNUSED21=21, + UNUSED22=22, + UNUSED23=23, + UNUSED24=24, + UNUSED25=25, + UNUSED26=26, + UNUSED27=27, + UNUSED28=28, + UNUSED29=29, + UNUSED30=30, + UNUSED31=31, + UNUSED32=32, + UNUSED33=33, + UNUSED34=34, + UNUSED35=35, + UNUSED36=36, + UNUSED37=37, + UNUSED38=38, + UNUSED39=39, + UNUSED40=40, + UNUSED41=41, + UNUSED42=42, + UNUSED43=43, + UNUSED44=44, + UNUSED45=45, + UNUSED46=46, + UNUSED47=47, + UNUSED48=48, + UNUSED49=49, + UNUSED50=50, + UNUSED51=51, + UNUSED52=52, + UNUSED53=53, + UNUSED54=54, + UNUSED55=55, + UNUSED56=56, + UNUSED57=57, + UNUSED58=58, + UNUSED59=59, + UNUSED60=60, + UNUSED61=61, + UNUSED62=62, + UNUSED63=63, + UNUSED64=64, + UNUSED65=65, + UNUSED66=66, + UNUSED67=67, + UNUSED68=68, + UNUSED69=69, + UNUSED70=70, + UNUSED71=71, + UNUSED72=72, + UNUSED73=73, + UNUSED74=74, + UNUSED75=75, + UNUSED76=76, + UNUSED77=77, + UNUSED78=78, + UNUSED79=79, + UNUSED80=80, + UNUSED81=81, + UNUSED82=82, + UNUSED83=83, + UNUSED84=84, + UNUSED85=85, + UNUSED86=86, + UNUSED87=87, + UNUSED88=88, + UNUSED89=89, + UNUSED90=90, + UNUSED91=91, + UNUSED92=92, + UNUSED93=93, + UNUSED94=94, + UNUSED95=95, + UNUSED96=96, + UNUSED97=97, + UNUSED98=98, + UNUSED99=99, + UNUSED100=100, + UNUSED101=101, + UNUSED102=102, + UNUSED103=103, + UNUSED104=104, + UNUSED105=105, + UNUSED106=106, + UNUSED107=107, + UNUSED108=108, + UNUSED109=109, + UNUSED110=110, + UNUSED111=111, + UNUSED112=112, + UNUSED113=113, + UNUSED114=114, + UNUSED115=115, + UNUSED116=116, + UNUSED117=117, + UNUSED118=118, + UNUSED119=119, + UNUSED120=120, + UNUSED121=121, + UNUSED122=122, + UNUSED123=123, + UNUSED124=124, + UNUSED125=125, + UNUSED126=126, + UNUSED127=127, + UNUSED128=128, + UNUSED129=129, + UNUSED130=130, + UNUSED131=131, + UNUSED132=132, + UNUSED133=133, + UNUSED134=134, + UNUSED135=135, + UNUSED136=136, + UNUSED137=137, + UNUSED138=138, + UNUSED139=139, + UNUSED140=140, + UNUSED141=141, + UNUSED142=142, + UNUSED143=143, + UNUSED144=144, + UNUSED145=145, + UNUSED146=146, + UNUSED147=147, + UNUSED148=148, + UNUSED149=149, + UNUSED172=172, + UNUSED173=173, + UNUSED174=174, + UNUSED175=175, + UNUSED176=176, + UNUSED177=177, + UNUSED178=178, + UNUSED179=179, + UNUSED180=180, + UNUSED181=181, + UNUSED182=182, + UNUSED183=183, + UNUSED184=184, + UNUSED185=185, + UNUSED186=186, + UNUSED187=187, + UNUSED188=188, + UNUSED189=189, + UNUSED190=190, + UNUSED191=191, + UNUSED192=192, + UNUSED193=193, + UNUSED194=194, + UNUSED195=195, + UNUSED196=196, + UNUSED197=197, + UNUSED198=198, + UNUSED199=199, + UNUSED200=200, + UNUSED201=201, + UNUSED202=202, + UNUSED203=203, + UNUSED204=204, + UNUSED205=205, + UNUSED206=206, + UNUSED207=207, + UNUSED208=208, + UNUSED209=209, + UNUSED210=210, + UNUSED211=211, + UNUSED212=212, + UNUSED213=213, + UNUSED214=214, + UNUSED215=215, + UNUSED216=216, + UNUSED217=217, + UNUSED218=218, + UNUSED219=219, + UNUSED220=220, + UNUSED221=221, + UNUSED222=222, + UNUSED223=223, + UNUSED224=224, + UNUSED225=225, + UNUSED226=226, + UNUSED227=227, + UNUSED228=228, + UNUSED229=229, + UNUSED230=230, + UNUSED231=231, + UNUSED232=232, + UNUSED233=233, + UNUSED234=234, + UNUSED235=235, + UNUSED236=236, + UNUSED237=237, + UNUSED238=238, + UNUSED239=239, + UNUSED240=240, + UNUSED241=241, + UNUSED242=242, + UNUSED243=243, + UNUSED244=244, + UNUSED245=245, + UNUSED246=246, + UNUSED247=247, + UNUSED248=248, + UNUSED249=249, + UNUSED250=250, + UNUSED251=251, + UNUSED252=252, + UNUSED253=253, + UNUSED254=254, + UNUSED255=255, +} diff --git a/rust/vendor/brotli/src/enc/pdf.rs b/rust/vendor/brotli/src/enc/pdf.rs new file mode 100644 index 0000000..eaf89e8 --- /dev/null +++ b/rust/vendor/brotli/src/enc/pdf.rs @@ -0,0 +1,7 @@ + +//TODO: replace with builtin SIMD type + +#[derive(Copy, Clone, Default, Debug)] +pub struct PDF([i16;16]); + + diff --git a/rust/vendor/brotli/src/enc/prior_eval.rs b/rust/vendor/brotli/src/enc/prior_eval.rs new file mode 100644 index 0000000..d15a042 --- /dev/null +++ b/rust/vendor/brotli/src/enc/prior_eval.rs @@ -0,0 +1,694 @@ +use core; +use super::super::alloc; +use super::super::alloc::{SliceWrapper, SliceWrapperMut, Allocator}; +use super::interface; +use super::backward_references::BrotliEncoderParams; +use super::input_pair::{InputPair, InputReference, InputReferenceMut}; +use super::ir_interpret::{IRInterpreter, push_base}; +use super::util::{floatX, FastLog2u16}; +use super::find_stride; +use super::{s16, v8}; +#[cfg(feature="simd")] +use packed_simd_2::IntoBits; +// the high nibble, followed by the low nibbles +pub const CONTEXT_MAP_PRIOR_SIZE: usize = 256 * 17; +pub const STRIDE_PRIOR_SIZE: usize = 256 * 256 * 2; +pub const ADV_PRIOR_SIZE: usize = 65536 + (20 << 16); +pub const DEFAULT_SPEED: (u16, u16) = (8, 8192); + +pub enum WhichPrior { + CM = 0, + ADV = 1, + SLOW_CM = 2, + FAST_CM = 3, + STRIDE1 = 4, + STRIDE2 = 5, + STRIDE3 = 6, + STRIDE4 = 7, +// STRIDE8 = 8, + NUM_PRIORS = 8, + // future ideas +} + +pub trait Prior { + fn lookup_lin(stride_byte: u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize; + #[inline(always)] + fn lookup_mut(data:&mut [s16], stride_byte: u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> CDF { + let index = Self::lookup_lin(stride_byte, selected_context, actual_context, + high_nibble); + CDF::from(&mut data[index]) + } + #[inline(always)] + fn lookup(data:&[s16], stride_byte: u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> &s16 { + let index = Self::lookup_lin(stride_byte, selected_context, actual_context, + high_nibble); + &data[index] + } + #[allow(unused_variables)] + #[inline(always)] + fn score_index(stride_byte: u8, selected_context: u8, actual_context: usize, high_nibble: Option) -> usize { + let which = Self::which(); + assert!(which < WhichPrior::NUM_PRIORS as usize); + assert!(actual_context < 256); + if let Some(nibble) = high_nibble { + WhichPrior::NUM_PRIORS as usize * (actual_context + 4096 + 256 * nibble as usize) + which + } else { + WhichPrior::NUM_PRIORS as usize * (actual_context + 256 * (stride_byte >> 4) as usize) + which + } + } + fn which() -> usize; +} + +#[inline(always)] +fn upper_score_index(stride_byte: u8, _selected_context: u8, actual_context: usize) -> usize { + actual_context + 256 * (stride_byte >> 4) as usize +} +#[inline(always)] +fn lower_score_index(_stride_byte: u8, _selected_context: u8, actual_context: usize, high_nibble: u8) -> usize { + debug_assert!(actual_context< 256); + debug_assert!(high_nibble < 16); + actual_context + 4096 + 256 * high_nibble as usize +} + +#[allow(unused_variables)] +#[inline(always)] +fn stride_lookup_lin(stride_byte:u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + if let Some(nibble) = high_nibble { + 1 + 2 * (actual_context as usize + | ((stride_byte as usize & 0xf) << 8) + | ((nibble as usize) << 12)) + } else { + 2 * (actual_context as usize | ((stride_byte as usize) << 8)) + } +} +pub struct Stride1Prior{ +} +impl Stride1Prior { + #[inline(always)] + pub fn offset() -> usize{ + 0 + } +} + +impl Prior for Stride1Prior { + #[inline(always)] + fn lookup_lin(stride_byte:u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) + } + #[inline(always)] + fn which() -> usize { + WhichPrior::STRIDE1 as usize + } +} +/*impl StridePrior for Stride1Prior { + const STRIDE_OFFSET:usize = 0; +}*/ +pub struct Stride2Prior{ +} +impl Stride2Prior { + #[inline(always)] + pub fn offset() -> usize{ + 1 + } +} + +impl Prior for Stride2Prior { + #[inline(always)] + fn lookup_lin(stride_byte:u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) + } + #[inline] + fn which() -> usize { + WhichPrior::STRIDE2 as usize + } +} +/*impl StridePrior for Stride2Prior { + const STRIDE_OFFSET:usize = 1; +}*/ +pub struct Stride3Prior{ +} +impl Stride3Prior { + #[inline(always)] + pub fn offset() -> usize{ + 2 + } +} + +impl Prior for Stride3Prior { + #[inline(always)] + fn lookup_lin(stride_byte:u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) + } + #[inline(always)] + fn which() -> usize { + WhichPrior::STRIDE3 as usize + } +} + +/*impl StridePrior for Stride3Prior { + const STRIDE_OFFSET:usize = 2; +}*/ +pub struct Stride4Prior{ +} +impl Stride4Prior { + #[inline(always)] + pub fn offset() -> usize{ + 3 + } +} +impl Prior for Stride4Prior { + #[inline(always)] + fn lookup_lin(stride_byte:u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) + } + #[inline] + fn which() -> usize { + WhichPrior::STRIDE4 as usize + } +} + +/*impl StridePrior for Stride4Prior { + const STRIDE_OFFSET:usize = 3; +}*/ +/*pub struct Stride8Prior{ +} +impl StridePrior for Stride8Prior { + const STRIDE_OFFSET:usize = 7; +} +impl Stride8Prior { + #[inline(always)] + pub fn offset() -> usize{ + 7 + } +} +impl Prior for Stride8Prior { + fn lookup_lin(stride_byte:u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) + } + #[inline] + fn which() -> usize { + WhichPrior::STRIDE8 as usize + } +} +*/ +pub struct CMPrior { +} +impl Prior for CMPrior { + #[allow(unused_variables)] + #[inline(always)] + fn lookup_lin(stride_byte: u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + if let Some(nibble) = high_nibble { + (nibble as usize + 1) + 17 * actual_context + } else { + 17 * actual_context as usize + } + } + #[inline(always)] + fn which() -> usize { + WhichPrior::CM as usize + } +} +pub struct FastCMPrior { +} +impl Prior for FastCMPrior { + #[allow(unused_variables)] + #[inline(always)] + fn lookup_lin(stride_byte: u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + if let Some(nibble) = high_nibble { + 2 * actual_context + } else { + 2 * actual_context + 1 + } + } + #[inline(always)] + fn which() -> usize { + WhichPrior::FAST_CM as usize + } +} + +pub struct SlowCMPrior { +} +impl Prior for SlowCMPrior { + #[allow(unused_variables)] + #[inline(always)] + fn lookup_lin(stride_byte: u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + if let Some(nibble) = high_nibble { + (nibble as usize + 1) + 17 * actual_context + } else { + 17 * actual_context as usize + } + } + #[inline] + fn which() -> usize { + WhichPrior::SLOW_CM as usize + } +} + +pub struct AdvPrior { +} +impl Prior for AdvPrior { + #[allow(unused_variables)] + #[inline(always)] + fn lookup_lin(stride_byte: u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + if let Some(nibble) = high_nibble { + 65536 + ((actual_context as usize) + | ((stride_byte as usize) << 8) + | ((nibble as usize & 0xf) << 16)) + } else { + (actual_context as usize) + | ((stride_byte as usize & 0xf0) << 8) + } + } + #[inline(always)] + fn which() -> usize { + WhichPrior::ADV as usize + } +} + +pub struct CDF<'a> { + cdf:&'a mut s16, +} + +impl<'a> CDF<'a> { + #[inline(always)] + pub fn cost(&self, nibble_u8:u8) -> floatX { + let nibble = nibble_u8 as usize & 0xf; + let mut pdf = self.cdf.extract(usize::from(nibble)); + if nibble_u8 != 0 { + pdf -= self.cdf.extract(usize::from(nibble - 1)); + } + FastLog2u16(self.cdf.extract(15) as u16) - FastLog2u16(pdf as u16) + } + #[inline(always)] + pub fn update(&mut self, nibble_u8:u8, speed: (u16, u16)) { + let mut cdf = *self.cdf; + let increment_v = s16::splat(speed.0 as i16); + let one_to_16 = s16::new(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); + let mask_v: s16 = one_to_16.gt(s16::splat(i16::from(nibble_u8))).into_bits(); + cdf = cdf + (increment_v & mask_v); + if cdf.extract(15) >= speed.1 as i16{ + let cdf_bias = one_to_16; + cdf = cdf + cdf_bias - ((cdf + cdf_bias) >> 2); + } + *self.cdf = cdf; + } +} + +impl<'a> From<&'a mut s16> for CDF<'a> { + #[inline(always)] + fn from(cdf: &'a mut s16) -> CDF<'a> { + CDF { + cdf:cdf, + } + } +} + + +pub fn init_cdfs(cdfs: &mut [s16]) { + for item in cdfs.iter_mut() { + *item = s16::new(4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64); + } +} + + +pub struct PriorEval<'a, + Alloc:alloc::Allocator + alloc::Allocator + alloc::Allocator, + > { + input: InputPair<'a>, + context_map: interface::PredictionModeContextMap>, + block_type: u8, + local_byte_offset: usize, + _nop: >::AllocatedMemory, + cm_priors: >::AllocatedMemory, + slow_cm_priors: >::AllocatedMemory, + fast_cm_priors: >::AllocatedMemory, + stride_priors: [>::AllocatedMemory; 4], + adv_priors: >::AllocatedMemory, + _stride_pyramid_leaves: [u8; find_stride::NUM_LEAF_NODES], + score: >::AllocatedMemory, + cm_speed: [(u16, u16);2], + stride_speed: [(u16, u16);2], + cur_stride: u8, +} + +impl<'a, + Alloc:alloc::Allocator + alloc::Allocator + alloc::Allocator, + > PriorEval<'a, Alloc> { + pub fn new(alloc: &mut Alloc, + input: InputPair<'a>, + stride: [u8; find_stride::NUM_LEAF_NODES], + prediction_mode: interface::PredictionModeContextMap>, + params: &BrotliEncoderParams, + ) -> Self { + let do_alloc = params.prior_bitmask_detection != 0; + let mut cm_speed = prediction_mode.context_map_speed(); + let mut stride_speed = prediction_mode.stride_context_speed(); + if cm_speed[0] == (0,0) { + cm_speed[0] = params.literal_adaptation[2] + } + if cm_speed[0] == (0,0) { + cm_speed[0] = DEFAULT_SPEED; + } + if cm_speed[1] == (0,0) { + cm_speed[1] = params.literal_adaptation[3] + } + if cm_speed[1] == (0,0) { + cm_speed[1] = cm_speed[0]; + } + if stride_speed[0] == (0, 0) { + stride_speed[0] = params.literal_adaptation[0] + } + if stride_speed[0] == (0, 0) { + stride_speed[0] = DEFAULT_SPEED; + } + if stride_speed[1] == (0, 0) { + stride_speed[1] = params.literal_adaptation[1] + } + if stride_speed[1] == (0, 0) { + stride_speed[1] = stride_speed[0]; + } + let mut ret = PriorEval::{ + input: input, + context_map: prediction_mode, + block_type: 0, + cur_stride: 1, + local_byte_offset: 0, + _nop: >::AllocatedMemory::default(), + cm_priors: if do_alloc {>::alloc_cell(alloc, CONTEXT_MAP_PRIOR_SIZE)} else { + >::AllocatedMemory::default()}, + slow_cm_priors: if do_alloc {>::alloc_cell(alloc, CONTEXT_MAP_PRIOR_SIZE)} else { + >::AllocatedMemory::default()}, + fast_cm_priors: if do_alloc {>::alloc_cell(alloc, CONTEXT_MAP_PRIOR_SIZE)} else { + >::AllocatedMemory::default()}, + stride_priors: [ + if do_alloc {>::alloc_cell(alloc, STRIDE_PRIOR_SIZE)} else { + >::AllocatedMemory::default()}, + if do_alloc {>::alloc_cell(alloc, STRIDE_PRIOR_SIZE)} else { + >::AllocatedMemory::default()}, + if do_alloc {>::alloc_cell(alloc, STRIDE_PRIOR_SIZE)} else { + >::AllocatedMemory::default()}, + if do_alloc {>::alloc_cell(alloc, STRIDE_PRIOR_SIZE)} else { + >::AllocatedMemory::default()}, + /*if do_alloc {m16x16.alloc_cell(STRIDE_PRIOR_SIZE)} else { + Alloc16x16::AllocatedMemory::default()},*/], + adv_priors: if do_alloc {>::alloc_cell(alloc, ADV_PRIOR_SIZE)} else { + >::AllocatedMemory::default()}, + _stride_pyramid_leaves: stride, + score: if do_alloc {>::alloc_cell(alloc, 8192)} else { + >::AllocatedMemory::default()}, + cm_speed: cm_speed, + stride_speed: stride_speed, + }; + init_cdfs(ret.cm_priors.slice_mut()); + init_cdfs(ret.slow_cm_priors.slice_mut()); + init_cdfs(ret.fast_cm_priors.slice_mut()); + init_cdfs(ret.stride_priors[0].slice_mut()); + init_cdfs(ret.stride_priors[1].slice_mut()); + init_cdfs(ret.stride_priors[2].slice_mut()); + init_cdfs(ret.stride_priors[3].slice_mut()); + //init_cdfs(ret.stride_priors[4].slice_mut()); + init_cdfs(ret.adv_priors.slice_mut()); + ret + } + pub fn choose_bitmask(&mut self) { + let epsilon = 6.0; + let mut max_popularity = 0u32; + let mut max_popularity_index = 0u8; + assert_eq!(WhichPrior::NUM_PRIORS as usize, 8); + let mut popularity = [0u32; 8]; + let mut bitmask = [0u8; super::interface::NUM_MIXING_VALUES]; + for (i, score) in self.score.slice().iter().enumerate() { + let cm_score = score.extract(WhichPrior::CM as usize); + let slow_cm_score = score.extract(WhichPrior::SLOW_CM as usize); + let fast_cm_score = score.extract(WhichPrior::FAST_CM as usize) + 16.0; + let stride1_score = score.extract(WhichPrior::STRIDE1 as usize); + let stride2_score = score.extract(WhichPrior::STRIDE2 as usize); + let stride3_score = score.extract(WhichPrior::STRIDE3 as usize) + 16.0; + let stride4_score = score.extract(WhichPrior::STRIDE4 as usize); + //let stride8_score = score.extract(WhichPrior::STRIDE8) * 1.125 + 16.0; + let stride8_score = stride4_score + 1.0; // FIXME: never lowest -- ignore stride 8 + let stride_score = core::cmp::min(stride1_score as u64, + core::cmp::min(stride2_score as u64, + core::cmp::min(stride3_score as u64, + core::cmp::min(stride4_score as u64, + stride8_score as u64)))); + + let adv_score = score.extract(WhichPrior::ADV as usize); + if adv_score + epsilon < stride_score as floatX && adv_score + epsilon < cm_score && adv_score + epsilon < slow_cm_score && adv_score + epsilon < fast_cm_score { + bitmask[i] = 1; + } else if slow_cm_score + epsilon < stride_score as floatX && slow_cm_score + epsilon < cm_score && slow_cm_score + epsilon < fast_cm_score { + bitmask[i] = 2; + } else if fast_cm_score + epsilon < stride_score as floatX && fast_cm_score + epsilon < cm_score { + bitmask[i] = 3; + } else if epsilon + (stride_score as floatX) < cm_score { + bitmask[i] = WhichPrior::STRIDE1 as u8; + if stride_score == stride8_score as u64 { + //bitmask[i] = WhichPrior::STRIDE8 as u8; + } + if stride_score == stride4_score as u64 { + bitmask[i] = WhichPrior::STRIDE4 as u8; + } + if stride_score == stride3_score as u64 { + bitmask[i] = WhichPrior::STRIDE3 as u8; + } + if stride_score == stride2_score as u64 { + bitmask[i] = WhichPrior::STRIDE2 as u8; + } + if stride_score == stride1_score as u64 { + bitmask[i] = WhichPrior::STRIDE1 as u8; + } + } else { + bitmask[i] = 0; + } + if stride_score == 0 { + bitmask[i] = max_popularity_index; + //eprintln!("Miss {}[{}] ~ {}", bitmask[i], i, max_popularity_index); + } else { + popularity[bitmask[i] as usize] += 1; + if popularity[bitmask[i] as usize] > max_popularity { + max_popularity = popularity[bitmask[i] as usize]; + max_popularity_index = bitmask[i]; + } + //eprintln!("Score {} {} {} {} {}: {}[{}] max={},{}", cm_score, adv_score, slow_cm_score, fast_cm_score, stride_score, bitmask[i], i, max_popularity, max_popularity_index); + } + } + self.context_map.set_mixing_values(&bitmask); + } + pub fn free(&mut self, + alloc: &mut Alloc) { + >::free_cell(alloc, core::mem::replace(&mut self.score, >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut self.cm_priors, >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut self.slow_cm_priors, >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut self.fast_cm_priors, >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut self.stride_priors[0], >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut self.stride_priors[1], >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut self.stride_priors[2], >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut self.stride_priors[3], >::AllocatedMemory::default())); + //>::free_cell(alloc, core::mem::replace(&mut self.stride_priors[4], >::AllocatedMemory::default())); + >::free_cell(alloc, core::mem::replace(&mut self.adv_priors, >::AllocatedMemory::default())); + } + + pub fn take_prediction_mode(&mut self) -> interface::PredictionModeContextMap> { + core::mem::replace(&mut self.context_map, interface::PredictionModeContextMap::>{ + literal_context_map:InputReferenceMut::default(), + predmode_speed_and_distance_context_map:InputReferenceMut::default(), + }) + } + fn update_cost_base(&mut self, stride_prior: [u8;8], stride_prior_offset:usize, selected_bits: u8, cm_prior: usize, literal: u8) { + let mut l_score = v8::splat(0.0); + let mut h_score = v8::splat(0.0); + let base_stride_prior = stride_prior[stride_prior_offset.wrapping_sub(self.cur_stride as usize) & 7]; + let hscore_index = upper_score_index(base_stride_prior, selected_bits, cm_prior); + let lscore_index = lower_score_index(base_stride_prior, selected_bits, cm_prior, literal>>4); + { + type CurPrior = CMPrior; + let mut cdf = CurPrior::lookup_mut(self.cm_priors.slice_mut(), + base_stride_prior, selected_bits, cm_prior, None); + h_score = h_score.replace(CurPrior::which(), cdf.cost(literal>>4)); + cdf.update(literal >> 4, self.cm_speed[1]); + } + { + type CurPrior = CMPrior; + let mut cdf = CurPrior::lookup_mut(self.cm_priors.slice_mut(), + base_stride_prior, selected_bits, cm_prior, Some(literal >> 4)); + l_score = l_score.replace(CurPrior::which(), cdf.cost(literal&0xf)); + cdf.update(literal&0xf, self.cm_speed[0]); + } + { + type CurPrior = SlowCMPrior; + let mut cdf = CurPrior::lookup_mut(self.slow_cm_priors.slice_mut(), + base_stride_prior, selected_bits, cm_prior, None); + h_score = h_score.replace(CurPrior::which(), cdf.cost(literal>>4)); + cdf.update(literal >> 4, (0,1024)); + } + { + type CurPrior = SlowCMPrior; + let mut cdf = CurPrior::lookup_mut(self.slow_cm_priors.slice_mut(), + base_stride_prior, selected_bits, cm_prior, Some(literal >> 4)); + l_score = l_score.replace(CurPrior::which(), cdf.cost(literal&0xf)); + cdf.update(literal&0xf, (0,1024)); + } + { + type CurPrior = FastCMPrior; + let mut cdf = CurPrior::lookup_mut(self.fast_cm_priors.slice_mut(), + base_stride_prior, selected_bits, cm_prior, None); + h_score = h_score.replace(CurPrior::which(), cdf.cost(literal>>4)); + cdf.update(literal >> 4, self.cm_speed[0]); + } + { + type CurPrior = FastCMPrior; + let mut cdf = CurPrior::lookup_mut(self.fast_cm_priors.slice_mut(), + base_stride_prior, selected_bits, cm_prior, Some(literal >> 4)); + l_score = l_score.replace(CurPrior::which(), cdf.cost(literal&0xf)); + cdf.update(literal&0xf, self.cm_speed[0]); + } + { + type CurPrior = Stride1Prior; + let mut cdf = CurPrior::lookup_mut(self.stride_priors[0].slice_mut(), + stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset())&7], selected_bits, cm_prior, None); + h_score = h_score.replace(CurPrior::which(), cdf.cost(literal>>4)); + cdf.update(literal >> 4, self.stride_speed[1]); + } + { + type CurPrior = Stride1Prior; + let mut cdf = CurPrior::lookup_mut(self.stride_priors[0].slice_mut(), + stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset())&7], + selected_bits, + cm_prior, + Some(literal >> 4)); + l_score = l_score.replace(CurPrior::which(), cdf.cost(literal&0xf)); + cdf.update(literal&0xf, self.stride_speed[0]); + } + { + type CurPrior = Stride2Prior; + let mut cdf = CurPrior::lookup_mut(self.stride_priors[1].slice_mut(), + stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset())&7], selected_bits, cm_prior, None); + h_score = h_score.replace(CurPrior::which(), cdf.cost(literal>>4)); + cdf.update(literal >> 4, self.stride_speed[1]); + } + { + type CurPrior = Stride2Prior; + let mut cdf = CurPrior::lookup_mut(self.stride_priors[1].slice_mut(), + stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset())&7], + selected_bits, + cm_prior, + Some(literal >> 4)); + l_score = l_score.replace(CurPrior::which(), cdf.cost(literal&0xf)); + cdf.update(literal&0xf, self.stride_speed[0]); + } + { + type CurPrior = Stride3Prior; + let mut cdf = CurPrior::lookup_mut(self.stride_priors[2].slice_mut(), + stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset())&7], selected_bits, cm_prior, None); + h_score = h_score.replace(CurPrior::which(), cdf.cost(literal>>4)); + cdf.update(literal >> 4, self.stride_speed[1]); + } + { + type CurPrior = Stride3Prior; + let mut cdf = CurPrior::lookup_mut(self.stride_priors[2].slice_mut(), + stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset())&7], + selected_bits, + cm_prior, + Some(literal >> 4)); + l_score = l_score.replace(CurPrior::which(), cdf.cost(literal&0xf)); + cdf.update(literal&0xf, self.stride_speed[0]); + } + { + type CurPrior = Stride4Prior; + let mut cdf = CurPrior::lookup_mut(self.stride_priors[3].slice_mut(), + stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset())&7], selected_bits, cm_prior, None); + h_score = h_score.replace(CurPrior::which(), cdf.cost(literal>>4)); + cdf.update(literal >> 4, self.stride_speed[1]); + } + { + type CurPrior = Stride4Prior; + let mut cdf = CurPrior::lookup_mut(self.stride_priors[3].slice_mut(), + stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset())&7], + selected_bits, + cm_prior, + Some(literal >> 4)); + l_score = l_score.replace(CurPrior::which(), cdf.cost(literal&0xf)); + cdf.update(literal&0xf, self.stride_speed[0]); + } +/* { + type CurPrior = Stride8Prior; + let mut cdf = CurPrior::lookup_mut(self.stride_priors[4].slice_mut(), + stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset())&7], selected_bits, cm_prior, None); + h_score = h_score.replace(CurPrior::which(), cdf.cost(literal>>4)); + cdf.update(literal >> 4, self.stride_speed[1]); + } + { + type CurPrior = Stride8Prior; + let mut cdf = CurPrior::lookup_mut(self.stride_priors[4].slice_mut(), + stride_prior[stride_prior_offset.wrapping_sub(CurPrior::offset()) & 7], + selected_bits, + cm_prior, + Some(literal >> 4)); + l_score = l_score.replace(CurPrior::which(), cdf.cost(literal&0xf)); + cdf.update(literal&0xf, self.stride_speed[0]); + } +*/ + type CurPrior = AdvPrior; + { + let mut cdf = CurPrior::lookup_mut(self.adv_priors.slice_mut(), + base_stride_prior, selected_bits, cm_prior, None); + h_score = h_score.replace(CurPrior::which(), cdf.cost(literal>>4)); + cdf.update(literal >> 4, self.stride_speed[1]); + } + { + let mut cdf = CurPrior::lookup_mut(self.adv_priors.slice_mut(), + base_stride_prior, selected_bits, cm_prior, Some(literal >> 4)); + l_score = l_score.replace(CurPrior::which(), cdf.cost(literal&0xf)); + cdf.update(literal&0xf, self.stride_speed[0]); + } + self.score.slice_mut()[lscore_index] += l_score; + self.score.slice_mut()[hscore_index] += h_score; + } +} +impl<'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> IRInterpreter for PriorEval<'a, Alloc> { + #[inline] + fn inc_local_byte_offset(&mut self, inc: usize) { + self.local_byte_offset += inc; + } + #[inline] + fn local_byte_offset(&self) -> usize { + self.local_byte_offset + } + #[inline] + fn update_block_type(&mut self, new_type: u8, stride: u8) { + self.block_type = new_type; + self.cur_stride = stride; + } + #[inline] + fn block_type(&self) -> u8 { + self.block_type + } + #[inline] + fn literal_data_at_offset(&self, index:usize) -> u8 { + self.input[index] + } + #[inline] + fn literal_context_map(&self) -> &[u8] { + self.context_map.literal_context_map.slice() + } + #[inline] + fn prediction_mode(&self) -> ::interface::LiteralPredictionModeNibble { + self.context_map.literal_prediction_mode() + } + #[inline] + fn update_cost(&mut self, stride_prior: [u8;8], stride_prior_offset: usize, selected_bits: u8, cm_prior: usize, literal: u8) { + //let stride = self.cur_stride as usize; + self.update_cost_base(stride_prior, stride_prior_offset, selected_bits, cm_prior, literal) + } +} + + + +impl<'a, 'b, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> interface::CommandProcessor<'b> for PriorEval<'a, Alloc> { + #[inline] + fn push(&mut self, + val: interface::Command>) { + push_base(self, val) + } +} + diff --git a/rust/vendor/brotli/src/enc/reader.rs b/rust/vendor/brotli/src/enc/reader.rs new file mode 100755 index 0000000..b6aa3d0 --- /dev/null +++ b/rust/vendor/brotli/src/enc/reader.rs @@ -0,0 +1,261 @@ +#![cfg_attr(not(feature="std"), allow(unused_imports))] + +use super::combined_alloc::BrotliAlloc; +use super::encode::{BrotliEncoderCreateInstance, BrotliEncoderDestroyInstance, + BrotliEncoderParameter, BrotliEncoderSetParameter, BrotliEncoderOperation, + BrotliEncoderStateStruct, BrotliEncoderCompressStream, BrotliEncoderIsFinished}; +use super::backward_references::BrotliEncoderParams; +use super::interface; +use brotli_decompressor::CustomRead; + +#[cfg(feature="std")] +pub use brotli_decompressor::{IntoIoReader, IoReaderWrapper, IoWriterWrapper}; + +pub use alloc::{AllocatedStackMemory, Allocator, SliceWrapper, SliceWrapperMut, StackAllocator}; +#[cfg(feature="std")] +pub use alloc_stdlib::StandardAlloc; +#[cfg(feature="std")] +use std::io; + +#[cfg(feature="std")] +use std::io::{Read, Error, ErrorKind}; + + + +#[cfg(feature="std")] +pub struct CompressorReaderCustomAlloc, + Alloc: BrotliAlloc> ( + CompressorReaderCustomIo, + BufferType, + Alloc>); + + +#[cfg(feature="std")] +impl, + Alloc: BrotliAlloc> + CompressorReaderCustomAlloc + { + + pub fn new(r: R, buffer : BufferType, + alloc: Alloc, + q: u32, + lgwin: u32) -> Self { + CompressorReaderCustomAlloc::( + CompressorReaderCustomIo::, + BufferType, + Alloc>::new( + IntoIoReader::(r), + buffer, + alloc, + Error::new(ErrorKind::InvalidData, + "Invalid Data"), + q, lgwin)) + } + + pub fn get_ref(&self) -> &R { + &self.0.get_ref().0 + } + pub fn into_inner(self) -> R { + self.0.into_inner().0 + } +} + +#[cfg(feature="std")] +impl, + Alloc: BrotliAlloc> + Read for CompressorReaderCustomAlloc { + fn read(&mut self, buf: &mut [u8]) -> Result { + self.0.read(buf) + } +} + +#[cfg(feature="std")] +pub struct CompressorReader(CompressorReaderCustomAlloc>::AllocatedMemory, + StandardAlloc>); + + +#[cfg(feature="std")] +impl CompressorReader { + pub fn new(r: R, buffer_size: usize, q: u32, lgwin: u32) -> Self { + let mut alloc = StandardAlloc::default(); + let buffer = >::alloc_cell(&mut alloc, + if buffer_size == 0 { 4096} else {buffer_size}); + CompressorReader::(CompressorReaderCustomAlloc::new(r, + buffer, + alloc, + q, + lgwin)) + } + + pub fn with_params(r: R, buffer_size: usize, params: &BrotliEncoderParams) -> Self { + let mut reader = Self::new(r, buffer_size, params.quality as u32, params.lgwin as u32); + (reader.0).0.state.0.params = params.clone(); + reader + } + + pub fn get_ref(&self) -> &R { + self.0.get_ref() + } + pub fn into_inner(self) -> R { + self.0.into_inner() + } +} + + + +#[cfg(feature="std")] +impl Read for CompressorReader { + fn read(&mut self, buf: &mut [u8]) -> Result { + self.0.read(buf) + } +} + +pub struct CompressorReaderCustomIo, + BufferType: SliceWrapperMut, + Alloc: BrotliAlloc> +{ + input_buffer: BufferType, + total_out: Option, + input_offset: usize, + input_len: usize, + input: R, + input_eof: bool, + error_if_invalid_data: Option, + state: StateWrapper, +} +struct StateWrapper(BrotliEncoderStateStruct); + +impl Drop for StateWrapper { + fn drop(&mut self) { + BrotliEncoderDestroyInstance(&mut self.0); + } +} + +impl, + BufferType : SliceWrapperMut, + Alloc: BrotliAlloc> +CompressorReaderCustomIo +{ + + pub fn new(r: R, buffer : BufferType, + alloc : Alloc, + invalid_data_error_type : ErrType, + q: u32, + lgwin: u32) -> Self { + let mut ret = CompressorReaderCustomIo{ + input_buffer : buffer, + total_out : Some(0), + input_offset : 0, + input_len : 0, + input_eof : false, + input: r, + state : StateWrapper(BrotliEncoderCreateInstance(alloc)), + error_if_invalid_data : Some(invalid_data_error_type), + }; + BrotliEncoderSetParameter(&mut ret.state.0, + BrotliEncoderParameter::BROTLI_PARAM_QUALITY, + q as (u32)); + BrotliEncoderSetParameter(&mut ret.state.0, + BrotliEncoderParameter::BROTLI_PARAM_LGWIN, + lgwin as (u32)); + + ret + } + pub fn copy_to_front(&mut self) { + let avail_in = self.input_len - self.input_offset; + if self.input_offset == self.input_buffer.slice_mut().len() { + self.input_offset = 0; + self.input_len = 0; + } else if self.input_offset + 256 > self.input_buffer.slice_mut().len() && avail_in < self.input_offset { + let (first, second) = self.input_buffer.slice_mut().split_at_mut(self.input_offset); + first[0..avail_in].clone_from_slice(&second[0..avail_in]); + self.input_len -= self.input_offset; + self.input_offset = 0; + } + } + pub fn into_inner(self) -> R{ + match self { + CompressorReaderCustomIo { + input_buffer:_ib, + total_out:_to, + input_offset: _io, + input_len: _len, + input, + input_eof:_ieof, + error_if_invalid_data: _eiid, + state: _state, + } => { + input + } + } + } + pub fn get_ref(&self) -> &R { + &self.input + } +} +impl, + BufferType : SliceWrapperMut, + Alloc: BrotliAlloc> CustomRead for +CompressorReaderCustomIo { + fn read(&mut self, buf: &mut [u8]) -> Result { + let mut nop_callback = |_data:&mut interface::PredictionModeContextMap, + _cmds: &mut [interface::StaticCommand], + _mb: interface::InputPair, _mfv: &mut Alloc|(); + let mut output_offset : usize = 0; + let mut avail_out = buf.len(); + let mut avail_in = self.input_len - self.input_offset; + while output_offset == 0 { + if self.input_len < self.input_buffer.slice_mut().len() && !self.input_eof { + match self.input.read(&mut self.input_buffer.slice_mut()[self.input_len..]) { + Err(e) => return Err(e), + Ok(size) => if size == 0 { + self.input_eof = true; + }else { + self.input_len += size; + avail_in = self.input_len - self.input_offset; + }, + } + } + let op : BrotliEncoderOperation; + if avail_in == 0 { + op = BrotliEncoderOperation::BROTLI_OPERATION_FINISH; + } else { + op = BrotliEncoderOperation::BROTLI_OPERATION_PROCESS; + } + let ret = BrotliEncoderCompressStream( + &mut self.state.0, + op, + &mut avail_in, + &self.input_buffer.slice_mut()[..], + &mut self.input_offset, + &mut avail_out, + buf, + &mut output_offset, + &mut self.total_out, + &mut nop_callback); + if avail_in == 0 { + self.copy_to_front(); + } + if ret <= 0 { + return Err(self.error_if_invalid_data.take().unwrap()); + } + let fin = BrotliEncoderIsFinished(&mut self.state.0); + if fin != 0 { + break; + } + } + Ok(output_offset) + } +} + + diff --git a/rust/vendor/brotli/src/enc/singlethreading.rs b/rust/vendor/brotli/src/enc/singlethreading.rs new file mode 100644 index 0000000..a3e53a3 --- /dev/null +++ b/rust/vendor/brotli/src/enc/singlethreading.rs @@ -0,0 +1,167 @@ +use core::mem; +#[cfg(feature="std")] +use std; +use alloc::{SliceWrapper, Allocator}; +use enc::BrotliAlloc; +use enc::BrotliEncoderParams; +use core::marker::PhantomData; +use super::backward_references::{UnionHasher}; +use enc::threading::{ + CompressMulti, + SendAlloc, + InternalSendAlloc, + BatchSpawnable, + BatchSpawnableLite, + Joinable, + Owned, + OwnedRetriever, + CompressionThreadResult, + InternalOwned, + PoisonedThreadError, + BrotliEncoderThreadError, +}; + + + + + +pub struct SingleThreadedJoinable { + result:Result, +} +impl Joinable for SingleThreadedJoinable { + fn join(self) -> Result { + self.result + } +} +#[cfg(feature="std")] +pub struct SingleThreadedOwnedRetriever(std::sync::RwLock); +#[cfg(feature="std")] +impl OwnedRetriever for SingleThreadedOwnedRetriever { + fn view T>(&self, f:F) -> Result { + Ok(f(&*self.0.read().unwrap())) + } + fn unwrap(self) -> Result {Ok(self.0.into_inner().unwrap())} +} +#[cfg(feature="std")] +impl SingleThreadedOwnedRetriever { + fn new(u:U) -> Self { + SingleThreadedOwnedRetriever(std::sync::RwLock::new(u)) + } +} + +#[cfg(not(feature="std"))] +pub struct SingleThreadedOwnedRetriever(U); +#[cfg(not(feature="std"))] +impl SingleThreadedOwnedRetriever { + fn new(u:U) -> Self { + SingleThreadedOwnedRetriever(u) + } +} +#[cfg(not(feature="std"))] +impl OwnedRetriever for SingleThreadedOwnedRetriever { + fn viewT>(&self, f:F) -> Result { + Ok(f(&self.0)) + } + fn unwrap(self) -> Result {Ok(self.0)} +} + +#[derive(Default)] +pub struct SingleThreadedSpawner{} + +impl + BatchSpawnable for SingleThreadedSpawner +where >::AllocatedMemory:Send+'static { + type JoinHandle = SingleThreadedJoinable; + type FinalJoinHandle = SingleThreadedOwnedRetriever; + fn make_spawner( + &mut self, + input: &mut Owned, + ) ->Self::FinalJoinHandle { + SingleThreadedOwnedRetriever::::new(mem::replace(input, Owned(InternalOwned::Borrowed)).unwrap()) + } + fn spawn ReturnValue+Send+'static+Copy>( + &mut self, + handle: &mut Self::FinalJoinHandle, + work:&mut SendAlloc, + index: usize, + num_threads: usize, + f: F, + ) { + let (alloc, extra_input) = work.replace_with_default(); + let ret = handle.view(|sub_view| f(extra_input, index, num_threads, sub_view, alloc)); + *work = SendAlloc(InternalSendAlloc::Join(SingleThreadedJoinable{result:Ok(ret.unwrap())})); + } +} + +impl + BatchSpawnableLite for SingleThreadedSpawner + where >::AllocatedMemory:Send+'static { + type JoinHandle = >::JoinHandle; + type FinalJoinHandle = >::FinalJoinHandle; + + fn make_spawner( + &mut self, + input: &mut Owned, + ) -> Self::FinalJoinHandle { + >::make_spawner(self, input) + } + fn spawn( + &mut self, + handle:&mut Self::FinalJoinHandle, + alloc_per_thread:&mut SendAlloc, + index: usize, + num_threads: usize, + f: fn(ExtraInput, usize, usize, &U, Alloc) -> ReturnValue, + ) { + >::spawn(self, handle, alloc_per_thread, index, num_threads, f) + } +} + + +pub fn compress_multi+Send+'static+Sync> ( + params:&BrotliEncoderParams, + owned_input: &mut Owned, + output: &mut [u8], + alloc_per_thread:&mut [SendAlloc, + UnionHasher, + Alloc, + ,UnionHasher, Alloc, SliceW>>::JoinHandle>], +) -> Result where >::AllocatedMemory: Send, >::AllocatedMemory: Send, >::AllocatedMemory: Send { + CompressMulti(params, owned_input, output, alloc_per_thread, &mut SingleThreadedSpawner::default()) +} + +pub struct WorkerPool { + a: PhantomData, + b: PhantomData, + c: PhantomData, + d: PhantomData, +} +pub fn new_work_pool(_num_threads: usize) -> WorkerPool{ + WorkerPool::{ + a:PhantomData::default(), + b:PhantomData::default(), + c:PhantomData::default(), + d:PhantomData::default(), + } +} + +pub fn compress_worker_pool+Send+'static+Sync> ( + params:&BrotliEncoderParams, + owned_input: &mut Owned, + output: &mut [u8], + alloc_per_thread:&mut [SendAlloc, + UnionHasher, + Alloc, + , + UnionHasher, + Alloc, + SliceW>>::JoinHandle>], + _worker_pool:&mut WorkerPool, UnionHasher, Alloc, (SliceW, BrotliEncoderParams)>, +) -> Result where >::AllocatedMemory: Send, >::AllocatedMemory: Send, >::AllocatedMemory: Send { + compress_multi(params, owned_input, output, alloc_per_thread) +} diff --git a/rust/vendor/brotli/src/enc/static_dict.rs b/rust/vendor/brotli/src/enc/static_dict.rs new file mode 100755 index 0000000..bb09434 --- /dev/null +++ b/rust/vendor/brotli/src/enc/static_dict.rs @@ -0,0 +1,1179 @@ +use core; +pub const kNumDistanceCacheEntries: usize = 4; + +use super::static_dict_lut::{kDictHashMul32, kDictNumBits, kStaticDictionaryBuckets, + kStaticDictionaryWords, DictWord}; +use super::super::dictionary::{kBrotliDictionary, kBrotliDictionarySizeBitsByLength, + kBrotliDictionaryOffsetsByLength}; +#[allow(unused)] +static kUppercaseFirst: u8 = 10i32 as (u8); + +#[allow(unused)] +static kOmitLastNTransforms: [u8; 10] = [0i32 as (u8), + 12i32 as (u8), + 27i32 as (u8), + 23i32 as (u8), + 42i32 as (u8), + 63i32 as (u8), + 56i32 as (u8), + 48i32 as (u8), + 59i32 as (u8), + 64i32 as (u8)]; + +pub struct BrotliDictionary { + pub size_bits_by_length: &'static [u8; 25], + pub offsets_by_length: &'static [u32; 25], + pub data: &'static [u8; 122784], +} + +pub static kBrotliEncDictionary: BrotliDictionary = BrotliDictionary { + size_bits_by_length: &kBrotliDictionarySizeBitsByLength, + offsets_by_length: &kBrotliDictionaryOffsetsByLength, + data: &kBrotliDictionary, +}; + +#[inline(always)] +pub fn BrotliGetDictionary() -> &'static BrotliDictionary { + return &kBrotliEncDictionary; +} +#[inline(always)] +pub fn BROTLI_UNALIGNED_LOAD32(sl: &[u8]) -> u32 { + let mut p = [0u8;4]; + p[..].clone_from_slice(&sl.split_at(4).0); + return (p[0] as u32) | ((p[1] as u32) << 8) | ((p[2] as u32) << 16) | ((p[3] as u32) << 24); +} +#[inline(always)] +pub fn Hash(data: &[u8]) -> u32 { + let h: u32 = BROTLI_UNALIGNED_LOAD32(data).wrapping_mul(kDictHashMul32); + h >> 32i32 - kDictNumBits +} +#[inline(always)] +pub fn BROTLI_UNALIGNED_LOAD64(sl: &[u8]) -> u64 { + let mut p = [0u8;8]; + p[..].clone_from_slice(sl.split_at(8).0); + return (p[0] as u64) | ((p[1] as u64) << 8) | ((p[2] as u64) << 16) | + ((p[3] as u64) << 24) | ((p[4] as u64) << 32) | ((p[5] as u64) << 40) | + ((p[6] as u64) << 48) | ((p[7] as u64) << 56); +} +#[inline(always)] +pub fn BROTLI_UNALIGNED_STORE64(outp: &mut [u8], v: u64) { + let p = [(v & 0xff) as u8, + ((v >> 8) & 0xff) as u8, + ((v >> 16) & 0xff) as u8, + ((v >> 24) & 0xff) as u8, + ((v >> 32) & 0xff) as u8, + ((v >> 40) & 0xff) as u8, + ((v >> 48) & 0xff) as u8, + ((v >> 56) & 0xff) as u8]; + outp.split_at_mut(8).0.clone_from_slice(&p[..]); +} + +macro_rules! sub_match { + ($s1 : expr, $s2 : expr, $limit : expr, $matched : expr, $split_pair1 : expr, $split_pair2 : expr, $s1_lo : expr, $s2_lo : expr, $s1_as_64 : expr, $s2_as_64 : expr, $vec_len: expr) => { + $split_pair1 = $s1.split_at($vec_len); + $s1_lo[..$vec_len].clone_from_slice($split_pair1.0); + $s1 = $split_pair1.1; + $split_pair2 = $s2.split_at($vec_len); + $s2_lo[..$vec_len].clone_from_slice($split_pair2.0); + $s2 = $split_pair2.1; + $limit -= $vec_len; + for index in 0..($vec_len >> 3) { + $s1_as_64 = BROTLI_UNALIGNED_LOAD64(&$s1_lo[(index << 3)..((index + 1) << 3)]); + $s2_as_64 = BROTLI_UNALIGNED_LOAD64(&$s2_lo[(index << 3)..((index + 1) << 3)]); + if $s2_as_64 == $s1_as_64 { + $matched = $matched.wrapping_add(8usize) as u32 as usize; + } else { + $matched = $matched.wrapping_add((($s2_as_64 ^ $s1_as_64).trailing_zeros() >> 3i32) + as usize) as u32 as usize; + return $matched; + } + } + } +} + +macro_rules! sub_match8 { + ($s1 : expr, $s2 : expr, $limit : expr, $matched : expr, $s1_as_64 : expr, $s2_as_64 : expr) => { + $limit -= 8; + $s1_as_64 = BROTLI_UNALIGNED_LOAD64($s1); + $s1 = $s1.split_at(8).1; + $s2_as_64 = BROTLI_UNALIGNED_LOAD64($s2); + $s2 = $s2.split_at(8).1; + if $s2_as_64 == $s1_as_64 { + $matched = $matched.wrapping_add(8usize) as u32 as usize; + } else { + $matched = $matched.wrapping_add((($s2_as_64 ^ $s1_as_64).trailing_zeros() >> 3i32) + as usize) as u32 as usize; + return $matched; + } + } +} + +// factor of 10 slower (example takes 158s, not 30, and for the 30 second run it took 15 of them) +#[allow(unused)] +pub fn SlowerFindMatchLengthWithLimit(s1: &[u8], s2: &[u8], limit: usize) -> usize { + for index in 0..limit { + if s1[index] != s2[index] { + return index; + } + } + return limit; +} +// factor of 5 slower (example takes 90 seconds) +#[allow(unused)] +pub fn FindMatchLengthWithLimit(s1: &[u8], s2: &[u8], limit: usize) -> usize { + for (index, pair) in s1[..limit].iter().zip(s2[..limit].iter()).enumerate() { + if *pair.0 != *pair.1 { + return index; + } + } + return limit; +} +#[allow(unused)] +pub fn FindMatchLengthWithLimitMin4(s1: &[u8], s2: &[u8], limit: usize) -> usize { + let (s1_start, s1_rest) = s1.split_at(5); + let (s2_start, s2_rest) = s2.split_at(5); + let v0 = BROTLI_UNALIGNED_LOAD32(s1_start); + let v1 = BROTLI_UNALIGNED_LOAD32(s2_start); + let beyond_ok = s1_start[4] != s2_start[4]; + if v0 != v1 { + return 0; + } + if limit <= 4 || beyond_ok { + return core::cmp::min(limit, 4); + } + return ComplexFindMatchLengthWithLimit(s1_rest, s2_rest, limit - 5) + 5; +} +#[inline] +pub fn ComplexFindMatchLengthWithLimit(mut s1: &[u8], mut s2: &[u8], mut limit: usize) -> usize { + let mut matched: usize = 0usize; + let mut s1_as_64 : u64; + let mut s2_as_64 : u64; + if limit >= 8 { + sub_match8!(s1, s2, limit, matched, s1_as_64, s2_as_64); + if limit >= 16 { + let mut split_pair1 : (&[u8], &[u8]); + let mut split_pair2 : (&[u8], &[u8]); + { + let mut s1_lo = [0u8; 16]; + let mut s1_hi = [0u8; 16]; + sub_match!(s1, s2, limit, matched, split_pair1, split_pair2, s1_lo, s1_hi, s1_as_64, s2_as_64, 16); + } + if limit >= 32 { + let mut s1_lo_a = [0u8; 128]; + let mut s1_hi_a = [0u8; 128]; + sub_match!(s1, s2, limit, matched, split_pair1, split_pair2, s1_lo_a, s1_hi_a, s1_as_64, s2_as_64, 32); + if limit >= 64 { + sub_match!(s1, s2, limit, matched, split_pair1, split_pair2, s1_lo_a, s1_hi_a, s1_as_64, s2_as_64, 64); + while limit >= 128 { + sub_match!(s1, s2, limit, matched, split_pair1, split_pair2, s1_lo_a, s1_hi_a, s1_as_64, s2_as_64, 128); + } + } + } + } + while limit >= 8 { + sub_match8!(s1, s2, limit, matched, s1_as_64, s2_as_64); + } + } + assert!(s1.len() >= (limit & 7usize)); + assert!(s2.len() >= (limit & 7usize)); + for index in 0..(limit & 7usize) { + if s1[index] != s2[index] { + return matched + index; + } + } + matched + (limit & 7usize) // made it through the loop +} + +mod test { + #[allow(unused)] + fn construct_situation(seed : &[u8], mut output: &mut [u8], limit : usize, matchfor: usize) { + output[..].clone_from_slice(&seed[..]); + if matchfor >= limit { + return + } + output[matchfor] = output[matchfor].wrapping_add((matchfor as u8 % 253u8).wrapping_add(1)); + } + #[test] + fn test_find_match_length() { + let mut a = [91u8;600000]; + let mut b = [0u8;600000]; + for i in 1..a.len() { + a[i] = (a[i - 1] % 19u8).wrapping_add(17u8); + } + construct_situation(&a[..], &mut b[..], a.len(), 0); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 0); + construct_situation(&a[..], &mut b[..], a.len(), 1); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 1); + construct_situation(&a[..], &mut b[..], a.len(), 10); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 10); + construct_situation(&a[..], &mut b[..], a.len(), 9); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 9); + construct_situation(&a[..], &mut b[..], a.len(), 7); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 7); + construct_situation(&a[..], &mut b[..], a.len(), 8); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 8); + construct_situation(&a[..], &mut b[..], a.len(), 48); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 48); + construct_situation(&a[..], &mut b[..], a.len(), 49); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 49); + construct_situation(&a[..], &mut b[..], a.len(), 63); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 63); + construct_situation(&a[..], &mut b[..], a.len(), 222); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 222); + construct_situation(&a[..], &mut b[..], a.len(), 1590); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 1590); + construct_situation(&a[..], &mut b[..], a.len(), 12590); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 12590); + construct_situation(&a[..], &mut b[..], a.len(), 52592); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 52592); + construct_situation(&a[..], &mut b[..], a.len(), 152592); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 152592); + construct_situation(&a[..], &mut b[..], a.len(), 252591); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 252591); + construct_situation(&a[..], &mut b[..], a.len(), 131072); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 131072); + construct_situation(&a[..], &mut b[..], a.len(), 131073); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 131073); + construct_situation(&a[..], &mut b[..], a.len(), 131072 + 64 + 32 + 16 + 8); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 131072 + 64 + 32 + 16 + 8); + construct_situation(&a[..], &mut b[..], a.len(), 272144 + 64 + 32 + 16 + 8 + 1); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 272144 + 64 + 32 + 16 + 8 + 1); + construct_situation(&a[..], &mut b[..], a.len(), 2*272144 + 64 + 32 + 16 + 8); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), 2*272144 + 64 + 32 + 16 + 8); + construct_situation(&a[..], &mut b[..], a.len(), a.len()); + assert_eq!(super::FindMatchLengthWithLimit(&a[..], &b[..], a.len()), a.len()); + } +} +#[allow(unused)] +pub fn slowFindMatchLengthWithLimit(s1: &[u8], s2: &[u8], limit: usize) -> usize { + for (index, it) in s1[..limit].iter().zip(s2[..limit].iter()).enumerate() { + if it.0 != it.1 { + return index; + } + } + return limit; +} + +pub fn IsMatch(dictionary: &BrotliDictionary, w: DictWord, data: &[u8], max_length: usize) -> i32 { + if w.l as (usize) > max_length { + 0i32 + } else { + let offset: usize = ((*dictionary).offsets_by_length[w.l as (usize)] as (usize)) + .wrapping_add((w.len() as (usize)).wrapping_mul(w.idx() as (usize))); + let dict = &(*dictionary).data.split_at(offset).1; + if w.transform() as (i32) == 0i32 { + if !!(FindMatchLengthWithLimit(dict, data, w.l as (usize)) == w.l as (usize)) { + 1i32 + } else { + 0i32 + } + } else if w.transform() as (i32) == 10i32 { + if !!(dict[(0usize)] as (i32) >= b'a' as (i32) && + (dict[(0usize)] as (i32) <= b'z' as (i32)) && + (dict[(0usize)] as (i32) ^ 32i32 == data[(0usize)] as (i32)) && + (FindMatchLengthWithLimit(&dict.split_at(1).1, + &data.split_at(1).1, + (w.len() as (u32)).wrapping_sub(1u32) as (usize)) == + (w.len() as (u32)).wrapping_sub(1u32) as (usize))) { + 1i32 + } else { + 0i32 + } + } else { + let mut i: usize; + i = 0usize; + while i < w.len() as (usize) { + { + if dict[(i as (usize))] as (i32) >= b'a' as (i32) && + (dict[(i as (usize))] as (i32) <= b'z' as (i32)) { + if dict[(i as (usize))] as (i32) ^ 32i32 != data[(i as (usize))] as (i32) { + return 0i32; + } + } else if dict[(i as (usize))] as (i32) != data[(i as (usize))] as (i32) { + return 0i32; + } + } + i = i.wrapping_add(1 as (usize)); + } + 1i32 + } + } +} + +#[allow(unused)] +fn brotli_min_uint32_t(a: u32, b: u32) -> u32 { + if a < b { a } else { b } +} + +#[allow(unused)] +fn AddMatch(distance: usize, len: usize, len_code: usize, mut matches: &mut [u32]) { + let match_: u32 = (distance << 5i32).wrapping_add(len_code) as (u32); + matches[len as (usize)] = brotli_min_uint32_t(matches[len as (usize)], match_); +} + +#[allow(unused)] +fn brotli_min_size_t(a: usize, b: usize) -> usize { + if a < b { a } else { b } +} + +#[allow(unused)] +fn DictMatchLength(dictionary: &BrotliDictionary, + data: &[u8], + id: usize, + len: usize, + maxlen: usize) + -> usize { + let offset: usize = ((*dictionary).offsets_by_length[len] as (usize)) + .wrapping_add(len.wrapping_mul(id)); + FindMatchLengthWithLimit(&(*dictionary).data.split_at(offset).1, + data, + brotli_min_size_t(len, maxlen)) +} + +#[allow(unused)] +fn brotli_max_size_t(a: usize, b: usize) -> usize { + if a > b { a } else { b } +} + +#[allow(unused)] +pub fn BrotliFindAllStaticDictionaryMatches(dictionary: &BrotliDictionary, + data: &[u8], + min_length: usize, + max_length: usize, + mut matches: &mut [u32]) + -> i32 { + let mut has_found_match: i32 = 0i32; + { + let mut offset: usize = kStaticDictionaryBuckets[Hash(data) as (usize)] as (usize); + let mut end: i32 = (offset == 0) as (i32); + while end == 0 { + let mut w: DictWord = kStaticDictionaryWords[{ + let _old = offset; + offset = offset.wrapping_add(1 as (usize)); + _old + }]; + let l: usize = (w.len() as (i32) & 0x1fi32) as (usize); + let n: usize = 1usize << (*dictionary).size_bits_by_length[l] as (i32); + let id: usize = w.idx() as (usize); + end = !(w.len() as (i32) & 0x80i32 == 0) as (i32); + w.l = l as (u8); + if w.transform() as (i32) == 0i32 { + let matchlen: usize = DictMatchLength(dictionary, data, id, l, max_length); + let s: &[u8]; + let mut minlen: usize; + let maxlen: usize; + let mut len: usize; + if matchlen == l { + //eprint!("Adding match {} {} {}\n", w.len(), w.transform(), w.idx()); + AddMatch(id, l, l, matches); + has_found_match = 1i32; + } + if matchlen >= l.wrapping_sub(1usize) { + //eprint!("Bdding match {} {} {}\n", w.len(), w.transform(), w.idx()); + AddMatch(id.wrapping_add((12usize).wrapping_mul(n)), + l.wrapping_sub(1usize), + l, + matches); + if l.wrapping_add(2usize) < max_length && + (data[(l.wrapping_sub(1usize) as (usize))] as (i32) == b'i' as (i32)) && + (data[(l as (usize))] as (i32) == b'n' as (i32)) && + (data[(l.wrapping_add(1usize) as (usize))] as (i32) == b'g' as (i32)) && + (data[(l.wrapping_add(2usize) as (usize))] as (i32) == b' ' as (i32)) { + //eprint!("Cdding match {} {} {}\n", w.len(), w.transform(), w.idx()); + AddMatch(id.wrapping_add((49usize).wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } + has_found_match = 1i32; + } + minlen = min_length; + if l > 9usize { + minlen = brotli_max_size_t(minlen, l.wrapping_sub(9usize)); + } + maxlen = brotli_min_size_t(matchlen, l.wrapping_sub(2usize)); + len = minlen; + while len <= maxlen { + { + //eprint!("Ddding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((kOmitLastNTransforms[l.wrapping_sub(len)] as (usize)) + .wrapping_mul(n)), + len, + l, + matches); + has_found_match = 1i32; + } + len = len.wrapping_add(1 as (usize)); + } + if matchlen < l || l.wrapping_add(6usize) >= max_length { + { + continue; + } + } + s = &data.split_at(l as (usize)).1; + if s[(0usize)] as (i32) == b' ' as (i32) { + //eprint!("Edding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add(n), l.wrapping_add(1usize), l, matches); + if s[(1usize)] as (i32) == b'a' as (i32) { + if s[(2usize)] as (i32) == b' ' as (i32) { + //eprint!("Fdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((28usize).wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } else if s[(2usize)] as (i32) == b's' as (i32) { + if s[(3usize)] as (i32) == b' ' as (i32) { + //eprint!("Gdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((46usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } else if s[(2usize)] as (i32) == b't' as (i32) { + if s[(3usize)] as (i32) == b' ' as (i32) { + //eprint!("Hdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((60usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } else if s[(2usize)] as (i32) == b'n' as (i32) { + if s[(3usize)] as (i32) == b'd' as (i32) && (s[(4usize)] as (i32) == b' ' as (i32)) { + //eprint!("Idding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((10usize).wrapping_mul(n)), + l.wrapping_add(5usize), + l, + matches); + } + } + } else if s[(1usize)] as (i32) == b'b' as (i32) { + if s[(2usize)] as (i32) == b'y' as (i32) && (s[(3usize)] as (i32) == b' ' as (i32)) { + //eprint!("Jdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((38usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } else if s[(1usize)] as (i32) == b'i' as (i32) { + if s[(2usize)] as (i32) == b'n' as (i32) { + if s[(3usize)] as (i32) == b' ' as (i32) { + //eprint!("Kdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((16usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } else if s[(2usize)] as (i32) == b's' as (i32) { + if s[(3usize)] as (i32) == b' ' as (i32) { + //eprint!("Ldding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((47usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } + } else if s[(1usize)] as (i32) == b'f' as (i32) { + if s[(2usize)] as (i32) == b'o' as (i32) { + if s[(3usize)] as (i32) == b'r' as (i32) && (s[(4usize)] as (i32) == b' ' as (i32)) { + //eprint!("Mdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((25usize).wrapping_mul(n)), + l.wrapping_add(5usize), + l, + matches); + } + } else if s[(2usize)] as (i32) == b'r' as (i32) { + if s[(3usize)] as (i32) == b'o' as (i32) && (s[(4usize)] as (i32) == b'm' as (i32)) && + (s[(5usize)] as (i32) == b' ' as (i32)) { + //eprint!("Ndding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((37usize).wrapping_mul(n)), + l.wrapping_add(6usize), + l, + matches); + } + } + } else if s[(1usize)] as (i32) == b'o' as (i32) { + if s[(2usize)] as (i32) == b'f' as (i32) { + if s[(3usize)] as (i32) == b' ' as (i32) { + //eprint!("Odding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((8usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } else if s[(2usize)] as (i32) == b'n' as (i32) { + if s[(3usize)] as (i32) == b' ' as (i32) { + //eprint!("Pdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((45usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } + } else if s[(1usize)] as (i32) == b'n' as (i32) { + if s[(2usize)] as (i32) == b'o' as (i32) && (s[(3usize)] as (i32) == b't' as (i32)) && + (s[(4usize)] as (i32) == b' ' as (i32)) { + //eprint!("Qdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((80usize).wrapping_mul(n)), + l.wrapping_add(5usize), + l, + matches); + } + } else if s[(1usize)] as (i32) == b't' as (i32) { + if s[(2usize)] as (i32) == b'h' as (i32) { + if s[(3usize)] as (i32) == b'e' as (i32) { + if s[(4usize)] as (i32) == b' ' as (i32) { + //eprint!("Rdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((5usize).wrapping_mul(n)), + l.wrapping_add(5usize), + l, + matches); + } + } else if s[(3usize)] as (i32) == b'a' as (i32) { + if s[(4usize)] as (i32) == b't' as (i32) && + (s[(5usize)] as (i32) == b' ' as (i32)) { + //eprint!("Sdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((29usize).wrapping_mul(n)), + l.wrapping_add(6usize), + l, + matches); + } + } + } else if s[(2usize)] as (i32) == b'o' as (i32) { + if s[(3usize)] as (i32) == b' ' as (i32) { + //eprint!("Tdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((17usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } + } else if s[(1usize)] as (i32) == b'w' as (i32) { + if s[(2usize)] as (i32) == b'i' as (i32) && (s[(3usize)] as (i32) == b't' as (i32)) && + (s[(4usize)] as (i32) == b'h' as (i32)) && + (s[(5usize)] as (i32) == b' ' as (i32)) { + //eprint!("Udding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((35usize).wrapping_mul(n)), + l.wrapping_add(6usize), + l, + matches); + } + } + } else if s[(0usize)] as (i32) == b'\"' as (i32) { + //eprint!("Vdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((19usize).wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + if s[(1usize)] as (i32) == b'>' as (i32) { + //eprint!("Wdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((21usize).wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b'.' as (i32) { + //eprint!("Xdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((20usize).wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + if s[(1usize)] as (i32) == b' ' as (i32) { + //eprint!("Ydding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((31usize).wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + if s[(2usize)] as (i32) == b'T' as (i32) && (s[(3usize)] as (i32) == b'h' as (i32)) { + if s[(4usize)] as (i32) == b'e' as (i32) { + if s[(5usize)] as (i32) == b' ' as (i32) { + //eprint!("Zdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((43usize).wrapping_mul(n)), + l.wrapping_add(6usize), + l, + matches); + } + } else if s[(4usize)] as (i32) == b'i' as (i32) { + if s[(5usize)] as (i32) == b's' as (i32) && + (s[(6usize)] as (i32) == b' ' as (i32)) { + //eprint!("AAdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((75usize).wrapping_mul(n)), + l.wrapping_add(7usize), + l, + matches); + } + } + } + } + } else if s[(0usize)] as (i32) == b',' as (i32) { + //eprint!("ABdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((76usize).wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + if s[(1usize)] as (i32) == b' ' as (i32) { + //eprint!("ACdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((14usize).wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b'\n' as (i32) { + //eprint!("ADdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((22usize).wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + if s[(1usize)] as (i32) == b'\t' as (i32) { + //eprint!("AEdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((50usize).wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b']' as (i32) { + //eprint!("AFdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((24usize).wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + } else if s[(0usize)] as (i32) == b'\'' as (i32) { + //eprint!("AGdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((36usize).wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + } else if s[(0usize)] as (i32) == b':' as (i32) { + //eprint!("AHdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((51usize).wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + } else if s[(0usize)] as (i32) == b'(' as (i32) { + //eprint!("AIdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((57usize).wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + } else if s[(0usize)] as (i32) == b'=' as (i32) { + if s[(1usize)] as (i32) == b'\"' as (i32) { + //eprint!("AJdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((70usize).wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } else if s[(1usize)] as (i32) == b'\'' as (i32) { + //eprint!("AKdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((86usize).wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b'a' as (i32) { + if s[(1usize)] as (i32) == b'l' as (i32) && (s[(2usize)] as (i32) == b' ' as (i32)) { + //eprint!("ALdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((84usize).wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b'e' as (i32) { + if s[(1usize)] as (i32) == b'd' as (i32) { + if s[(2usize)] as (i32) == b' ' as (i32) { + //eprint!("AMdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((53usize).wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } + } else if s[(1usize)] as (i32) == b'r' as (i32) { + if s[(2usize)] as (i32) == b' ' as (i32) { + //eprint!("ANdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((82usize).wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } + } else if s[(1usize)] as (i32) == b's' as (i32) { + if s[(2usize)] as (i32) == b't' as (i32) && (s[(3usize)] as (i32) == b' ' as (i32)) { + //eprint!("AOdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((95usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } + } else if s[(0usize)] as (i32) == b'f' as (i32) { + if s[(1usize)] as (i32) == b'u' as (i32) && (s[(2usize)] as (i32) == b'l' as (i32)) && + (s[(3usize)] as (i32) == b' ' as (i32)) { + //eprint!("APdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((90usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b'i' as (i32) { + if s[(1usize)] as (i32) == b'v' as (i32) { + if s[(2usize)] as (i32) == b'e' as (i32) && (s[(3usize)] as (i32) == b' ' as (i32)) { + //eprint!("AQdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((92usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } else if s[(1usize)] as (i32) == b'z' as (i32) { + if s[(2usize)] as (i32) == b'e' as (i32) && (s[(3usize)] as (i32) == b' ' as (i32)) { + //eprint!("ARdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((100usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } + } else if s[(0usize)] as (i32) == b'l' as (i32) { + if s[(1usize)] as (i32) == b'e' as (i32) { + if s[(2usize)] as (i32) == b's' as (i32) && (s[(3usize)] as (i32) == b's' as (i32)) && + (s[(4usize)] as (i32) == b' ' as (i32)) { + //eprint!("ASdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((93usize).wrapping_mul(n)), + l.wrapping_add(5usize), + l, + matches); + } + } else if s[(1usize)] as (i32) == b'y' as (i32) { + if s[(2usize)] as (i32) == b' ' as (i32) { + //eprint!("ATdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((61usize).wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } + } + } else if s[(0usize)] as (i32) == b'o' as (i32) { + if s[(1usize)] as (i32) == b'u' as (i32) && (s[(2usize)] as (i32) == b's' as (i32)) && + (s[(3usize)] as (i32) == b' ' as (i32)) { + //eprint!("AUdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), len); + AddMatch(id.wrapping_add((106usize).wrapping_mul(n)), + l.wrapping_add(4usize), + l, + matches); + } + } + } else { + let is_all_caps: i32 = if !!(w.transform() as (i32) != kUppercaseFirst as (i32)) { + 1i32 + } else { + 0i32 + }; + let s: &[u8]; + if IsMatch(dictionary, w, data, max_length) == 0 { + { + continue; + } + } + //eprint!("AVdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 44i32 } else { 9i32 } as (usize)) + .wrapping_mul(n)), + l, + l, + matches); + has_found_match = 1i32; + if l.wrapping_add(1usize) >= max_length { + { + continue; + } + } + s = &data.split_at(l as (usize)).1; + if s[(0usize)] as (i32) == b' ' as (i32) { + //eprint!("AWdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 68i32 } else { 4i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + } else if s[(0usize)] as (i32) == b'\"' as (i32) { + //eprint!("AXdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 87i32 } else { 66i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + if s[(1usize)] as (i32) == b'>' as (i32) { + //eprint!("AYdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 97i32 } else { 69i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b'.' as (i32) { + //eprint!("AZdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 101i32 } else { 79i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + if s[(1usize)] as (i32) == b' ' as (i32) { + //eprint!("BAdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 114i32 } else { 88i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b',' as (i32) { + //eprint!("BBdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 112i32 } else { 99i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + if s[(1usize)] as (i32) == b' ' as (i32) { + //eprint!("BCdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 107i32 } else { 58i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b'\'' as (i32) { + //eprint!("BDdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 94i32 } else { 74i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + } else if s[(0usize)] as (i32) == b'(' as (i32) { + //eprint!("BEdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 113i32 } else { 78i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + } else if s[(0usize)] as (i32) == b'=' as (i32) { + if s[(1usize)] as (i32) == b'\"' as (i32) { + //eprint!("BFdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 105i32 } else { 104i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } else if s[(1usize)] as (i32) == b'\'' as (i32) { + //eprint!("BGdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 116i32 } else { 108i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } + } + } + } + } + if max_length >= 5usize && + (data[(0usize)] as (i32) == b' ' as (i32) || data[(0usize)] as (i32) == b'.' as (i32)) { + let is_space: i32 = if !!(data[(0usize)] as (i32) == b' ' as (i32)) { + 1i32 + } else { + 0i32 + }; + let mut offset: usize = kStaticDictionaryBuckets[Hash(&data.split_at(1).1) as (usize)] as (usize); + let mut end: i32 = (offset == 0) as (i32); + while end == 0 { + let mut w: DictWord = kStaticDictionaryWords[{ + let _old = offset; + offset = offset.wrapping_add(1 as (usize)); + _old + }]; + let l: usize = (w.len() as (i32) & 0x1fi32) as (usize); + let n: usize = 1usize << (*dictionary).size_bits_by_length[l] as (i32); + let id: usize = w.idx() as (usize); + end = !(w.len() as (i32) & 0x80i32 == 0) as (i32); + w.l = l as (u8); + if w.transform() as (i32) == 0i32 { + let s: &[u8]; + if IsMatch(dictionary, + w, + &data.split_at(1).1, + max_length.wrapping_sub(1usize)) == 0 { + { + continue; + } + } + //eprint!("BHdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_space != 0 { 6i32 } else { 32i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + has_found_match = 1i32; + if l.wrapping_add(2usize) >= max_length { + { + continue; + } + } + s = &data.split_at(l.wrapping_add(1usize) as (usize)).1; + if s[(0usize)] as (i32) == b' ' as (i32) { + //eprint!("BIdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_space != 0 { 2i32 } else { 77i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } else if s[(0usize)] as (i32) == b'(' as (i32) { + //eprint!("BJdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_space != 0 { 89i32 } else { 67i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } else if is_space != 0 { + if s[(0usize)] as (i32) == b',' as (i32) { + //eprint!("BKdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((103usize).wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + if s[(1usize)] as (i32) == b' ' as (i32) { + //eprint!("BLdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((33usize).wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b'.' as (i32) { + //eprint!("BMdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((71usize).wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + if s[(1usize)] as (i32) == b' ' as (i32) { + //eprint!("BNdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((52usize).wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b'=' as (i32) { + if s[(1usize)] as (i32) == b'\"' as (i32) { + //eprint!("BOdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((81usize).wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } else if s[(1usize)] as (i32) == b'\'' as (i32) { + //eprint!("BPdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((98usize).wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } + } + } + } else if is_space != 0 { + let is_all_caps: i32 = if !!(w.transform() as (i32) != kUppercaseFirst as (i32)) { + 1i32 + } else { + 0i32 + }; + let s: &[u8]; + if IsMatch(dictionary, + w, + &data.split_at(1).1, + max_length.wrapping_sub(1usize)) == 0 { + { + continue; + } + } + //eprint!("CAdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 85i32 } else { 30i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(1usize), + l, + matches); + has_found_match = 1i32; + if l.wrapping_add(2usize) >= max_length { + { + continue; + } + } + s = &data.split_at(l.wrapping_add(1)).1; + if s[(0usize)] as (i32) == b' ' as (i32) { + //eprint!("CBdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 83i32 } else { 15i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } else if s[(0usize)] as (i32) == b',' as (i32) { + if is_all_caps == 0 { + //eprint!("CCdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((109usize).wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + } + if s[(1usize)] as (i32) == b' ' as (i32) { + //eprint!("CDdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 111i32 } else { 65i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b'.' as (i32) { + //eprint!("CEdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 115i32 } else { 96i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + if s[(1usize)] as (i32) == b' ' as (i32) { + //eprint!("CFdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 117i32 } else { 91i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } + } else if s[(0usize)] as (i32) == b'=' as (i32) { + if s[(1usize)] as (i32) == b'\"' as (i32) { + //eprint!("CGdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 110i32 } else { 118i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } else if s[(1usize)] as (i32) == b'\'' as (i32) { + //eprint!("CHdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if is_all_caps != 0 { 119i32 } else { 120i32 } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + } + } + } + } + } + if max_length >= 6usize { + if data[(1usize)] as (i32) == b' ' as (i32) && + (data[(0usize)] as (i32) == b'e' as (i32) || data[(0usize)] as (i32) == b's' as (i32) || + data[(0usize)] as (i32) == b',' as (i32)) || + data[(0usize)] as (i32) == 0xc2i32 && (data[(1usize)] as (i32) == 0xa0i32) { + let mut offset: usize = kStaticDictionaryBuckets[Hash(&data.split_at(2).1) as (usize)] as + (usize); + let mut end: i32 = (offset == 0) as (i32); + while end == 0 { + let mut w: DictWord = kStaticDictionaryWords[{ + let _old = offset; + offset = offset.wrapping_add(1 as (usize)); + _old + }]; + let l: usize = (w.len() as (i32) & 0x1fi32) as (usize); + let n: usize = 1usize << (*dictionary).size_bits_by_length[l] as (i32); + let id: usize = w.idx() as (usize); + end = !(w.len() as (i32) & 0x80i32 == 0) as (i32); + w.l = l as (u8); + if w.transform() as (i32) == 0i32 && + (IsMatch(dictionary, + w, + &data.split_at(2).1, + max_length.wrapping_sub(2usize)) != 0) { + if data[(0usize)] as (i32) == 0xc2i32 { + //eprint!("CIdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((102usize).wrapping_mul(n)), + l.wrapping_add(2usize), + l, + matches); + has_found_match = 1i32; + } else if l.wrapping_add(2usize) < max_length && + (data[(l.wrapping_add(2usize) as (usize))] as (i32) == b' ' as (i32)) { + let t: usize = (if data[(0usize)] as (i32) == b'e' as (i32) { + 18i32 + } else if data[(0usize)] as (i32) == b's' as (i32) { + 7i32 + } else { + 13i32 + }) as (usize); + //eprint!("CJdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add(t.wrapping_mul(n)), + l.wrapping_add(3usize), + l, + matches); + has_found_match = 1i32; + } + } + } + } + } + if max_length >= 9usize { + if data[(0usize)] as (i32) == b' ' as (i32) && (data[(1usize)] as (i32) == b't' as (i32)) && + (data[(2usize)] as (i32) == b'h' as (i32)) && + (data[(3usize)] as (i32) == b'e' as (i32)) && + (data[(4usize)] as (i32) == b' ' as (i32)) || + data[(0usize)] as (i32) == b'.' as (i32) && (data[(1usize)] as (i32) == b'c' as (i32)) && + (data[(2usize)] as (i32) == b'o' as (i32)) && + (data[(3usize)] as (i32) == b'm' as (i32)) && + (data[(4usize)] as (i32) == b'/' as (i32)) { + let mut offset: usize = kStaticDictionaryBuckets[Hash(&data.split_at(5).1) as (usize)] as + (usize); + let mut end: i32 = (offset == 0) as (i32); + while end == 0 { + let mut w: DictWord = kStaticDictionaryWords[{ + let _old = offset; + offset = offset.wrapping_add(1 as (usize)); + _old + }]; + let l: usize = (w.len() as (i32) & 0x1fi32) as (usize); + let n: usize = 1usize << (*dictionary).size_bits_by_length[l] as (i32); + let id: usize = w.idx() as (usize); + end = !(w.len() as (i32) & 0x80i32 == 0) as (i32); + w.l = l as (u8); + if w.transform() as (i32) == 0i32 && + (IsMatch(dictionary, + w, + &data.split_at(5).1, + max_length.wrapping_sub(5usize)) != 0) { + //eprint!("CKdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((if data[(0usize)] as (i32) == b' ' as (i32) { + 41i32 + } else { + 72i32 + } as (usize)) + .wrapping_mul(n)), + l.wrapping_add(5usize), + l, + matches); + has_found_match = 1i32; + if l.wrapping_add(5usize) < max_length { + let s: &[u8] = &data.split_at(l.wrapping_add(5usize) as (usize)).1; + if data[(0usize)] as (i32) == b' ' as (i32) { + if l.wrapping_add(8usize) < max_length && (s[(0usize)] as (i32) == b' ' as (i32)) && + (s[(1usize)] as (i32) == b'o' as (i32)) && + (s[(2usize)] as (i32) == b'f' as (i32)) && + (s[(3usize)] as (i32) == b' ' as (i32)) { + //eprint!("CLdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((62usize).wrapping_mul(n)), + l.wrapping_add(9usize), + l, + matches); + if l.wrapping_add(12usize) < max_length && + (s[(4usize)] as (i32) == b't' as (i32)) && + (s[(5usize)] as (i32) == b'h' as (i32)) && + (s[(6usize)] as (i32) == b'e' as (i32)) && + (s[(7usize)] as (i32) == b' ' as (i32)) { + //eprint!("BQdding match {} {} {} {}\n", w.len(), w.transform(), w.idx(), 666); + AddMatch(id.wrapping_add((73usize).wrapping_mul(n)), + l.wrapping_add(13usize), + l, + matches); + } + } + } + } + } + } + } + } + has_found_match +} diff --git a/rust/vendor/brotli/src/enc/static_dict_lut.rs b/rust/vendor/brotli/src/enc/static_dict_lut.rs new file mode 100755 index 0000000..287f401 --- /dev/null +++ b/rust/vendor/brotli/src/enc/static_dict_lut.rs @@ -0,0 +1,33150 @@ +#![allow(dead_code)] +pub static kInvalidMatch: u32 = 0xfffffff; + +pub static kDictNumBits: i32 = 15; + +pub static kDictHashMul32: u32 = 0x1e35a7bd; +pub static kStaticDictionaryBuckets: [u16; 32768] = + [1,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,20,0,0,0,21,0,22,0,0,0,0,0,0,0,0, + 23,0,0,25,0,29,0,53,0,0,0,0,0,0,55,0,0,0,0,0,0,61,76,0,0,0,94,0,0, + 0,0,0,0,96,0,97,0,98,0,0,0,0,0,0,0,99,101,106,108,0,0,0,0,0,110,0, + 111,112,0,113,118,124,0,0,0,0,0,125,128,0,0,0,0,129,0,0,131,0,0,0,0,0, + 0,132,0,0,135,0,0,0,137,0,0,0,0,0,138,139,0,0,0,0,0,0,0,142,143,144, + 0,0,0,0,0,145,0,0,0,146,149,151,152,0,0,153,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,154,0,0,0,0,0,0,155,0,0,0,0,160,182,0,0,0,0,0,0,183,0,0,0,188, + 189,0,0,192,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,197,202,209,0,0,210,0, + 224,0,0,0,225,0,0,0,0,0,0,0,0,0,0,231,0,0,0,232,0,240,0,0,242,0,0,0, + 0,0,0,0,0,0,0,0,244,0,0,0,246,0,0,249,251,253,0,0,0,0,0,258,0,0,261, + 263,0,0,0,267,0,0,268,0,269,0,0,0,0,0,0,0,0,0,271,0,0,0,0,0,0,272,0, + 273,0,277,0,278,286,0,0,0,0,287,0,289,290,291,0,0,0,295,0,0,296,297,0, + 0,0,0,0,0,0,0,0,0,298,0,0,0,299,0,0,305,0,324,0,0,0,0,0,327,0,328, + 329,0,0,0,0,336,0,0,340,0,341,342,343,0,0,346,0,348,0,0,0,0,0,0,349, + 351,0,0,355,0,363,0,364,0,368,369,0,370,0,0,0,0,0,0,0,372,0,0,0,0,0, + 0,0,0,0,0,0,373,0,375,0,0,0,0,376,377,0,0,394,395,396,0,0,398,0,0,0, + 0,400,0,0,408,0,0,0,0,420,0,0,0,0,0,0,421,0,0,422,423,0,0,429,435,436, + 442,0,0,443,0,444,445,453,456,0,457,0,0,0,0,0,458,0,0,0,459,0,0,0,460, + 0,462,463,465,0,0,0,0,0,0,466,469,0,0,0,0,0,0,470,0,0,0,474,0,476,0, + 0,0,0,483,0,485,0,0,0,486,0,0,488,491,492,0,0,497,499,500,0,501,0,0,0, + 505,0,0,506,0,0,0,507,0,0,0,509,0,0,0,0,511,512,519,0,0,0,0,0,0,529, + 530,0,0,0,534,0,0,0,0,543,0,0,0,0,0,0,0,0,0,553,0,0,0,0,557,560,0,0, + 0,0,0,0,561,0,564,0,0,0,0,0,0,565,566,0,575,0,619,0,620,0,0,623,624,0, + 0,0,625,0,0,626,627,0,0,628,0,0,0,0,630,0,631,0,0,0,0,0,0,0,0,0,641, + 0,0,0,0,643,656,668,0,0,0,673,0,0,0,674,0,0,0,0,0,0,0,0,682,0,687,0, + 690,0,693,699,700,0,0,0,0,0,0,704,705,0,0,0,0,707,710,0,711,0,0,0,0, + 726,0,0,729,0,0,0,730,731,0,0,0,0,0,752,0,0,0,762,0,763,0,0,767,0,0, + 0,770,774,0,0,775,0,0,0,0,0,0,0,0,0,0,776,0,0,0,777,783,0,0,0,785, + 788,0,0,0,0,790,0,0,0,793,0,0,0,0,794,0,0,804,819,821,0,827,0,0,0,834, + 0,0,835,0,0,0,841,0,844,0,850,851,859,0,860,0,0,0,0,0,0,0,874,0,876,0, + 877,890,0,0,0,0,0,0,0,0,893,894,898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 899,0,0,0,900,904,906,0,0,0,907,0,908,909,0,910,0,0,0,0,911,0,0,0,0,0, + 916,0,0,0,922,925,0,930,0,934,0,0,0,0,0,943,0,0,944,0,953,954,0,0,0,0, + 0,0,955,0,962,963,0,0,976,0,0,977,978,979,980,0,981,0,0,0,0,984,0,0, + 985,0,0,987,989,991,0,0,0,0,0,0,0,0,0,992,0,0,0,993,0,0,0,0,0,0,996, + 0,0,0,1000,0,0,0,0,0,1002,0,0,0,0,1005,1007,0,0,0,1009,0,0,0,1010,0,0, + 0,0,0,0,1011,0,1012,0,0,0,0,1014,1016,0,0,0,1020,0,1021,0,0,0,0,1022,0, + 0,0,1024,0,0,0,0,0,0,1025,0,0,1026,1027,0,0,0,0,0,1031,0,1033,0,0,0,0, + 1034,0,0,0,1037,1040,0,0,0,1042,1043,0,0,1053,0,1054,0,0,1057,0,0,0,1058, + 0,0,1060,0,0,0,0,0,0,0,1061,0,0,1062,0,0,0,0,1063,0,0,0,0,1064,0,0,0, + 0,0,1065,0,0,0,0,1066,1067,0,0,0,1069,1070,1072,0,0,0,0,0,0,1073,0,1075, + 0,0,0,0,0,0,1080,1084,0,0,0,0,1088,0,0,0,0,0,0,1094,0,1095,0,1107,0,0, + 0,1112,1114,0,1119,0,1122,0,0,1126,0,1129,0,1130,0,0,0,0,0,1132,0,0,0,0, + 0,0,1144,0,0,1145,1146,0,1148,1149,0,0,1150,1151,0,0,0,0,1152,0,1153,0,0, + 0,0,0,1154,0,1163,0,0,0,1164,0,0,0,0,0,1165,0,1167,0,1170,0,0,0,0,0, + 1171,1172,0,0,0,0,0,0,0,0,1173,1175,1177,0,1186,0,0,0,0,0,0,0,0,0,0, + 1195,0,0,1221,0,0,1224,0,0,1227,0,0,0,0,0,1228,1229,0,0,1230,0,0,0,0,0, + 0,0,0,0,1231,0,0,0,1233,0,0,1243,1244,1246,1248,0,0,0,0,1254,1255,1258, + 1259,0,0,0,1260,0,0,1261,0,0,0,1262,1264,0,0,1265,0,0,0,0,0,0,0,0,0,0, + 0,0,1266,0,1267,0,0,0,0,1273,1274,1276,1289,0,0,1291,1292,1293,0,0,1294, + 1295,1296,0,0,0,0,1302,0,1304,0,0,0,0,0,0,0,0,0,1311,1312,0,1314,0,1316, + 1320,1321,0,0,0,0,0,0,0,1322,1323,1324,0,1335,0,1336,0,0,0,0,1341,1342,0, + 1346,0,1357,0,0,0,1358,1360,0,0,0,0,0,0,1361,0,0,0,1362,1365,0,1366,0,0, + 0,0,0,0,0,1379,0,0,0,0,0,0,0,0,0,0,0,0,1386,0,1388,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,1395,0,0,0,0,1403,0,1405,0,0,1407,0,0,0,0,0,1408,1409,0, + 1410,0,0,0,1412,1413,1416,0,0,1429,1451,0,0,1454,0,0,0,0,0,0,0,1455,0,0, + 0,0,0,0,0,1456,0,0,0,0,1459,1460,1461,1475,0,0,0,0,0,0,1477,0,1480,0, + 1481,0,0,1486,0,0,1495,0,0,0,1496,0,0,1498,1499,1501,1520,1521,0,0,0,1526, + 0,0,0,0,1528,1529,0,1533,1536,0,0,0,1537,1538,1549,0,1550,1558,1559,1572,0, + 1573,0,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1579,0,1599,0,1603,0,1604,0,1605, + 0,0,0,0,0,1608,1610,0,0,0,0,1611,0,1615,0,1616,1618,0,1619,0,0,1622,0,0, + 0,0,1634,0,0,0,1635,0,0,0,1641,0,0,0,0,0,0,0,0,0,1643,0,0,0,1650,0,0, + 1652,0,0,0,0,0,1653,0,0,0,1654,0,0,0,0,1655,0,1662,0,0,1663,1664,0,0, + 1668,0,0,1669,1670,0,1672,1673,0,0,0,0,0,1674,0,0,0,1675,1676,1680,0,1682, + 0,0,1687,0,0,0,0,0,1704,0,0,1705,0,0,1721,0,0,0,0,1734,1735,0,0,0,0, + 1737,0,0,0,0,1739,0,0,1740,0,0,0,0,0,0,0,0,0,0,1741,1743,0,0,0,0,1745, + 0,0,0,1749,0,0,0,1751,0,0,0,0,0,0,1760,0,0,0,0,1765,0,0,0,0,0,1784,0, + 1785,1787,0,0,0,0,1788,1789,0,0,0,0,1790,1791,1793,0,1798,1799,0,0,0,0, + 1801,0,1803,1805,0,0,0,1806,1811,0,1812,1814,0,1821,0,0,0,0,0,1822,1833,0, + 0,0,0,0,0,1848,0,0,0,0,0,0,1857,0,0,0,1859,0,0,0,0,1861,0,0,0,0,0,0, + 0,1866,0,1921,1925,0,0,0,1929,1930,0,0,0,0,0,0,0,0,0,1931,0,0,0,0,1932, + 0,0,0,1934,0,0,0,0,0,0,0,0,1946,0,0,1948,0,0,0,0,1950,0,1957,0,1958,0, + 0,0,0,0,1965,1967,0,0,0,0,1968,0,1969,0,1971,1972,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,1973,0,0,0,0,1975,0,0,0,0,1976,1979,0,1982,0,0,0,0,1984,1988, + 0,0,0,0,1990,2004,2008,0,0,0,2012,2013,0,0,0,0,0,0,0,0,0,0,2015,0,2016, + 2017,0,0,0,0,2021,0,0,2025,0,0,0,0,0,2029,2036,2040,0,2042,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,2043,0,0,0,0,0,2045,0,0,0,0,0,0,0,2046,2047,0,2048, + 2049,0,2059,0,0,2063,0,2064,2065,0,0,2066,0,0,0,0,0,0,2069,0,0,0,0,2070, + 0,2071,0,2072,0,0,0,0,2080,2082,2083,0,0,0,0,0,2085,0,2086,2088,2089,2105, + 0,0,0,0,2107,0,0,2116,2117,0,2120,0,0,2122,0,0,0,0,0,2123,0,0,2125,2127, + 2128,0,0,0,2130,0,0,0,2137,2139,2140,2141,0,0,0,0,0,0,0,0,0,2144,2145,0, + 0,2146,2149,0,0,0,0,2150,0,0,2151,2158,0,2159,0,2160,0,0,0,0,0,0,2161, + 2162,0,0,2194,2202,0,0,0,0,0,0,2205,2217,0,2220,0,2221,0,2222,2224,0,0,0, + 0,2237,0,0,0,0,0,2238,0,2239,2241,0,0,2242,0,0,0,0,0,2243,0,0,0,0,0,0, + 2252,0,0,2253,0,0,0,2257,2258,0,0,0,2260,0,0,0,0,0,0,0,2262,0,2264,0,0, + 0,0,0,2269,2270,0,0,0,0,0,0,0,0,0,2271,0,2273,0,0,0,0,2277,0,0,0,0, + 2278,0,0,0,0,2279,0,2280,0,2283,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2287,0,0,0,0,0,0,0,2289,2290,0,0,0,0,2291,0,2292,0,0,0,2293,2295,2296,0, + 0,0,0,0,0,0,2298,0,0,0,0,0,2303,0,2305,0,0,2306,0,2307,0,0,0,0,0,0,0, + 0,0,0,0,0,2313,2314,2315,2316,0,0,2318,0,2319,0,2322,0,0,2323,0,2324,0, + 2326,0,0,0,0,0,0,0,2335,0,2336,2338,2339,0,2340,0,0,0,2355,0,2375,0,2382, + 2386,0,2387,0,0,2394,0,0,0,0,2395,0,2397,0,0,0,0,0,2398,0,0,0,0,0,0,0, + 2399,2402,2404,2408,2411,0,0,0,2413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2415,0, + 0,2416,2417,2419,0,2420,0,0,0,0,0,2425,0,0,0,2426,0,0,0,0,0,0,0,0,0,0, + 0,0,2427,2428,0,2429,0,0,2430,2434,0,2436,0,0,0,0,0,0,2441,2442,0,2445,0, + 0,2446,2457,0,2459,0,0,2462,0,2464,0,2477,0,2478,2486,0,0,0,2491,0,0,2493, + 0,0,2494,0,2495,0,2513,2523,0,0,0,0,2524,0,0,0,0,0,0,2528,2529,2530,0,0, + 2531,0,2533,0,0,2534,2535,0,2536,2537,0,2538,0,2539,2540,0,0,0,2545,2546,0, + 0,0,0,0,0,0,2548,0,0,2549,0,2550,2555,0,0,0,0,0,2557,0,2560,0,0,0,0,0, + 0,0,0,0,0,0,2561,0,2576,0,0,0,0,0,0,0,0,0,2577,2578,0,0,0,2579,0,0,0, + 0,0,0,0,2580,0,0,0,0,2581,0,0,0,0,2583,0,2584,0,2588,2590,0,0,0,2591,0, + 0,0,0,2593,2594,0,2595,0,2601,2602,0,0,2603,0,2605,0,0,0,2606,2607,2611,0, + 2615,0,0,0,2617,0,0,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,2620,0,0,0,2621,0, + 2623,0,2625,0,0,2628,2629,0,0,2635,2636,2637,0,0,2639,0,0,0,2642,0,0,0,0, + 2643,0,2644,0,2649,0,0,0,0,0,0,2655,2656,0,0,2657,0,0,0,0,0,2658,0,0,0, + 0,0,2659,0,0,0,0,2664,2685,0,2687,0,2688,0,0,2689,0,0,2694,0,2695,0,0, + 2698,0,2701,2706,0,0,0,2707,0,2709,2710,2711,0,0,0,2720,2730,2735,0,0,0,0, + 2738,2740,0,0,0,0,2747,0,0,0,0,0,0,2748,0,0,2749,0,0,0,0,0,2750,0,0, + 2752,2754,0,0,0,0,0,2758,0,0,0,0,2762,0,0,0,0,2763,0,0,0,0,0,0,0,2764, + 2767,0,0,0,0,2768,0,0,2770,0,0,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,2772, + 0,0,0,0,0,2773,2776,0,0,2783,0,0,2784,0,2789,0,2790,0,0,0,2792,0,0,0,0, + 0,0,0,0,0,0,2793,2795,0,0,0,0,0,0,2796,0,0,0,0,0,0,2797,2799,0,0,0,0, + 2803,0,0,0,0,2806,0,2807,2808,2817,2819,0,0,0,0,0,2821,0,0,0,0,2822,2823, + 0,0,0,0,0,0,0,2824,0,0,2828,0,2834,0,0,0,0,0,0,2836,0,2838,0,0,2839,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2841,0,0,0,2842,0,0,0,0,0,2843,2844, + 0,0,0,0,2846,0,0,2847,0,2849,0,2853,0,0,0,0,0,2857,0,0,0,0,2858,0,2859, + 0,0,2860,0,2862,2868,0,0,0,0,2875,0,2876,0,0,2877,2878,2884,2889,2890,0,0, + 2891,0,0,2892,0,0,0,2906,2912,0,2913,0,0,0,0,0,0,0,0,2916,0,2934,0,0,0, + 0,0,2935,0,0,0,0,2939,0,2940,0,0,0,0,0,0,0,2941,0,0,0,2946,0,2949,0,0, + 2950,2954,2955,0,0,0,2959,2961,0,0,2962,0,2963,0,0,0,0,0,0,2964,2965,2966, + 2967,0,0,0,0,0,0,0,2969,0,0,0,0,0,2970,2975,0,2982,2983,2984,0,0,0,0,0, + 2989,0,0,2990,0,0,0,0,0,0,0,2991,0,0,0,0,0,0,0,0,2998,0,3000,3001,0,0, + 3002,0,0,0,3003,0,0,3012,0,0,3022,0,0,3024,0,0,3025,3027,0,0,0,3030,0,0, + 0,0,3034,3035,0,0,3036,0,3039,0,3049,0,0,3050,0,0,0,0,0,0,3051,0,3053,0, + 0,0,0,3057,0,3058,0,0,0,0,0,0,0,0,3063,0,0,3073,3074,3078,3079,0,3080, + 3086,0,0,0,0,0,0,0,0,3087,0,3092,0,3095,0,3099,0,0,0,3100,0,3101,3102,0, + 3122,0,0,0,3124,0,3125,0,0,0,0,0,0,3132,3134,0,0,3136,0,0,0,0,0,0,0, + 3147,0,0,3149,0,0,0,0,0,3150,3151,3152,0,0,0,0,3158,0,0,3160,0,0,3161,0, + 0,3162,0,3163,3166,3168,0,0,3169,3170,0,0,3171,0,0,0,0,0,0,0,3182,0,3184, + 0,0,3188,0,0,3194,0,0,0,0,0,0,3204,0,0,0,0,3209,0,0,0,0,0,0,0,0,0,0, + 0,3216,3217,0,0,0,0,0,0,0,3219,0,0,3220,3222,0,3223,0,0,0,0,3224,0,3225, + 3226,0,3228,3233,0,3239,3241,3242,0,0,3251,3252,3253,3255,0,0,0,0,0,0,0,0, + 3260,0,0,3261,0,0,0,3267,0,0,0,0,0,0,0,0,3271,0,0,0,3278,0,3282,0,0,0, + 3284,0,0,0,3285,3286,0,0,0,0,0,0,0,3287,3292,0,0,0,0,3294,3296,0,0,3299, + 3300,3301,0,3302,0,0,0,0,0,3304,3306,0,0,0,0,0,0,3308,0,0,0,0,0,0,0,0, + 0,3311,0,0,0,0,0,0,0,0,3312,3314,3315,0,3318,0,0,0,0,0,0,0,0,3319,0,0, + 0,0,0,3321,0,0,0,0,0,0,0,0,0,3322,0,0,3324,3325,0,0,3326,0,0,3328,3329, + 3331,0,0,3335,0,0,3337,0,3338,0,0,0,0,3343,3347,0,0,0,3348,0,0,3351,0,0, + 0,0,0,0,3354,0,0,0,0,0,0,0,0,0,0,3355,0,0,3365,3366,3367,0,0,0,0,0,0, + 3368,3369,0,3370,0,0,3373,0,0,3376,0,0,3377,0,3379,3387,0,0,0,0,0,3390,0, + 0,0,0,0,0,0,3402,0,3403,3436,3437,3439,0,0,3441,0,0,0,3442,0,0,3449,0,0, + 0,3450,0,0,0,0,0,0,0,3451,0,0,3452,0,3453,3456,0,3457,0,0,3458,0,3459,0, + 0,0,0,0,0,0,0,0,3460,0,0,3469,3470,0,0,3475,0,0,0,3480,3487,3489,0,3490, + 0,0,3491,3499,0,3500,0,0,3501,0,0,0,3502,0,3514,0,0,0,3516,3517,0,0,0, + 3518,0,0,0,0,3520,3521,3522,0,0,3526,3530,0,0,0,0,3531,0,0,0,0,3536,0,0, + 0,0,0,0,0,3539,3541,0,0,3542,3544,0,3547,3548,0,0,3550,0,3553,0,0,0,0,0, + 0,0,3554,0,3555,0,3558,0,3559,0,0,0,0,0,0,0,0,3563,0,3581,0,0,0,3599,0, + 0,0,3600,0,3601,0,3602,3603,0,0,3606,3608,0,3610,3611,0,0,0,0,0,0,0,0,0, + 3612,3616,3619,0,0,0,0,0,0,0,0,0,0,0,0,0,3624,3628,0,3629,3634,3635,0,0, + 0,0,0,0,3636,0,3637,0,0,3638,3651,0,0,0,0,0,0,3652,3653,0,0,0,0,3656, + 3657,0,0,0,0,0,3658,0,0,0,0,3659,0,3661,3663,3664,0,3665,0,3692,0,0,0, + 3694,3696,0,0,0,0,0,0,0,0,0,0,0,0,3698,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,3700,0,0,3701,0,0,0,3708,3709,0,0,0,3711,3712,0,0,0,0,0,3723,0,3724, + 3725,0,0,3726,0,0,0,0,0,0,3728,3729,0,3734,3735,3737,0,0,0,3743,0,3745,0, + 0,3746,0,0,3747,3748,0,3757,0,3759,3766,3767,0,3768,0,0,0,0,3769,0,0,3771, + 0,3774,0,0,0,0,0,0,3775,0,0,0,0,0,0,3776,0,3777,3786,0,3788,3789,0,0,0, + 0,0,0,0,0,0,3791,0,3811,0,0,0,0,0,3814,3815,3816,3820,0,0,0,0,0,0,0, + 3821,0,0,3825,0,0,0,0,3835,0,0,3848,3849,0,0,0,0,3850,3851,3853,0,0,0,0, + 3859,0,3860,3862,0,0,0,0,0,3863,0,0,0,0,0,0,0,0,3873,0,3874,0,3875,3886, + 0,3887,0,0,0,0,3892,3913,0,3914,0,0,0,3925,3931,0,0,0,0,3934,3941,3942,0, + 0,0,0,3943,0,0,0,3944,0,0,0,0,0,3945,0,3947,0,0,0,3956,3957,0,0,0,0,0, + 0,0,0,0,3958,0,3959,3965,0,0,0,0,3966,0,0,0,3967,0,0,0,3968,3974,0,0,0, + 0,0,3975,3977,3978,0,0,0,0,3980,0,3985,0,0,0,0,0,0,0,0,3986,4011,0,0, + 4017,0,0,0,0,0,0,0,0,0,0,0,4018,0,0,0,0,4019,0,4023,0,0,0,4027,4028,0, + 0,0,0,0,0,0,0,4031,4034,0,0,4035,4037,4039,4040,0,0,0,0,0,4059,0,4060, + 4061,0,4062,4063,4066,0,0,4072,0,0,0,0,0,0,0,0,0,0,0,0,0,4088,0,0,0,0, + 0,4091,0,0,0,0,4094,4095,0,0,4096,0,0,0,0,0,4098,4099,0,0,0,4101,0,4104, + 0,0,0,4105,4108,0,4113,0,0,4115,4116,0,4126,0,0,4127,0,0,0,0,0,0,0,4128, + 4132,4133,0,4134,0,0,0,4137,0,0,4141,0,0,0,0,4144,4146,4147,0,0,0,0,4148, + 0,0,4311,0,0,0,4314,4329,0,4331,4332,0,4333,0,4334,0,0,0,4335,0,4336,0,0, + 0,4337,0,0,0,4342,4345,4346,4350,0,4351,4352,0,4354,4355,0,0,4364,0,0,0,0, + 4369,0,0,0,4373,0,4374,0,0,0,0,4377,0,0,0,0,4378,0,0,0,4380,0,0,0,4381, + 4382,0,0,0,0,0,0,0,4384,0,0,0,0,4385,0,0,0,4386,0,0,0,4391,4398,0,0,0, + 0,4407,4409,0,0,0,0,4410,0,0,4411,0,4414,4415,4418,0,4427,4428,4430,0,4431, + 0,4448,0,0,0,0,0,4449,0,0,0,4451,4452,0,4453,4454,0,4456,0,0,0,0,0,0,0, + 4459,0,4463,0,0,0,0,0,4466,0,4467,0,4469,0,0,0,0,0,0,0,0,0,0,0,0,0, + 4470,4471,0,4473,0,0,4475,0,0,0,0,4477,4478,0,0,0,4479,4481,0,4482,0,4484, + 0,0,0,0,0,0,0,4486,0,0,4488,0,0,4497,0,4508,0,0,4510,4511,0,4520,4523,0, + 4524,0,4525,0,4527,0,0,4528,0,0,0,0,4530,0,4531,0,0,4532,0,0,0,4533,0,0, + 0,0,0,4535,0,0,0,4536,0,0,0,0,0,4541,4543,4544,4545,4547,0,4548,0,0,0,0, + 4550,4551,0,4553,0,0,0,0,4562,0,0,4571,0,0,0,4574,0,0,0,4575,0,4576,0, + 4577,0,0,0,4581,0,0,0,0,0,4582,0,0,4586,0,0,0,4588,0,0,4597,0,4598,0,0, + 0,0,4616,4617,0,4618,0,0,0,0,4619,0,4620,0,0,4621,0,4624,0,0,0,0,0,4625, + 0,0,0,0,4657,0,4659,0,4667,0,0,0,4668,4670,0,4672,0,0,0,0,0,4673,4676,0, + 0,0,0,4687,0,0,0,0,4697,0,0,0,0,4699,0,4701,0,0,0,0,4702,0,0,4706,0,0, + 4713,0,0,0,4714,4715,4716,0,0,0,0,0,0,0,0,0,0,0,0,4717,0,0,4720,0,4721, + 4729,4735,0,0,0,4737,0,0,0,4739,0,0,0,4740,0,0,0,4741,0,0,0,0,0,4742,0, + 4745,4746,4747,0,0,0,0,0,0,0,0,4748,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,4751,4786,0,4787,0,4788,4796,0,0,4797,4798,0,4799, + 4806,4807,0,0,0,0,4809,4810,0,0,0,0,0,0,4811,0,0,0,0,0,4812,0,4813,0,0, + 4815,0,4821,4822,0,0,0,0,4823,0,0,0,0,0,0,0,0,0,0,4824,0,0,0,0,4826,0, + 0,0,4828,0,4829,0,0,0,4843,0,0,4847,0,4853,4855,4858,0,0,0,0,0,4859,0, + 4864,0,0,4879,0,0,0,0,4880,0,0,0,0,4881,0,4882,0,0,0,0,0,0,0,0,0,4883, + 0,0,0,0,4884,0,0,0,0,0,4886,4887,4888,4894,4896,0,4902,0,0,4905,0,0,4915, + 0,0,0,0,0,0,0,4916,4917,4919,4921,0,0,0,0,0,4926,0,0,0,0,4927,0,0,0,0, + 0,0,0,0,4929,0,4930,4931,0,4938,0,4952,0,4953,4957,4960,4964,0,0,0,0,0,0, + 0,5019,5020,5022,0,0,0,0,0,5023,0,0,0,5024,0,0,0,5025,0,0,0,0,5028,0,0, + 0,0,5029,5030,5031,0,5033,0,0,0,0,0,0,0,0,0,5034,5035,0,5036,0,0,5037,0, + 0,0,0,5038,0,0,5039,0,0,0,5041,5042,0,0,0,0,5044,5049,5054,0,5055,0,5057, + 0,0,0,5060,0,0,0,0,0,5063,0,5064,5065,0,5067,0,0,0,5068,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,5076,0,0,0,0,0,0,0,5077,0,0,5078,5080,0,0, + 5083,0,0,0,0,0,0,0,0,5085,0,0,0,0,0,0,5098,5099,5101,5105,5107,0,5108,0, + 5109,0,0,0,0,0,0,0,5110,0,0,0,0,0,5117,5118,0,5121,0,5122,0,0,5130,0,0, + 0,5137,0,0,0,5148,0,0,0,0,0,0,0,5151,5154,0,0,0,5155,0,0,5156,5159,5161, + 0,0,0,0,5162,0,0,0,0,5163,5164,0,5166,0,0,0,0,0,0,0,0,0,0,5167,0,0,0, + 5172,0,0,0,0,0,0,5178,5179,0,0,5190,0,0,5191,5192,5194,0,0,5198,5201,0,0, + 0,0,0,5203,0,5206,5209,0,0,0,0,0,0,5213,0,5214,5216,0,0,0,0,0,5217,0,0, + 0,0,0,0,0,0,5218,5219,0,5231,0,0,5244,5249,0,5254,0,5255,0,0,5257,0,0,0, + 0,0,5258,0,5260,5270,0,5277,0,0,0,0,0,0,5280,5281,5282,5283,0,0,0,0,0, + 5284,0,5285,0,0,0,0,0,5287,5288,0,0,0,0,0,0,0,0,0,0,5289,5291,0,0,5294, + 0,0,5295,0,0,0,0,0,0,0,5304,0,0,5306,5307,5308,0,5309,0,0,5310,0,0,0,0, + 5311,5312,0,5313,0,0,0,0,0,5316,0,0,0,5317,0,0,0,0,0,0,0,0,0,5325,0,0, + 0,0,0,0,5326,0,5327,5329,0,5332,0,0,0,0,5338,0,0,0,0,0,0,0,0,5340,0,0, + 5341,0,0,0,5342,0,5343,5344,0,0,5345,0,0,0,0,0,0,5347,5348,0,0,0,0,0,0, + 0,0,0,5349,0,5350,0,5354,0,0,0,0,5358,0,0,5359,0,0,5361,0,0,5365,0,5367, + 0,5373,0,0,0,5379,0,0,0,5380,0,0,0,5382,0,5384,0,0,0,0,0,0,5385,0,0,0, + 0,5387,0,0,0,0,0,0,5388,5390,5393,0,0,0,0,0,0,0,0,0,0,0,5396,0,0,0,0, + 5397,5402,0,0,0,0,0,5403,0,0,0,5404,5405,0,0,0,0,0,0,0,0,0,0,0,0,5406, + 0,0,0,0,5410,0,0,5411,0,5415,0,0,0,0,5416,5434,0,0,0,0,0,0,0,0,0,0,0, + 5438,0,5440,0,0,0,0,0,0,5441,5442,0,0,0,5443,5444,5447,0,0,5448,5449,5451, + 0,0,0,5456,5457,0,0,0,5459,0,0,0,5461,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 5464,0,5466,0,0,5467,0,5470,0,0,5473,0,0,5474,0,0,5476,0,0,0,0,0,0,0,0, + 0,0,0,5477,0,0,0,0,0,0,0,5484,0,0,5485,5486,0,0,0,0,0,5488,0,0,0,0,0, + 0,0,5489,0,0,0,0,0,5507,0,0,0,5510,0,5511,0,0,5512,0,0,0,5513,0,5515,0, + 0,5516,5517,0,5518,0,0,5522,0,0,0,0,0,5534,5535,0,0,5536,0,5538,0,0,5543, + 0,5544,0,0,5545,0,5547,0,5557,0,0,5558,0,5560,5567,0,0,0,0,5568,0,0,0, + 5571,5573,0,5574,0,5575,0,0,0,0,5577,0,0,5598,0,0,0,0,0,0,0,0,0,5600, + 5609,0,0,0,0,5610,0,0,5612,0,5624,0,5625,0,0,0,5629,0,5641,0,5642,5643,0, + 0,0,0,0,0,5651,0,0,0,5652,5653,0,5661,5662,5678,0,5679,0,0,0,0,5685,5686, + 0,0,0,0,0,5690,5692,0,5703,0,0,0,0,0,5706,0,0,0,0,5707,0,0,0,0,0,0, + 5708,0,0,5709,0,5710,0,0,0,5712,0,5733,0,5734,5735,0,0,5744,5751,0,0,0,0, + 0,0,0,0,0,0,0,0,5752,0,5754,0,0,0,0,0,0,5757,5758,0,5760,5761,0,0,0,0, + 5763,5764,5765,0,5766,0,5767,5768,0,5770,0,0,0,0,5776,5780,0,0,0,0,5782,0, + 0,0,0,5784,0,0,5788,0,0,0,0,0,0,0,0,0,0,0,5797,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,5799,0,0,5801,0,0,0,5811,0,0,0,0,0,0,5816,0,0,5827,0,0,0,0, + 0,0,0,0,5830,5831,0,0,5832,0,0,5833,0,5835,5844,5845,0,5846,0,0,0,0,0, + 5850,0,0,0,0,0,5852,0,5855,5857,0,0,5859,0,5861,0,0,5863,0,5865,0,0,0, + 5873,5875,0,0,0,5877,0,5879,0,0,0,5888,0,0,5889,5891,0,5894,0,0,0,0,0,0, + 5895,0,5897,0,0,0,0,0,0,5907,0,5911,0,0,5912,0,5913,5922,5924,0,5927,5928, + 0,0,0,0,5929,5930,0,5933,0,0,0,0,5949,0,0,5951,0,0,0,0,0,0,0,0,5953,0, + 0,5954,0,5959,5960,5961,0,5964,0,0,0,5976,5978,5987,5990,0,0,0,0,0,5991,0, + 5992,0,0,0,5994,5995,0,0,5996,0,0,6001,6003,0,0,0,0,6007,0,0,0,0,0,6008, + 0,0,6009,0,6010,0,0,0,6011,6015,0,6017,0,6019,0,6023,0,0,0,0,0,0,0,6025, + 0,0,0,0,0,0,0,0,0,0,6026,0,6030,0,0,6032,0,0,0,6033,6038,6040,0,0,0, + 6041,6045,0,0,6046,0,0,6053,0,0,6054,0,6055,0,0,0,0,0,0,6057,0,6063,0,0, + 0,6064,0,6066,6071,6072,0,0,0,0,0,0,6075,6076,0,0,6077,0,0,0,0,0,0,0,0, + 0,6078,6079,0,0,0,0,0,0,0,0,6080,0,6083,0,0,0,0,0,6084,0,0,6088,0,6089, + 0,0,6093,6105,0,0,6107,0,6110,0,0,0,6111,6125,6126,0,0,0,6129,0,0,0,0, + 6130,0,0,0,6131,6134,0,0,0,0,0,0,6142,0,0,0,0,0,6144,0,0,6146,6151,6153, + 0,6156,0,6163,0,6180,6181,0,0,0,0,0,6182,0,0,0,0,6184,6195,0,0,6206,0, + 6208,0,0,6212,6213,6214,0,6215,0,0,0,6228,0,0,0,6234,0,0,0,0,0,0,6235, + 6240,0,6242,6243,6244,0,6250,6255,0,0,0,0,0,6257,0,0,0,6258,6278,0,6284,0, + 0,0,6285,0,0,0,0,0,0,0,0,6286,0,0,0,6320,0,0,6322,6332,0,0,0,0,0,0,0, + 0,6334,0,0,0,0,0,0,0,6335,0,0,6337,0,6338,0,6339,6340,0,0,6356,6357,6369, + 0,0,0,6370,6371,6372,0,6373,0,0,0,0,0,6376,0,0,0,0,0,6382,6383,6384,0,0, + 0,0,6386,0,6389,6397,6400,6411,0,6414,0,0,0,0,0,0,0,6415,6416,0,0,0,0,0, + 0,6417,0,0,0,0,6418,0,0,0,0,0,0,0,6420,0,6421,6423,6425,0,6429,6430,0, + 6433,6438,0,0,0,0,0,0,0,0,0,0,6439,6440,0,0,6441,0,0,6444,0,0,0,0,6446, + 0,0,0,0,6447,6448,0,0,6450,0,0,0,6454,0,0,6455,0,6461,0,0,0,0,0,0,6462, + 0,0,6463,0,6464,0,6465,6467,0,0,0,6468,0,6479,6480,0,0,0,0,0,0,0,6481,0, + 0,6485,6487,0,0,0,0,0,0,6493,0,0,0,0,0,0,0,0,6494,6495,6496,0,0,0,0,0, + 6498,0,0,0,6507,6508,0,0,0,0,0,0,0,0,0,0,6511,6512,0,0,0,0,6513,0,0,0, + 6514,0,0,0,0,0,6516,0,0,6517,6518,0,0,0,6519,6520,6521,0,6523,0,0,0,0, + 6524,6528,0,6530,0,0,6532,0,6578,0,0,0,6583,0,6584,0,0,0,6587,0,0,0,6590, + 0,6591,0,0,0,0,0,6592,0,0,0,0,6593,6594,0,0,0,0,0,6599,6600,0,0,6601, + 6602,6604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6608,0,0,0,0,0,0,0,0,6610,6611, + 0,6615,0,6616,6618,6620,0,6637,0,0,0,0,6639,0,0,0,0,6641,0,6642,0,0,0, + 6647,0,6660,6663,0,6664,0,6666,6669,0,6675,6676,6677,0,0,0,0,0,0,0,0,0, + 6678,0,0,0,6679,0,6680,0,0,0,0,0,0,0,6693,0,0,0,0,0,0,0,0,0,6704,6705, + 6706,0,0,6711,6713,0,0,0,0,0,6716,0,0,0,6717,0,6719,6724,0,0,0,0,0,0,0, + 0,6725,6726,0,0,0,0,0,6728,6729,6735,0,6737,6742,0,0,6743,6750,0,6751,0,0, + 6752,6753,0,0,0,0,0,0,6754,0,0,0,0,0,6756,0,0,0,0,0,0,6763,0,0,6764, + 6765,0,0,0,6770,0,0,0,6776,6780,0,6781,0,0,0,6783,0,6784,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,6785,0,0,0,6792,0,0,0,6793,0,0,6802,0,0,0,0, + 0,6803,0,0,0,6804,0,0,0,6812,0,0,6823,0,6824,6839,0,0,0,0,6852,0,0,6854, + 0,6856,6857,0,0,0,0,0,0,0,0,0,6867,0,6868,6870,6872,0,0,0,6873,6874,0,0, + 0,0,0,6875,0,0,6877,0,0,0,0,0,0,0,6878,0,0,0,6879,0,6880,0,0,0,0,0,0, + 0,0,0,0,6887,0,6888,6891,6893,0,6895,0,0,0,0,0,0,0,0,6899,0,0,0,0,6901, + 0,0,0,0,6910,0,6911,0,0,6912,0,0,6913,6914,0,0,0,6915,0,0,0,6916,6919,0, + 0,0,0,0,0,6924,0,6925,0,0,0,6926,6927,6928,0,6929,0,6930,0,0,6931,6935,0, + 6936,0,0,0,0,6939,6940,6941,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6942,6948, + 6949,0,0,0,0,0,0,0,6952,6954,6963,6965,6966,0,0,6967,6968,0,0,0,0,0,0,0, + 0,0,6969,0,0,6970,6979,0,0,6980,0,0,6983,0,0,0,0,0,6984,0,0,0,0,0,0,0, + 6988,6990,6992,0,0,0,0,0,0,0,6995,0,0,0,7012,0,0,0,0,0,0,0,0,0,7019,0, + 0,0,0,0,0,0,0,7021,0,0,7022,7023,7028,0,7030,7033,0,0,0,0,0,0,7038,0,0, + 0,0,0,0,0,0,0,0,7039,0,0,0,0,0,7046,0,7047,0,0,0,0,0,0,0,0,0,0,0, + 7048,7052,0,0,0,0,0,7054,0,7060,0,0,0,0,7061,0,7065,0,0,0,0,7067,7069,0, + 7070,7071,7072,0,0,7078,0,7080,7081,0,7083,0,0,0,7084,7087,7088,0,0,7090,0, + 7093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7107,0,0,7108,0,0,0,0,0,0,0,0, + 7110,0,7114,0,0,0,0,0,0,0,7115,0,7116,0,0,0,0,0,7117,0,0,7118,0,0,7124, + 0,7125,0,0,7126,0,0,0,0,7128,0,0,0,0,0,7129,0,7130,0,7132,7133,0,0,7134, + 0,0,7139,0,7148,7150,0,0,0,0,7152,0,0,0,7153,7156,7157,0,0,0,0,0,7158,0, + 0,0,0,0,0,0,0,0,0,7163,7165,7169,0,7171,0,0,0,0,0,0,0,0,0,7172,0,7173, + 7181,0,0,0,0,0,7182,7185,0,0,0,0,7187,0,7201,7204,0,0,0,0,0,7206,7207,0, + 0,0,0,7211,7216,0,7218,0,0,0,0,7226,7228,7230,7232,7233,7235,7237,0,0,0,0, + 7238,7241,0,7242,0,0,7247,0,0,0,7266,0,0,0,0,0,0,0,7289,0,0,7290,7291,0, + 0,7292,0,7297,0,0,0,0,0,0,0,0,0,0,7300,0,7301,0,0,0,0,0,0,0,0,0,0,0, + 0,7302,0,0,0,0,7305,0,0,0,0,7307,0,7308,0,7310,0,7335,0,0,0,0,0,0,0, + 7337,0,7343,7347,0,0,0,0,0,7348,0,7349,7350,7352,7354,0,0,0,0,7357,0,7358, + 7366,0,7367,7368,0,0,7373,0,0,0,7374,0,0,0,0,0,0,0,7376,0,0,0,7377,0,0, + 0,0,0,7378,0,7379,7380,0,0,0,0,0,7383,0,0,7386,0,0,0,0,7398,0,0,0,7399, + 7400,0,7401,0,0,0,0,0,0,0,7402,0,0,0,0,0,7405,0,0,0,0,0,7406,0,0,0,0, + 0,0,0,0,7421,7427,7429,0,0,0,7435,0,0,7436,0,0,0,7437,0,0,0,0,0,0,7438, + 7443,0,7446,0,7448,0,0,0,0,0,0,0,0,0,0,7456,0,0,0,0,0,7457,0,0,7461,0, + 0,0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7463,7466,7472,0,7476,0,0, + 7490,0,7491,0,0,7493,0,0,0,7498,7499,0,0,7508,0,0,0,0,0,7512,0,0,0,7513, + 7514,7516,0,0,0,0,7518,0,0,7519,7521,7522,0,0,0,7526,0,0,7529,0,0,7531,0, + 7536,0,7538,0,7539,0,0,7541,7542,7546,0,0,0,0,0,7547,0,7548,0,0,0,0,0, + 7550,0,0,7552,7553,0,0,0,0,0,0,0,0,0,0,7554,7563,0,7573,0,0,0,0,0,0, + 7574,7576,0,7578,7581,7583,0,0,0,7584,0,7587,0,0,0,0,0,7589,0,0,0,7594,0, + 0,7595,0,0,7600,7602,7610,0,0,0,0,0,7612,0,7613,7614,0,0,7615,0,0,7616,0, + 7620,0,7621,7622,0,7623,0,0,0,0,7626,0,0,0,0,7627,7629,7631,0,0,7633,0,0, + 0,0,0,7639,0,7640,7642,0,0,7643,0,0,0,0,7644,0,0,0,0,0,0,0,7645,0,0,0, + 0,0,7661,7662,7663,7665,0,7666,0,7667,0,7684,7688,7690,0,7691,0,0,0,0,0,0, + 7692,0,0,7700,0,7707,0,7708,0,7709,0,7721,0,0,0,7722,0,7724,0,0,0,0,0,0, + 7729,7731,0,7732,0,7733,7735,0,0,0,0,0,0,0,7739,0,0,7741,7745,0,7748,0,0, + 0,7751,0,0,0,7752,0,0,0,0,0,0,0,7753,0,0,7756,0,7757,0,7759,0,7760,0,0, + 0,0,7761,7768,0,0,7769,0,0,7770,0,0,7771,0,0,7772,0,0,7773,0,0,0,0,0, + 7778,7783,0,0,0,0,0,7784,7785,0,7790,0,0,0,0,7792,0,7798,0,0,0,0,0,7799, + 0,7810,0,0,7813,0,7814,0,7816,0,7818,7824,7825,7826,0,7828,7830,0,0,0,7840, + 0,7842,0,7843,0,0,0,0,7844,0,0,0,0,0,0,0,7846,0,0,0,0,0,7856,7857,7858, + 7862,0,7865,0,0,7866,0,0,7913,0,0,0,0,7914,0,0,7915,7917,7918,7919,0,7920, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7921,7922,0,7924,0,0,7925,0,0,7927,0, + 7930,7935,0,0,7937,0,0,0,0,0,0,7939,0,7940,0,0,0,0,0,7941,0,0,0,0,7945, + 0,0,0,0,7949,0,0,0,0,0,0,0,0,7950,0,7953,0,0,0,0,0,0,0,7968,0,0,0,0, + 7969,7972,7992,0,7993,0,0,0,0,0,0,0,0,0,0,0,7994,0,0,0,0,8007,8008,0,0, + 0,0,0,0,0,0,0,0,0,0,8010,0,0,0,8012,0,0,0,0,0,0,0,0,8018,0,8028,8029, + 0,0,8030,0,0,8032,8033,0,0,8034,8036,0,0,0,0,0,0,0,0,0,0,8037,0,0,0, + 8043,8052,8059,8060,0,0,8061,0,0,0,8062,0,8063,0,8064,0,8066,8068,0,0,0, + 8080,8081,0,8089,0,0,0,0,0,8092,0,0,0,0,0,0,8093,8110,0,0,0,0,0,0,0, + 8111,0,0,0,0,0,8112,8115,0,8117,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8120, + 8121,8122,8128,8129,8130,8131,0,0,8139,0,0,8144,0,0,0,0,8145,8146,8153,0,0, + 0,0,0,0,0,0,8154,0,8157,8160,8162,0,8164,8165,0,0,0,0,8166,8167,0,0,8179, + 0,0,0,8185,0,0,0,8186,0,0,8187,0,0,0,8188,0,0,0,0,0,8204,0,0,0,0,8210, + 0,0,0,0,0,8213,0,8214,0,0,8215,0,0,0,0,0,0,8218,0,0,0,0,0,0,0,0,0, + 8219,0,8221,0,0,8222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8225,0,0,0,8233, + 0,0,8242,0,0,0,0,0,0,0,0,0,0,0,8247,0,8248,8252,0,8256,8257,0,0,8261,0, + 8264,8265,0,0,0,0,8267,0,0,0,8269,0,0,0,0,0,0,0,0,0,8270,0,0,0,8278,0, + 8279,8283,0,0,8285,8286,8289,8292,0,0,0,0,8293,8295,8299,8300,8301,0,0,0,0, + 0,0,8304,8307,0,0,0,0,0,0,0,8321,0,0,0,8322,8323,8325,8326,8327,0,0,8332, + 8338,0,0,8340,0,0,0,0,0,8350,0,0,8351,0,8354,8355,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,8360,8372,0,0,0,0,0,0,0,0,8377,0,0,0,0,8380,0,0,0,8383,0,8384, + 0,0,0,0,8386,8392,0,0,8394,0,0,0,0,0,0,0,8396,8397,0,8398,0,8399,0,0,0, + 0,0,8400,0,8401,8410,8411,0,8412,8413,8422,0,0,0,0,8423,0,0,0,0,8424,0,0, + 8425,0,0,0,0,0,0,0,8441,8442,0,0,0,0,0,0,8443,0,0,8444,0,8447,0,0,0,0, + 8451,0,8458,0,8462,0,0,8468,0,8469,0,0,0,8470,0,8473,8479,8480,0,0,0,0, + 8481,8483,0,0,0,0,0,0,0,0,0,8484,0,0,8490,0,0,0,0,0,0,8491,8493,8494,0, + 8528,0,0,0,0,0,0,0,8530,0,0,0,0,0,0,0,0,8534,8538,8540,0,0,8541,0,0, + 8545,0,8557,0,0,8569,8570,0,0,8571,8574,8575,8579,0,8583,0,0,0,0,8591,0,0, + 0,0,0,0,0,0,8606,0,8607,0,0,0,0,0,0,0,0,0,8608,0,0,8609,0,0,0,8610,0, + 0,0,8611,0,0,8613,8617,8621,0,0,8622,0,8623,0,8624,8625,0,0,0,0,0,0,0,0, + 0,8637,8638,8639,8650,0,0,0,0,8652,8654,8655,0,0,0,0,0,0,0,0,0,0,8656,0, + 0,0,0,0,8657,0,0,0,0,0,0,0,0,0,8658,0,0,8659,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,8660,0,0,0,0,0,0,8661,8663,8664,0,0,0,0,8665,0,8669, + 0,0,0,0,0,0,0,8671,8674,0,8684,0,8686,0,0,0,8689,0,0,0,8690,0,8706,0,0, + 0,0,0,0,0,0,0,0,0,8710,0,8711,8713,8714,8724,8727,8728,8733,8736,0,8737, + 8739,0,0,0,0,8742,8743,8745,8754,0,0,0,0,8756,0,0,0,0,0,0,8757,8760,0,0, + 0,0,0,8762,8763,8764,0,8766,8769,8770,8773,0,8774,0,8779,0,0,0,0,8780,0,0, + 8781,0,0,8783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8784,0,0, + 0,0,0,0,0,0,8785,0,0,0,0,8786,0,0,0,0,8788,8790,0,0,0,8803,0,8813,8814, + 0,0,0,0,0,8815,8816,0,0,0,0,8818,0,0,0,0,8822,8828,8829,0,8831,0,0,0,0, + 8833,0,0,0,8834,0,0,0,8835,0,8836,0,0,0,8837,0,0,0,0,0,0,8838,8839,0,0, + 0,0,0,0,0,0,0,0,0,8840,0,0,0,8841,0,8842,0,0,0,8846,0,0,0,0,0,0,0, + 8847,0,8848,0,0,8864,0,0,8866,0,0,8870,8872,0,0,8873,8874,0,0,0,0,0,0, + 8875,0,8876,0,0,0,0,8896,8900,0,0,0,0,8901,0,0,0,0,0,8904,0,8907,0,0,0, + 0,8911,8912,8913,0,0,0,8914,0,8915,0,0,0,0,0,0,0,0,0,0,0,0,8916,0,0,0, + 8929,0,0,0,0,0,0,0,0,0,0,8930,0,8932,0,8943,0,0,0,8945,8947,0,0,0,0, + 8949,0,8950,0,8954,8957,0,0,8970,0,0,0,0,8971,0,8996,0,0,0,0,8997,9000,0, + 0,0,0,9001,9002,0,9004,9009,9024,0,0,0,0,0,0,0,0,0,0,0,0,9027,9082,0,0, + 9083,9089,0,0,0,0,0,0,9090,0,0,0,9092,0,0,9093,0,9095,0,0,9096,9097,9101, + 9102,0,0,0,0,0,0,0,0,9112,0,0,0,0,0,0,9114,0,0,9120,0,9121,9122,0,0,0, + 9123,9124,0,0,9125,0,0,9126,0,9127,0,0,9129,9131,0,0,0,9132,0,0,9136,0, + 9144,0,0,9148,0,0,0,0,0,0,9149,0,9152,9163,0,0,9165,0,0,0,0,0,0,0,0,0, + 0,0,0,0,9166,0,9169,0,0,0,0,0,0,0,9170,0,0,0,0,9172,0,9174,9175,9176,0, + 9177,0,0,0,0,0,0,0,0,9186,0,9187,0,0,0,9188,9189,0,0,9190,0,0,0,0,9191, + 0,0,0,9193,0,0,0,0,9197,9198,0,0,0,9208,9211,0,0,0,0,9216,9217,0,9220,0, + 0,0,0,9221,9222,9223,0,9224,9225,0,0,9227,0,9228,9229,0,0,9230,0,9232,0, + 9233,0,0,0,0,0,9234,9235,0,0,9237,0,0,0,0,0,0,0,0,9238,9240,0,0,9241,0, + 0,0,0,9244,0,0,0,0,9247,0,0,0,0,0,0,0,0,0,0,9248,0,0,0,9249,0,0,0,0, + 0,9250,0,0,0,0,9251,0,0,9252,9255,0,0,0,9256,0,0,0,0,0,0,0,9257,0,0, + 9258,0,0,0,0,0,0,9259,0,0,0,0,0,9262,9263,0,0,9265,9266,0,0,0,0,0,0,0, + 0,9268,9271,0,0,0,0,0,0,0,0,0,9273,0,0,0,9276,9277,9279,0,0,0,0,0,0,0, + 9280,0,0,9293,0,0,0,0,0,9297,9301,0,0,0,0,0,0,0,0,0,0,0,9308,9309,9313, + 9321,9322,0,9326,9327,0,0,9477,0,9479,0,0,0,0,9482,0,0,0,9483,0,9484,0,0, + 0,0,0,0,0,0,0,9485,0,0,9486,0,0,0,9489,0,0,0,0,9490,9491,0,0,0,0,9493, + 0,9495,9496,0,0,0,0,0,0,0,0,9500,0,9502,0,0,0,0,0,9504,9507,0,9509,0, + 9511,0,0,9513,0,0,0,0,0,0,0,0,9515,0,0,0,0,0,0,9516,9517,0,0,0,0,9532, + 0,0,9533,0,0,9538,0,9539,9540,0,0,0,0,9541,0,0,0,9542,0,0,0,0,0,0,0,0, + 9544,9545,0,9546,0,0,0,0,0,0,9547,9548,0,0,0,9550,0,9557,0,9558,0,9561,0, + 9563,9570,0,9572,9574,9575,0,0,0,9577,9592,0,0,9596,0,0,0,9598,0,9600,0, + 9601,0,0,0,0,0,0,9608,0,9638,9639,0,0,0,0,0,0,0,9641,0,0,9643,9644,9645, + 9646,0,0,0,9648,0,0,0,0,0,0,0,9650,9654,0,0,0,0,0,0,0,0,9655,0,0,0,0, + 0,9656,0,9657,0,0,0,0,9658,0,0,9659,0,0,9664,0,0,9665,0,9667,9669,0,0,0, + 0,0,0,0,0,0,0,0,0,9671,0,9673,9681,0,0,0,0,9682,9683,9684,0,0,0,0,9686, + 9698,0,0,9700,9701,9702,0,9703,9717,0,0,0,0,9718,0,9726,0,0,0,0,9727,0,0, + 0,9728,0,9742,0,9744,0,0,0,9750,0,9754,9755,0,0,0,0,0,9756,0,9757,9768,0, + 9769,0,0,0,9770,9771,0,9773,0,9774,0,9775,0,0,0,9776,9777,9784,0,0,0,9786, + 0,9789,0,0,0,0,9793,9794,0,0,0,9808,0,0,0,0,0,9811,0,0,0,0,0,0,0,0,0, + 0,0,0,9812,0,9820,0,9823,0,9828,0,0,0,0,9830,0,0,9833,9836,0,0,0,9840,0, + 0,0,9841,0,0,9842,0,9845,0,0,0,9847,9848,0,0,9855,0,0,0,0,0,0,9856,9863, + 9865,0,0,0,0,0,0,0,0,9866,9867,9868,9873,9875,0,0,0,0,0,0,9880,0,9886,0, + 0,0,9887,0,0,9891,0,0,0,0,0,0,0,9906,9907,9908,0,0,0,9909,0,0,0,0,0,0, + 9910,0,0,0,0,9913,0,0,0,0,9914,0,0,0,0,0,9922,0,0,0,0,9923,9925,0,0,0, + 0,0,0,9930,0,0,0,9931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9932,0,9939,0,0, + 9940,9962,9966,0,9969,9970,0,0,9974,0,9979,9981,9982,0,0,0,9985,0,0,0,0,0, + 0,9987,0,0,0,0,0,0,0,9988,9993,0,0,9994,0,0,0,9997,0,10004,0,0,0,0,0, + 10007,10019,10020,10022,0,0,0,10031,0,0,0,0,0,10032,0,0,10034,0,10036,0,0, + 0,0,10038,0,10039,10040,10041,10042,0,0,0,0,0,10043,0,0,0,0,0,10045,10054, + 0,0,0,0,10055,0,0,10057,10058,0,0,0,0,0,0,10059,0,0,0,0,0,0,0,10060,0, + 0,0,0,0,0,0,10063,0,10066,0,0,0,10070,0,10072,0,0,10076,10077,0,0,10084, + 0,10087,10090,10091,0,0,0,10094,10097,0,0,0,0,0,0,10098,0,0,0,0,0,0, + 10103,0,10104,0,10108,0,0,0,0,0,0,0,0,10120,0,0,0,10122,0,0,10125,0,0,0, + 0,10127,10128,0,0,10134,0,10135,10136,0,10137,0,0,10147,0,10149,10150,0,0, + 10156,0,10158,10159,10160,10168,0,0,10171,0,10173,0,0,0,10176,0,0,0,0,10177, + 0,0,0,0,10178,0,0,0,0,10194,0,10202,0,0,10203,10204,0,10205,10206,0,10207, + 0,0,0,0,10209,0,0,0,0,0,0,0,10213,0,0,0,0,0,0,10217,0,10229,0,10230, + 10231,0,0,10232,0,0,10237,10238,10244,0,0,0,0,0,10250,0,10252,0,0,0,0,0, + 0,10255,0,0,10257,0,0,0,0,0,0,10258,0,10259,0,0,0,0,0,0,0,0,10260,0,0, + 0,0,0,0,0,10284,10288,10289,0,0,0,10290,0,10296,0,0,0,0,0,10297,0,0,0,0, + 0,0,10298,0,0,0,0,10299,10303,0,0,0,0,0,10306,0,0,0,10307,0,10308,0,0,0, + 0,10311,0,0,0,0,0,0,0,10315,10317,0,0,0,10318,10319,0,10321,0,10326,0, + 10328,0,0,0,0,10329,0,0,10331,0,10332,0,0,0,0,0,0,10334,0,0,10335,10338, + 0,0,0,0,0,10339,10349,0,0,0,0,0,0,10351,0,10353,0,0,0,0,0,0,10362,0, + 10368,0,10369,0,0,0,10372,10373,0,0,0,0,0,10374,0,0,0,10375,0,10376,0,0, + 10386,10388,10390,0,0,0,0,0,0,0,10391,0,0,10392,10394,0,0,10396,0,10397,0, + 10403,0,0,0,0,0,0,0,0,10404,0,10405,10410,0,0,10411,0,10412,0,0,0,0,0,0, + 0,10421,10422,10423,0,0,0,0,0,0,0,0,0,10425,0,0,10427,0,0,10430,0,0,0,0, + 0,10432,0,10433,10434,0,0,0,0,10436,10437,0,10438,0,10439,0,10444,10446,0,0, + 0,0,0,10448,0,0,0,0,0,10449,0,0,0,0,0,0,0,10451,0,10453,0,0,0,10454, + 10457,0,0,10459,0,10469,0,0,0,0,0,10472,10481,0,0,0,0,0,10482,10483,0, + 10492,0,0,0,0,0,0,0,0,0,0,10499,0,0,0,10502,0,0,10510,0,10521,10524,0,0, + 10525,10526,10528,0,0,0,0,0,0,0,0,10530,0,0,0,0,10533,0,10534,0,0,0,0,0, + 0,0,0,0,0,10535,10536,0,0,10544,0,10553,10556,0,10557,10559,0,0,0,0,0, + 10562,10563,10564,0,10565,0,0,0,10566,0,10567,0,0,0,0,10575,0,0,10576,0, + 10578,0,0,0,0,0,0,0,0,0,0,10585,10586,10587,10589,0,10590,0,0,10594,0,0, + 0,0,0,10598,0,0,10601,0,0,0,10602,0,10603,0,10604,0,10605,0,0,10607,0, + 10626,0,10627,0,0,0,0,0,10629,10630,10631,0,0,0,10646,0,0,0,10647,0,10650, + 0,10651,0,0,0,10652,10653,10655,0,10658,0,0,10659,0,10667,0,0,0,0,10669,0, + 0,0,0,0,0,0,0,0,10670,0,0,0,10671,0,0,0,0,10672,10673,0,10674,0,0,0, + 10676,0,0,0,0,0,0,10678,0,10682,0,0,10692,0,10697,0,0,0,0,10698,0,0,0, + 10700,0,0,0,0,0,10703,0,10704,0,0,0,0,0,0,0,10705,0,10715,10718,10720,0, + 0,10722,0,0,0,0,0,0,0,0,10723,0,0,0,0,10726,0,0,0,0,0,10727,10730,10743, + 0,0,0,0,0,0,10744,0,0,10745,0,0,0,0,0,0,10748,0,0,0,0,10750,0,0,10752, + 10753,0,0,0,10756,0,0,0,0,0,0,10758,0,0,0,10759,0,10769,0,0,10772,0,0,0, + 0,0,0,10773,0,0,0,10777,0,0,10779,0,0,0,0,0,0,0,0,10780,10784,0,0,0, + 10789,0,0,0,10791,0,0,0,0,0,0,0,0,0,10795,0,0,10796,0,10808,0,10809,0,0, + 0,10810,0,0,0,10812,0,0,10814,0,0,0,0,0,0,0,0,0,10815,0,0,0,0,10816, + 10817,0,0,0,0,10819,0,10820,0,0,0,0,10821,10822,10823,0,10826,10849,0,0,0, + 0,10850,0,0,10852,0,10853,0,0,10856,0,0,10857,10858,10859,10860,0,0,0,0,0, + 0,10863,0,10866,10867,10872,10890,0,0,10891,10892,0,0,0,0,0,10893,0,0,0, + 10896,10899,0,0,10900,10902,0,0,0,0,0,10903,0,0,0,0,0,0,0,0,0,0,0,0, + 10905,0,10906,0,0,0,0,10908,10911,0,10912,0,0,10916,0,0,0,0,0,10917,0, + 10918,0,0,0,10923,0,0,0,0,0,10924,0,0,10928,10929,0,0,10930,0,0,0,10932, + 0,0,0,0,10939,0,0,10945,0,0,0,10947,0,0,10948,0,0,0,0,0,0,0,0,0,0,0, + 0,10958,0,10960,10962,0,0,10964,0,0,0,10966,0,0,0,0,0,0,0,0,0,0,10967,0, + 0,0,10968,0,0,0,10973,0,0,0,0,0,10975,0,0,0,10976,10978,0,0,10982,10984, + 10987,0,0,10988,0,10989,0,0,10991,0,0,0,0,10992,0,0,0,10993,0,10995,0,0, + 0,10996,10997,0,0,0,10998,0,10999,0,11001,0,0,0,0,0,0,11010,11012,0,11013, + 11016,11017,0,0,11019,11020,11021,0,0,0,0,0,0,0,0,0,0,0,0,11022,0,0, + 11023,11029,0,0,0,0,11031,0,0,0,11034,0,0,0,0,11055,0,0,0,0,0,11056, + 11060,0,0,0,0,0,0,11061,0,0,11064,11065,0,11066,0,11069,0,11085,0,0,0,0, + 0,11086,0,0,0,11088,0,0,0,11094,0,0,0,11095,11096,0,0,0,0,0,0,11097, + 11098,0,0,0,0,0,0,11099,0,0,11102,11108,0,0,0,11109,0,11114,11119,0,11131, + 0,0,0,11142,0,0,11143,0,11146,0,11147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 11148,0,11149,11152,11153,11154,0,11156,0,11157,0,0,0,11158,0,0,11159,11160, + 0,0,0,0,0,0,0,0,0,0,0,0,11163,0,0,11164,11166,0,0,0,11172,11174,0,0,0, + 11176,0,0,0,0,0,11182,11183,0,0,0,11184,11187,0,0,11188,11189,0,0,0,0,0, + 0,11194,0,0,0,0,0,0,0,11200,11202,0,0,0,0,0,0,11203,0,11204,0,0,0,0,0, + 11205,0,0,0,11206,0,11207,0,0,11209,0,11211,0,11214,0,0,11231,0,0,0,11293, + 11295,0,0,11296,11297,11302,0,0,0,11307,0,0,0,0,11309,11310,0,11311,0,0,0, + 11313,0,11314,0,0,0,0,11334,0,11338,0,0,0,11339,0,0,0,0,0,11340,0,11341, + 11342,0,11344,0,11345,0,0,0,11348,11349,0,0,11350,0,0,0,11355,0,0,0,0,0, + 0,11356,0,11357,11370,0,0,11371,0,11374,11376,0,0,0,11377,0,0,11378,11383,0, + 11386,11399,0,11400,11406,0,0,0,11408,0,0,11409,11412,0,0,0,0,11417,0,0,0, + 11418,0,11421,0,11426,11429,0,0,0,0,0,11430,0,11437,0,11438,0,0,0,0,0, + 11440,11453,0,0,0,0,0,0,11454,0,0,0,0,11455,0,0,11456,11460,11461,11463,0, + 11469,0,11473,0,0,0,0,11474,0,0,0,11475,0,11476,11477,11480,0,0,0,0,11481, + 0,0,11484,0,0,11487,0,0,0,0,0,0,0,0,0,0,11497,0,0,11502,0,11509,0,0, + 11510,11511,11513,0,0,0,0,0,0,0,0,0,0,11515,0,0,0,0,11516,0,11520,11521, + 0,0,0,0,0,0,0,0,0,0,0,11529,11530,11531,11534,0,0,11543,0,0,0,0,0,11547, + 0,11548,0,0,0,0,0,11552,11556,0,11557,0,0,11559,0,11560,0,0,0,0,0,0, + 11561,0,0,11563,11564,0,11565,0,0,0,0,11567,0,0,0,11569,0,11574,0,11575,0, + 0,0,11577,0,11578,0,0,0,11580,11581,0,0,0,11582,11584,0,0,0,0,0,0,0, + 11587,0,11588,11591,0,11595,0,0,0,0,0,0,0,0,11596,0,11597,0,0,0,0,11598, + 11601,0,0,0,11602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11603,11604,0, + 11606,0,0,11608,0,0,0,0,11610,0,0,11611,0,0,0,0,11613,0,11622,0,0,0, + 11623,0,0,0,0,11625,0,0,11626,11627,11628,11630,0,0,0,0,0,0,11639,0,0, + 11646,0,11648,11649,0,11650,0,0,0,0,0,0,0,0,0,11651,0,0,11652,11653,11656, + 0,0,11677,11679,0,0,0,0,11680,0,0,11681,0,11685,0,0,0,0,0,0,0,0,11688,0, + 0,0,11716,0,11719,0,0,0,0,0,11721,0,0,11724,11743,0,0,0,0,0,0,0,0,11745, + 11748,11750,0,0,0,0,0,11751,0,0,0,11752,11754,0,11755,0,0,0,0,0,0,0, + 11759,0,0,0,0,0,0,11760,0,0,0,11761,0,0,0,0,0,0,11766,11767,0,11772, + 11773,0,11774,0,0,11775,0,11777,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,11778,11780,0,0,0,0,0,0,0,11783,0,11784,0,0,0,11785,0,0,0,11786,0,0,0, + 0,11788,0,0,11789,11791,11792,0,0,0,0,11795,11834,11835,11836,0,0,11837,0,0, + 0,11838,0,0,11846,11851,0,11852,0,11869,0,0,0,11871,0,0,0,11872,11874,0,0, + 0,0,0,0,11875,0,11876,11877,0,0,0,0,0,0,0,0,0,0,11883,0,0,0,0,0,0,0, + 11884,0,11885,0,11886,0,0,11887,0,11894,11895,11897,11909,11910,0,11912,11918, + 0,0,11920,0,11922,11924,11927,11928,0,0,0,0,11929,0,11934,0,0,0,0,0,11941, + 11943,11944,0,11945,0,0,0,0,11948,11949,0,0,0,0,11953,0,11954,0,11955,0, + 11956,0,0,0,0,0,11957,0,0,11959,0,0,0,0,0,0,0,0,11961,0,0,0,0,0,11978, + 0,0,0,11979,11980,11986,11987,0,11992,0,0,0,0,0,11993,0,0,0,11994,0,11999, + 12004,12005,12006,0,0,0,0,0,12011,0,0,12012,12014,0,0,12015,0,0,12019,12028, + 0,0,12029,0,0,12032,12033,0,0,0,0,12034,0,12041,12043,0,0,12044,0,0,0,0, + 0,0,0,12046,0,0,0,0,0,0,0,12054,12055,0,12056,0,0,0,12060,12064,0,0,0,0, + 0,12065,12067,12068,0,0,0,0,0,0,0,0,12074,0,0,0,12075,12076,0,0,0,12079, + 0,12081,12086,12087,0,0,12088,0,0,0,0,12089,0,12092,0,0,0,0,12097,0,0,0, + 0,0,0,0,0,12098,0,0,0,0,0,0,0,0,0,0,0,0,0,12102,12103,12104,12111,0,0, + 12114,12116,0,0,0,12118,0,0,0,12119,12120,12128,0,0,0,0,12130,0,0,0,0,0, + 0,12131,0,0,0,12132,12134,0,0,0,0,12137,0,12139,0,12141,0,0,12142,0,0,0, + 12144,0,0,0,0,0,12145,0,12148,0,12153,0,0,0,0,12154,12171,12173,0,0,0, + 12175,0,0,0,0,12178,0,0,0,0,0,0,0,12183,0,0,0,0,0,0,0,0,12184,0,0,0, + 12186,0,0,0,0,0,12187,12188,0,0,12189,0,12196,0,12197,0,0,12198,0,12201,0, + 0,0,0,12203,0,12209,0,0,0,0,12210,12211,12212,12213,0,12217,12218,0,0,0,0, + 0,0,0,0,0,12222,0,0,0,0,0,0,0,12223,0,0,12229,0,0,0,0,12233,0,0,0,0, + 12234,0,0,12236,12242,0,0,0,12243,0,0,0,12244,12253,0,12254,12256,0,12257,0, + 0,12275,0,0,0,0,0,12277,0,0,0,0,0,12278,0,12289,0,0,12290,0,12292,12293, + 0,0,12294,0,12295,0,0,12296,0,12297,0,12298,0,0,0,0,12301,0,0,0,0,0,0,0, + 0,0,0,0,0,0,12309,0,12338,12340,0,0,0,0,12341,0,0,0,0,0,0,0,0,12342, + 12343,0,12344,0,0,0,0,0,0,0,0,0,12345,0,0,0,0,0,0,0,0,12346,0,0,0,0, + 12348,0,0,0,0,0,0,0,0,0,0,0,0,12350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 12351,0,12355,12356,12357,0,0,12367,12370,12371,0,0,0,0,0,12372,12376,0,0,0, + 0,0,0,0,0,12379,0,12382,0,12383,0,0,12384,0,0,0,0,12393,0,0,12394,0,0,0, + 0,12398,12403,0,0,12404,0,0,0,0,0,0,0,0,0,0,0,0,0,12410,0,0,0,12411,0, + 0,0,12412,0,0,0,0,12420,0,12421,0,0,0,0,0,12423,0,12425,12429,0,0,0, + 12431,12432,0,0,0,0,0,0,0,0,0,0,0,0,12434,0,0,0,0,0,12435,12436,0,0,0, + 0,0,0,0,0,12437,0,0,0,0,0,12438,0,0,0,0,0,0,0,0,12445,0,0,0,12450, + 12451,0,0,0,0,0,0,0,0,12452,12475,0,0,12493,12494,0,0,0,12495,0,0,0,0, + 12496,12502,12509,0,0,0,0,12510,0,12512,12513,0,0,0,0,12514,0,0,0,12515,0, + 12520,0,0,0,12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12527,0,0,0,12528, + 0,0,0,12529,0,0,0,0,0,12530,0,12535,0,0,12536,0,12538,0,0,0,0,0,0,0,0, + 0,0,0,0,12540,0,12548,0,0,0,0,0,12550,0,0,0,12551,12552,0,0,0,12554,0,0, + 0,0,0,0,0,0,12555,0,0,12562,0,12565,0,12566,0,0,0,0,0,0,0,0,0,0,0,0, + 12569,0,0,0,12571,12574,0,0,0,0,0,0,0,12577,0,0,0,0,0,0,0,12578,12579, + 12603,0,12608,0,0,12611,0,12612,0,12615,0,12625,0,0,0,0,12627,12646,0,12648, + 0,0,12657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12670,0,0,12671,0,12673,12677,0, + 0,0,0,0,0,0,0,0,0,0,12679,0,12681,0,12682,12693,0,12694,0,12697,0,12701, + 0,0,0,12703,12704,0,0,0,0,12707,12737,0,0,12739,0,0,12740,0,0,12742,12743, + 0,0,0,0,0,0,0,0,0,12745,0,12746,12747,0,12748,0,0,12759,12767,0,0,0,0, + 12773,0,12774,12778,0,0,0,0,0,0,0,12779,0,0,0,0,0,12780,12793,0,12824,0, + 12825,0,12836,0,0,0,0,12839,0,12842,0,0,0,0,0,0,0,0,0,0,0,0,12843,12845, + 0,12846,0,0,0,0,12847,0,0,12850,12852,12853,0,0,0,12854,0,0,0,12855,0, + 12856,0,12858,0,0,12859,0,12862,0,12863,0,0,12866,0,12869,12872,12873,0,0,0, + 0,0,0,0,0,0,12875,0,12877,0,0,12878,0,0,0,0,0,0,0,0,0,12884,12885,12888, + 0,12889,0,0,0,0,12893,0,0,0,12895,12896,12898,0,0,0,0,0,0,0,12902,0, + 12909,12910,0,12926,0,12928,0,0,0,12929,0,12930,0,0,0,0,12931,0,12932,12933, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12934,0,12942,0,0,0,0,12944,0,0,0,0, + 0,0,0,0,12946,0,0,12948,0,0,12949,0,0,0,0,12950,0,0,0,0,12951,0,12952,0, + 12953,0,0,0,12954,12958,12959,0,0,0,0,0,12960,12964,0,0,0,0,0,12966,0,0, + 0,0,0,0,0,0,12970,0,12971,0,0,0,0,0,0,12972,0,0,12982,0,0,0,12984,12985, + 0,12986,12996,12997,13001,13002,0,0,0,0,13004,0,0,13005,0,0,13007,13009,0, + 13017,0,0,0,13020,0,13021,0,0,0,0,0,0,0,0,0,0,13022,0,0,0,0,0,0,0,0, + 13024,13027,0,0,0,0,0,13028,0,0,13029,0,0,0,0,0,0,0,13032,0,13037,0,0,0, + 0,0,0,13040,0,0,13041,0,0,0,13043,13044,13046,0,0,0,0,13047,0,0,0,0,0,0, + 0,13049,13054,0,13056,0,0,13060,13061,0,0,0,0,0,13067,0,0,13068,0,13071,0, + 0,0,0,0,13077,13078,0,0,0,0,0,13079,13080,13081,0,13082,0,0,0,13085,0,0, + 0,0,0,0,0,13086,0,13087,13088,0,0,0,0,0,13094,0,13099,0,13100,0,0,0, + 13101,0,13125,13126,13128,13129,0,0,13130,0,13131,0,0,0,0,0,0,13134,0,0,0, + 0,0,0,0,0,0,0,0,13150,0,13168,0,0,0,0,0,0,0,0,0,13169,0,0,13170,0,0, + 0,0,13174,0,0,0,13176,0,0,0,0,0,13177,0,13178,13183,13187,0,0,0,13189,0, + 0,13190,0,0,13191,0,0,13206,0,0,0,13207,0,0,0,0,0,0,0,0,0,0,13212,0,0, + 13219,13232,0,0,0,13241,0,13249,13253,0,0,0,0,0,13255,13259,0,13260,13261,0, + 13262,0,13272,0,0,0,0,13276,0,0,0,0,13277,13299,0,0,13301,13302,0,0,13303, + 0,0,13305,0,13310,0,0,0,13311,0,0,0,0,13325,0,13328,0,0,0,13329,0,0,0,0, + 0,0,13330,0,0,13331,0,13335,0,0,13342,0,0,0,0,0,13343,0,13354,0,13362,0, + 13366,13367,13369,0,0,13371,13372,0,13373,13374,0,13376,0,13380,13381,13386,0, + 13387,13388,0,13389,13391,13395,0,0,0,0,0,13401,13409,0,13410,0,0,0,0,13420, + 0,0,0,0,0,13422,0,0,0,0,13423,0,0,0,0,13425,0,0,0,0,0,13427,0,0,0, + 13428,0,0,13430,13438,0,13439,0,13445,0,13448,13449,0,0,0,0,0,0,13451,0, + 13457,0,0,0,0,13458,13459,0,13460,0,0,0,0,13464,13465,13466,13470,0,13471, + 13472,13474,13475,0,13476,0,0,13478,13479,0,13481,0,0,0,0,13487,0,13490,0, + 13493,0,0,13494,0,0,13495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13496,13497,0, + 13500,0,0,13516,13522,0,0,13525,13528,0,0,0,13530,13535,0,13537,13539,0, + 13540,0,13543,0,13544,0,0,0,0,0,0,13545,0,0,0,0,0,0,13547,0,0,0,13549, + 13555,0,0,0,13556,13557,0,0,0,0,0,0,0,13558,0,13563,0,0,0,0,13564,0,0,0, + 0,0,0,0,0,13566,0,0,0,0,0,0,13569,0,0,13571,0,0,0,0,13573,0,0,0,0,0, + 0,13578,0,0,0,0,0,0,0,0,0,0,13581,0,13586,0,13595,0,13600,0,0,0,0,0,0, + 0,0,13601,13603,0,13604,13605,13606,13607,0,0,13617,13618,0,0,0,0,0,0,0, + 13623,0,13625,13627,0,0,0,0,0,0,0,0,13629,0,0,0,13634,0,0,0,13638,0,0,0, + 0,0,0,0,0,13654,0,0,0,0,0,0,0,0,0,0,13656,0,13659,0,0,13660,0,0,13662, + 0,0,0,13663,0,13664,0,0,0,0,0,13668,0,13669,13671,0,0,13672,0,0,0,0,0,0, + 13675,13685,0,13686,0,0,0,13687,0,0,0,13692,13694,13697,0,0,0,13702,0,0,0, + 0,0,13705,0,0,0,0,13707,0,0,0,13714,0,0,0,0,0,0,0,0,0,13715,0,13716, + 13717,0,0,13719,13724,13730,13731,0,0,0,0,0,0,0,0,13732,0,0,0,0,0,0,0, + 13734,0,13736,0,0,13737,13738,13747,0,13751,0,0,13752,0,0,0,13753,0,13757,0, + 0,13762,13763,0,13764,13765,0,13766,0,0,13767,0,0,0,13768,0,0,0,0,0,0,0, + 13769,0,0,13772,0,13775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13776, + 13778,13787,0,0,0,13797,0,13798,0,13801,0,13804,13806,0,0,0,0,13816,13817,0, + 0,0,0,0,0,0,0,0,0,0,0,0,13834,0,13836,0,0,13838,0,0,13839,0,13840,0,0, + 0,0,13842,0,0,0,0,0,0,13843,0,0,0,0,0,0,0,0,0,13845,0,0,0,0,0,13858, + 0,0,13860,0,0,13861,0,0,13862,13863,0,13868,0,13869,13870,0,0,0,0,0,0,0, + 0,0,0,13872,0,0,0,0,13873,13878,0,0,0,0,0,0,0,0,0,0,13886,0,13888,13889, + 13890,0,0,13891,13894,0,13897,13899,13900,13904,0,0,13906,0,0,0,13909,0,0,0, + 13910,0,0,0,13911,0,0,0,0,0,13912,13917,0,0,0,0,13918,0,13919,0,0,13920, + 0,0,0,13921,0,0,13922,0,0,0,0,0,0,0,13924,0,13927,0,0,0,0,0,13932,0, + 13933,0,13934,0,0,13935,0,13944,0,0,0,13954,0,0,13955,0,0,0,0,13956,0, + 13957,0,13967,13969,0,0,0,0,0,0,0,0,0,0,0,0,13970,13990,0,13991,13994,0, + 13995,0,0,0,0,13996,0,0,13999,0,0,0,14018,0,14019,0,14021,0,0,0,0,0,0, + 14041,0,0,0,0,0,0,0,0,14043,0,0,0,0,14046,0,0,0,14048,14049,0,0,0,0,0, + 0,0,0,0,0,14051,0,0,14052,14056,0,14063,0,14064,14066,0,0,14067,0,0,0,0, + 0,0,0,0,0,14068,0,0,0,14072,0,14074,14075,0,14076,14079,14085,14086,14087, + 14093,0,0,0,0,14095,0,0,0,0,0,0,14096,14097,0,0,0,0,0,0,0,14098,0,14102, + 0,0,0,0,0,14103,0,0,0,14104,0,0,14105,0,0,0,14107,14108,0,0,14109,0,0,0, + 0,0,0,0,0,14117,0,0,0,0,14118,0,0,0,0,14119,0,0,14120,0,0,14121,0,14122, + 14127,0,14128,14136,0,0,14138,0,14140,0,0,0,14141,14142,0,0,0,0,14146,0,0, + 14149,0,14151,0,0,0,14152,0,0,14153,0,0,0,0,0,0,0,0,0,14154,0,14156, + 14157,0,0,14159,0,14161,0,0,0,0,14162,0,0,0,0,0,0,14163,0,0,14173,0,0,0, + 0,0,0,14174,0,0,14176,0,0,14178,0,0,14179,14181,0,0,14182,14185,14187,0, + 14190,0,0,14197,0,0,0,0,0,0,0,0,0,0,0,0,14198,0,0,0,0,0,0,14199,14200, + 0,0,0,14204,0,0,14208,0,0,0,0,0,0,0,0,0,0,0,14231,0,0,0,0,0,0,0,0,0, + 14234,0,0,14235,0,0,0,14240,14241,0,0,0,14246,0,0,0,14247,0,14250,0,0, + 14251,0,0,14254,0,0,14256,0,0,0,14260,0,14261,0,0,0,0,14262,14267,14269,0, + 0,14277,0,0,14278,0,14279,14282,0,0,0,14283,0,0,0,14284,14285,0,0,0,0, + 14286,0,0,0,14288,0,0,0,14289,0,14290,0,14293,14301,14302,14304,14305,0, + 14307,0,14308,14309,0,0,0,0,0,0,0,0,0,0,0,14311,14312,0,0,14317,0,0,0,0, + 0,0,0,14318,0,0,0,0,14320,0,0,0,0,14321,14322,0,0,0,0,0,14326,14329,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,14330,14331,0,0,0,0,14332,0,0,0,14333,0,0, + 14337,14340,0,14341,0,0,14342,0,14345,14346,0,0,14347,0,14362,0,0,0,0,0, + 14364,14365,14371,0,14373,0,0,14374,0,14379,0,14400,0,0,0,0,0,14401,0,0, + 14405,0,14406,0,14408,14409,0,0,0,14417,0,0,14424,0,0,0,0,0,0,0,0,0, + 14430,0,0,0,14431,0,0,14435,0,14440,0,0,0,0,0,0,14442,0,0,14443,0,0,0,0, + 0,14446,0,0,0,0,0,0,0,14454,0,14457,0,14460,0,0,14466,0,0,0,0,0,14467,0, + 0,0,0,0,0,14469,0,14477,0,0,0,0,0,0,14478,14482,0,0,0,14483,0,0,0,14485, + 14486,0,0,0,14487,14488,14489,14492,14493,14494,14495,14496,14497,0,14499,0, + 14501,0,0,0,0,0,0,0,0,0,0,14502,0,14507,14512,14513,14514,0,0,0,0,0,0,0, + 0,0,0,0,14515,14526,14530,0,14537,0,14544,0,14547,0,0,14548,14550,14551,0,0, + 14552,0,0,0,14553,0,14554,0,0,0,0,14556,14564,0,0,14565,14566,0,0,0,0,0, + 0,14568,0,0,14569,0,0,0,14571,14576,0,0,14577,14578,14579,0,0,14580,0,0,0, + 0,14582,0,0,0,0,0,0,0,0,0,0,0,0,14583,0,0,0,0,0,14587,0,14588,0,0, + 14600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14601,0,0,14604,14605, + 14611,0,14613,0,0,0,0,14615,0,0,0,0,0,0,14627,0,14628,0,0,0,0,14631,0, + 14633,14634,0,0,0,0,14635,0,0,0,0,0,0,0,0,14636,0,0,14639,14642,0,0,0,0, + 14644,0,0,0,0,14645,14646,0,14653,0,0,14654,0,14658,0,14661,0,0,0,14665,0, + 0,0,14668,0,0,0,0,0,0,0,0,0,14669,0,0,14670,0,0,0,14680,0,0,14681,0,0, + 0,0,0,14682,14683,0,0,0,0,14686,0,0,0,0,14687,14697,0,0,0,0,14699,14705, + 14711,0,0,0,0,0,0,0,0,0,0,14712,0,0,0,14713,0,0,0,0,14719,0,14720,14721, + 14726,0,0,0,14728,14729,0,0,0,0,14731,0,0,0,0,0,0,0,14733,14736,14737,0, + 0,14740,14742,0,0,0,14744,14753,0,0,0,0,14755,14758,14760,0,0,0,0,0,14761, + 14762,14765,14771,0,14772,0,14773,14774,0,0,14775,0,0,14776,0,0,0,0,14777,0, + 14779,0,0,14782,0,0,14785,14786,14788,0,0,0,0,0,14795,0,0,0,0,0,0,14798, + 0,14803,14804,14806,0,0,0,14809,0,0,0,0,0,0,14810,0,0,0,0,14811,0,14812, + 0,0,0,0,0,14815,0,0,0,0,0,0,0,0,14816,0,14818,0,0,0,0,0,0,14819,0, + 14820,0,14823,0,0,0,14824,0,0,14826,14827,0,0,0,0,0,0,0,0,0,0,0,0,14830, + 0,0,0,0,0,14833,0,14845,0,0,0,0,0,14846,0,0,14847,14871,0,14873,0,14876, + 0,14877,14878,14880,0,0,0,0,0,14881,0,14882,14894,0,0,0,0,14895,0,14907,0, + 14908,0,0,0,0,0,0,0,14911,0,0,0,0,14920,0,0,14931,0,14932,14934,14935,0, + 0,14936,0,14945,0,0,0,0,0,0,0,14947,0,0,14948,14949,14951,0,0,14952,0,0, + 0,14964,14973,0,0,14990,0,0,0,0,14995,0,0,14998,15001,0,0,15002,15020,0,0, + 0,0,0,0,15021,0,15022,0,0,0,0,15023,0,0,15025,15029,15033,0,0,0,15034,0, + 0,0,15035,0,0,0,0,0,15043,15044,0,0,0,15045,15046,15048,15050,0,15065,0,0, + 0,0,15066,0,0,15075,15082,15084,0,0,15085,15086,0,0,0,0,0,0,0,0,15088,0, + 0,0,15089,0,0,0,0,15094,0,15096,0,15097,0,15100,0,0,15102,0,0,0,0,0,0,0, + 0,15105,0,0,15106,0,15109,15113,0,0,0,15115,0,15118,0,0,0,0,0,0,15119,0, + 0,15120,0,0,0,0,0,15123,15129,0,0,0,15130,0,15131,0,0,15134,0,15135,0,0, + 0,15137,15138,0,0,0,0,0,0,15139,0,0,0,0,0,15140,0,0,15154,15162,0,15169, + 15170,0,15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15177,0,15178,15179,0,0,0, + 0,0,15183,0,0,0,0,0,0,0,0,0,0,0,0,15185,15187,0,15194,15195,15196,0,0,0, + 0,0,0,0,15204,0,0,0,0,15206,0,0,0,0,0,15207,0,0,0,0,0,0,0,0,0,15213, + 0,15214,0,0,0,0,0,0,0,15232,0,0,0,0,15234,0,15238,15240,0,15248,0,0,0,0, + 15250,15251,0,0,0,0,0,0,0,15252,0,0,0,15255,15262,15266,0,0,0,15267,0,0, + 0,15277,15279,0,0,0,15280,15281,15282,0,0,0,0,0,15285,0,0,0,0,15289,0,0, + 15291,0,0,0,0,0,0,0,15296,15297,0,0,15304,0,0,0,0,15306,0,0,0,0,0,0, + 15307,15308,0,15309,0,0,15311,0,0,15312,15313,0,0,0,0,0,0,0,0,0,0,0,0, + 15314,15317,0,0,0,15318,15319,0,0,0,0,15320,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,15321,0,0,0,0,0,15324,0,15325,15326,0,15330,0,0,0,0,15334,0,15335, + 0,15341,0,0,15342,0,0,15343,15344,0,0,0,0,15345,0,0,0,0,15347,0,0,15348, + 15349,15350,0,15356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15357,0,15358,0,0, + 0,0,0,0,0,15359,15360,15364,0,15380,0,0,0,0,0,15392,0,0,15393,0,15395,0, + 0,0,0,0,0,0,0,15396,0,0,15397,15398,0,0,0,0,0,0,0,0,0,15399,0,15400,0, + 0,0,15402,0,15405,15410,0,0,0,0,15411,0,0,0,15412,0,15416,0,0,0,0,0,0,0, + 15428,0,15435,0,0,15438,0,0,0,0,15439,0,0,0,15440,0,0,0,15441,15449,15451, + 0,0,0,0,0,0,0,15452,0,0,15455,0,0,0,15456,0,0,15458,0,15460,15461,0,0,0, + 0,0,15462,15464,0,15465,0,0,15466,0,0,15467,0,0,0,0,0,15468,0,0,0,0, + 15481,0,0,15484,0,15485,15486,0,0,0,15487,0,0,0,0,0,15488,0,15492,15498,0, + 0,0,15499,0,0,0,15500,0,15501,0,0,15512,0,15522,0,0,0,15524,0,15525,15526, + 0,0,15527,0,0,15545,15546,0,15548,15552,0,15553,0,0,0,15554,0,15555,0,15557, + 15565,15573,15577,15578,0,15582,0,15583,0,0,0,0,0,0,0,0,0,0,0,0,0,15586, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,15588,0,0,0,0,0,15589,0,0,0,0,0,0,0, + 15593,15594,0,0,0,0,15595,0,0,0,0,0,0,15596,0,0,0,15597,0,0,0,0,15600,0, + 0,15601,0,0,0,0,15602,15603,0,0,0,0,0,0,15604,0,15609,0,0,15612,0,0, + 15613,0,0,15615,15617,15618,0,0,15620,0,15636,15637,0,0,15649,0,0,0,0,0,0, + 0,15650,0,0,15651,0,0,0,15656,0,15658,0,0,0,15664,0,0,15665,0,0,15668,0, + 0,0,0,0,15669,0,0,15674,0,0,15675,0,0,0,0,15676,0,0,0,0,0,0,0,0,0,0, + 0,15677,0,0,0,0,15678,0,0,0,0,0,15679,0,0,15681,0,15686,0,0,0,0,15687,0, + 15688,0,0,15690,0,0,0,15697,0,15699,15700,0,0,0,0,0,0,0,0,0,15701,0, + 15702,15703,0,15704,0,15705,0,15707,0,15709,0,15712,15716,0,15717,0,15718, + 15720,0,0,0,0,0,15724,0,0,0,15725,0,15726,0,0,0,15740,0,15745,15746,0,0, + 15747,0,15748,0,0,0,0,0,15749,0,0,0,15752,0,15753,0,0,0,0,0,0,15759,0,0, + 0,15765,0,0,0,0,0,0,0,0,0,15767,0,0,0,15771,0,0,15784,0,0,0,0,15785, + 15790,15791,0,0,15792,0,0,0,15807,0,15811,0,0,0,0,0,0,0,0,0,0,0,0,15818, + 0,0,0,15819,0,0,0,0,15821,0,0,0,0,0,15822,15824,0,0,15827,0,0,15829, + 15831,0,15832,0,0,15833,0,15835,15838,15839,15843,0,0,0,0,0,0,0,0,0,0,0, + 15844,0,0,0,0,15845,15851,15856,0,0,0,0,0,0,0,15858,15860,0,15861,0,0,0, + 15864,0,0,0,0,15865,0,0,0,0,0,0,15866,0,15872,0,0,15876,0,0,0,0,15877, + 15878,15883,15885,0,0,15888,0,0,0,0,0,15889,15890,0,0,0,0,0,0,0,0,15892, + 0,0,0,0,0,0,0,15893,0,0,15894,0,0,0,15895,0,15896,15897,0,15898,15901, + 15902,0,15911,15915,0,15916,0,15924,15935,0,15937,0,0,0,0,0,15950,0,0,0,0, + 0,0,0,15958,0,0,0,15961,0,0,15966,0,15967,0,0,15977,0,0,15978,0,0,15981, + 15982,15983,0,0,0,0,0,0,0,15986,0,0,0,15990,0,15991,15995,15998,0,15999,0, + 16000,0,0,0,0,16008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16009, + 16011,0,16013,0,0,0,0,0,0,0,0,16014,0,0,16015,16023,16024,16025,0,0,16026, + 0,16030,0,16032,0,16033,0,0,0,0,0,0,16035,16036,16037,0,0,0,0,0,16039,0, + 0,0,0,16041,0,0,0,0,0,16043,16044,0,0,16047,0,0,0,16048,0,0,16049,16050, + 16052,0,0,0,0,0,16055,0,0,0,0,0,0,0,0,16056,0,0,0,0,0,0,0,16058,16060, + 16061,0,0,16063,0,0,16064,0,0,0,16067,16068,0,0,16069,16078,0,0,0,16079,0, + 0,0,16080,0,16081,0,0,0,16088,0,0,0,0,0,0,0,0,0,0,0,16089,16093,0,16097, + 0,16103,0,16104,16105,0,0,16256,0,0,16259,0,0,0,0,0,0,0,16260,16261,0,0, + 16262,0,0,16263,0,16268,0,0,0,0,0,0,0,16269,0,0,16270,16273,0,16274,0,0, + 0,0,16275,16276,16277,16280,0,0,0,16281,16284,0,0,0,16286,0,16289,0,0,0,0, + 0,0,0,0,0,16290,0,0,0,0,16291,0,0,0,0,0,0,0,16292,0,0,0,0,0,0,0,0, + 16293,16295,16297,0,16302,0,16304,0,16305,0,16306,0,0,0,0,0,0,0,0,0,0,0, + 0,16307,16308,16312,0,0,0,0,0,0,16313,16315,0,16318,0,0,0,16321,0,0,0,0, + 0,0,0,16326,16333,16336,0,0,0,0,16337,16340,0,0,0,0,0,16345,0,0,16346,0, + 0,0,0,0,0,0,0,0,16347,0,0,16348,0,0,0,0,16349,0,0,0,16350,0,16357,0,0, + 0,0,16359,16360,0,0,0,0,16362,16363,16364,16365,0,0,16366,0,0,0,0,16367, + 16368,0,16369,16374,0,0,0,0,0,0,0,16376,0,0,0,0,16378,16379,0,16380,0,0, + 0,16381,16383,0,0,0,0,0,16390,0,0,0,16399,0,16402,16404,16406,16407,0,0,0, + 16409,16411,0,0,0,0,16412,0,16413,16415,16423,0,0,0,0,0,16424,0,0,0,16428, + 16434,16435,16449,0,16450,16451,0,0,0,16453,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,16454,0,0,16456,16458,0,0,16459,0,0,16460,0,0,0,0,16462,0,16463,0,0, + 16466,0,0,0,0,0,16479,0,0,16480,0,16481,16484,0,0,0,0,0,0,0,0,0,0,16485, + 0,0,0,0,0,0,16489,0,0,0,0,0,16491,0,0,16498,0,0,16503,0,16505,0,0,0,0, + 0,0,0,0,16506,0,0,0,16508,16509,0,0,0,0,0,0,0,0,16511,16513,0,0,0,16516, + 0,16517,0,16519,0,16529,0,0,16531,0,0,0,0,0,0,16534,0,0,16541,16542,0,0, + 0,0,0,0,0,0,0,16543,16547,16548,0,0,0,16551,0,16552,0,0,0,16553,0,0, + 16558,0,0,16562,16565,0,0,0,16570,0,0,0,16573,16585,0,0,0,16586,16587,16595, + 0,16596,0,16598,0,0,0,16600,0,0,0,0,0,0,0,0,0,0,0,0,0,16601,0,0,0,0, + 16603,0,0,0,0,0,0,0,16604,16612,0,0,0,0,16613,0,16618,0,0,0,16640,0,0, + 16641,0,0,0,0,0,0,16645,0,0,0,0,16646,0,0,0,0,0,0,16651,0,0,0,0,16653, + 16654,0,0,0,16655,0,0,16656,16667,0,0,0,0,16671,0,16672,0,0,0,16673,0,0, + 0,0,0,16676,0,16686,0,0,0,0,16689,0,16690,0,16692,0,16693,0,16694,0,16696, + 0,0,0,16705,0,0,0,0,0,0,16707,0,0,0,16709,0,0,0,0,16711,0,16712,16713,0, + 0,0,16715,0,0,0,0,16716,0,0,0,0,0,0,0,0,0,16718,16724,0,0,16726,16727,0, + 0,0,0,0,0,0,16728,0,16729,0,0,16730,0,0,0,0,0,16731,0,0,0,16732,0,0,0, + 0,16734,16738,0,0,0,0,0,0,0,0,16743,0,0,16745,0,0,0,0,0,16749,0,16752,0, + 0,0,0,16756,0,0,16758,0,16759,0,0,0,0,0,16760,0,0,0,0,0,0,0,16762,0, + 16769,0,16770,0,16772,0,0,0,16777,16780,0,0,0,0,0,0,16781,0,0,16782,0, + 16784,0,0,16785,16787,16792,0,0,16794,0,0,0,16798,0,0,16809,0,0,16814,16816, + 16817,0,16819,0,0,0,0,0,0,0,0,0,0,16820,0,0,16836,16839,0,0,16841,16851, + 16857,0,0,16858,16859,0,0,16860,0,0,0,0,0,0,0,0,16862,0,16863,0,0,0,0,0, + 0,0,16864,0,0,0,0,0,0,0,16876,0,16881,16882,0,16885,16886,0,16887,0,0,0, + 16889,16891,0,0,0,0,0,16894,16895,0,0,0,0,0,0,0,0,0,0,0,16897,0,16898,0, + 0,0,0,0,16913,0,0,16924,16925,16926,0,0,16927,0,0,0,16937,16938,0,0,0, + 16940,16941,0,0,0,16942,16945,0,16946,16949,16950,0,0,0,16952,16955,0,0,0, + 16965,0,16969,0,0,16975,0,0,16976,0,0,0,0,16978,0,0,16981,0,16983,16989,0, + 0,0,0,16990,0,0,16991,0,0,0,16993,0,16994,16996,17000,0,0,0,0,0,17002, + 17004,0,17006,0,0,17007,0,0,0,0,17008,17013,17014,0,0,0,0,0,0,0,0,0, + 17021,0,17031,0,0,0,0,0,17033,17036,0,17038,0,0,17039,0,17045,0,0,17046, + 17047,0,0,0,0,17048,0,17049,17050,0,17051,17053,0,17054,0,17055,0,0,0,0,0, + 17063,0,0,17064,0,0,0,0,0,0,0,17065,0,0,17068,0,0,0,0,0,17072,0,0,0,0, + 0,0,17073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17074,0,17080,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17081,17083,17084,0,0,0,17085,0,0, + 0,0,17092,0,0,0,0,0,0,0,0,0,17093,0,17095,17102,0,0,0,0,0,0,17103,0,0, + 17105,0,17107,0,0,0,0,17114,0,0,0,0,0,17115,17125,17127,0,0,17128,0,0,0, + 17129,17130,0,17131,0,0,0,0,0,17132,17135,17145,0,0,0,0,0,0,0,0,17146,0, + 17147,0,17148,0,0,0,0,0,0,17149,17150,0,17151,17153,0,17155,0,0,0,0,17163, + 17171,0,17174,0,0,0,0,17179,0,0,17182,17185,0,0,0,0,0,17186,0,0,17188,0, + 0,0,0,0,0,0,17189,17191,0,17194,0,0,0,0,0,0,0,0,0,17195,17196,17203, + 17204,0,0,17205,17217,0,0,0,0,0,17218,0,0,0,0,17219,0,17220,0,17221,0,0, + 17230,0,0,0,0,0,17236,0,17238,17239,0,0,0,17241,17244,0,0,17245,0,17248,0, + 0,17251,0,17252,0,0,17264,0,17266,0,0,0,17268,0,0,0,0,17271,17272,0,17273, + 0,17295,0,17302,0,17305,0,0,0,17306,0,0,0,0,0,0,0,17308,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,17309,0,17310,17313,0,0,0,0,17314,17315,0,17317,0,0,0, + 0,17318,0,0,0,0,0,0,0,17320,0,0,0,0,0,0,17334,0,17344,17348,0,0,0,17350, + 17351,0,0,17353,0,0,17354,0,0,0,0,0,0,0,0,0,17355,0,0,0,0,0,0,17356, + 17357,0,0,17359,0,0,0,17371,0,17372,0,0,0,17393,0,0,0,0,17394,0,0,0,0,0, + 17395,0,0,17399,0,0,0,17401,17417,0,17418,0,17419,0,0,0,0,0,17422,17423,0, + 0,0,0,0,17424,0,0,0,0,0,17428,17429,17433,0,0,0,17437,0,0,17441,0,0, + 17442,0,0,17453,0,0,0,0,0,0,0,0,17454,17456,17462,0,0,17466,0,0,17468,0, + 0,17469,0,0,0,0,17470,0,17475,0,0,0,0,0,17479,0,0,0,17483,17484,0,17485, + 0,17486,0,17491,17492,0,0,17493,0,17494,17495,0,0,0,17496,0,0,0,17497,0,0, + 0,17502,0,0,0,0,0,17503,0,17505,0,17507,0,0,0,17512,17513,17514,0,0,17515, + 0,0,0,17519,0,0,0,17522,0,0,17523,0,0,0,0,0,0,0,0,0,17527,0,0,0,17528, + 0,0,0,17534,0,0,0,0,17536,0,0,0,17539,0,17540,17543,17549,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,17556,0,0,17558,0,17559,0,0,17560,0,0,0,17563,0,0,0, + 0,0,0,17564,0,0,17565,17566,0,17567,0,0,0,0,0,0,17569,17570,0,17575,0,0, + 0,0,0,0,0,0,0,0,0,17581,0,0,0,17582,17583,0,17586,0,0,17587,0,0,0,0,0, + 0,0,17588,0,0,0,0,17596,17597,0,0,17598,17600,0,0,0,0,0,0,17601,0,0,0, + 17604,0,0,17605,0,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 17612,0,0,17618,0,17621,17622,0,0,0,0,17623,0,0,17624,0,0,17630,0,0,17631, + 17633,17634,0,0,0,0,0,0,0,17635,0,0,17636,0,0,17637,0,17638,0,17640,0,0, + 0,0,0,0,0,0,0,0,17641,0,0,0,0,0,0,0,0,0,0,17643,0,0,0,0,17645,0,0,0, + 0,0,0,0,0,17646,17662,0,0,0,0,0,0,0,0,0,17663,17664,0,17665,17666,0,0,0, + 17669,17671,17673,0,17679,0,0,0,0,0,0,0,17684,0,0,0,17686,0,17714,0,0, + 17720,17722,17726,0,0,17728,0,0,17729,0,0,0,17732,0,17733,0,17734,0,0,0, + 17735,0,0,0,0,17737,0,0,0,0,17739,0,0,0,17741,17742,0,0,0,0,17743,17744, + 17745,0,0,0,17749,0,17750,17751,17752,17754,17761,17762,0,17763,0,17766,0, + 17772,0,0,0,0,0,17775,0,0,0,0,0,0,0,17776,0,0,17777,0,0,17778,17779,0, + 17782,17783,0,0,0,0,0,0,0,0,0,0,17784,0,0,0,0,0,0,0,17821,0,0,0,17822, + 0,0,0,17823,17825,0,0,0,0,0,17826,17831,17832,17833,0,0,17845,0,0,0,17846, + 0,0,0,17848,17850,17854,0,17855,0,0,17859,0,0,0,0,0,0,17860,17861,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17870,17871,0,0,0,0,0,0,17872,0,0,0, + 17879,0,0,0,17881,17883,0,17884,0,17885,0,0,17886,0,0,17887,17891,17953,0,0, + 0,0,17954,0,0,17955,0,17968,0,0,17972,0,0,0,0,0,17974,0,0,0,0,17976, + 17978,0,0,17983,0,0,0,0,18003,0,0,0,0,0,18007,0,0,0,0,0,18009,0,0,0,0, + 0,0,0,18010,0,0,0,0,0,0,18012,0,0,18014,0,0,0,18015,0,0,0,18016,0,18017, + 0,0,0,18030,0,0,0,0,0,0,0,18031,0,0,18036,18037,18038,0,0,18049,18056,0, + 18057,18058,0,18059,0,0,0,0,0,0,0,0,18062,0,0,0,0,18064,0,0,0,0,0,0,0, + 0,18067,0,0,0,18068,0,0,18075,0,0,18078,18093,18094,0,0,0,0,0,0,0,0, + 18097,0,0,0,0,0,18098,18100,0,0,0,18108,0,18111,0,0,18112,0,18113,0,0, + 18115,18116,0,18118,0,0,0,0,18121,0,0,0,0,18123,0,0,0,0,0,0,0,0,0,18124, + 0,0,0,0,18125,18126,0,18127,0,0,18128,18135,0,0,0,0,0,0,0,0,0,18150,0,0, + 0,0,0,18151,18152,0,0,18156,18164,0,18166,18171,0,0,0,0,0,0,0,0,0,18172, + 18183,0,18184,0,0,0,0,18185,0,18187,0,0,0,0,0,18188,0,0,0,0,0,0,0,0, + 18189,0,0,18190,0,0,18191,18192,0,0,18194,18195,18196,0,0,0,18197,0,18203,0, + 18204,0,0,0,0,18205,0,0,0,18207,18208,0,0,18214,0,0,0,18215,18216,0,0,0, + 18220,0,0,18222,0,0,0,0,0,18223,0,18225,18231,0,18234,0,18235,0,0,0,0, + 18240,0,0,18241,18242,0,0,0,0,0,18243,18251,0,18253,0,18254,0,0,0,18266,0, + 0,0,0,0,0,18269,18270,18271,18273,18281,0,0,0,0,0,0,0,0,0,0,0,0,18282,0, + 18283,0,18284,0,0,0,0,0,0,18285,0,18287,18289,0,0,18290,0,0,0,0,18308,0, + 0,0,18310,0,0,0,0,0,0,0,0,0,0,0,0,18311,0,18312,18313,0,18315,0,0,18316, + 18320,0,18331,0,18332,0,18336,0,0,0,0,18337,0,18340,0,0,0,0,0,0,0,0,0, + 18341,0,18344,18345,0,18346,0,0,0,0,0,18348,0,18351,0,0,18356,0,0,0,0,0, + 0,18357,0,0,0,0,0,18367,0,0,0,18368,0,18369,0,18370,18371,0,0,0,18437, + 18444,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18445,18450,0,0,0,0,18451,0,18452,0, + 0,0,18453,0,0,0,0,0,18455,0,0,0,18456,0,18457,0,18460,0,0,18461,0,0,0,0, + 0,0,0,0,18466,0,0,18467,0,0,0,0,18473,0,0,0,18476,0,18477,0,0,0,18478, + 18479,18480,0,0,0,18485,0,0,0,18486,0,0,0,0,0,0,18488,18490,0,0,0,0,0,0, + 18491,0,0,0,0,0,18495,0,0,18496,0,0,0,0,0,0,18505,0,18521,0,18522,18523, + 0,0,0,18525,18526,0,0,0,0,0,18527,0,0,0,0,18532,18533,0,18534,0,0,0,0,0, + 0,18535,18537,0,18538,0,0,0,0,0,0,18540,18541,18542,18543,0,18546,0,0,0,0, + 18553,18556,0,0,18558,0,0,18569,18571,0,0,0,18572,0,18574,0,0,0,0,18586,0, + 0,0,0,0,18588,0,0,18589,0,0,0,0,0,0,18590,0,18592,0,0,0,0,18594,0,0,0, + 18596,0,0,18597,18598,0,0,18601,0,0,0,0,18602,0,0,0,18603,18604,0,18605,0, + 0,0,0,18608,0,0,18611,0,0,0,0,0,0,0,0,0,18612,0,18616,0,0,18617,18619,0, + 0,0,18628,0,0,0,18629,0,0,18630,0,0,0,0,0,0,0,18631,0,18632,0,0,18635, + 18637,0,0,0,0,0,0,18641,18643,18648,0,18652,0,0,18653,0,18655,18656,0,0,0, + 18657,0,0,18666,18674,0,0,0,0,18677,18684,18685,0,0,18686,0,0,18690,0,0,0, + 0,0,0,0,18695,18696,0,0,0,0,0,0,0,0,0,0,18697,0,0,18700,0,0,0,0,0,0, + 18702,0,18708,0,0,18709,0,18710,0,0,18711,0,18714,0,0,18718,0,0,0,0,0,0, + 18719,0,0,18722,0,18726,0,0,0,0,0,0,0,0,0,0,0,0,0,18731,0,0,0,0,0, + 18739,18741,0,0,18742,0,18743,18744,18746,18748,0,18752,18753,0,0,18754,18763, + 0,18765,0,0,0,18766,0,0,0,18769,0,0,0,0,0,18773,18778,18779,18781,0,0, + 18784,18787,0,18788,0,18793,0,0,0,0,0,0,18795,0,0,18800,0,0,0,0,0,18801, + 18804,0,0,0,0,0,0,0,18806,0,0,0,18811,18815,18816,0,0,0,0,18825,0,0, + 18827,18829,0,0,18830,0,0,0,0,18831,0,0,18832,0,0,0,0,18833,0,18840,0, + 18841,0,18842,0,0,0,0,18843,0,18844,0,0,0,0,0,0,18845,18846,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,18848,0,0,0,18853,18860,0,0,18862,18866,0,0, + 18867,18869,0,0,18874,18881,18891,0,0,0,0,0,0,0,0,0,0,18892,0,0,0,0,0,0, + 0,0,18895,0,18896,0,0,0,18900,0,0,0,18901,0,18902,18915,18916,0,0,0,0,0, + 0,0,0,18919,0,0,0,0,0,18920,0,0,0,18921,18929,0,0,0,0,18930,0,0,0,0,0, + 0,18932,0,0,0,0,18934,18942,0,0,0,18951,18957,0,0,0,0,18958,0,0,0,0, + 18959,18960,0,0,18961,0,0,18962,0,0,0,0,18963,18964,0,0,0,18965,0,18967,0, + 0,0,0,0,0,0,0,0,18968,0,18969,0,18970,18973,18976,0,0,0,0,0,0,18977,0,0, + 0,18981,0,0,0,18990,0,18998,0,0,0,0,0,18999,19003,0,0,19005,0,0,0,19006, + 0,0,0,0,0,0,19008,19011,0,0,19018,0,0,19019,0,19024,0,19031,19032,0,19039, + 0,19041,19050,0,0,0,19051,19055,19056,0,19059,19063,19064,0,0,19088,0,0,0, + 19093,19094,0,0,0,0,19095,0,19096,0,0,0,19097,0,0,19098,0,19099,19100,0,0, + 19103,0,0,0,0,0,0,0,19111,0,0,0,0,0,0,19112,0,0,0,19116,19117,0,19121, + 19122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19123,19124,0,0,0, + 0,0,0,0,19125,19126,0,19128,0,0,0,0,0,0,0,0,0,0,19129,19130,19131,19132, + 0,0,19146,0,0,19147,19156,19158,0,0,0,0,0,0,0,0,19182,19185,0,0,19187,0, + 0,0,19193,0,0,0,0,0,19194,0,19197,0,0,0,0,19198,0,0,0,0,0,0,0,0,0,0, + 19202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19203,0,19205, + 19210,0,0,0,19213,0,19218,0,0,0,19223,19229,0,0,19230,0,0,19231,19232,19233, + 19239,0,0,0,0,0,19240,0,19248,19249,0,0,0,0,19254,0,19256,19258,19259,0,0, + 19261,0,19266,0,0,0,19272,0,19278,19281,19282,0,0,0,0,0,0,0,0,0,0,0,0, + 19283,0,0,19284,0,0,19285,19287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19288,19291, + 0,19292,0,0,0,0,19297,0,19298,0,0,0,0,19302,19303,0,0,0,0,19304,19305,0, + 0,0,0,19314,0,0,19315,0,0,19321,0,0,0,0,0,0,0,19322,0,19333,0,19334, + 19335,0,19336,19337,0,0,0,0,0,0,0,0,0,0,0,19346,0,0,19353,0,19354,19362, + 0,19366,19367,0,0,19369,0,19375,0,19377,19380,19388,0,0,0,0,0,19389,19390,0, + 0,0,0,19392,0,0,0,0,0,19402,0,0,0,0,0,0,0,0,19412,0,0,19413,19422,0, + 19424,0,0,0,19425,0,0,0,19428,0,0,0,0,19431,0,0,0,0,0,19432,0,0,0,0,0, + 19448,19459,0,0,19461,0,19462,19463,0,19467,19474,19482,0,0,0,0,19494,0,0,0, + 0,19501,0,0,0,0,0,0,0,0,0,0,19502,19504,0,0,0,0,0,0,0,19505,0,0,0,0, + 19506,19507,0,0,0,19508,0,0,19511,0,0,19514,0,19515,0,19516,0,19518,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19530,0,19537,19538,0,19543,19546,0,19547, + 19551,0,0,0,0,0,0,19552,19553,0,0,0,0,0,0,0,0,0,0,0,0,19555,0,0,19556, + 0,0,0,0,0,0,0,0,0,0,0,0,19560,19561,0,0,19562,0,0,0,0,0,0,19565,19567, + 0,19568,0,0,0,19569,19570,0,19578,0,0,0,0,19580,0,0,0,0,19581,19584,0,0, + 0,0,0,0,0,19585,19586,0,0,0,19587,19588,0,19589,0,0,0,0,0,0,19592,19593, + 19599,0,19600,0,0,19604,0,0,19605,0,19606,19608,19610,0,19613,19614,0,0,0,0, + 0,0,19616,19617,0,0,19618,0,0,19619,0,0,0,19620,19621,19631,0,0,19632,19634, + 19636,0,19643,0,0,19644,19658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,19659,0,0,0,0,0,0,0,0,0,0,0,19675,19677,0,0,0,0,19679,0,19683,0,19684, + 0,0,0,0,0,0,19687,0,0,0,0,0,0,0,0,19688,19689,19692,0,0,0,0,0,0,0, + 19695,19697,0,0,0,0,0,19698,19699,0,0,19700,0,19702,0,0,19703,0,0,0,0,0, + 0,19704,19708,0,19710,0,19713,0,0,0,19715,0,0,0,0,19718,0,0,0,0,0,0,0, + 19720,0,19722,0,0,19725,0,0,0,0,0,0,0,0,0,0,0,0,0,19730,0,0,0,0,0, + 19731,0,19734,19735,19739,0,0,19740,0,19741,0,0,0,19746,0,0,19747,0,19771,0, + 0,0,0,0,0,0,0,19772,19775,0,0,0,0,0,0,19778,0,0,0,0,0,19779,0,0,19780, + 19790,0,19791,0,0,19792,0,0,0,19793,0,0,19796,19797,0,0,0,19799,0,0,0, + 19801,0,0,0,0,19803,0,19804,0,19805,0,0,19807,0,0,0,19808,0,0,0,0,0,0, + 19809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19816,0,19821,0,19822,19830, + 19831,0,0,0,19833,0,0,0,0,0,0,0,0,0,0,19838,0,0,0,0,19839,0,0,19843,0, + 0,0,0,19845,0,0,0,0,19847,0,0,19848,0,19849,0,0,0,0,0,0,0,19851,0,0,0, + 19854,0,0,0,0,0,0,0,0,0,19864,0,19865,0,19866,0,0,0,0,0,0,0,19868,0,0, + 19870,0,0,19871,0,0,19872,19873,19875,0,19880,19882,19884,0,0,19885,19886, + 19888,0,0,0,0,0,0,0,0,0,0,0,0,19890,19892,19893,0,0,19894,0,0,0,19895,0, + 19896,19902,0,0,19903,0,0,19905,0,0,0,19906,0,19908,0,19909,19911,0,0,0, + 19913,19920,0,19938,19939,19940,0,0,0,0,0,0,0,19942,0,19943,0,19945,0,0,0, + 19951,19952,19954,19960,0,19965,0,19971,0,0,0,0,0,19975,0,19976,0,19990,0,0, + 19991,0,19993,0,19995,0,0,0,19998,19999,20001,0,20003,20005,0,20011,20012,0, + 0,0,0,0,0,20014,0,20020,0,0,0,0,20021,0,0,0,0,0,20023,20024,0,0,0,0,0, + 20025,0,0,20027,0,0,20029,0,0,20032,0,0,0,0,20044,20045,0,20048,20049,0,0, + 20050,0,20052,0,0,20054,20057,0,0,0,0,0,0,0,0,0,20059,0,0,20061,0,20062, + 0,20064,0,0,20066,0,0,20067,0,0,0,0,20069,0,0,0,0,0,0,20070,20071,0,0,0, + 0,0,0,0,0,0,0,0,20072,0,0,20073,20074,0,0,0,0,0,20075,0,20078,0,0,0,0, + 20080,0,20081,0,0,0,0,0,0,20095,0,20098,0,0,0,0,0,0,0,20107,0,0,0,0,0, + 0,0,0,20112,0,0,0,20113,20114,0,0,0,20115,20123,20124,0,0,0,20131,20133, + 20134,0,0,0,0,20136,0,0,20137,20138,20150,0,20152,0,0,0,20153,0,0,20154,0, + 0,0,20158,0,20163,0,0,20164,0,0,0,0,0,0,0,20166,0,20168,0,20170,0,20175, + 0,0,20178,0,0,0,0,20223,0,0,0,0,20224,0,20226,0,0,20230,0,20231,0,0,0,0, + 20232,0,0,20233,20234,0,20244,0,20247,0,0,0,0,0,0,20249,0,0,0,20250,0,0, + 0,0,20251,0,20253,0,20254,0,0,0,0,20256,0,0,20264,0,0,0,0,20266,0,0,0, + 20278,0,0,20279,20282,0,0,0,0,0,20283,0,20284,0,20285,0,20287,20290,0,0,0, + 0,20292,0,0,0,0,20293,20297,0,0,0,0,0,0,20299,0,20300,20303,0,0,0,0,0,0, + 20307,0,0,20308,0,20309,0,20310,0,0,0,0,0,0,20312,0,0,0,20314,0,0,0,0, + 20315,20316,0,20322,0,0,0,0,0,0,20339,0,0,0,20342,0,0,0,0,20352,0,0,0,0, + 0,0,0,0,0,0,20362,0,0,20365,0,20375,20377,0,0,0,0,0,0,0,0,0,0,0,20378, + 20379,0,20380,0,0,20381,0,20382,0,20383,0,20388,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,20390,20392,20393,0,0,20395,0,0,0,0,0,20396,0,0,0,0,0,0,0,0,20398, + 20415,0,0,0,20417,0,0,20420,0,0,20426,20428,0,20431,0,0,20432,0,20433,20434, + 20435,0,0,0,0,20440,0,0,0,0,0,20442,0,20443,0,20446,0,0,0,0,20448,0, + 20451,0,0,0,0,0,0,0,0,0,20452,20453,0,0,20454,0,0,0,0,0,0,20457,0,20458, + 0,0,0,20465,0,0,0,0,0,20469,0,0,0,20473,0,20476,0,0,0,0,0,0,0,0,20477, + 0,0,20485,0,0,20486,0,0,20487,0,20496,0,20497,0,0,20498,0,0,0,0,0,0,0,0, + 0,0,20499,20500,0,20501,0,0,0,0,0,20520,20527,0,20529,0,0,0,0,20539,0,0, + 20540,0,0,0,20543,0,0,0,20546,0,0,0,0,0,20548,0,0,20563,0,0,20564,0, + 20566,0,0,0,0,0,20589,0,0,0,0,20590,0,0,20593,20594,0,0,0,0,20595,0, + 20597,20598,0,0,0,20618,20620,0,0,0,0,20621,0,0,0,0,20627,0,0,0,0,0, + 20628,0,0,0,20629,0,20630,0,0,20639,0,0,0,0,0,20707,0,0,20709,0,0,0, + 20713,20714,0,0,0,0,0,20724,20725,0,0,0,0,20726,20728,20729,0,20733,0,20734, + 0,20735,20736,0,20737,0,0,20744,0,20745,0,20748,0,0,20749,0,0,0,0,0,0,0, + 0,20750,0,0,0,0,20754,0,0,0,20761,0,0,20763,0,0,0,0,0,0,0,20766,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,20767,0,0,0,0,20768,0,20769,20777,0,0,0,0,0,0, + 20785,0,0,0,20786,20795,20801,0,20802,0,20807,0,0,20808,0,0,20810,0,0,20811, + 0,20812,0,0,0,0,0,20813,0,0,20818,20820,20821,0,0,0,20822,0,20823,0,0,0, + 20826,0,0,0,0,0,0,0,20829,20830,20831,0,20832,20836,0,0,20839,0,0,20840, + 20842,0,20843,0,20844,0,20854,0,0,0,20855,0,0,0,0,20856,0,0,0,20869,0,0, + 20871,0,0,0,0,0,0,0,20873,0,0,0,0,0,20876,0,0,0,0,0,20880,0,0,20882,0, + 0,0,0,20883,20884,0,0,20890,0,0,0,0,0,0,0,0,0,20891,0,0,0,0,0,20905,0, + 20906,20910,0,0,20912,20915,0,0,0,0,0,20916,0,20917,0,20919,20920,20922,0, + 20927,0,20928,20929,20930,0,0,20935,0,0,20939,0,0,20941,0,0,0,20943,0,0,0, + 20946,20947,0,0,0,0,0,20950,0,20954,0,0,20955,20964,0,0,20967,0,0,0,0,0, + 20973,20975,0,0,0,20984,0,20987,20988,0,0,0,0,0,20989,0,0,0,20995,0,20998, + 0,20999,0,0,0,0,21000,21001,0,0,0,0,21008,0,21010,0,21016,0,0,0,21017, + 21018,0,0,0,0,0,21021,21026,21027,21028,0,0,21029,0,0,0,0,0,21030,0,0,0, + 0,0,0,0,0,0,0,0,0,0,21031,21032,0,0,0,0,0,21037,0,0,21038,0,0,0,0,0, + 0,0,0,0,21039,0,21041,0,21046,21047,0,0,0,21049,21053,0,0,21057,21064,21065, + 0,0,21066,21067,0,0,0,21069,0,0,0,21071,21072,0,0,21073,0,21074,0,0,21078, + 0,0,0,0,21079,0,0,21080,21081,0,0,21086,21087,0,21089,0,0,0,0,0,0,0, + 21091,0,21093,0,21094,0,0,0,0,0,0,0,0,21095,0,0,0,0,0,21096,0,21098,0,0, + 0,0,0,0,0,21099,0,0,21100,21101,21102,0,0,0,0,0,21103,0,21104,0,0,0,0,0, + 21105,21108,21109,0,0,21112,21113,0,0,0,0,0,0,21115,21122,21123,0,0,0,0,0, + 21125,0,0,0,0,0,0,0,0,21129,21131,0,0,21134,0,0,0,21137,21142,0,21143,0, + 0,21144,0,21145,21146,0,21152,21154,21155,21156,0,0,0,21160,0,0,0,0,0,0, + 21161,0,21164,0,21166,0,0,0,0,21170,0,0,0,0,21171,0,0,21172,0,21174,0, + 21175,0,0,0,0,0,21176,21179,21188,0,0,0,21189,0,0,21190,0,0,0,21192,0,0, + 21193,0,0,0,21198,0,21212,0,0,21213,0,0,0,0,0,0,21215,21216,0,0,21223, + 21225,0,21226,0,0,0,0,21227,21228,0,0,21229,0,0,0,0,21230,21236,0,0,0,0, + 0,0,0,0,0,0,0,0,0,21237,0,0,21238,21239,0,0,0,0,21256,0,0,0,0,0,21257, + 0,0,0,0,0,0,0,21259,0,0,0,21263,0,21272,0,21274,0,21282,0,0,0,0,0,0,0, + 0,21283,0,0,0,0,0,0,0,0,21294,0,0,21297,0,0,0,0,21298,0,0,0,21299,0, + 21300,21302,0,21316,0,21318,21322,21323,0,21324,0,21326,0,0,0,21327,21328,0, + 0,0,21352,0,0,21354,21361,0,0,0,0,0,0,0,0,0,0,0,0,0,21362,0,0,0,21363, + 0,0,0,0,0,0,0,0,0,21366,0,0,21367,21372,21374,0,0,0,21375,21377,0,21378, + 0,0,0,21380,0,0,0,0,0,0,0,0,0,0,21381,0,0,0,0,0,0,21382,0,21383,0,0, + 21384,0,0,21385,0,0,0,0,21389,21390,0,0,0,0,0,0,0,0,0,0,0,0,0,21397, + 21398,0,0,0,0,0,0,0,0,0,0,21399,0,21400,0,0,0,0,21402,0,0,0,21403,21404, + 0,21405,21406,0,0,0,21407,0,0,0,0,0,0,0,0,0,0,0,0,21408,0,0,0,0,21409, + 0,21421,0,21422,0,0,0,21425,21428,0,0,0,0,21429,0,0,0,0,0,21433,0,0,0,0, + 0,0,0,0,0,0,21434,0,21443,0,21444,21449,0,21452,0,21453,21454,0,0,0,21457, + 0,0,21458,0,0,0,21460,21461,0,0,21464,0,0,0,21473,21478,0,0,21479,0,0, + 21481,21483,0,0,0,0,0,0,0,0,21484,0,0,21485,21486,0,0,21488,0,0,0,0,0,0, + 21523,0,0,21525,0,0,0,0,0,0,0,21526,0,0,0,0,0,0,21529,21530,0,0,21531,0, + 0,21533,0,0,21539,21564,0,21567,0,0,0,0,0,0,0,0,21575,0,0,0,0,21577,0,0, + 0,0,0,21591,0,0,21604,0,0,0,0,0,0,0,0,0,21605,0,21606,0,0,21617,21618, + 21619,21620,0,0,0,0,0,0,0,0,0,0,0,0,0,21623,0,0,0,0,21631,0,21635,0,0, + 0,0,21639,21646,21653,21662,0,0,21663,21664,0,21666,0,0,21667,0,21670,21672, + 21673,0,21674,21683,0,0,0,0,0,21684,0,21694,0,0,0,0,21695,21700,0,21703,0, + 21704,0,0,21709,0,0,0,21710,0,0,0,0,0,0,0,0,21711,0,0,0,21712,0,21717,0, + 21730,0,0,0,21731,21733,0,0,0,0,21737,21741,21742,0,21747,0,0,0,21749,0,0, + 0,0,0,0,0,0,0,0,0,0,0,21750,0,0,0,0,0,21752,0,0,0,0,21753,0,0,0,0,0, + 0,21755,21756,0,21757,0,0,0,0,0,0,21760,0,0,21763,0,0,0,0,0,0,0,0,0, + 21764,0,0,21766,0,0,21767,0,0,0,0,0,0,0,0,0,21773,0,21774,0,0,21775,0,0, + 0,0,21776,0,0,21777,0,0,0,0,0,0,0,0,0,21780,21787,21788,21791,0,0,0, + 21797,0,0,0,0,0,21805,0,0,0,0,21806,0,21807,21809,0,21810,21811,0,21817, + 21819,21820,0,21823,0,21824,0,0,21825,0,0,21826,21832,0,0,0,0,0,21833,21848, + 21849,0,0,21867,21870,21871,21873,0,0,0,21874,0,0,0,0,0,0,0,0,0,21875,0, + 21878,0,0,0,21879,0,21881,21886,0,0,0,0,21887,0,0,21888,21894,21895,21897,0, + 21901,0,21904,0,0,21906,0,0,0,21909,21910,21911,0,0,21912,0,0,21913,21914, + 21915,0,21919,0,0,0,0,0,0,0,21921,0,0,21922,21933,21939,0,0,0,0,0,0,0,0, + 0,0,0,21944,0,0,0,0,0,21945,0,21947,0,0,0,0,0,0,0,0,0,0,21949,0,0,0, + 21950,0,0,0,0,0,0,0,0,0,0,0,0,0,21951,0,21952,0,0,0,0,0,0,0,0,0, + 21954,21957,0,0,0,0,21958,0,21959,0,0,0,0,0,0,21962,21963,0,0,0,0,0,0,0, + 0,21964,21965,0,0,21969,21970,0,0,0,21974,0,0,21980,21981,0,21982,0,0,0,0, + 0,21985,0,21988,0,21992,0,21999,0,0,0,0,0,0,22001,0,22002,0,0,0,0,0,0, + 22003,0,0,0,0,0,22004,0,0,0,22008,0,22009,22015,0,0,22016,0,0,0,22017, + 22019,0,0,0,0,0,0,0,0,0,22020,0,0,0,0,0,0,0,0,0,0,22021,22037,0,22039, + 0,0,0,22040,0,0,0,22048,22049,0,0,22053,22055,22056,22059,0,0,22060,22061,0, + 0,22064,0,0,0,0,22066,0,0,0,0,0,0,0,22073,0,0,0,22074,22075,0,0,0,0,0, + 0,0,22076,0,0,0,0,22077,22084,22099,0,0,0,0,0,0,0,22104,0,0,22107,0, + 22108,0,22109,0,22110,0,0,0,0,0,0,0,22111,22119,0,22120,22122,0,0,0,0, + 22125,0,0,0,22128,22129,0,0,0,0,0,0,22141,0,0,0,22142,0,0,22144,22146,0, + 22148,22149,22151,22154,0,0,0,22162,0,0,0,0,22164,22177,0,0,0,0,22179,0, + 22182,22183,0,0,22184,22188,0,0,0,0,0,0,0,0,22190,0,22194,22201,0,0,22208, + 0,22209,0,22212,0,0,22215,0,22223,22231,0,0,22232,0,22234,0,0,22235,22236,0, + 22237,0,22240,0,0,0,0,0,22241,0,0,0,22242,22246,22247,0,0,0,22259,22268,0, + 22269,0,0,0,0,0,0,0,22270,0,0,0,0,22271,0,22272,0,22277,0,0,0,0,0,22278, + 22280,22283,22286,0,0,22287,22289,0,0,22290,0,22293,0,0,0,0,0,0,0,0,0,0, + 22295,0,22301,22302,0,0,0,22305,0,22308,0,0,0,0,0,0,0,0,0,0,22315,0,0,0, + 22317,0,22334,0,0,0,22335,0,0,0,0,0,22336,0,22338,22344,0,22347,22349,0, + 22350,0,0,0,0,0,0,0,22357,0,0,0,0,0,22358,0,0,0,0,0,0,0,0,0,0,22359, + 22360,0,0,0,0,0,0,0,0,22361,22366,0,0,22369,0,22370,22373,0,0,0,0,0, + 22375,0,22377,0,0,0,0,0,22378,0,0,0,0,22381,0,0,0,0,22382,0,22383,0,0,0, + 0,0,0,0,0,0,22391,0,0,22392,22395,22396,22402,0,0,0,0,0,0,0,0,0,0,0,0, + 0,22405,0,0,22406,0,0,22408,0,0,22409,22410,0,0,0,0,0,0,22424,0,0,0,0, + 22426,0,0,0,22427,0,22428,0,22432,0,22435,22442,22443,0,0,0,0,22444,0,0,0, + 0,0,22446,0,22454,0,22455,0,0,0,22465,0,22470,0,22471,0,0,0,0,22472,22473, + 0,22487,0,0,0,22488,0,0,0,0,22489,0,0,22499,0,0,0,0,0,0,22514,0,0,22515, + 0,0,0,0,0,0,0,22516,0,0,0,22517,22520,0,0,0,22534,0,0,22535,0,0,22536,0, + 22540,22553,0,22555,0,0,0,0,22561,0,0,22562,0,0,0,0,0,0,0,0,0,0,0,22566, + 0,0,0,0,22567,22568,0,0,22575,0,22579,0,22582,22583,22585,0,0,0,0,0,22586, + 0,0,22587,0,0,22590,0,0,0,0,0,22591,0,22592,0,0,0,0,0,22593,0,22602,0,0, + 22604,0,0,22609,0,0,22618,0,0,0,0,0,0,22619,0,22624,22625,0,0,22638,0,0, + 0,0,0,22639,0,0,22640,0,0,0,0,0,0,0,22644,0,22645,22647,0,0,0,0,22652, + 22653,0,0,0,22654,0,22655,0,0,0,22656,0,0,0,0,0,0,0,0,0,0,22673,22675, + 22676,0,0,22678,22679,0,22691,0,0,0,0,0,0,0,22693,0,0,22696,0,22699,22707, + 22708,0,0,0,0,0,0,0,0,22718,0,22719,0,0,0,0,22723,0,0,0,22724,22725,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,22726,22728,0,0,0,0,0,0,0,0,22729,0,0,22731, + 0,0,0,0,22732,22735,22736,0,0,0,0,22739,0,22749,0,0,22751,0,0,0,0,0,0,0, + 0,0,0,0,22758,0,0,0,0,0,22760,0,0,0,0,0,22764,22765,22766,0,22768,0,0,0, + 0,0,22769,22770,0,0,0,0,0,0,22771,0,0,22772,22775,0,22776,22777,22780,0,0, + 22782,22784,0,22787,0,22789,22796,0,0,0,0,0,22798,0,0,0,0,0,0,22802,0, + 22803,22804,0,0,0,0,0,0,0,0,0,0,22805,0,0,22810,22811,22814,22816,0,22825, + 22826,0,22831,22833,0,0,0,0,0,0,0,0,0,22834,0,22836,22838,0,22839,0,0,0, + 0,0,22840,0,22847,0,0,0,0,0,22856,22857,0,22858,22859,0,0,22862,0,0,22864, + 0,0,0,0,22865,0,0,0,0,0,0,0,0,0,0,0,22866,0,22867,22868,0,0,0,0,22869, + 0,22871,0,22872,0,22873,22881,22882,22884,22885,0,0,0,0,0,0,0,22886,22887,0, + 22894,0,22895,0,0,0,22900,0,22901,0,0,0,0,22904,0,0,0,0,22905,22907,0,0, + 0,22915,22917,0,0,22918,0,0,0,22920,0,0,0,22929,22930,0,0,0,22941,22942,0, + 0,0,22943,0,0,0,22944,0,0,0,0,0,0,0,22946,0,22947,0,0,22954,0,22956,0,0, + 22962,0,0,0,0,0,0,0,22963,0,0,22964,0,0,0,0,0,0,0,22965,0,22968,0,0,0, + 22969,0,0,0,0,0,22970,0,22971,0,0,0,0,0,22978,0,0,22979,0,22987,0,0, + 22989,0,0,0,0,0,0,22990,0,23005,0,0,0,0,0,0,0,23006,23007,23008,0,0, + 23023,23024,23029,0,0,0,0,23030,0,0,0,0,0,23032,0,0,0,0,0,23035,0,0,0,0, + 23038,0,0,0,23048,0,23049,23052,23053,23060,23061,0,23063,0,0,0,0,23067, + 23068,0,0,0,23069,23073,0,0,0,23127,0,23128,0,0,0,0,0,23129,0,23138,23141, + 0,23149,0,0,23150,0,0,0,23152,0,0,0,0,0,0,0,0,23154,0,0,0,0,23157,23159, + 23160,0,0,0,0,0,0,0,0,0,0,0,0,23180,0,0,0,0,23181,0,0,23188,0,23189,0, + 0,0,0,0,0,0,0,0,0,0,0,23195,0,0,23196,23199,0,0,0,0,0,0,0,0,0,23202, + 0,23204,0,23207,0,23209,23210,0,0,0,0,0,0,23227,23229,0,0,23230,23234,23238, + 0,0,0,23245,23246,23248,0,0,0,0,23249,23254,0,0,0,23265,0,0,0,0,0,0,0, + 23268,0,23276,0,0,0,0,23277,0,23297,0,23298,0,0,0,0,23299,0,23302,0,0, + 23303,23312,0,0,23314,0,23320,0,0,0,0,23324,0,23325,0,23328,0,23334,0,0,0, + 23337,0,0,0,0,23343,23344,23346,0,23348,0,0,0,0,0,0,0,0,23353,0,0,0,0, + 23355,0,23356,23358,0,0,0,23359,23360,0,23361,0,23367,0,23369,0,0,23373,0, + 23378,23379,0,23382,23383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23387,0,0,0,0,0, + 0,23388,23390,0,0,23393,23398,0,0,0,23399,0,0,0,23400,0,0,0,0,23401,0,0, + 0,23415,0,0,0,0,0,0,0,0,23416,0,23422,0,23443,23444,0,0,0,0,23448,0, + 23454,0,0,0,0,0,0,23456,0,0,23458,23464,0,0,0,0,0,0,23465,0,0,0,23470, + 23471,0,0,23472,0,0,0,23473,23496,0,0,0,0,0,0,0,0,23497,0,23499,0,0, + 23502,0,0,23503,0,0,23513,0,0,23515,0,0,0,23517,0,0,0,0,23518,23519,23521, + 23524,0,23525,23528,23539,0,0,0,0,0,23541,0,0,23544,0,0,23556,0,0,23557,0, + 0,0,0,0,0,0,0,0,0,0,0,0,23559,0,23560,0,0,23561,0,0,23566,0,0,0,0,0, + 23568,23569,23570,0,0,0,0,23571,0,23574,0,0,0,0,0,0,0,0,0,0,0,23575,0, + 23579,0,0,23581,0,0,0,0,0,0,23587,0,0,0,0,0,0,0,23596,23598,0,0,0,0, + 23602,23606,0,0,23607,0,23608,0,0,0,23614,23616,0,0,0,0,0,23618,0,0,23619, + 0,0,0,0,23621,23626,0,23627,0,0,0,0,0,0,0,23629,0,23630,0,0,0,0,23634,0, + 23636,0,0,0,0,0,0,23638,0,0,0,0,23640,23667,0,23669,0,0,0,23681,0,0,0,0, + 0,0,0,23682,0,23683,0,0,0,0,0,23684,0,0,0,23685,23689,0,23693,23694,23700, + 0,23702,0,23709,0,0,0,0,0,0,0,23712,0,0,0,0,0,23714,0,0,23715,0,0,0,0, + 23718,0,0,23720,0,0,0,0,23722,0,0,0,23726,23729,0,23741,23746,0,23748,0,0, + 0,0,23749,0,0,0,0,0,23750,0,0,0,0,23751,0,23753,0,0,0,0,23757,23765,0,0, + 0,23770,0,0,0,0,0,0,0,23771,0,23772,23781,0,0,23796,0,0,0,0,23798,0, + 23799,0,0,0,23802,0,0,23806,0,23807,0,0,23808,0,23809,0,23819,0,0,0,23821, + 0,23827,0,0,0,23829,0,0,0,0,0,0,0,23830,0,0,0,0,0,0,23832,23833,23834, + 23835,0,0,0,0,23837,23838,0,0,0,0,0,23846,0,0,0,0,0,0,23847,0,0,0,0,0, + 23879,23881,0,0,23882,23883,23895,0,23899,0,0,0,0,23901,0,0,0,0,0,0,23902, + 0,0,0,0,0,23903,23905,0,23906,0,23907,23918,23919,23920,0,23922,0,23924,0, + 23927,0,23934,0,23937,23941,0,23942,23946,0,0,0,0,0,23955,23956,23958,0,0,0, + 0,0,0,23959,0,23962,23965,0,23966,0,0,0,0,23967,23968,0,0,23973,0,0,23974, + 0,0,0,0,23975,0,23976,0,0,0,0,0,0,0,0,0,0,0,0,0,23977,0,0,0,0,0,0,0, + 0,23980,0,0,23984,0,23985,0,0,23987,0,0,23988,23990,23991,0,0,0,0,0,0, + 23992,0,0,0,0,0,0,0,0,23994,0,0,0,23998,0,0,0,0,0,0,0,0,0,23999,0,0, + 24003,0,24004,0,24006,0,0,0,24007,0,0,24008,0,0,0,0,0,0,0,24009,0,0, + 24010,0,0,24011,0,0,24013,24014,0,0,24015,24016,24027,0,24028,24029,0,24030, + 0,0,0,0,0,24033,24034,0,24035,0,0,24036,0,0,24044,0,24048,24049,24063,24067, + 0,24068,24070,0,0,24071,24078,24087,0,24090,0,0,0,24095,0,24098,24101,24104, + 24106,0,24107,0,0,0,24108,0,0,0,0,24110,24111,0,24113,0,0,24115,24120,0,0, + 0,0,0,0,24124,0,24125,0,24126,0,24127,0,0,0,0,0,24135,0,0,24136,0,24137, + 24142,0,0,0,24146,0,0,24147,24149,24154,0,24163,0,0,0,24165,24166,24167,0,0, + 0,0,0,0,0,0,0,0,24169,24170,24175,0,0,0,24178,0,0,24179,0,0,24181,0, + 24184,24197,0,24201,24204,0,0,0,0,0,0,24206,24212,24220,0,0,0,24224,0,0,0, + 0,0,0,0,0,24226,0,24234,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24235,0, + 24236,0,0,0,0,0,24239,24240,24241,0,0,24248,0,0,24249,0,24251,0,0,0,0,0, + 0,24253,0,24268,0,0,0,24269,0,24271,24272,0,0,0,0,24273,0,0,24274,0,0, + 24279,0,0,0,0,0,0,0,24280,0,24293,24294,0,0,0,0,0,0,24296,0,0,24323,0,0, + 0,24329,24330,24331,24339,0,24351,0,0,24369,24370,0,0,0,24371,0,0,0,0,24372, + 24373,24374,0,0,0,0,0,24378,0,0,0,0,24379,0,24381,0,24383,24389,0,24390,0, + 0,24394,24395,24400,0,0,0,24401,24402,0,24406,0,0,0,24411,0,0,0,24415,0, + 24416,0,0,0,0,0,24417,0,24419,0,24422,0,24423,24428,0,24435,0,0,0,24439,0, + 0,0,24440,24442,24446,0,0,0,24447,24448,24449,24452,0,0,0,0,24453,24457,0,0, + 24458,24459,24460,0,24465,0,0,0,0,0,0,0,24470,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,24471,0,24473,24474,24475,24476,0,24478,0,0,0,0,24480,0,0,0, + 0,0,0,0,0,0,0,24481,0,0,0,0,0,0,0,0,0,0,24482,24485,0,0,0,0,24486,0, + 0,0,24488,0,0,0,24494,0,0,0,0,24497,0,0,24498,0,0,0,24499,24506,0,0,0, + 24507,0,0,24511,0,0,24513,24514,0,0,0,0,0,24517,0,24518,0,24520,0,24521, + 24524,24525,0,0,0,0,0,24527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24528,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,24537,24539,0,24540,0,0,0,24548,0,0,0,0,0, + 24549,24550,0,0,0,24553,24554,0,24555,0,24556,0,24558,0,0,0,0,0,24560,0,0, + 0,24561,0,0,0,0,0,24562,0,0,0,0,0,0,0,0,0,0,0,0,0,24567,0,0,0,0,0, + 24569,0,0,0,24574,0,24575,0,0,0,0,0,0,0,0,0,0,0,24577,24581,0,24584,0,0, + 0,0,0,24585,0,0,0,0,0,24586,0,0,24587,0,24588,0,0,0,0,0,0,0,0,0,0, + 24590,24591,0,0,0,0,24592,0,0,0,0,0,0,0,24594,0,0,0,0,0,0,0,24596,24597, + 0,0,0,0,24602,24603,0,0,0,0,24604,0,0,24605,0,24610,0,0,24611,0,0,0,0, + 24612,24615,24616,24624,0,0,0,24627,0,24638,24639,0,0,0,0,24640,0,0,0,24655, + 24656,24657,0,0,0,0,0,0,0,0,24662,0,24663,24664,0,0,0,0,0,24665,0,0,0,0, + 24667,0,0,0,0,0,0,24668,24669,0,24670,24674,0,0,0,24675,0,24678,0,0,24679, + 0,0,0,24681,0,24683,0,0,0,0,24684,0,24685,0,0,24686,0,0,24688,24689,0,0, + 0,0,24690,24691,0,0,0,0,0,0,0,24697,0,24698,0,0,0,0,0,0,0,0,24709,0,0, + 0,0,0,24710,0,24712,0,0,0,0,0,0,24713,24714,0,24715,0,24716,24718,0,24719, + 0,0,0,0,24720,0,0,24725,0,0,24738,0,24749,24750,0,0,0,24752,0,0,0,24753, + 0,0,0,24758,0,0,0,0,0,24762,0,24763,0,0,0,0,0,0,0,24764,0,0,0,0,0, + 24765,24767,24768,0,24772,0,0,0,0,24773,0,0,0,0,24777,0,0,0,0,0,24785,0, + 24786,24788,0,0,0,24789,0,0,0,0,24794,24798,0,24799,24800,0,0,0,24803,0, + 24804,24806,0,24807,0,0,0,24810,0,0,0,0,0,0,24827,24828,0,24835,0,0,0,0, + 0,0,24836,0,0,0,0,0,24839,0,24843,24844,0,0,0,0,0,0,0,0,0,0,24847,0,0, + 24848,0,0,0,0,0,0,24849,0,24850,24851,0,0,0,24852,0,24853,0,0,0,0,0,0,0, + 0,0,24854,0,24855,0,0,24868,0,0,0,24883,0,0,0,24884,0,24895,24897,0,0,0, + 0,0,24899,0,0,0,0,0,24900,0,24913,0,0,0,0,0,0,24914,0,0,24917,24930, + 24931,0,0,0,24932,0,0,24939,0,0,24942,0,0,0,0,0,0,0,0,0,24945,24950,0, + 24951,0,0,24953,0,0,0,24954,0,24959,0,0,0,24961,0,0,24962,0,24964,24968, + 24970,24972,0,0,0,0,0,24976,0,0,0,24977,0,24982,0,0,24983,0,0,24984,0,0, + 0,24993,0,0,0,24994,0,0,25001,0,0,0,25003,0,0,25018,0,0,25023,0,0,0, + 25034,0,0,25035,25036,0,25037,0,0,0,0,0,0,0,25039,0,0,0,0,0,25040,0,0,0, + 0,0,0,0,25042,0,0,25043,25045,0,0,0,0,0,0,25049,0,0,25051,0,25052,25053, + 0,0,25054,0,0,0,25055,0,0,0,0,25057,25059,0,0,25060,25064,0,25065,25069, + 25070,0,0,0,0,25072,0,25073,0,25090,0,0,25092,25093,25101,0,0,0,0,0,0, + 25105,25108,0,0,25113,0,0,25115,25116,0,0,0,0,0,0,25117,0,0,0,25120,25121, + 0,0,0,0,0,0,0,25125,0,0,0,25126,0,25130,25134,0,25139,0,25143,0,0,0, + 25151,0,25161,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,0,0,0,0,0, + 0,0,25174,0,25175,0,25207,0,0,0,25209,0,0,0,0,25213,0,25219,0,25223,0, + 25225,0,0,0,25227,0,0,0,25228,0,0,0,25229,0,0,0,0,0,0,0,25231,25233,0,0, + 0,0,25237,25239,0,0,0,25243,0,0,0,25252,0,25257,25258,0,0,0,0,25260,25265, + 0,25268,0,0,25273,25324,0,25325,0,25326,0,0,0,0,0,0,0,0,25327,0,0,0,0,0, + 25328,0,0,0,0,0,0,25332,0,0,0,25333,0,0,0,25336,25337,25338,0,0,25343,0, + 25350,0,0,0,0,0,0,0,25352,0,25354,0,25375,0,25379,0,0,0,0,25384,0,0,0,0, + 0,0,0,0,0,25386,0,25388,0,25390,0,0,25399,0,0,25401,0,0,0,25402,0,0,0, + 25407,0,0,0,0,0,0,0,0,0,0,0,25413,25415,0,0,25417,0,0,0,0,0,0,0,25419, + 0,0,0,25421,0,0,0,25424,0,0,0,0,25433,0,0,0,0,0,0,0,0,0,25435,0,0,0, + 0,0,0,25436,0,0,0,25437,0,0,25440,0,0,0,0,0,0,25442,0,0,25443,0,25446,0, + 0,25449,0,0,0,25450,0,0,0,0,25452,0,25453,25454,25455,0,0,0,25456,0,25457, + 0,0,0,25459,0,25461,0,25468,0,0,0,0,0,0,0,0,25469,0,0,0,0,0,25471,0,0, + 0,0,0,25474,0,0,0,0,0,0,0,0,25475,0,0,0,0,25477,0,0,0,0,25483,0,0,0, + 0,0,25484,0,0,0,0,0,0,0,0,0,0,0,0,25485,0,25497,0,0,25498,0,25504,0, + 25510,0,25512,0,0,25513,25514,0,0,0,0,0,0,25517,25518,25519,0,25520,0,0,0, + 0,0,0,0,25521,0,25522,25527,25534,0,25536,0,25537,0,0,25548,25550,0,0,25551, + 0,25552,0,0,0,0,0,25554,0,25555,0,25556,25557,25568,0,0,0,25570,25571,0,0, + 0,0,0,0,25574,0,0,0,0,25579,0,0,0,25581,0,0,0,25582,0,0,0,0,0,0,0,0, + 0,25588,0,0,0,0,25589,0,0,0,0,25590,0,25591,25592,25593,0,25594,0,0,0, + 25596,0,25597,25615,0,0,0,0,0,25618,0,0,0,0,25619,25623,0,0,25629,0,0, + 25631,0,0,0,25635,25636,0,0,25649,0,0,0,0,25654,0,0,0,25661,25663,0,0, + 25671,0,0,25678,25698,0,25699,25702,25703,0,0,0,0,0,0,0,0,25704,0,0,0,0, + 0,25706,0,0,25710,0,25711,0,25712,0,25715,25716,25717,0,0,25718,25728,25732, + 0,0,0,25734,0,0,0,0,0,0,0,0,0,25737,0,0,25739,0,0,0,25740,0,25741,25745, + 0,25746,0,25748,25772,25778,0,0,0,0,0,25780,0,0,0,0,25781,0,25782,25784, + 25785,0,0,0,25789,0,0,0,0,0,0,25797,25801,0,0,0,25808,25809,0,0,25811, + 25814,25815,0,0,25817,0,0,0,0,0,0,0,0,25820,0,0,0,0,25832,25833,0,0,0, + 25846,0,0,0,25847,25848,0,0,0,0,0,0,0,0,0,25849,25850,0,0,25851,0,0, + 25852,0,25862,0,0,0,25863,25865,0,0,0,0,0,0,0,25867,25868,0,25869,25874,0, + 25875,0,25876,25877,0,0,0,0,25878,25902,0,0,0,0,0,0,0,25903,25904,25905,0, + 0,0,25908,25909,0,0,0,0,25910,0,0,0,0,0,0,0,25912,0,25913,0,0,0,0,0,0, + 0,0,25914,0,0,25916,0,0,0,0,0,25917,25927,0,0,0,0,25928,0,0,25930,0,0,0, + 25933,0,0,25938,25942,0,0,0,0,0,0,0,25945,0,25950,0,25956,0,0,25961,25962, + 0,0,25963,0,25964,25965,25966,0,0,0,0,0,25967,0,0,0,0,25968,0,0,0,25969, + 25971,0,0,0,0,0,25973,25975,0,0,0,0,0,0,0,25978,0,25981,0,0,0,25982,0,0, + 0,25984,0,0,0,0,0,0,0,25993,0,0,0,0,0,0,0,0,0,0,0,0,0,26002,0,0,0, + 26005,0,0,0,26006,26007,0,0,26014,26015,26016,0,0,0,0,0,0,26017,26018,26020, + 0,26022,26023,0,0,0,26024,26028,0,26029,26033,26034,26044,0,0,0,0,0,26046,0, + 0,26047,0,0,26049,0,26050,0,26051,0,0,0,0,0,26053,0,0,0,0,26054,26059,0, + 0,0,0,0,0,26060,0,26066,0,0,0,0,0,0,0,0,0,0,0,0,26067,0,26069,0,0, + 26071,0,0,0,26073,0,26074,26077,0,0,0,0,26078,0,0,0,26079,0,26090,0,0, + 26094,0,0,0,0,0,0,0,0,26095,0,0,0,0,0,0,0,0,0,0,0,26096,26101,0,26107, + 26122,0,26124,0,0,26125,0,0,0,0,0,0,26136,26141,26155,0,0,0,0,0,0,0,0,0, + 26164,26166,0,0,0,26167,0,26170,26171,0,0,26172,0,0,26174,0,0,0,0,0,0,0, + 0,0,0,0,0,0,26175,0,0,0,26176,26177,0,26321,26322,0,26323,0,0,26324,0,0, + 0,0,0,0,0,26325,0,26331,0,0,0,0,0,0,26335,0,0,0,26350,0,0,0,26379,0,0, + 26382,26383,26385,0,0,26392,26406,0,0,0,0,26411,0,0,0,0,0,26412,0,0,26420, + 0,0,26423,0,26424,26426,26432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26435,0, + 26436,0,0,0,0,0,26441,0,26444,0,0,0,26446,0,0,0,0,26447,0,0,0,0,26449,0, + 26450,26452,0,26453,26454,0,0,0,26455,0,0,0,26456,0,0,26458,0,0,26460,0, + 26463,0,0,0,0,0,0,0,0,26464,26470,0,0,0,0,0,0,0,0,0,26473,0,0,26474,0, + 0,0,0,0,0,0,26475,0,0,0,0,0,0,0,26477,0,26485,0,0,26486,0,26487,0,0, + 26488,26493,26494,0,0,26495,0,26497,26504,26506,0,0,0,0,0,26507,0,0,0,0,0, + 26509,0,0,26510,0,0,0,0,0,0,0,0,0,0,0,0,0,26512,0,26513,26515,0,0,0, + 26518,0,0,0,26519,0,26524,26526,0,0,0,26527,0,26532,0,26533,26537,26558,0,0, + 0,26559,0,0,0,26571,0,0,26573,0,26588,0,26593,0,0,0,0,0,0,26603,0,26604, + 0,0,0,0,0,0,0,0,0,0,26606,0,0,0,0,0,0,0,26607,26609,26611,26614,0,0,0, + 26616,26620,0,26621,0,0,0,0,0,26627,0,26629,0,0,26630,0,0,26632,26643,0,0, + 0,26644,0,0,0,0,0,0,0,0,0,26646,26647,0,0,0,26650,0,0,26656,0,0,0,0, + 26663,26670,26671,0,0,0,26685,26686,26687,0,26689,0,0,0,0,26744,0,26745,0, + 26747,26748,0,26749,26750,26751,0,0,0,0,26752,26755,0,0,0,26756,26769,0,0,0, + 26774,0,0,0,0,0,26775,0,26777,26778,0,26786,0,0,0,26787,0,0,0,0,0,0,0,0, + 0,0,0,0,0,26788,0,0,26789,0,0,0,0,0,26791,0,26792,26793,0,0,0,26794,0, + 26797,26798,0,0,0,26800,0,0,26803,0,26804,0,0,0,0,0,0,0,0,0,26805,0,0, + 26808,0,0,26809,0,0,0,0,0,0,0,26812,0,26825,0,0,0,0,0,0,0,26826,0,0, + 26827,26829,26834,0,0,0,0,26835,0,0,26849,0,26851,0,0,0,0,0,0,0,0,0, + 26852,0,26853,26857,0,26858,0,26859,0,0,0,0,0,0,0,26876,0,26878,26882,26883, + 0,0,0,0,26890,26894,0,0,0,0,26895,26896,0,0,0,0,0,26900,0,0,0,0,0,0,0, + 26911,26913,26914,26915,26916,26919,0,0,0,26921,26922,0,0,26925,0,0,0,26928, + 0,0,26929,26930,0,0,0,26931,0,26932,0,0,0,0,0,26933,0,0,0,0,0,0,26937,0, + 0,26943,0,0,26944,0,0,0,26946,0,0,0,0,0,0,0,26956,0,26958,0,0,26963,0,0, + 0,0,0,0,0,26965,0,26969,26970,26972,0,0,0,0,0,26973,0,26974,0,26978,0, + 26980,0,0,0,0,0,0,26982,0,26986,26987,0,26990,0,0,0,0,27003,27006,0,0, + 27007,27010,27012,27013,0,0,0,0,0,0,0,0,27014,27015,27018,0,27019,0,0,0,0, + 0,27025,0,0,0,27026,0,0,0,0,27029,27030,27031,27034,0,0,27036,27037,0,0,0, + 27038,27042,0,0,0,27044,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27045,0,0,0,0,0, + 0,0,27046,0,0,0,0,0,0,0,27047,27049,0,27050,0,0,0,27051,27052,0,27055,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27056,27058,27059,0,27061,0,27064, + 0,0,0,0,0,27069,0,0,27070,0,0,0,0,0,0,0,27072,0,0,0,0,0,0,0,0,27076, + 0,0,0,0,0,27078,0,27079,0,0,0,27081,0,0,0,0,0,0,27082,0,27083,27086,0,0, + 0,0,27087,0,0,0,0,0,27088,27090,0,27094,0,0,27095,0,27099,27102,0,0,0, + 27103,0,0,0,0,27105,0,0,0,27106,0,0,0,0,0,0,27107,0,0,0,0,27108,27117,0, + 0,0,0,27118,0,0,27124,0,27126,0,0,27130,27131,0,0,0,0,0,0,27147,0,0,0,0, + 27148,27149,0,0,0,0,27150,27151,0,27152,0,27159,0,0,0,27164,0,0,0,0,0,0, + 0,27175,0,27189,0,0,27191,0,27193,0,27195,0,27198,0,0,0,0,0,27200,0,0,0, + 0,27202,0,0,0,0,27203,0,0,27204,0,0,27206,0,27207,0,0,0,0,27209,0,0,0, + 27213,0,0,27216,27219,27220,27222,27223,0,27224,0,27225,27226,0,0,27233,0,0, + 0,0,27235,0,27237,0,27238,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27239,0,27242, + 27243,0,27250,0,0,0,27251,0,27253,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,27254,27255,27258,0,0,0,27259,0,0,0,0,0,0,27267,0,27276,27278,0, + 0,0,0,0,0,0,0,0,27296,27297,27301,0,0,0,0,0,0,27302,0,0,0,0,0,0,27312, + 27313,0,0,0,0,0,27318,0,27320,0,27329,0,27330,27331,0,27332,0,0,0,0,27340, + 0,0,0,27348,0,0,0,0,0,0,27350,0,27351,0,0,0,0,27355,0,0,27358,27359, + 27361,0,0,0,27365,0,27367,0,27376,27378,0,0,27379,0,0,0,0,0,0,27396,0, + 27397,27404,0,0,0,0,0,27408,0,0,0,0,27453,0,0,0,27456,0,0,0,27458,0,0,0, + 0,0,0,0,27459,0,0,0,27460,0,0,27461,0,27465,27467,0,0,27469,0,27470,0, + 27471,0,27477,27482,0,0,0,0,0,0,27484,0,0,0,0,0,0,27485,0,0,0,0,0,27493, + 0,27494,27502,0,0,0,0,0,0,0,0,0,0,0,0,27511,27532,0,0,0,27533,27545,0,0, + 0,27546,0,0,0,0,0,0,0,0,0,0,27547,0,0,27549,27550,0,27551,0,0,0,0,0,0, + 0,27555,0,0,27571,0,27573,27574,27575,27577,0,27578,0,0,27579,27585,0,0,0,0, + 0,27586,0,0,27588,27589,0,0,0,0,27596,0,0,27600,0,0,0,0,0,0,0,0,0,0,0, + 27608,0,0,0,0,0,0,0,0,0,0,0,27610,0,0,0,27618,0,0,27620,0,0,0,27631,0, + 0,27632,27634,0,27636,27638,0,0,0,27643,0,27644,27649,0,0,0,0,0,0,0,0,0, + 0,0,0,0,27651,27660,0,27661,0,0,0,0,0,0,0,27662,0,0,27664,0,27665,0,0,0, + 27669,0,27671,0,0,0,27673,27674,0,0,0,27682,0,0,0,27711,0,27712,27713,27719, + 27720,0,0,27728,0,27729,0,0,0,0,0,0,0,0,0,27731,0,0,27732,0,27733,0, + 27738,0,0,0,27742,0,0,0,27743,27744,0,0,0,0,0,0,27745,27746,0,0,0,27747, + 27748,27751,27752,0,0,0,27768,27770,0,0,0,27774,27775,0,27776,27777,0,0, + 27781,0,27784,0,27786,0,0,27791,0,27792,27793,27804,0,27812,27813,0,0,0,0,0, + 0,0,0,27814,0,27825,0,27827,0,0,0,0,27828,27861,27862,0,0,0,27864,0,0,0, + 27865,27884,0,27889,0,0,0,0,0,27890,0,27891,0,0,0,27892,0,0,0,0,0,27897, + 27898,0,0,27899,0,0,0,27901,27905,0,0,27920,0,0,27921,0,27922,0,0,0,27931, + 27934,0,0,0,0,0,0,0,0,0,0,27941,0,27942,0,27945,0,27947,27954,0,0,0,0, + 27960,27963,0,0,0,0,0,0,0,0,27964,27965,0,0,0,27967,0,27969,27975,0,27976, + 27977,0,27981,0,27983,28051,28052,0,0,0,0,0,28056,0,0,0,0,0,0,28058,28059, + 0,0,28061,0,0,0,0,0,0,0,28063,0,0,0,0,0,0,28066,0,0,0,0,0,0,28069, + 28070,28072,0,28073,0,0,28074,0,0,0,0,28075,0,0,0,0,0,0,0,28078,0,0,0,0, + 28085,0,0,0,0,28086,0,0,0,0,0,0,28088,0,0,0,0,0,0,0,0,28090,0,28097, + 28114,28115,0,0,0,0,0,0,0,28116,0,0,0,0,0,28118,0,28129,0,28131,0,0, + 28135,0,0,0,28140,28141,0,0,0,28146,0,0,0,0,28152,0,0,0,0,28155,28157, + 28161,0,0,0,0,28166,0,28167,0,0,0,0,0,0,0,0,0,0,0,28172,0,0,0,0,0,0, + 28173,0,0,28175,0,0,0,0,0,0,0,0,0,28178,28188,0,28190,0,0,0,0,0,28191,0, + 28193,28206,0,0,28207,28209,0,28211,0,28213,0,0,0,28215,28216,28217,0,28222, + 0,28223,28225,0,0,0,28226,0,28227,28229,28232,0,0,0,0,0,0,0,0,0,28235,0, + 28241,0,0,28242,0,0,0,0,28243,0,0,0,28245,0,0,0,28248,28250,0,28251,28252, + 0,0,0,0,0,0,28253,0,0,28254,28255,0,0,28256,0,0,28258,0,0,0,0,0,28259,0, + 0,28260,0,0,28261,0,0,0,0,28262,28263,0,0,28264,0,0,0,28266,0,28268,28269, + 0,28270,28272,28274,0,28277,28278,0,0,0,28279,0,28280,28281,28283,0,28292,0, + 28294,0,28297,0,0,0,0,28299,0,0,0,0,0,28300,0,0,0,0,0,0,0,28301,0,0,0, + 0,0,0,0,0,0,0,0,0,0,28302,28303,0,0,0,0,28304,0,0,28305,0,28312,0,28313, + 28314,0,0,0,0,0,0,28315,0,0,0,28320,28321,0,0,28328,0,0,0,28329,28338,0, + 28339,0,0,28344,0,0,0,0,0,0,0,0,28347,0,0,0,0,0,0,0,0,28348,0,0,0,0, + 0,28411,0,28412,28413,0,28416,0,0,0,28420,0,0,0,0,0,28421,0,0,0,0,28423, + 0,0,0,28424,0,0,28428,0,0,0,0,0,28429,0,0,0,28431,28434,0,28458,0,0,0,0, + 0,0,0,0,0,0,0,28464,0,0,0,0,28465,0,28467,0,0,0,0,0,0,28471,0,0,0,0, + 28474,0,28480,0,28481,0,0,28485,0,0,0,0,28486,28488,0,0,28489,0,0,0,0, + 28492,0,0,0,28495,0,28497,0,28499,0,0,0,0,28500,0,0,28502,28503,0,0,0, + 28508,0,0,0,28510,0,0,28512,28513,28514,28521,0,28526,0,28527,28528,0,0,0,0, + 28529,0,0,28532,0,0,28537,28538,0,0,0,28539,0,28548,0,28553,28554,0,0,0,0, + 0,0,0,0,0,0,0,0,28560,28563,0,0,28564,0,0,0,0,28565,0,0,0,0,0,0,0, + 28566,28568,0,0,0,0,0,0,28569,0,0,0,28570,0,28572,28573,0,0,0,0,28575,0, + 0,0,0,28576,28581,28588,0,0,28589,0,0,0,28590,28595,0,28598,0,0,28601,0,0, + 28605,0,0,0,0,28614,28615,28619,0,0,0,0,0,0,28620,0,28626,0,0,28628,0, + 28631,0,28632,0,0,0,0,0,0,28635,0,0,0,28637,28638,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,28639,0,28643,0,0,28652,0,0,0,28662,0,28670,28671, + 0,0,0,0,0,0,0,0,0,28672,28673,28675,28676,0,0,0,0,0,0,0,28691,0,0,0, + 28695,0,0,0,28696,0,28697,28698,0,28705,0,28707,28708,28710,0,0,0,0,0,0,0, + 28711,28728,0,0,0,28736,0,0,0,28737,0,0,0,0,0,0,0,0,0,28738,0,28739,0, + 28741,0,0,28742,0,0,0,0,0,0,0,0,0,0,0,28745,0,0,0,0,0,0,28749,28750, + 28752,28754,28756,0,28757,0,0,0,0,28759,28760,0,0,0,0,0,0,28762,0,0,0, + 28764,0,0,0,0,0,0,28766,0,28767,28768,0,0,0,0,28769,28770,0,0,0,0,0,0,0, + 0,0,0,0,0,0,28771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28772,0,28773,0, + 28782,0,0,0,0,0,0,28784,0,28785,0,28786,0,0,0,28787,0,0,0,28797,0,0,0,0, + 0,0,28799,0,0,28801,0,0,0,0,28802,0,28805,0,0,28806,0,0,28807,0,0,0,0,0, + 0,0,28808,0,0,0,0,0,28810,28812,0,0,28816,28819,0,0,28821,0,28826,0,0,0, + 28842,28852,0,0,28853,0,28854,28855,0,0,0,28857,0,0,0,28858,0,28867,28868, + 28869,0,0,0,28874,28880,28882,28890,28892,0,0,0,0,0,0,0,28895,0,0,0,28898, + 28899,0,0,0,28900,0,0,28904,0,28906,0,0,0,0,28907,0,0,0,0,0,0,28908,0,0, + 0,28910,0,28914,0,0,0,0,0,0,0,28915,28916,28919,0,0,28920,0,28921,0,0,0, + 0,0,0,0,0,28924,0,0,0,0,28926,28929,0,0,0,28930,0,28936,0,28939,0,0,0,0, + 28942,0,0,0,0,0,0,28956,0,0,0,28966,0,0,0,0,28967,0,0,0,0,0,0,0,0,0, + 28968,0,28971,0,28975,28976,0,28982,28983,0,0,28984,28989,28996,28997,28998,0, + 0,0,0,0,0,28999,0,0,0,0,0,29000,0,29001,0,0,0,29009,0,0,29011,0,0,29021, + 0,0,0,0,29024,0,29025,0,0,0,0,0,29026,0,0,0,29036,0,0,0,29037,0,0,0,0, + 29038,0,29045,0,29047,0,0,0,0,0,0,0,0,0,29051,0,0,0,29054,29056,29062,0, + 29070,29082,0,0,0,29083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29084,0,0,0, + 0,29085,29088,0,0,0,0,0,0,0,29090,29097,0,0,0,29103,0,0,0,0,0,0,0,0, + 29105,0,0,0,0,0,29107,0,29109,0,0,0,29115,0,0,29120,0,0,29138,29140,0,0, + 0,0,0,0,0,0,0,29152,0,29160,29174,0,29176,0,0,29180,0,29181,0,0,0,0,0,0, + 0,0,29228,0,0,29229,0,0,29230,0,0,0,0,0,0,0,0,0,0,29234,0,0,0,29241,0, + 29245,0,29248,0,29250,29256,29280,0,29282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 29285,0,0,29286,29291,29292,0,0,0,0,29294,0,29295,0,0,0,0,0,29296,29297, + 29298,29300,0,29302,0,0,29304,29307,0,29312,0,0,0,29322,0,0,29323,0,0,29324, + 29326,29328,0,29335,0,0,0,0,0,0,0,29338,29339,0,0,0,0,0,29341,29343,0,0, + 0,0,29344,0,0,0,0,0,29345,0,0,0,0,29346,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,29347,29348,29349,0,0,29354,0,0,29355,0,0,0,0,0,0,0,0,29357,0,0,0,0, + 29364,0,29365,0,0,0,0,0,0,0,29366,0,0,29368,0,0,0,0,0,0,0,0,29378,0, + 29381,0,0,0,0,0,0,0,0,29386,0,0,0,0,0,0,29389,0,0,0,29390,0,0,29391, + 29397,0,29398,29412,29414,29418,29419,0,0,0,0,0,0,0,29420,0,0,0,0,0,0,0, + 29423,0,0,0,29435,0,0,0,29437,0,0,29439,0,29441,0,0,0,0,29443,0,29446, + 29450,29452,0,0,0,0,0,29456,0,0,0,0,0,29461,0,0,0,29464,0,0,0,0,0,0,0, + 0,29468,0,29473,0,0,0,29486,0,0,0,29490,0,0,0,29491,29492,0,0,29497,0,0, + 0,29498,0,29499,0,29502,29505,0,29509,0,0,0,29510,0,0,0,29512,0,0,0,29516, + 0,0,0,0,0,0,0,0,29518,0,29519,0,0,0,0,0,29520,29521,29529,0,0,0,0,0,0, + 0,0,29530,0,0,29531,29538,0,29540,0,0,0,29542,0,29543,29544,29547,0,0,29548, + 0,0,0,29549,0,0,0,29550,0,0,29552,0,0,0,0,29558,29561,0,29562,29564,0,0, + 29565,0,0,29566,0,0,0,0,0,0,0,0,0,0,29578,29584,29586,29591,0,0,0,0, + 29593,29594,0,0,29597,0,0,29613,0,29614,0,29615,0,0,0,0,29616,29617,0,0, + 29625,0,0,0,29632,0,0,0,0,0,0,0,29633,0,0,0,0,0,29634,29635,29637,0, + 29638,0,29641,29643,0,0,0,0,0,0,29644,0,29645,0,29649,0,0,0,29650,0,29653, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,29656,29659,0,0,29660,0,0,0,29661,0,0,0, + 0,0,29664,0,0,0,29671,29673,0,0,0,0,0,0,0,29675,0,29677,29679,0,0,29684, + 0,0,0,0,0,29685,0,0,0,29687,0,0,0,29688,0,29689,29690,29700,0,29701,0,0, + 0,29702,0,29706,0,0,0,0,0,0,0,29720,0,29721,0,29727,0,29733,29734,0,29750, + 29761,0,29763,0,0,0,0,0,29764,0,0,29765,0,0,0,29771,0,0,0,0,0,0,0,0,0, + 0,0,0,29772,0,0,0,29773,29774,29775,0,0,0,0,0,0,0,0,0,0,0,29822,0,0,0, + 29824,0,29825,0,0,0,0,0,29827,0,0,0,0,0,0,0,0,29829,0,29832,29834,0,0, + 29835,0,0,29837,29838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29843,0,0, + 0,0,29844,29845,0,0,0,0,0,0,0,0,0,29849,0,0,29869,29872,29890,29905,0,0, + 0,0,0,29907,29921,0,29922,0,0,29923,29926,29944,29946,0,0,0,0,0,0,0,29947, + 29948,0,0,0,29951,0,0,0,0,0,29953,0,0,29956,0,29957,0,0,29962,0,0,0,0, + 29971,0,0,0,29972,0,0,0,0,0,29978,0,29979,29992,30007,30008,30010,0,0,0, + 30013,0,0,0,0,30014,30016,0,0,0,0,0,0,0,0,0,0,0,30017,0,0,0,0,0,30023, + 30031,0,0,30033,0,0,0,0,0,0,0,0,0,0,30034,0,30038,0,30039,0,30040,0,0,0, + 0,0,0,30067,30068,0,0,0,30069,0,30072,0,0,0,30073,0,0,0,0,30075,0,0,0,0, + 0,0,30079,0,0,30080,0,0,0,0,0,30082,0,0,0,0,0,0,0,0,0,0,0,30084,30090, + 0,0,30091,0,0,0,0,30098,30118,0,30119,0,30121,30130,0,0,0,0,0,0,0,0,0,0, + 0,0,0,30131,30132,30133,0,0,0,0,0,0,30135,0,0,0,0,0,0,0,0,0,0,0,30136, + 0,0,30137,30138,0,0,0,30139,30146,0,0,0,0,0,30147,0,0,30148,30151,0,0,0, + 30168,0,30172,30173,0,0,0,0,0,0,0,0,30180,30181,0,30192,0,0,0,0,0,0,0, + 30194,30196,0,0,30199,0,0,30202,0,0,0,0,30203,0,0,0,0,0,0,0,0,0,0,30213, + 0,0,0,30216,0,0,30217,0,0,0,30218,0,0,0,0,30219,0,30220,0,30222,30227,0, + 0,0,0,0,30231,0,0,30233,30235,0,0,0,0,30238,0,30240,30243,30245,0,30250, + 30252,0,0,0,30269,0,0,30271,30272,0,0,0,30278,30280,0,0,30282,0,30284,0, + 30294,0,0,0,0,30295,30296,0,0,0,0,0,30298,30299,30302,30304,30306,0,0,0,0, + 0,0,30316,30317,0,0,0,30318,0,0,0,30319,0,30320,30322,30326,0,0,0,0,0, + 30327,0,30332,30348,30349,0,0,30356,0,0,0,0,0,0,0,0,30357,0,30358,0,30359, + 30360,0,0,30365,30366,30378,0,0,0,0,30379,0,0,30381,0,30385,0,30388,30397,0, + 0,0,30401,0,0,0,0,30403,0,0,0,0,0,30404,0,0,30405,0,30406,30408,0,30409, + 0,30410,0,0,0,30417,0,0,30418,30419,0,30420,0,30424,0,0,0,30427,30430,30432, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30433,0,0,0,0,0,0,0,30436,0, + 30437,30438,0,30441,30442,0,0,0,30445,0,0,0,0,30452,30456,30457,0,0,0,30458, + 0,30464,0,0,0,0,0,0,30467,0,30469,0,0,0,0,0,30477,0,0,30484,0,0,0,0,0, + 30485,0,0,0,0,0,30486,30487,30497,30498,0,0,0,0,0,0,0,0,0,0,30505,0, + 30508,0,0,0,30509,30510,0,30514,30516,0,0,0,0,0,0,0,0,0,0,0,30523,0, + 30524,0,30525,0,0,0,0,30537,0,0,30538,0,0,0,0,0,30553,0,0,30555,30556, + 30558,30559,30560,0,0,30561,0,30562,0,0,0,0,0,0,0,0,30563,30570,30571,0, + 30586,30587,0,0,30590,0,0,30594,0,0,0,0,30611,30612,30623,30634,0,0,30636, + 30640,30655,30656,0,30657,0,0,30658,30669,0,30670,0,30676,30678,0,0,0,0,0,0, + 0,30679,0,0,0,0,0,0,0,0,0,0,0,30695,0,0,30698,0,0,0,0,30700,0,0,0,0, + 30701,0,30702,30703,0,0,0,0,30707,0,0,0,30709,0,0,30710,30719,30729,0,0,0, + 0,0,0,0,0,0,30731,0,0,30733,0,0,0,30734,0,0,0,0,0,30736,30737,0,0,0, + 30740,0,0,0,30743,0,30746,0,30747,30748,0,0,30751,30752,30753,0,0,0,30754,0, + 0,30760,0,0,0,0,0,0,0,30763,0,30764,0,0,30766,0,30769,30770,30771,30774, + 30777,0,0,30779,30780,30781,0,0,0,0,30790,0,0,0,30792,0,0,0,0,30810,0,0, + 0,0,0,0,0,30812,30819,0,0,30823,30824,0,30825,0,30827,0,0,0,0,0,0,30828, + 0,0,30830,0,0,0,30834,0,30835,0,30837,30838,0,30845,0,0,0,0,0,30846,30847, + 0,0,30849,0,30851,0,0,0,0,0,30852,30858,0,0,30859,0,30865,0,0,30866,0,0, + 30868,0,0,30869,0,0,0,30881,30883,0,0,0,0,0,30889,0,30891,0,0,0,0,30894, + 0,30895,0,30897,0,30898,0,0,0,30904,30906,0,30909,0,0,0,0,0,0,30910,0,0, + 0,30915,30933,30942,0,0,0,0,30943,0,0,30945,0,0,0,0,0,0,30946,0,0,30947, + 0,0,30955,30956,0,0,30960,0,0,30961,30962,30966,0,0,30969,30974,0,0,0,30976, + 0,0,30977,0,30978,30982,0,0,0,0,0,0,0,30994,30995,30998,0,31000,0,0,31001, + 0,0,31003,31005,0,0,31006,31011,0,0,31014,0,31016,0,0,0,0,31018,0,0,31020, + 31023,31024,31025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31027,31028,31029,0,0,0,0, + 0,0,31032,0,0,0,0,0,0,0,0,0,0,0,31036,31037,31038,0,0,0,31041,31043, + 31045,0,31047,0,0,0,31048,0,31049,0,0,0,31053,31054,31055,0,0,31063,0,0,0, + 0,0,31066,0,31068,31071,0,0,0,31072,31073,0,0,0,0,31075,0,0,31076,0,0,0, + 31077,31079,0,31080,0,0,0,0,0,0,0,0,0,0,31087,0,31142,0,31144,0,0,31145, + 31146,31147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31149,0,31151,31152,0,0,0,0,0, + 0,0,31162,31171,31174,31175,0,0,0,31176,0,0,0,0,0,0,0,31179,0,0,0,31186, + 0,0,0,31192,31195,0,0,31196,0,0,0,0,0,0,0,0,31198,0,0,0,0,0,31199,0,0, + 0,31205,0,0,0,0,31211,31215,0,0,0,0,31231,0,31232,0,0,0,0,0,0,0,0,0,0, + 31233,31236,31253,0,31254,0,0,0,0,0,0,31255,0,0,31257,0,0,0,0,0,0,0,0,0, + 31258,31259,0,0,31260,0,31261,0,0,0,0,0,31262,31263,0,0,31264,0,31266,0, + 31267,0,0,0,0,0,31281,0,31282,0,31284,0,0,31285,31287,31288,0,0,31290,0,0, + 0,31292,31295,0,31299,0,31300,0,0,0,0,0,31302,0,0,0,0,31303,0,0,0,0,0,0, + 31304,0,0,0,0,0,31305,31308,31309,31315,0,31317,0,0,0,0,0,31323,0,31324,0, + 0,0,0,0,31325,31327,0,0,31331,0,0,0,0,0,31333,0,0,0,0,0,31336,0,0,31337, + 0,0,0,0,0,0,31338,0,0,0,0,0,0,0,0,0,0,0,0,31339,0,0,0,0,0,0,0,31342, + 0,0,0,0,31345,0,0,0,0,0,0,0,0,31347,0,0,0,0,0,0,31348,0,0,31350,31351, + 0,31352,0,0,31354,0,0,0,0,31355,0,0,31356,0,0,0,0,0,0,0,0,0,0,31363,0, + 31372,0,0,31373,0,0,0,0,0,0,0,0,0,31376,0,31388,0,31389,0,31392,0,31401, + 0,31405,31407,31408,0,31409,0,0,0,0,0,0,31413,31415,0,0,0,31416,31418,0,0, + 0,0,0,0,31422,31423,0,0,31424,0,31425,31432,0,0,0,0,0,0,0,0,0,31433,0,0, + 0,0,0,0,0,0,31434,0,0,0,0,0,0,31435,0,0,0,0,31438,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,31442,0,31444,0,31448,0,0,31451,0,0,0,0,31452,0,31461, + 31465,0,0,31466,0,0,31467,0,0,31468,0,0,0,31469,31473,0,31476,0,0,0,0, + 31489,31490,0,0,0,0,0,0,0,31492,31493,31494,0,0,0,0,31501,31504,31505,0,0, + 0,0,0,0,0,0,0,31509,0,0,0,0,31510,0,0,31511,0,0,31513,0,0,0,0,0,0,0, + 0,0,31514,0,31522,31536,31539,31540,0,31541,0,0,0,0,0,0,31546,31553,31559,0, + 0,0,31560,31561,31562,0,0,31564,31567,0,31569,0,0,0,31570,0,0,0,0,31571,0, + 0,0,0,0,0,31572,31574,31580,31581,0,0,31582,31584,31585,31586,31595,0,31596, + 0,0,0,0,31597,0,31599,0,31600,31601,0,0,31603,31604,0,0,31608,31610,0,0,0, + 31611,0,31615,0,0,0,0,31616,0,0,0,0,0,0,31617,0,0,0,0,0,31618,0,0,0,0, + 0,0,31621,0,0,0,0,0,0,0,0,0,31622,31625,0,0,0,0,31627,0,31641,0,0,31642, + 0,0,31643,0,0,0,0,0,0,0,0,0,31644,0,31646,0,0,0,0,31648,0,0,0,31652,0, + 0,0,31657,0,0,31676,0,0,0,0,0,0,0,31689,31691,31692,0,31694,0,0,0,31696, + 0,31702,0,31703,0]; + +#[derive(Clone,Copy)] +#[repr(C)] +pub struct DictWord { + pub l: u8, + pub t: u8, + pub i: u16, +} +impl DictWord { + #[inline(always)] + pub fn len(self) -> u8 { + self.l + } + #[inline(always)] + pub fn transform(self) -> u8 { + self.t + } + #[inline(always)] + pub fn idx(self) -> u16 { + self.i + } +} +type D=DictWord; + +pub static kStaticDictionaryWords: [DictWord; 31705] = [ +D{l:0,t:0,i:0}, +D{l:8,t:0,i:1002}, +D{l:136,t:0,i:1015}, +D{l:4,t:0,i:683}, +D{l:4,t:10,i:325}, +D{l:138,t:10,i:125}, +D{l:7,t:11,i:572}, +D{l:9,t:11,i:592}, +D{l:11,t:11,i:680}, +D{l:11,t:11,i:842}, +D{l:11,t:11,i:924}, +D{l:12,t:11,i:356}, +D{l:12,t:11,i:550}, +D{l:13,t:11,i:317}, +D{l:13,t:11,i:370}, +D{l:13,t:11,i:469}, +D{l:13,t:11,i:471}, +D{l:14,t:11,i:397}, +D{l:18,t:11,i:69}, +D{l:146,t:11,i:145}, +D{l:134,t:0,i:1265}, +D{l:136,t:11,i:534}, +D{l:134,t:0,i:1431}, +D{l:11,t:0,i:138}, +D{l:140,t:0,i:40}, +D{l:4,t:0,i:155}, +D{l:7,t:0,i:1689}, +D{l:4,t:10,i:718}, +D{l:135,t:10,i:1216}, +D{l:4,t:0,i:245}, +D{l:5,t:0,i:151}, +D{l:5,t:0,i:741}, +D{l:6,t:0,i:1147}, +D{l:7,t:0,i:498}, +D{l:7,t:0,i:870}, +D{l:7,t:0,i:1542}, +D{l:12,t:0,i:213}, +D{l:14,t:0,i:36}, +D{l:14,t:0,i:391}, +D{l:17,t:0,i:111}, +D{l:18,t:0,i:6}, +D{l:18,t:0,i:46}, +D{l:18,t:0,i:151}, +D{l:19,t:0,i:36}, +D{l:20,t:0,i:32}, +D{l:20,t:0,i:56}, +D{l:20,t:0,i:69}, +D{l:20,t:0,i:102}, +D{l:21,t:0,i:4}, +D{l:22,t:0,i:8}, +D{l:22,t:0,i:10}, +D{l:22,t:0,i:14}, +D{l:150,t:0,i:31}, +D{l:4,t:0,i:624}, +D{l:135,t:0,i:1752}, +D{l:5,t:10,i:124}, +D{l:5,t:10,i:144}, +D{l:6,t:10,i:548}, +D{l:7,t:10,i:15}, +D{l:7,t:10,i:153}, +D{l:137,t:10,i:629}, +D{l:6,t:0,i:503}, +D{l:9,t:0,i:586}, +D{l:13,t:0,i:468}, +D{l:14,t:0,i:66}, +D{l:16,t:0,i:58}, +D{l:7,t:10,i:1531}, +D{l:8,t:10,i:416}, +D{l:9,t:10,i:275}, +D{l:10,t:10,i:100}, +D{l:11,t:10,i:658}, +D{l:11,t:10,i:979}, +D{l:12,t:10,i:86}, +D{l:14,t:10,i:207}, +D{l:15,t:10,i:20}, +D{l:143,t:10,i:25}, +D{l:5,t:0,i:603}, +D{l:7,t:0,i:1212}, +D{l:9,t:0,i:565}, +D{l:14,t:0,i:301}, +D{l:5,t:10,i:915}, +D{l:6,t:10,i:1783}, +D{l:7,t:10,i:211}, +D{l:7,t:10,i:1353}, +D{l:9,t:10,i:83}, +D{l:10,t:10,i:376}, +D{l:10,t:10,i:431}, +D{l:11,t:10,i:543}, +D{l:12,t:10,i:664}, +D{l:13,t:10,i:280}, +D{l:13,t:10,i:428}, +D{l:14,t:10,i:128}, +D{l:17,t:10,i:52}, +D{l:145,t:10,i:81}, +D{l:4,t:0,i:492}, +D{l:133,t:0,i:451}, +D{l:135,t:0,i:835}, +D{l:141,t:0,i:70}, +D{l:132,t:0,i:539}, +D{l:7,t:11,i:748}, +D{l:139,t:11,i:700}, +D{l:7,t:11,i:1517}, +D{l:11,t:11,i:597}, +D{l:14,t:11,i:76}, +D{l:14,t:11,i:335}, +D{l:148,t:11,i:33}, +D{l:6,t:0,i:113}, +D{l:135,t:0,i:436}, +D{l:4,t:10,i:338}, +D{l:133,t:10,i:400}, +D{l:136,t:0,i:718}, +D{l:133,t:11,i:127}, +D{l:133,t:11,i:418}, +D{l:6,t:0,i:1505}, +D{l:7,t:0,i:520}, +D{l:6,t:11,i:198}, +D{l:11,t:10,i:892}, +D{l:140,t:11,i:83}, +D{l:4,t:10,i:221}, +D{l:5,t:10,i:659}, +D{l:5,t:10,i:989}, +D{l:7,t:10,i:697}, +D{l:7,t:10,i:1211}, +D{l:138,t:10,i:284}, +D{l:135,t:0,i:1070}, +D{l:5,t:11,i:276}, +D{l:6,t:11,i:55}, +D{l:135,t:11,i:1369}, +D{l:134,t:0,i:1515}, +D{l:6,t:11,i:1752}, +D{l:136,t:11,i:726}, +D{l:138,t:10,i:507}, +D{l:15,t:0,i:78}, +D{l:4,t:10,i:188}, +D{l:135,t:10,i:805}, +D{l:5,t:10,i:884}, +D{l:139,t:10,i:991}, +D{l:133,t:11,i:764}, +D{l:134,t:10,i:1653}, +D{l:6,t:11,i:309}, +D{l:7,t:11,i:331}, +D{l:138,t:11,i:550}, +D{l:135,t:11,i:1861}, +D{l:132,t:11,i:348}, +D{l:135,t:11,i:986}, +D{l:135,t:11,i:1573}, +D{l:12,t:0,i:610}, +D{l:13,t:0,i:431}, +D{l:144,t:0,i:59}, +D{l:9,t:11,i:799}, +D{l:140,t:10,i:166}, +D{l:134,t:0,i:1530}, +D{l:132,t:0,i:750}, +D{l:132,t:0,i:307}, +D{l:133,t:0,i:964}, +D{l:6,t:11,i:194}, +D{l:7,t:11,i:133}, +D{l:10,t:11,i:493}, +D{l:10,t:11,i:570}, +D{l:139,t:11,i:664}, +D{l:5,t:11,i:24}, +D{l:5,t:11,i:569}, +D{l:6,t:11,i:3}, +D{l:6,t:11,i:119}, +D{l:6,t:11,i:143}, +D{l:6,t:11,i:440}, +D{l:7,t:11,i:295}, +D{l:7,t:11,i:599}, +D{l:7,t:11,i:1686}, +D{l:7,t:11,i:1854}, +D{l:8,t:11,i:424}, +D{l:9,t:11,i:43}, +D{l:9,t:11,i:584}, +D{l:9,t:11,i:760}, +D{l:10,t:11,i:148}, +D{l:10,t:11,i:328}, +D{l:11,t:11,i:159}, +D{l:11,t:11,i:253}, +D{l:11,t:11,i:506}, +D{l:12,t:11,i:487}, +D{l:12,t:11,i:531}, +D{l:144,t:11,i:33}, +D{l:136,t:10,i:760}, +D{l:5,t:11,i:14}, +D{l:5,t:11,i:892}, +D{l:6,t:11,i:283}, +D{l:7,t:11,i:234}, +D{l:136,t:11,i:537}, +D{l:135,t:11,i:1251}, +D{l:4,t:11,i:126}, +D{l:8,t:11,i:635}, +D{l:147,t:11,i:34}, +D{l:4,t:11,i:316}, +D{l:135,t:11,i:1561}, +D{l:6,t:0,i:999}, +D{l:6,t:0,i:1310}, +D{l:137,t:11,i:861}, +D{l:4,t:11,i:64}, +D{l:5,t:11,i:352}, +D{l:5,t:11,i:720}, +D{l:6,t:11,i:368}, +D{l:139,t:11,i:359}, +D{l:4,t:0,i:75}, +D{l:5,t:0,i:180}, +D{l:6,t:0,i:500}, +D{l:7,t:0,i:58}, +D{l:7,t:0,i:710}, +D{l:10,t:0,i:645}, +D{l:136,t:10,i:770}, +D{l:133,t:0,i:649}, +D{l:6,t:0,i:276}, +D{l:7,t:0,i:282}, +D{l:7,t:0,i:879}, +D{l:7,t:0,i:924}, +D{l:8,t:0,i:459}, +D{l:9,t:0,i:599}, +D{l:9,t:0,i:754}, +D{l:11,t:0,i:574}, +D{l:12,t:0,i:128}, +D{l:12,t:0,i:494}, +D{l:13,t:0,i:52}, +D{l:13,t:0,i:301}, +D{l:15,t:0,i:30}, +D{l:143,t:0,i:132}, +D{l:132,t:0,i:200}, +D{l:4,t:10,i:89}, +D{l:5,t:10,i:489}, +D{l:6,t:10,i:315}, +D{l:7,t:10,i:553}, +D{l:7,t:10,i:1745}, +D{l:138,t:10,i:243}, +D{l:135,t:11,i:1050}, +D{l:7,t:0,i:1621}, +D{l:6,t:10,i:1658}, +D{l:9,t:10,i:3}, +D{l:10,t:10,i:154}, +D{l:11,t:10,i:641}, +D{l:13,t:10,i:85}, +D{l:13,t:10,i:201}, +D{l:141,t:10,i:346}, +D{l:6,t:11,i:175}, +D{l:137,t:11,i:289}, +D{l:5,t:11,i:432}, +D{l:133,t:11,i:913}, +D{l:6,t:0,i:225}, +D{l:137,t:0,i:211}, +D{l:7,t:0,i:718}, +D{l:8,t:0,i:687}, +D{l:139,t:0,i:374}, +D{l:4,t:10,i:166}, +D{l:133,t:10,i:505}, +D{l:9,t:0,i:110}, +D{l:134,t:10,i:1670}, +D{l:8,t:0,i:58}, +D{l:9,t:0,i:724}, +D{l:11,t:0,i:809}, +D{l:13,t:0,i:113}, +D{l:145,t:0,i:72}, +D{l:6,t:0,i:345}, +D{l:7,t:0,i:1247}, +D{l:144,t:11,i:82}, +D{l:5,t:11,i:931}, +D{l:134,t:11,i:1698}, +D{l:8,t:0,i:767}, +D{l:8,t:0,i:803}, +D{l:9,t:0,i:301}, +D{l:137,t:0,i:903}, +D{l:139,t:0,i:203}, +D{l:134,t:0,i:1154}, +D{l:7,t:0,i:1949}, +D{l:136,t:0,i:674}, +D{l:134,t:0,i:259}, +D{l:135,t:0,i:1275}, +D{l:5,t:11,i:774}, +D{l:6,t:11,i:1637}, +D{l:6,t:11,i:1686}, +D{l:134,t:11,i:1751}, +D{l:134,t:0,i:1231}, +D{l:7,t:10,i:445}, +D{l:8,t:10,i:307}, +D{l:8,t:10,i:704}, +D{l:10,t:10,i:41}, +D{l:10,t:10,i:439}, +D{l:11,t:10,i:237}, +D{l:11,t:10,i:622}, +D{l:140,t:10,i:201}, +D{l:136,t:0,i:254}, +D{l:6,t:11,i:260}, +D{l:135,t:11,i:1484}, +D{l:139,t:0,i:277}, +D{l:135,t:10,i:1977}, +D{l:4,t:10,i:189}, +D{l:5,t:10,i:713}, +D{l:6,t:11,i:573}, +D{l:136,t:10,i:57}, +D{l:138,t:10,i:371}, +D{l:132,t:10,i:552}, +D{l:134,t:11,i:344}, +D{l:133,t:0,i:248}, +D{l:9,t:0,i:800}, +D{l:10,t:0,i:693}, +D{l:11,t:0,i:482}, +D{l:11,t:0,i:734}, +D{l:11,t:0,i:789}, +D{l:134,t:11,i:240}, +D{l:4,t:0,i:116}, +D{l:5,t:0,i:95}, +D{l:5,t:0,i:445}, +D{l:7,t:0,i:1688}, +D{l:8,t:0,i:29}, +D{l:9,t:0,i:272}, +D{l:11,t:0,i:509}, +D{l:11,t:0,i:915}, +D{l:4,t:11,i:292}, +D{l:4,t:11,i:736}, +D{l:5,t:11,i:871}, +D{l:6,t:11,i:171}, +D{l:6,t:11,i:1689}, +D{l:7,t:11,i:1324}, +D{l:7,t:11,i:1944}, +D{l:9,t:11,i:415}, +D{l:9,t:11,i:580}, +D{l:14,t:11,i:230}, +D{l:146,t:11,i:68}, +D{l:7,t:0,i:490}, +D{l:13,t:0,i:100}, +D{l:143,t:0,i:75}, +D{l:135,t:0,i:1641}, +D{l:133,t:0,i:543}, +D{l:7,t:11,i:209}, +D{l:8,t:11,i:661}, +D{l:10,t:11,i:42}, +D{l:11,t:11,i:58}, +D{l:12,t:11,i:58}, +D{l:12,t:11,i:118}, +D{l:141,t:11,i:32}, +D{l:5,t:0,i:181}, +D{l:8,t:0,i:41}, +D{l:6,t:11,i:63}, +D{l:135,t:11,i:920}, +D{l:133,t:0,i:657}, +D{l:133,t:11,i:793}, +D{l:138,t:0,i:709}, +D{l:7,t:0,i:25}, +D{l:8,t:0,i:202}, +D{l:138,t:0,i:536}, +D{l:5,t:11,i:665}, +D{l:135,t:10,i:1788}, +D{l:145,t:10,i:49}, +D{l:9,t:0,i:423}, +D{l:140,t:0,i:89}, +D{l:5,t:11,i:67}, +D{l:6,t:11,i:62}, +D{l:6,t:11,i:374}, +D{l:135,t:11,i:1391}, +D{l:8,t:0,i:113}, +D{l:9,t:0,i:877}, +D{l:10,t:0,i:554}, +D{l:11,t:0,i:83}, +D{l:12,t:0,i:136}, +D{l:19,t:0,i:109}, +D{l:9,t:11,i:790}, +D{l:140,t:11,i:47}, +D{l:138,t:10,i:661}, +D{l:4,t:0,i:963}, +D{l:10,t:0,i:927}, +D{l:14,t:0,i:442}, +D{l:135,t:10,i:1945}, +D{l:133,t:0,i:976}, +D{l:132,t:0,i:206}, +D{l:4,t:11,i:391}, +D{l:135,t:11,i:1169}, +D{l:134,t:0,i:2002}, +D{l:6,t:0,i:696}, +D{l:134,t:0,i:1008}, +D{l:134,t:0,i:1170}, +D{l:132,t:11,i:271}, +D{l:7,t:0,i:13}, +D{l:8,t:0,i:226}, +D{l:10,t:0,i:537}, +D{l:11,t:0,i:570}, +D{l:11,t:0,i:605}, +D{l:11,t:0,i:799}, +D{l:11,t:0,i:804}, +D{l:12,t:0,i:85}, +D{l:12,t:0,i:516}, +D{l:12,t:0,i:623}, +D{l:13,t:0,i:112}, +D{l:13,t:0,i:361}, +D{l:14,t:0,i:77}, +D{l:14,t:0,i:78}, +D{l:17,t:0,i:28}, +D{l:19,t:0,i:110}, +D{l:140,t:11,i:314}, +D{l:132,t:0,i:769}, +D{l:134,t:0,i:1544}, +D{l:4,t:0,i:551}, +D{l:137,t:0,i:678}, +D{l:5,t:10,i:84}, +D{l:134,t:10,i:163}, +D{l:9,t:0,i:57}, +D{l:9,t:0,i:459}, +D{l:10,t:0,i:425}, +D{l:11,t:0,i:119}, +D{l:12,t:0,i:184}, +D{l:12,t:0,i:371}, +D{l:13,t:0,i:358}, +D{l:145,t:0,i:51}, +D{l:5,t:0,i:188}, +D{l:5,t:0,i:814}, +D{l:8,t:0,i:10}, +D{l:9,t:0,i:421}, +D{l:9,t:0,i:729}, +D{l:10,t:0,i:609}, +D{l:11,t:0,i:689}, +D{l:4,t:11,i:253}, +D{l:5,t:10,i:410}, +D{l:5,t:11,i:544}, +D{l:7,t:11,i:300}, +D{l:137,t:11,i:340}, +D{l:134,t:0,i:624}, +D{l:138,t:11,i:321}, +D{l:135,t:0,i:1941}, +D{l:18,t:0,i:130}, +D{l:5,t:10,i:322}, +D{l:8,t:10,i:186}, +D{l:9,t:10,i:262}, +D{l:10,t:10,i:187}, +D{l:142,t:10,i:208}, +D{l:5,t:11,i:53}, +D{l:5,t:11,i:541}, +D{l:6,t:11,i:94}, +D{l:6,t:11,i:499}, +D{l:7,t:11,i:230}, +D{l:139,t:11,i:321}, +D{l:133,t:10,i:227}, +D{l:4,t:0,i:378}, +D{l:4,t:11,i:920}, +D{l:5,t:11,i:25}, +D{l:5,t:11,i:790}, +D{l:6,t:11,i:457}, +D{l:135,t:11,i:853}, +D{l:137,t:0,i:269}, +D{l:132,t:0,i:528}, +D{l:134,t:0,i:1146}, +D{l:7,t:10,i:1395}, +D{l:8,t:10,i:486}, +D{l:9,t:10,i:236}, +D{l:9,t:10,i:878}, +D{l:10,t:10,i:218}, +D{l:11,t:10,i:95}, +D{l:19,t:10,i:17}, +D{l:147,t:10,i:31}, +D{l:7,t:10,i:2043}, +D{l:8,t:10,i:672}, +D{l:141,t:10,i:448}, +D{l:134,t:0,i:1105}, +D{l:134,t:0,i:1616}, +D{l:134,t:11,i:1765}, +D{l:140,t:11,i:163}, +D{l:5,t:10,i:412}, +D{l:133,t:11,i:822}, +D{l:132,t:11,i:634}, +D{l:6,t:0,i:656}, +D{l:134,t:11,i:1730}, +D{l:134,t:0,i:1940}, +D{l:5,t:0,i:104}, +D{l:6,t:0,i:173}, +D{l:135,t:0,i:1631}, +D{l:136,t:10,i:562}, +D{l:6,t:11,i:36}, +D{l:7,t:11,i:658}, +D{l:8,t:11,i:454}, +D{l:147,t:11,i:86}, +D{l:5,t:0,i:457}, +D{l:134,t:10,i:1771}, +D{l:7,t:0,i:810}, +D{l:8,t:0,i:138}, +D{l:8,t:0,i:342}, +D{l:9,t:0,i:84}, +D{l:10,t:0,i:193}, +D{l:11,t:0,i:883}, +D{l:140,t:0,i:359}, +D{l:9,t:0,i:620}, +D{l:135,t:10,i:1190}, +D{l:137,t:10,i:132}, +D{l:7,t:11,i:975}, +D{l:137,t:11,i:789}, +D{l:6,t:0,i:95}, +D{l:6,t:0,i:1934}, +D{l:136,t:0,i:967}, +D{l:141,t:11,i:335}, +D{l:6,t:0,i:406}, +D{l:10,t:0,i:409}, +D{l:10,t:0,i:447}, +D{l:11,t:0,i:44}, +D{l:140,t:0,i:100}, +D{l:4,t:10,i:317}, +D{l:135,t:10,i:1279}, +D{l:132,t:0,i:477}, +D{l:134,t:0,i:1268}, +D{l:6,t:0,i:1941}, +D{l:8,t:0,i:944}, +D{l:5,t:10,i:63}, +D{l:133,t:10,i:509}, +D{l:132,t:0,i:629}, +D{l:132,t:11,i:104}, +D{l:4,t:0,i:246}, +D{l:133,t:0,i:375}, +D{l:6,t:0,i:1636}, +D{l:132,t:10,i:288}, +D{l:135,t:11,i:1614}, +D{l:9,t:0,i:49}, +D{l:10,t:0,i:774}, +D{l:8,t:10,i:89}, +D{l:8,t:10,i:620}, +D{l:11,t:10,i:628}, +D{l:12,t:10,i:322}, +D{l:143,t:10,i:124}, +D{l:4,t:0,i:282}, +D{l:7,t:0,i:1034}, +D{l:11,t:0,i:398}, +D{l:11,t:0,i:634}, +D{l:12,t:0,i:1}, +D{l:12,t:0,i:79}, +D{l:12,t:0,i:544}, +D{l:14,t:0,i:237}, +D{l:17,t:0,i:10}, +D{l:146,t:0,i:20}, +D{l:132,t:0,i:824}, +D{l:7,t:11,i:45}, +D{l:9,t:11,i:542}, +D{l:9,t:11,i:566}, +D{l:138,t:11,i:728}, +D{l:5,t:0,i:118}, +D{l:5,t:0,i:499}, +D{l:6,t:0,i:476}, +D{l:6,t:0,i:665}, +D{l:6,t:0,i:1176}, +D{l:6,t:0,i:1196}, +D{l:7,t:0,i:600}, +D{l:7,t:0,i:888}, +D{l:135,t:0,i:1096}, +D{l:7,t:0,i:296}, +D{l:7,t:0,i:596}, +D{l:8,t:0,i:560}, +D{l:8,t:0,i:586}, +D{l:9,t:0,i:612}, +D{l:11,t:0,i:304}, +D{l:12,t:0,i:46}, +D{l:13,t:0,i:89}, +D{l:14,t:0,i:112}, +D{l:145,t:0,i:122}, +D{l:5,t:0,i:894}, +D{l:6,t:0,i:1772}, +D{l:9,t:0,i:1009}, +D{l:138,t:10,i:120}, +D{l:5,t:11,i:533}, +D{l:7,t:11,i:755}, +D{l:138,t:11,i:780}, +D{l:151,t:10,i:1}, +D{l:6,t:0,i:1474}, +D{l:7,t:11,i:87}, +D{l:142,t:11,i:288}, +D{l:139,t:0,i:366}, +D{l:137,t:10,i:461}, +D{l:7,t:11,i:988}, +D{l:7,t:11,i:1939}, +D{l:9,t:11,i:64}, +D{l:9,t:11,i:502}, +D{l:12,t:11,i:7}, +D{l:12,t:11,i:34}, +D{l:13,t:11,i:12}, +D{l:13,t:11,i:234}, +D{l:147,t:11,i:77}, +D{l:7,t:0,i:1599}, +D{l:7,t:0,i:1723}, +D{l:8,t:0,i:79}, +D{l:8,t:0,i:106}, +D{l:8,t:0,i:190}, +D{l:8,t:0,i:302}, +D{l:8,t:0,i:383}, +D{l:8,t:0,i:713}, +D{l:9,t:0,i:119}, +D{l:9,t:0,i:233}, +D{l:9,t:0,i:419}, +D{l:9,t:0,i:471}, +D{l:10,t:0,i:181}, +D{l:10,t:0,i:406}, +D{l:11,t:0,i:57}, +D{l:11,t:0,i:85}, +D{l:11,t:0,i:120}, +D{l:11,t:0,i:177}, +D{l:11,t:0,i:296}, +D{l:11,t:0,i:382}, +D{l:11,t:0,i:454}, +D{l:11,t:0,i:758}, +D{l:11,t:0,i:999}, +D{l:12,t:0,i:27}, +D{l:12,t:0,i:98}, +D{l:12,t:0,i:131}, +D{l:12,t:0,i:245}, +D{l:12,t:0,i:312}, +D{l:12,t:0,i:446}, +D{l:12,t:0,i:454}, +D{l:13,t:0,i:25}, +D{l:13,t:0,i:98}, +D{l:13,t:0,i:426}, +D{l:13,t:0,i:508}, +D{l:14,t:0,i:70}, +D{l:14,t:0,i:163}, +D{l:14,t:0,i:272}, +D{l:14,t:0,i:277}, +D{l:14,t:0,i:370}, +D{l:15,t:0,i:95}, +D{l:15,t:0,i:138}, +D{l:15,t:0,i:167}, +D{l:17,t:0,i:38}, +D{l:148,t:0,i:96}, +D{l:135,t:10,i:1346}, +D{l:10,t:0,i:200}, +D{l:19,t:0,i:2}, +D{l:151,t:0,i:22}, +D{l:135,t:11,i:141}, +D{l:134,t:10,i:85}, +D{l:134,t:0,i:1759}, +D{l:138,t:0,i:372}, +D{l:145,t:0,i:16}, +D{l:8,t:0,i:943}, +D{l:132,t:11,i:619}, +D{l:139,t:11,i:88}, +D{l:5,t:11,i:246}, +D{l:8,t:11,i:189}, +D{l:9,t:11,i:355}, +D{l:9,t:11,i:512}, +D{l:10,t:11,i:124}, +D{l:10,t:11,i:453}, +D{l:11,t:11,i:143}, +D{l:11,t:11,i:416}, +D{l:11,t:11,i:859}, +D{l:141,t:11,i:341}, +D{l:5,t:0,i:258}, +D{l:134,t:0,i:719}, +D{l:6,t:0,i:1798}, +D{l:6,t:0,i:1839}, +D{l:8,t:0,i:900}, +D{l:10,t:0,i:874}, +D{l:10,t:0,i:886}, +D{l:12,t:0,i:698}, +D{l:12,t:0,i:732}, +D{l:12,t:0,i:770}, +D{l:16,t:0,i:106}, +D{l:18,t:0,i:163}, +D{l:18,t:0,i:170}, +D{l:18,t:0,i:171}, +D{l:152,t:0,i:20}, +D{l:9,t:0,i:707}, +D{l:11,t:0,i:326}, +D{l:11,t:0,i:339}, +D{l:12,t:0,i:423}, +D{l:12,t:0,i:502}, +D{l:20,t:0,i:62}, +D{l:9,t:11,i:707}, +D{l:11,t:11,i:326}, +D{l:11,t:11,i:339}, +D{l:12,t:11,i:423}, +D{l:12,t:11,i:502}, +D{l:148,t:11,i:62}, +D{l:5,t:0,i:30}, +D{l:7,t:0,i:495}, +D{l:8,t:0,i:134}, +D{l:9,t:0,i:788}, +D{l:140,t:0,i:438}, +D{l:133,t:11,i:678}, +D{l:5,t:10,i:279}, +D{l:6,t:10,i:235}, +D{l:7,t:10,i:468}, +D{l:8,t:10,i:446}, +D{l:9,t:10,i:637}, +D{l:10,t:10,i:717}, +D{l:11,t:10,i:738}, +D{l:140,t:10,i:514}, +D{l:5,t:11,i:35}, +D{l:6,t:11,i:287}, +D{l:7,t:11,i:862}, +D{l:7,t:11,i:1886}, +D{l:138,t:11,i:179}, +D{l:7,t:0,i:1948}, +D{l:7,t:0,i:2004}, +D{l:132,t:11,i:517}, +D{l:5,t:10,i:17}, +D{l:6,t:10,i:371}, +D{l:137,t:10,i:528}, +D{l:4,t:0,i:115}, +D{l:5,t:0,i:669}, +D{l:6,t:0,i:407}, +D{l:8,t:0,i:311}, +D{l:11,t:0,i:10}, +D{l:141,t:0,i:5}, +D{l:137,t:0,i:381}, +D{l:5,t:0,i:50}, +D{l:6,t:0,i:439}, +D{l:7,t:0,i:780}, +D{l:135,t:0,i:1040}, +D{l:136,t:11,i:667}, +D{l:11,t:11,i:403}, +D{l:146,t:11,i:83}, +D{l:5,t:0,i:1}, +D{l:6,t:0,i:81}, +D{l:138,t:0,i:520}, +D{l:134,t:0,i:738}, +D{l:5,t:0,i:482}, +D{l:8,t:0,i:98}, +D{l:9,t:0,i:172}, +D{l:10,t:0,i:360}, +D{l:10,t:0,i:700}, +D{l:10,t:0,i:822}, +D{l:11,t:0,i:302}, +D{l:11,t:0,i:778}, +D{l:12,t:0,i:50}, +D{l:12,t:0,i:127}, +D{l:12,t:0,i:396}, +D{l:13,t:0,i:62}, +D{l:13,t:0,i:328}, +D{l:14,t:0,i:122}, +D{l:147,t:0,i:72}, +D{l:9,t:11,i:157}, +D{l:10,t:11,i:131}, +D{l:140,t:11,i:72}, +D{l:135,t:11,i:714}, +D{l:135,t:11,i:539}, +D{l:5,t:0,i:2}, +D{l:6,t:0,i:512}, +D{l:7,t:0,i:797}, +D{l:7,t:0,i:1494}, +D{l:8,t:0,i:253}, +D{l:8,t:0,i:589}, +D{l:9,t:0,i:77}, +D{l:10,t:0,i:1}, +D{l:10,t:0,i:129}, +D{l:10,t:0,i:225}, +D{l:11,t:0,i:118}, +D{l:11,t:0,i:226}, +D{l:11,t:0,i:251}, +D{l:11,t:0,i:430}, +D{l:11,t:0,i:701}, +D{l:11,t:0,i:974}, +D{l:11,t:0,i:982}, +D{l:12,t:0,i:64}, +D{l:12,t:0,i:260}, +D{l:12,t:0,i:488}, +D{l:140,t:0,i:690}, +D{l:5,t:11,i:394}, +D{l:7,t:11,i:367}, +D{l:7,t:11,i:487}, +D{l:7,t:11,i:857}, +D{l:7,t:11,i:1713}, +D{l:8,t:11,i:246}, +D{l:9,t:11,i:537}, +D{l:10,t:11,i:165}, +D{l:12,t:11,i:219}, +D{l:140,t:11,i:561}, +D{l:136,t:0,i:557}, +D{l:5,t:10,i:779}, +D{l:5,t:10,i:807}, +D{l:6,t:10,i:1655}, +D{l:134,t:10,i:1676}, +D{l:4,t:10,i:196}, +D{l:5,t:10,i:558}, +D{l:133,t:10,i:949}, +D{l:11,t:11,i:827}, +D{l:12,t:11,i:56}, +D{l:14,t:11,i:34}, +D{l:143,t:11,i:148}, +D{l:137,t:0,i:347}, +D{l:133,t:0,i:572}, +D{l:134,t:0,i:832}, +D{l:4,t:0,i:12}, +D{l:7,t:0,i:504}, +D{l:7,t:0,i:522}, +D{l:7,t:0,i:809}, +D{l:8,t:0,i:797}, +D{l:141,t:0,i:88}, +D{l:4,t:10,i:752}, +D{l:133,t:11,i:449}, +D{l:7,t:11,i:86}, +D{l:8,t:11,i:103}, +D{l:145,t:11,i:69}, +D{l:7,t:11,i:2028}, +D{l:138,t:11,i:641}, +D{l:5,t:0,i:528}, +D{l:6,t:11,i:1}, +D{l:142,t:11,i:2}, +D{l:134,t:0,i:861}, +D{l:10,t:0,i:294}, +D{l:4,t:10,i:227}, +D{l:5,t:10,i:159}, +D{l:5,t:10,i:409}, +D{l:7,t:10,i:80}, +D{l:10,t:10,i:479}, +D{l:12,t:10,i:418}, +D{l:14,t:10,i:50}, +D{l:14,t:10,i:249}, +D{l:142,t:10,i:295}, +D{l:7,t:10,i:1470}, +D{l:8,t:10,i:66}, +D{l:8,t:10,i:137}, +D{l:8,t:10,i:761}, +D{l:9,t:10,i:638}, +D{l:11,t:10,i:80}, +D{l:11,t:10,i:212}, +D{l:11,t:10,i:368}, +D{l:11,t:10,i:418}, +D{l:12,t:10,i:8}, +D{l:13,t:10,i:15}, +D{l:16,t:10,i:61}, +D{l:17,t:10,i:59}, +D{l:19,t:10,i:28}, +D{l:148,t:10,i:84}, +D{l:20,t:0,i:109}, +D{l:135,t:11,i:1148}, +D{l:6,t:11,i:277}, +D{l:7,t:11,i:1274}, +D{l:7,t:11,i:1386}, +D{l:7,t:11,i:1392}, +D{l:12,t:11,i:129}, +D{l:146,t:11,i:87}, +D{l:6,t:11,i:187}, +D{l:7,t:11,i:39}, +D{l:7,t:11,i:1203}, +D{l:8,t:11,i:380}, +D{l:8,t:11,i:542}, +D{l:14,t:11,i:117}, +D{l:149,t:11,i:28}, +D{l:134,t:0,i:1187}, +D{l:5,t:0,i:266}, +D{l:9,t:0,i:290}, +D{l:9,t:0,i:364}, +D{l:10,t:0,i:293}, +D{l:11,t:0,i:606}, +D{l:142,t:0,i:45}, +D{l:6,t:11,i:297}, +D{l:7,t:11,i:793}, +D{l:139,t:11,i:938}, +D{l:4,t:0,i:50}, +D{l:6,t:0,i:594}, +D{l:9,t:0,i:121}, +D{l:10,t:0,i:49}, +D{l:10,t:0,i:412}, +D{l:139,t:0,i:834}, +D{l:136,t:0,i:748}, +D{l:7,t:11,i:464}, +D{l:8,t:11,i:438}, +D{l:11,t:11,i:105}, +D{l:11,t:11,i:363}, +D{l:12,t:11,i:231}, +D{l:14,t:11,i:386}, +D{l:15,t:11,i:102}, +D{l:148,t:11,i:75}, +D{l:132,t:0,i:466}, +D{l:13,t:0,i:399}, +D{l:14,t:0,i:337}, +D{l:6,t:10,i:38}, +D{l:7,t:10,i:1220}, +D{l:8,t:10,i:185}, +D{l:8,t:10,i:256}, +D{l:9,t:10,i:22}, +D{l:9,t:10,i:331}, +D{l:10,t:10,i:738}, +D{l:11,t:10,i:205}, +D{l:11,t:10,i:540}, +D{l:11,t:10,i:746}, +D{l:13,t:10,i:465}, +D{l:142,t:10,i:194}, +D{l:9,t:0,i:378}, +D{l:141,t:0,i:162}, +D{l:137,t:0,i:519}, +D{l:4,t:10,i:159}, +D{l:6,t:10,i:115}, +D{l:7,t:10,i:252}, +D{l:7,t:10,i:257}, +D{l:7,t:10,i:1928}, +D{l:8,t:10,i:69}, +D{l:9,t:10,i:384}, +D{l:10,t:10,i:91}, +D{l:10,t:10,i:615}, +D{l:12,t:10,i:375}, +D{l:14,t:10,i:235}, +D{l:18,t:10,i:117}, +D{l:147,t:10,i:123}, +D{l:5,t:11,i:604}, +D{l:5,t:10,i:911}, +D{l:136,t:10,i:278}, +D{l:132,t:0,i:667}, +D{l:8,t:0,i:351}, +D{l:9,t:0,i:322}, +D{l:4,t:10,i:151}, +D{l:135,t:10,i:1567}, +D{l:134,t:0,i:902}, +D{l:133,t:10,i:990}, +D{l:12,t:0,i:180}, +D{l:5,t:10,i:194}, +D{l:7,t:10,i:1662}, +D{l:137,t:10,i:90}, +D{l:4,t:0,i:869}, +D{l:134,t:0,i:1996}, +D{l:134,t:0,i:813}, +D{l:133,t:10,i:425}, +D{l:137,t:11,i:761}, +D{l:132,t:0,i:260}, +D{l:133,t:10,i:971}, +D{l:5,t:11,i:20}, +D{l:6,t:11,i:298}, +D{l:7,t:11,i:659}, +D{l:7,t:11,i:1366}, +D{l:137,t:11,i:219}, +D{l:4,t:0,i:39}, +D{l:5,t:0,i:36}, +D{l:7,t:0,i:1843}, +D{l:8,t:0,i:407}, +D{l:11,t:0,i:144}, +D{l:140,t:0,i:523}, +D{l:4,t:0,i:510}, +D{l:10,t:0,i:587}, +D{l:139,t:10,i:752}, +D{l:7,t:0,i:29}, +D{l:7,t:0,i:66}, +D{l:7,t:0,i:1980}, +D{l:10,t:0,i:487}, +D{l:138,t:0,i:809}, +D{l:13,t:0,i:260}, +D{l:14,t:0,i:82}, +D{l:18,t:0,i:63}, +D{l:137,t:10,i:662}, +D{l:5,t:10,i:72}, +D{l:6,t:10,i:264}, +D{l:7,t:10,i:21}, +D{l:7,t:10,i:46}, +D{l:7,t:10,i:2013}, +D{l:8,t:10,i:215}, +D{l:8,t:10,i:513}, +D{l:10,t:10,i:266}, +D{l:139,t:10,i:22}, +D{l:134,t:0,i:570}, +D{l:6,t:0,i:565}, +D{l:7,t:0,i:1667}, +D{l:4,t:11,i:439}, +D{l:10,t:10,i:95}, +D{l:11,t:10,i:603}, +D{l:12,t:11,i:242}, +D{l:13,t:10,i:443}, +D{l:14,t:10,i:160}, +D{l:143,t:10,i:4}, +D{l:134,t:0,i:1464}, +D{l:134,t:10,i:431}, +D{l:9,t:0,i:372}, +D{l:15,t:0,i:2}, +D{l:19,t:0,i:10}, +D{l:19,t:0,i:18}, +D{l:5,t:10,i:874}, +D{l:6,t:10,i:1677}, +D{l:143,t:10,i:0}, +D{l:132,t:0,i:787}, +D{l:6,t:0,i:380}, +D{l:12,t:0,i:399}, +D{l:21,t:0,i:19}, +D{l:7,t:10,i:939}, +D{l:7,t:10,i:1172}, +D{l:7,t:10,i:1671}, +D{l:9,t:10,i:540}, +D{l:10,t:10,i:696}, +D{l:11,t:10,i:265}, +D{l:11,t:10,i:732}, +D{l:11,t:10,i:928}, +D{l:11,t:10,i:937}, +D{l:141,t:10,i:438}, +D{l:137,t:0,i:200}, +D{l:132,t:11,i:233}, +D{l:132,t:0,i:516}, +D{l:134,t:11,i:577}, +D{l:132,t:0,i:844}, +D{l:11,t:0,i:887}, +D{l:14,t:0,i:365}, +D{l:142,t:0,i:375}, +D{l:132,t:11,i:482}, +D{l:8,t:0,i:821}, +D{l:140,t:0,i:44}, +D{l:7,t:0,i:1655}, +D{l:136,t:0,i:305}, +D{l:5,t:10,i:682}, +D{l:135,t:10,i:1887}, +D{l:135,t:11,i:346}, +D{l:132,t:10,i:696}, +D{l:4,t:0,i:10}, +D{l:7,t:0,i:917}, +D{l:139,t:0,i:786}, +D{l:5,t:11,i:795}, +D{l:6,t:11,i:1741}, +D{l:8,t:11,i:417}, +D{l:137,t:11,i:782}, +D{l:4,t:0,i:1016}, +D{l:134,t:0,i:2031}, +D{l:5,t:0,i:684}, +D{l:4,t:10,i:726}, +D{l:133,t:10,i:630}, +D{l:6,t:0,i:1021}, +D{l:134,t:0,i:1480}, +D{l:8,t:10,i:802}, +D{l:136,t:10,i:838}, +D{l:134,t:0,i:27}, +D{l:134,t:0,i:395}, +D{l:135,t:11,i:622}, +D{l:7,t:11,i:625}, +D{l:135,t:11,i:1750}, +D{l:4,t:11,i:203}, +D{l:135,t:11,i:1936}, +D{l:6,t:10,i:118}, +D{l:7,t:10,i:215}, +D{l:7,t:10,i:1521}, +D{l:140,t:10,i:11}, +D{l:132,t:0,i:813}, +D{l:136,t:0,i:511}, +D{l:7,t:10,i:615}, +D{l:138,t:10,i:251}, +D{l:135,t:10,i:1044}, +D{l:145,t:0,i:56}, +D{l:133,t:10,i:225}, +D{l:6,t:0,i:342}, +D{l:6,t:0,i:496}, +D{l:8,t:0,i:275}, +D{l:137,t:0,i:206}, +D{l:4,t:0,i:909}, +D{l:133,t:0,i:940}, +D{l:132,t:0,i:891}, +D{l:7,t:11,i:311}, +D{l:9,t:11,i:308}, +D{l:140,t:11,i:255}, +D{l:4,t:10,i:370}, +D{l:5,t:10,i:756}, +D{l:135,t:10,i:1326}, +D{l:4,t:0,i:687}, +D{l:134,t:0,i:1596}, +D{l:134,t:0,i:1342}, +D{l:6,t:10,i:1662}, +D{l:7,t:10,i:48}, +D{l:8,t:10,i:771}, +D{l:10,t:10,i:116}, +D{l:13,t:10,i:104}, +D{l:14,t:10,i:105}, +D{l:14,t:10,i:184}, +D{l:15,t:10,i:168}, +D{l:19,t:10,i:92}, +D{l:148,t:10,i:68}, +D{l:138,t:10,i:209}, +D{l:4,t:11,i:400}, +D{l:5,t:11,i:267}, +D{l:135,t:11,i:232}, +D{l:151,t:11,i:12}, +D{l:6,t:0,i:41}, +D{l:141,t:0,i:160}, +D{l:141,t:11,i:314}, +D{l:134,t:0,i:1718}, +D{l:136,t:0,i:778}, +D{l:142,t:11,i:261}, +D{l:134,t:0,i:1610}, +D{l:133,t:0,i:115}, +D{l:132,t:0,i:294}, +D{l:14,t:0,i:314}, +D{l:132,t:10,i:120}, +D{l:132,t:0,i:983}, +D{l:5,t:0,i:193}, +D{l:140,t:0,i:178}, +D{l:138,t:10,i:429}, +D{l:5,t:10,i:820}, +D{l:135,t:10,i:931}, +D{l:6,t:0,i:994}, +D{l:6,t:0,i:1051}, +D{l:6,t:0,i:1439}, +D{l:7,t:0,i:174}, +D{l:133,t:11,i:732}, +D{l:4,t:11,i:100}, +D{l:7,t:11,i:679}, +D{l:8,t:11,i:313}, +D{l:138,t:10,i:199}, +D{l:6,t:10,i:151}, +D{l:6,t:10,i:1675}, +D{l:7,t:10,i:383}, +D{l:151,t:10,i:10}, +D{l:6,t:0,i:1796}, +D{l:8,t:0,i:848}, +D{l:8,t:0,i:867}, +D{l:8,t:0,i:907}, +D{l:10,t:0,i:855}, +D{l:140,t:0,i:703}, +D{l:140,t:0,i:221}, +D{l:4,t:0,i:122}, +D{l:5,t:0,i:796}, +D{l:5,t:0,i:952}, +D{l:6,t:0,i:1660}, +D{l:6,t:0,i:1671}, +D{l:8,t:0,i:567}, +D{l:9,t:0,i:687}, +D{l:9,t:0,i:742}, +D{l:10,t:0,i:686}, +D{l:11,t:0,i:682}, +D{l:11,t:0,i:909}, +D{l:140,t:0,i:281}, +D{l:5,t:11,i:362}, +D{l:5,t:11,i:443}, +D{l:6,t:11,i:318}, +D{l:7,t:11,i:1019}, +D{l:139,t:11,i:623}, +D{l:5,t:11,i:463}, +D{l:136,t:11,i:296}, +D{l:11,t:0,i:583}, +D{l:13,t:0,i:262}, +D{l:6,t:10,i:1624}, +D{l:12,t:10,i:422}, +D{l:142,t:10,i:360}, +D{l:5,t:0,i:179}, +D{l:7,t:0,i:1095}, +D{l:135,t:0,i:1213}, +D{l:4,t:10,i:43}, +D{l:4,t:11,i:454}, +D{l:5,t:10,i:344}, +D{l:133,t:10,i:357}, +D{l:4,t:0,i:66}, +D{l:7,t:0,i:722}, +D{l:135,t:0,i:904}, +D{l:134,t:0,i:773}, +D{l:7,t:0,i:352}, +D{l:133,t:10,i:888}, +D{l:5,t:11,i:48}, +D{l:5,t:11,i:404}, +D{l:6,t:11,i:557}, +D{l:7,t:11,i:458}, +D{l:8,t:11,i:597}, +D{l:10,t:11,i:455}, +D{l:10,t:11,i:606}, +D{l:11,t:11,i:49}, +D{l:11,t:11,i:548}, +D{l:12,t:11,i:476}, +D{l:13,t:11,i:18}, +D{l:141,t:11,i:450}, +D{l:134,t:11,i:418}, +D{l:132,t:10,i:711}, +D{l:5,t:11,i:442}, +D{l:135,t:11,i:1984}, +D{l:141,t:0,i:35}, +D{l:137,t:0,i:152}, +D{l:134,t:0,i:1197}, +D{l:135,t:11,i:1093}, +D{l:137,t:11,i:203}, +D{l:137,t:10,i:440}, +D{l:10,t:0,i:592}, +D{l:10,t:0,i:753}, +D{l:12,t:0,i:317}, +D{l:12,t:0,i:355}, +D{l:12,t:0,i:465}, +D{l:12,t:0,i:469}, +D{l:12,t:0,i:560}, +D{l:12,t:0,i:578}, +D{l:141,t:0,i:243}, +D{l:133,t:0,i:564}, +D{l:134,t:0,i:797}, +D{l:5,t:10,i:958}, +D{l:133,t:10,i:987}, +D{l:5,t:11,i:55}, +D{l:7,t:11,i:376}, +D{l:140,t:11,i:161}, +D{l:133,t:11,i:450}, +D{l:134,t:0,i:556}, +D{l:134,t:0,i:819}, +D{l:11,t:10,i:276}, +D{l:142,t:10,i:293}, +D{l:7,t:0,i:544}, +D{l:138,t:0,i:61}, +D{l:8,t:0,i:719}, +D{l:4,t:10,i:65}, +D{l:5,t:10,i:479}, +D{l:5,t:10,i:1004}, +D{l:7,t:10,i:1913}, +D{l:8,t:10,i:317}, +D{l:9,t:10,i:302}, +D{l:10,t:10,i:612}, +D{l:141,t:10,i:22}, +D{l:4,t:0,i:5}, +D{l:5,t:0,i:498}, +D{l:8,t:0,i:637}, +D{l:9,t:0,i:521}, +D{l:4,t:11,i:213}, +D{l:4,t:10,i:261}, +D{l:7,t:11,i:223}, +D{l:7,t:10,i:510}, +D{l:136,t:11,i:80}, +D{l:5,t:0,i:927}, +D{l:7,t:0,i:101}, +D{l:4,t:10,i:291}, +D{l:7,t:11,i:381}, +D{l:7,t:11,i:806}, +D{l:7,t:11,i:820}, +D{l:8,t:11,i:354}, +D{l:8,t:11,i:437}, +D{l:8,t:11,i:787}, +D{l:9,t:10,i:515}, +D{l:9,t:11,i:657}, +D{l:10,t:11,i:58}, +D{l:10,t:11,i:339}, +D{l:10,t:11,i:749}, +D{l:11,t:11,i:914}, +D{l:12,t:10,i:152}, +D{l:12,t:11,i:162}, +D{l:12,t:10,i:443}, +D{l:13,t:11,i:75}, +D{l:13,t:10,i:392}, +D{l:14,t:11,i:106}, +D{l:14,t:11,i:198}, +D{l:14,t:11,i:320}, +D{l:14,t:10,i:357}, +D{l:14,t:11,i:413}, +D{l:146,t:11,i:43}, +D{l:6,t:0,i:1153}, +D{l:7,t:0,i:1441}, +D{l:136,t:11,i:747}, +D{l:4,t:0,i:893}, +D{l:5,t:0,i:780}, +D{l:133,t:0,i:893}, +D{l:138,t:11,i:654}, +D{l:133,t:11,i:692}, +D{l:133,t:0,i:238}, +D{l:134,t:11,i:191}, +D{l:4,t:10,i:130}, +D{l:135,t:10,i:843}, +D{l:6,t:0,i:1296}, +D{l:5,t:10,i:42}, +D{l:5,t:10,i:879}, +D{l:7,t:10,i:245}, +D{l:7,t:10,i:324}, +D{l:7,t:10,i:1532}, +D{l:11,t:10,i:463}, +D{l:11,t:10,i:472}, +D{l:13,t:10,i:363}, +D{l:144,t:10,i:52}, +D{l:134,t:0,i:1729}, +D{l:6,t:0,i:1999}, +D{l:136,t:0,i:969}, +D{l:4,t:10,i:134}, +D{l:133,t:10,i:372}, +D{l:4,t:0,i:60}, +D{l:7,t:0,i:941}, +D{l:7,t:0,i:1800}, +D{l:8,t:0,i:314}, +D{l:9,t:0,i:700}, +D{l:139,t:0,i:487}, +D{l:134,t:0,i:1144}, +D{l:6,t:11,i:162}, +D{l:7,t:11,i:1960}, +D{l:136,t:11,i:831}, +D{l:132,t:11,i:706}, +D{l:135,t:0,i:1147}, +D{l:138,t:11,i:426}, +D{l:138,t:11,i:89}, +D{l:7,t:0,i:1853}, +D{l:138,t:0,i:437}, +D{l:136,t:0,i:419}, +D{l:135,t:10,i:1634}, +D{l:133,t:0,i:828}, +D{l:5,t:0,i:806}, +D{l:7,t:0,i:176}, +D{l:7,t:0,i:178}, +D{l:7,t:0,i:1240}, +D{l:7,t:0,i:1976}, +D{l:132,t:10,i:644}, +D{l:135,t:11,i:1877}, +D{l:5,t:11,i:420}, +D{l:135,t:11,i:1449}, +D{l:4,t:0,i:51}, +D{l:5,t:0,i:39}, +D{l:6,t:0,i:4}, +D{l:7,t:0,i:591}, +D{l:7,t:0,i:849}, +D{l:7,t:0,i:951}, +D{l:7,t:0,i:1613}, +D{l:7,t:0,i:1760}, +D{l:7,t:0,i:1988}, +D{l:9,t:0,i:434}, +D{l:10,t:0,i:754}, +D{l:11,t:0,i:25}, +D{l:139,t:0,i:37}, +D{l:10,t:11,i:57}, +D{l:138,t:11,i:277}, +D{l:135,t:10,i:540}, +D{l:132,t:11,i:204}, +D{l:135,t:0,i:159}, +D{l:139,t:11,i:231}, +D{l:133,t:0,i:902}, +D{l:7,t:0,i:928}, +D{l:7,t:11,i:366}, +D{l:9,t:11,i:287}, +D{l:12,t:11,i:199}, +D{l:12,t:11,i:556}, +D{l:140,t:11,i:577}, +D{l:6,t:10,i:623}, +D{l:136,t:10,i:789}, +D{l:4,t:10,i:908}, +D{l:5,t:10,i:359}, +D{l:5,t:10,i:508}, +D{l:6,t:10,i:1723}, +D{l:7,t:10,i:343}, +D{l:7,t:10,i:1996}, +D{l:135,t:10,i:2026}, +D{l:134,t:0,i:270}, +D{l:4,t:10,i:341}, +D{l:135,t:10,i:480}, +D{l:5,t:11,i:356}, +D{l:135,t:11,i:224}, +D{l:11,t:11,i:588}, +D{l:11,t:11,i:864}, +D{l:11,t:11,i:968}, +D{l:143,t:11,i:160}, +D{l:132,t:0,i:556}, +D{l:137,t:0,i:801}, +D{l:132,t:0,i:416}, +D{l:142,t:0,i:372}, +D{l:5,t:0,i:152}, +D{l:5,t:0,i:197}, +D{l:7,t:0,i:340}, +D{l:7,t:0,i:867}, +D{l:10,t:0,i:548}, +D{l:10,t:0,i:581}, +D{l:11,t:0,i:6}, +D{l:12,t:0,i:3}, +D{l:12,t:0,i:19}, +D{l:14,t:0,i:110}, +D{l:142,t:0,i:289}, +D{l:139,t:0,i:369}, +D{l:7,t:11,i:630}, +D{l:9,t:11,i:567}, +D{l:11,t:11,i:150}, +D{l:11,t:11,i:444}, +D{l:141,t:11,i:119}, +D{l:134,t:11,i:539}, +D{l:7,t:10,i:1995}, +D{l:8,t:10,i:299}, +D{l:11,t:10,i:890}, +D{l:140,t:10,i:674}, +D{l:7,t:0,i:34}, +D{l:7,t:0,i:190}, +D{l:8,t:0,i:28}, +D{l:8,t:0,i:141}, +D{l:8,t:0,i:444}, +D{l:8,t:0,i:811}, +D{l:9,t:0,i:468}, +D{l:11,t:0,i:334}, +D{l:12,t:0,i:24}, +D{l:12,t:0,i:386}, +D{l:140,t:0,i:576}, +D{l:133,t:0,i:757}, +D{l:7,t:0,i:1553}, +D{l:136,t:0,i:898}, +D{l:133,t:0,i:721}, +D{l:136,t:0,i:1012}, +D{l:4,t:0,i:789}, +D{l:5,t:0,i:647}, +D{l:135,t:0,i:1102}, +D{l:132,t:0,i:898}, +D{l:10,t:0,i:183}, +D{l:4,t:10,i:238}, +D{l:5,t:10,i:503}, +D{l:6,t:10,i:179}, +D{l:7,t:10,i:2003}, +D{l:8,t:10,i:381}, +D{l:8,t:10,i:473}, +D{l:9,t:10,i:149}, +D{l:10,t:10,i:788}, +D{l:15,t:10,i:45}, +D{l:15,t:10,i:86}, +D{l:20,t:10,i:110}, +D{l:150,t:10,i:57}, +D{l:9,t:0,i:136}, +D{l:19,t:0,i:107}, +D{l:4,t:10,i:121}, +D{l:5,t:10,i:156}, +D{l:5,t:10,i:349}, +D{l:10,t:10,i:605}, +D{l:142,t:10,i:342}, +D{l:4,t:11,i:235}, +D{l:135,t:11,i:255}, +D{l:4,t:11,i:194}, +D{l:5,t:11,i:584}, +D{l:6,t:11,i:384}, +D{l:7,t:11,i:583}, +D{l:10,t:11,i:761}, +D{l:11,t:11,i:760}, +D{l:139,t:11,i:851}, +D{l:6,t:10,i:80}, +D{l:6,t:10,i:1694}, +D{l:7,t:10,i:173}, +D{l:7,t:10,i:1974}, +D{l:9,t:10,i:547}, +D{l:10,t:10,i:730}, +D{l:14,t:10,i:18}, +D{l:150,t:10,i:39}, +D{l:4,t:10,i:923}, +D{l:134,t:10,i:1711}, +D{l:5,t:0,i:277}, +D{l:141,t:0,i:247}, +D{l:132,t:0,i:435}, +D{l:133,t:11,i:562}, +D{l:134,t:0,i:1311}, +D{l:5,t:11,i:191}, +D{l:137,t:11,i:271}, +D{l:132,t:10,i:595}, +D{l:7,t:11,i:1537}, +D{l:14,t:11,i:96}, +D{l:143,t:11,i:73}, +D{l:5,t:0,i:437}, +D{l:7,t:0,i:502}, +D{l:7,t:0,i:519}, +D{l:7,t:0,i:1122}, +D{l:7,t:0,i:1751}, +D{l:14,t:0,i:211}, +D{l:6,t:10,i:459}, +D{l:7,t:10,i:1753}, +D{l:7,t:10,i:1805}, +D{l:8,t:10,i:658}, +D{l:9,t:10,i:1}, +D{l:11,t:10,i:959}, +D{l:141,t:10,i:446}, +D{l:6,t:0,i:814}, +D{l:4,t:11,i:470}, +D{l:5,t:11,i:473}, +D{l:6,t:11,i:153}, +D{l:7,t:11,i:1503}, +D{l:7,t:11,i:1923}, +D{l:10,t:11,i:701}, +D{l:11,t:11,i:132}, +D{l:11,t:11,i:168}, +D{l:11,t:11,i:227}, +D{l:11,t:11,i:320}, +D{l:11,t:11,i:436}, +D{l:11,t:11,i:525}, +D{l:11,t:11,i:855}, +D{l:12,t:11,i:41}, +D{l:12,t:11,i:286}, +D{l:13,t:11,i:103}, +D{l:13,t:11,i:284}, +D{l:14,t:11,i:255}, +D{l:14,t:11,i:262}, +D{l:15,t:11,i:117}, +D{l:143,t:11,i:127}, +D{l:5,t:0,i:265}, +D{l:6,t:0,i:212}, +D{l:135,t:0,i:28}, +D{l:138,t:0,i:750}, +D{l:133,t:11,i:327}, +D{l:6,t:11,i:552}, +D{l:7,t:11,i:1754}, +D{l:137,t:11,i:604}, +D{l:134,t:0,i:2012}, +D{l:132,t:0,i:702}, +D{l:5,t:11,i:80}, +D{l:6,t:11,i:405}, +D{l:7,t:11,i:403}, +D{l:7,t:11,i:1502}, +D{l:7,t:11,i:1626}, +D{l:8,t:11,i:456}, +D{l:9,t:11,i:487}, +D{l:9,t:11,i:853}, +D{l:9,t:11,i:889}, +D{l:10,t:11,i:309}, +D{l:11,t:11,i:721}, +D{l:11,t:11,i:994}, +D{l:12,t:11,i:430}, +D{l:141,t:11,i:165}, +D{l:5,t:0,i:808}, +D{l:135,t:0,i:2045}, +D{l:5,t:0,i:166}, +D{l:8,t:0,i:739}, +D{l:140,t:0,i:511}, +D{l:134,t:10,i:490}, +D{l:4,t:11,i:453}, +D{l:5,t:11,i:887}, +D{l:6,t:11,i:535}, +D{l:8,t:11,i:6}, +D{l:136,t:11,i:543}, +D{l:4,t:0,i:119}, +D{l:5,t:0,i:170}, +D{l:5,t:0,i:447}, +D{l:7,t:0,i:1708}, +D{l:7,t:0,i:1889}, +D{l:9,t:0,i:357}, +D{l:9,t:0,i:719}, +D{l:12,t:0,i:486}, +D{l:140,t:0,i:596}, +D{l:137,t:0,i:500}, +D{l:7,t:10,i:250}, +D{l:136,t:10,i:507}, +D{l:132,t:10,i:158}, +D{l:6,t:0,i:809}, +D{l:134,t:0,i:1500}, +D{l:9,t:0,i:327}, +D{l:11,t:0,i:350}, +D{l:11,t:0,i:831}, +D{l:13,t:0,i:352}, +D{l:4,t:10,i:140}, +D{l:7,t:10,i:362}, +D{l:8,t:10,i:209}, +D{l:9,t:10,i:10}, +D{l:9,t:10,i:503}, +D{l:9,t:10,i:614}, +D{l:10,t:10,i:689}, +D{l:11,t:10,i:327}, +D{l:11,t:10,i:725}, +D{l:12,t:10,i:252}, +D{l:12,t:10,i:583}, +D{l:13,t:10,i:192}, +D{l:14,t:10,i:269}, +D{l:14,t:10,i:356}, +D{l:148,t:10,i:50}, +D{l:135,t:11,i:741}, +D{l:4,t:0,i:450}, +D{l:7,t:0,i:1158}, +D{l:19,t:10,i:1}, +D{l:19,t:10,i:26}, +D{l:150,t:10,i:9}, +D{l:6,t:0,i:597}, +D{l:135,t:0,i:1318}, +D{l:134,t:0,i:1602}, +D{l:6,t:10,i:228}, +D{l:7,t:10,i:1341}, +D{l:9,t:10,i:408}, +D{l:138,t:10,i:343}, +D{l:7,t:0,i:1375}, +D{l:7,t:0,i:1466}, +D{l:138,t:0,i:331}, +D{l:132,t:0,i:754}, +D{l:132,t:10,i:557}, +D{l:5,t:11,i:101}, +D{l:6,t:11,i:88}, +D{l:6,t:11,i:543}, +D{l:7,t:11,i:1677}, +D{l:9,t:11,i:100}, +D{l:10,t:11,i:677}, +D{l:14,t:11,i:169}, +D{l:14,t:11,i:302}, +D{l:14,t:11,i:313}, +D{l:15,t:11,i:48}, +D{l:143,t:11,i:84}, +D{l:134,t:0,i:1368}, +D{l:4,t:11,i:310}, +D{l:9,t:11,i:795}, +D{l:10,t:11,i:733}, +D{l:11,t:11,i:451}, +D{l:12,t:11,i:249}, +D{l:14,t:11,i:115}, +D{l:14,t:11,i:286}, +D{l:143,t:11,i:100}, +D{l:132,t:10,i:548}, +D{l:10,t:0,i:557}, +D{l:7,t:10,i:197}, +D{l:8,t:10,i:142}, +D{l:8,t:10,i:325}, +D{l:9,t:10,i:150}, +D{l:9,t:10,i:596}, +D{l:10,t:10,i:353}, +D{l:11,t:10,i:74}, +D{l:11,t:10,i:315}, +D{l:12,t:10,i:662}, +D{l:12,t:10,i:681}, +D{l:14,t:10,i:423}, +D{l:143,t:10,i:141}, +D{l:133,t:11,i:587}, +D{l:5,t:0,i:850}, +D{l:136,t:0,i:799}, +D{l:10,t:0,i:908}, +D{l:12,t:0,i:701}, +D{l:12,t:0,i:757}, +D{l:142,t:0,i:466}, +D{l:4,t:0,i:62}, +D{l:5,t:0,i:275}, +D{l:18,t:0,i:19}, +D{l:6,t:10,i:399}, +D{l:6,t:10,i:579}, +D{l:7,t:10,i:692}, +D{l:7,t:10,i:846}, +D{l:7,t:10,i:1015}, +D{l:7,t:10,i:1799}, +D{l:8,t:10,i:403}, +D{l:9,t:10,i:394}, +D{l:10,t:10,i:133}, +D{l:12,t:10,i:4}, +D{l:12,t:10,i:297}, +D{l:12,t:10,i:452}, +D{l:16,t:10,i:81}, +D{l:18,t:10,i:25}, +D{l:21,t:10,i:14}, +D{l:22,t:10,i:12}, +D{l:151,t:10,i:18}, +D{l:12,t:0,i:459}, +D{l:7,t:10,i:1546}, +D{l:11,t:10,i:299}, +D{l:142,t:10,i:407}, +D{l:132,t:10,i:177}, +D{l:132,t:11,i:498}, +D{l:7,t:11,i:217}, +D{l:8,t:11,i:140}, +D{l:138,t:11,i:610}, +D{l:5,t:10,i:411}, +D{l:135,t:10,i:653}, +D{l:134,t:0,i:1802}, +D{l:7,t:10,i:439}, +D{l:10,t:10,i:727}, +D{l:11,t:10,i:260}, +D{l:139,t:10,i:684}, +D{l:133,t:11,i:905}, +D{l:11,t:11,i:580}, +D{l:142,t:11,i:201}, +D{l:134,t:0,i:1397}, +D{l:5,t:10,i:208}, +D{l:7,t:10,i:753}, +D{l:135,t:10,i:1528}, +D{l:7,t:0,i:238}, +D{l:7,t:0,i:2033}, +D{l:8,t:0,i:120}, +D{l:8,t:0,i:188}, +D{l:8,t:0,i:659}, +D{l:9,t:0,i:598}, +D{l:10,t:0,i:466}, +D{l:12,t:0,i:342}, +D{l:12,t:0,i:588}, +D{l:13,t:0,i:503}, +D{l:14,t:0,i:246}, +D{l:143,t:0,i:92}, +D{l:135,t:11,i:1041}, +D{l:4,t:11,i:456}, +D{l:7,t:11,i:105}, +D{l:7,t:11,i:358}, +D{l:7,t:11,i:1637}, +D{l:8,t:11,i:643}, +D{l:139,t:11,i:483}, +D{l:6,t:0,i:1318}, +D{l:134,t:0,i:1324}, +D{l:4,t:0,i:201}, +D{l:7,t:0,i:1744}, +D{l:8,t:0,i:602}, +D{l:11,t:0,i:247}, +D{l:11,t:0,i:826}, +D{l:17,t:0,i:65}, +D{l:133,t:10,i:242}, +D{l:8,t:0,i:164}, +D{l:146,t:0,i:62}, +D{l:133,t:10,i:953}, +D{l:139,t:10,i:802}, +D{l:133,t:0,i:615}, +D{l:7,t:11,i:1566}, +D{l:8,t:11,i:269}, +D{l:9,t:11,i:212}, +D{l:9,t:11,i:718}, +D{l:14,t:11,i:15}, +D{l:14,t:11,i:132}, +D{l:142,t:11,i:227}, +D{l:133,t:10,i:290}, +D{l:132,t:10,i:380}, +D{l:5,t:10,i:52}, +D{l:7,t:10,i:277}, +D{l:9,t:10,i:368}, +D{l:139,t:10,i:791}, +D{l:135,t:0,i:1243}, +D{l:133,t:11,i:539}, +D{l:11,t:11,i:919}, +D{l:141,t:11,i:409}, +D{l:136,t:0,i:968}, +D{l:133,t:11,i:470}, +D{l:134,t:0,i:882}, +D{l:132,t:0,i:907}, +D{l:5,t:0,i:100}, +D{l:10,t:0,i:329}, +D{l:12,t:0,i:416}, +D{l:149,t:0,i:29}, +D{l:10,t:10,i:138}, +D{l:139,t:10,i:476}, +D{l:5,t:10,i:725}, +D{l:5,t:10,i:727}, +D{l:6,t:11,i:91}, +D{l:7,t:11,i:435}, +D{l:135,t:10,i:1811}, +D{l:4,t:11,i:16}, +D{l:5,t:11,i:316}, +D{l:5,t:11,i:842}, +D{l:6,t:11,i:370}, +D{l:6,t:11,i:1778}, +D{l:8,t:11,i:166}, +D{l:11,t:11,i:812}, +D{l:12,t:11,i:206}, +D{l:12,t:11,i:351}, +D{l:14,t:11,i:418}, +D{l:16,t:11,i:15}, +D{l:16,t:11,i:34}, +D{l:18,t:11,i:3}, +D{l:19,t:11,i:3}, +D{l:19,t:11,i:7}, +D{l:20,t:11,i:4}, +D{l:149,t:11,i:21}, +D{l:132,t:0,i:176}, +D{l:5,t:0,i:636}, +D{l:5,t:0,i:998}, +D{l:7,t:0,i:9}, +D{l:7,t:0,i:1508}, +D{l:8,t:0,i:26}, +D{l:9,t:0,i:317}, +D{l:9,t:0,i:358}, +D{l:10,t:0,i:210}, +D{l:10,t:0,i:292}, +D{l:10,t:0,i:533}, +D{l:11,t:0,i:555}, +D{l:12,t:0,i:526}, +D{l:12,t:0,i:607}, +D{l:13,t:0,i:263}, +D{l:13,t:0,i:459}, +D{l:142,t:0,i:271}, +D{l:6,t:0,i:256}, +D{l:8,t:0,i:265}, +D{l:4,t:10,i:38}, +D{l:7,t:10,i:307}, +D{l:7,t:10,i:999}, +D{l:7,t:10,i:1481}, +D{l:7,t:10,i:1732}, +D{l:7,t:10,i:1738}, +D{l:9,t:10,i:414}, +D{l:11,t:10,i:316}, +D{l:12,t:10,i:52}, +D{l:13,t:10,i:420}, +D{l:147,t:10,i:100}, +D{l:135,t:10,i:1296}, +D{l:4,t:11,i:611}, +D{l:133,t:11,i:606}, +D{l:4,t:0,i:643}, +D{l:142,t:11,i:21}, +D{l:133,t:11,i:715}, +D{l:133,t:10,i:723}, +D{l:6,t:0,i:610}, +D{l:135,t:11,i:597}, +D{l:10,t:0,i:127}, +D{l:141,t:0,i:27}, +D{l:6,t:0,i:1995}, +D{l:6,t:0,i:2001}, +D{l:8,t:0,i:119}, +D{l:136,t:0,i:973}, +D{l:4,t:11,i:149}, +D{l:138,t:11,i:368}, +D{l:12,t:0,i:522}, +D{l:4,t:11,i:154}, +D{l:5,t:10,i:109}, +D{l:6,t:10,i:1784}, +D{l:7,t:11,i:1134}, +D{l:7,t:10,i:1895}, +D{l:8,t:11,i:105}, +D{l:12,t:10,i:296}, +D{l:140,t:10,i:302}, +D{l:4,t:11,i:31}, +D{l:6,t:11,i:429}, +D{l:7,t:11,i:962}, +D{l:9,t:11,i:458}, +D{l:139,t:11,i:691}, +D{l:10,t:0,i:553}, +D{l:11,t:0,i:876}, +D{l:13,t:0,i:193}, +D{l:13,t:0,i:423}, +D{l:14,t:0,i:166}, +D{l:19,t:0,i:84}, +D{l:4,t:11,i:312}, +D{l:5,t:10,i:216}, +D{l:7,t:10,i:1879}, +D{l:9,t:10,i:141}, +D{l:9,t:10,i:270}, +D{l:9,t:10,i:679}, +D{l:10,t:10,i:159}, +D{l:11,t:10,i:197}, +D{l:12,t:10,i:538}, +D{l:12,t:10,i:559}, +D{l:14,t:10,i:144}, +D{l:14,t:10,i:167}, +D{l:143,t:10,i:67}, +D{l:134,t:0,i:1582}, +D{l:7,t:0,i:1578}, +D{l:135,t:11,i:1578}, +D{l:137,t:10,i:81}, +D{l:132,t:11,i:236}, +D{l:134,t:10,i:391}, +D{l:134,t:0,i:795}, +D{l:7,t:10,i:322}, +D{l:136,t:10,i:249}, +D{l:5,t:11,i:836}, +D{l:5,t:11,i:857}, +D{l:6,t:11,i:1680}, +D{l:7,t:11,i:59}, +D{l:147,t:11,i:53}, +D{l:135,t:0,i:432}, +D{l:10,t:11,i:68}, +D{l:139,t:11,i:494}, +D{l:4,t:11,i:81}, +D{l:139,t:11,i:867}, +D{l:7,t:0,i:126}, +D{l:136,t:0,i:84}, +D{l:142,t:11,i:280}, +D{l:5,t:11,i:282}, +D{l:8,t:11,i:650}, +D{l:9,t:11,i:295}, +D{l:9,t:11,i:907}, +D{l:138,t:11,i:443}, +D{l:136,t:0,i:790}, +D{l:5,t:10,i:632}, +D{l:138,t:10,i:526}, +D{l:6,t:0,i:64}, +D{l:12,t:0,i:377}, +D{l:13,t:0,i:309}, +D{l:14,t:0,i:141}, +D{l:14,t:0,i:429}, +D{l:14,t:11,i:141}, +D{l:142,t:11,i:429}, +D{l:134,t:0,i:1529}, +D{l:6,t:0,i:321}, +D{l:7,t:0,i:1857}, +D{l:9,t:0,i:530}, +D{l:19,t:0,i:99}, +D{l:7,t:10,i:948}, +D{l:7,t:10,i:1042}, +D{l:8,t:10,i:235}, +D{l:8,t:10,i:461}, +D{l:9,t:10,i:453}, +D{l:10,t:10,i:354}, +D{l:145,t:10,i:77}, +D{l:7,t:0,i:1104}, +D{l:11,t:0,i:269}, +D{l:11,t:0,i:539}, +D{l:11,t:0,i:627}, +D{l:11,t:0,i:706}, +D{l:11,t:0,i:975}, +D{l:12,t:0,i:248}, +D{l:12,t:0,i:434}, +D{l:12,t:0,i:600}, +D{l:12,t:0,i:622}, +D{l:13,t:0,i:297}, +D{l:13,t:0,i:485}, +D{l:14,t:0,i:69}, +D{l:14,t:0,i:409}, +D{l:143,t:0,i:108}, +D{l:4,t:10,i:362}, +D{l:7,t:10,i:52}, +D{l:7,t:10,i:303}, +D{l:10,t:11,i:70}, +D{l:12,t:11,i:26}, +D{l:14,t:11,i:17}, +D{l:14,t:11,i:178}, +D{l:15,t:11,i:34}, +D{l:149,t:11,i:12}, +D{l:11,t:0,i:977}, +D{l:141,t:0,i:507}, +D{l:9,t:0,i:34}, +D{l:139,t:0,i:484}, +D{l:5,t:10,i:196}, +D{l:6,t:10,i:486}, +D{l:7,t:10,i:212}, +D{l:8,t:10,i:309}, +D{l:136,t:10,i:346}, +D{l:6,t:0,i:1700}, +D{l:7,t:0,i:26}, +D{l:7,t:0,i:293}, +D{l:7,t:0,i:382}, +D{l:7,t:0,i:1026}, +D{l:7,t:0,i:1087}, +D{l:7,t:0,i:2027}, +D{l:8,t:0,i:24}, +D{l:8,t:0,i:114}, +D{l:8,t:0,i:252}, +D{l:8,t:0,i:727}, +D{l:8,t:0,i:729}, +D{l:9,t:0,i:30}, +D{l:9,t:0,i:199}, +D{l:9,t:0,i:231}, +D{l:9,t:0,i:251}, +D{l:9,t:0,i:334}, +D{l:9,t:0,i:361}, +D{l:9,t:0,i:712}, +D{l:10,t:0,i:55}, +D{l:10,t:0,i:60}, +D{l:10,t:0,i:232}, +D{l:10,t:0,i:332}, +D{l:10,t:0,i:384}, +D{l:10,t:0,i:396}, +D{l:10,t:0,i:504}, +D{l:10,t:0,i:542}, +D{l:10,t:0,i:652}, +D{l:11,t:0,i:20}, +D{l:11,t:0,i:48}, +D{l:11,t:0,i:207}, +D{l:11,t:0,i:291}, +D{l:11,t:0,i:298}, +D{l:11,t:0,i:342}, +D{l:11,t:0,i:365}, +D{l:11,t:0,i:394}, +D{l:11,t:0,i:620}, +D{l:11,t:0,i:705}, +D{l:11,t:0,i:1017}, +D{l:12,t:0,i:123}, +D{l:12,t:0,i:340}, +D{l:12,t:0,i:406}, +D{l:12,t:0,i:643}, +D{l:13,t:0,i:61}, +D{l:13,t:0,i:269}, +D{l:13,t:0,i:311}, +D{l:13,t:0,i:319}, +D{l:13,t:0,i:486}, +D{l:14,t:0,i:234}, +D{l:15,t:0,i:62}, +D{l:15,t:0,i:85}, +D{l:16,t:0,i:71}, +D{l:18,t:0,i:119}, +D{l:20,t:0,i:105}, +D{l:135,t:10,i:1912}, +D{l:4,t:11,i:71}, +D{l:5,t:11,i:376}, +D{l:7,t:11,i:119}, +D{l:138,t:11,i:665}, +D{l:10,t:0,i:918}, +D{l:10,t:0,i:926}, +D{l:4,t:10,i:686}, +D{l:136,t:11,i:55}, +D{l:138,t:10,i:625}, +D{l:136,t:10,i:706}, +D{l:132,t:11,i:479}, +D{l:4,t:10,i:30}, +D{l:133,t:10,i:43}, +D{l:6,t:0,i:379}, +D{l:7,t:0,i:270}, +D{l:8,t:0,i:176}, +D{l:8,t:0,i:183}, +D{l:9,t:0,i:432}, +D{l:9,t:0,i:661}, +D{l:12,t:0,i:247}, +D{l:12,t:0,i:617}, +D{l:18,t:0,i:125}, +D{l:7,t:11,i:607}, +D{l:8,t:11,i:99}, +D{l:152,t:11,i:4}, +D{l:5,t:0,i:792}, +D{l:133,t:0,i:900}, +D{l:4,t:11,i:612}, +D{l:133,t:11,i:561}, +D{l:4,t:11,i:41}, +D{l:4,t:10,i:220}, +D{l:5,t:11,i:74}, +D{l:7,t:10,i:1535}, +D{l:7,t:11,i:1627}, +D{l:11,t:11,i:871}, +D{l:140,t:11,i:619}, +D{l:135,t:0,i:1920}, +D{l:7,t:11,i:94}, +D{l:11,t:11,i:329}, +D{l:11,t:11,i:965}, +D{l:12,t:11,i:241}, +D{l:14,t:11,i:354}, +D{l:15,t:11,i:22}, +D{l:148,t:11,i:63}, +D{l:9,t:11,i:209}, +D{l:137,t:11,i:300}, +D{l:134,t:0,i:771}, +D{l:135,t:0,i:1979}, +D{l:4,t:0,i:901}, +D{l:133,t:0,i:776}, +D{l:142,t:0,i:254}, +D{l:133,t:11,i:98}, +D{l:9,t:11,i:16}, +D{l:141,t:11,i:386}, +D{l:133,t:11,i:984}, +D{l:4,t:11,i:182}, +D{l:6,t:11,i:205}, +D{l:135,t:11,i:220}, +D{l:7,t:10,i:1725}, +D{l:7,t:10,i:1774}, +D{l:138,t:10,i:393}, +D{l:5,t:10,i:263}, +D{l:134,t:10,i:414}, +D{l:4,t:11,i:42}, +D{l:9,t:11,i:205}, +D{l:9,t:11,i:786}, +D{l:138,t:11,i:659}, +D{l:14,t:0,i:140}, +D{l:148,t:0,i:41}, +D{l:8,t:0,i:440}, +D{l:10,t:0,i:359}, +D{l:6,t:10,i:178}, +D{l:6,t:11,i:289}, +D{l:6,t:10,i:1750}, +D{l:7,t:11,i:1670}, +D{l:9,t:10,i:690}, +D{l:10,t:10,i:155}, +D{l:10,t:10,i:373}, +D{l:11,t:10,i:698}, +D{l:12,t:11,i:57}, +D{l:13,t:10,i:155}, +D{l:20,t:10,i:93}, +D{l:151,t:11,i:4}, +D{l:4,t:0,i:37}, +D{l:5,t:0,i:334}, +D{l:7,t:0,i:1253}, +D{l:151,t:11,i:25}, +D{l:4,t:0,i:508}, +D{l:4,t:11,i:635}, +D{l:5,t:10,i:97}, +D{l:137,t:10,i:393}, +D{l:139,t:11,i:533}, +D{l:4,t:0,i:640}, +D{l:133,t:0,i:513}, +D{l:134,t:10,i:1639}, +D{l:132,t:11,i:371}, +D{l:4,t:11,i:272}, +D{l:7,t:11,i:836}, +D{l:7,t:11,i:1651}, +D{l:145,t:11,i:89}, +D{l:5,t:11,i:825}, +D{l:6,t:11,i:444}, +D{l:6,t:11,i:1640}, +D{l:136,t:11,i:308}, +D{l:4,t:10,i:191}, +D{l:7,t:10,i:934}, +D{l:8,t:10,i:647}, +D{l:145,t:10,i:97}, +D{l:12,t:0,i:246}, +D{l:15,t:0,i:162}, +D{l:19,t:0,i:64}, +D{l:20,t:0,i:8}, +D{l:20,t:0,i:95}, +D{l:22,t:0,i:24}, +D{l:152,t:0,i:17}, +D{l:4,t:0,i:533}, +D{l:5,t:10,i:165}, +D{l:9,t:10,i:346}, +D{l:138,t:10,i:655}, +D{l:5,t:11,i:737}, +D{l:139,t:10,i:885}, +D{l:133,t:10,i:877}, +D{l:8,t:10,i:128}, +D{l:139,t:10,i:179}, +D{l:137,t:11,i:307}, +D{l:140,t:0,i:752}, +D{l:133,t:0,i:920}, +D{l:135,t:0,i:1048}, +D{l:5,t:0,i:153}, +D{l:6,t:0,i:580}, +D{l:6,t:10,i:1663}, +D{l:7,t:10,i:132}, +D{l:7,t:10,i:1154}, +D{l:7,t:10,i:1415}, +D{l:7,t:10,i:1507}, +D{l:12,t:10,i:493}, +D{l:15,t:10,i:105}, +D{l:151,t:10,i:15}, +D{l:5,t:10,i:459}, +D{l:7,t:10,i:1073}, +D{l:8,t:10,i:241}, +D{l:136,t:10,i:334}, +D{l:138,t:0,i:391}, +D{l:135,t:0,i:1952}, +D{l:133,t:11,i:525}, +D{l:8,t:11,i:641}, +D{l:11,t:11,i:388}, +D{l:140,t:11,i:580}, +D{l:142,t:0,i:126}, +D{l:134,t:0,i:640}, +D{l:132,t:0,i:483}, +D{l:7,t:0,i:1616}, +D{l:9,t:0,i:69}, +D{l:6,t:10,i:324}, +D{l:6,t:10,i:520}, +D{l:7,t:10,i:338}, +D{l:7,t:10,i:1729}, +D{l:8,t:10,i:228}, +D{l:139,t:10,i:750}, +D{l:5,t:11,i:493}, +D{l:134,t:11,i:528}, +D{l:135,t:0,i:734}, +D{l:4,t:11,i:174}, +D{l:135,t:11,i:911}, +D{l:138,t:0,i:480}, +D{l:9,t:0,i:495}, +D{l:146,t:0,i:104}, +D{l:135,t:10,i:705}, +D{l:9,t:0,i:472}, +D{l:4,t:10,i:73}, +D{l:6,t:10,i:612}, +D{l:7,t:10,i:927}, +D{l:7,t:10,i:1330}, +D{l:7,t:10,i:1822}, +D{l:8,t:10,i:217}, +D{l:9,t:10,i:765}, +D{l:9,t:10,i:766}, +D{l:10,t:10,i:408}, +D{l:11,t:10,i:51}, +D{l:11,t:10,i:793}, +D{l:12,t:10,i:266}, +D{l:15,t:10,i:158}, +D{l:20,t:10,i:89}, +D{l:150,t:10,i:32}, +D{l:7,t:11,i:548}, +D{l:137,t:11,i:58}, +D{l:4,t:11,i:32}, +D{l:5,t:11,i:215}, +D{l:6,t:11,i:269}, +D{l:7,t:11,i:1782}, +D{l:7,t:11,i:1892}, +D{l:10,t:11,i:16}, +D{l:11,t:11,i:822}, +D{l:11,t:11,i:954}, +D{l:141,t:11,i:481}, +D{l:132,t:0,i:874}, +D{l:9,t:0,i:229}, +D{l:5,t:10,i:389}, +D{l:136,t:10,i:636}, +D{l:7,t:11,i:1749}, +D{l:136,t:11,i:477}, +D{l:134,t:0,i:948}, +D{l:5,t:11,i:308}, +D{l:135,t:11,i:1088}, +D{l:4,t:0,i:748}, +D{l:139,t:0,i:1009}, +D{l:136,t:10,i:21}, +D{l:6,t:0,i:555}, +D{l:135,t:0,i:485}, +D{l:5,t:11,i:126}, +D{l:8,t:11,i:297}, +D{l:9,t:11,i:366}, +D{l:9,t:11,i:445}, +D{l:12,t:11,i:53}, +D{l:12,t:11,i:374}, +D{l:141,t:11,i:492}, +D{l:7,t:11,i:1551}, +D{l:139,t:11,i:361}, +D{l:136,t:0,i:193}, +D{l:136,t:0,i:472}, +D{l:8,t:0,i:653}, +D{l:13,t:0,i:93}, +D{l:147,t:0,i:14}, +D{l:132,t:0,i:984}, +D{l:132,t:11,i:175}, +D{l:5,t:0,i:172}, +D{l:6,t:0,i:1971}, +D{l:132,t:11,i:685}, +D{l:149,t:11,i:8}, +D{l:133,t:11,i:797}, +D{l:13,t:0,i:83}, +D{l:5,t:10,i:189}, +D{l:7,t:10,i:442}, +D{l:7,t:10,i:443}, +D{l:8,t:10,i:281}, +D{l:12,t:10,i:174}, +D{l:141,t:10,i:261}, +D{l:134,t:0,i:1568}, +D{l:133,t:11,i:565}, +D{l:139,t:0,i:384}, +D{l:133,t:0,i:260}, +D{l:7,t:0,i:758}, +D{l:7,t:0,i:880}, +D{l:7,t:0,i:1359}, +D{l:9,t:0,i:164}, +D{l:9,t:0,i:167}, +D{l:10,t:0,i:156}, +D{l:10,t:0,i:588}, +D{l:12,t:0,i:101}, +D{l:14,t:0,i:48}, +D{l:15,t:0,i:70}, +D{l:6,t:10,i:2}, +D{l:7,t:10,i:1262}, +D{l:7,t:10,i:1737}, +D{l:8,t:10,i:22}, +D{l:8,t:10,i:270}, +D{l:8,t:10,i:612}, +D{l:9,t:10,i:312}, +D{l:9,t:10,i:436}, +D{l:10,t:10,i:311}, +D{l:10,t:10,i:623}, +D{l:11,t:10,i:72}, +D{l:11,t:10,i:330}, +D{l:11,t:10,i:455}, +D{l:12,t:10,i:321}, +D{l:12,t:10,i:504}, +D{l:12,t:10,i:530}, +D{l:12,t:10,i:543}, +D{l:13,t:10,i:17}, +D{l:13,t:10,i:156}, +D{l:13,t:10,i:334}, +D{l:17,t:10,i:60}, +D{l:148,t:10,i:64}, +D{l:4,t:11,i:252}, +D{l:7,t:11,i:1068}, +D{l:10,t:11,i:434}, +D{l:11,t:11,i:228}, +D{l:11,t:11,i:426}, +D{l:13,t:11,i:231}, +D{l:18,t:11,i:106}, +D{l:148,t:11,i:87}, +D{l:7,t:10,i:354}, +D{l:10,t:10,i:410}, +D{l:139,t:10,i:815}, +D{l:6,t:0,i:367}, +D{l:7,t:10,i:670}, +D{l:7,t:10,i:1327}, +D{l:8,t:10,i:411}, +D{l:8,t:10,i:435}, +D{l:9,t:10,i:653}, +D{l:9,t:10,i:740}, +D{l:10,t:10,i:385}, +D{l:11,t:10,i:222}, +D{l:11,t:10,i:324}, +D{l:11,t:10,i:829}, +D{l:140,t:10,i:611}, +D{l:7,t:0,i:1174}, +D{l:6,t:10,i:166}, +D{l:135,t:10,i:374}, +D{l:146,t:0,i:121}, +D{l:132,t:0,i:828}, +D{l:5,t:11,i:231}, +D{l:138,t:11,i:509}, +D{l:7,t:11,i:601}, +D{l:9,t:11,i:277}, +D{l:9,t:11,i:674}, +D{l:10,t:11,i:178}, +D{l:10,t:11,i:257}, +D{l:10,t:11,i:418}, +D{l:11,t:11,i:531}, +D{l:11,t:11,i:544}, +D{l:11,t:11,i:585}, +D{l:12,t:11,i:113}, +D{l:12,t:11,i:475}, +D{l:13,t:11,i:99}, +D{l:142,t:11,i:428}, +D{l:134,t:0,i:1541}, +D{l:135,t:11,i:1779}, +D{l:5,t:0,i:343}, +D{l:134,t:10,i:398}, +D{l:135,t:10,i:50}, +D{l:135,t:11,i:1683}, +D{l:4,t:0,i:440}, +D{l:7,t:0,i:57}, +D{l:8,t:0,i:167}, +D{l:8,t:0,i:375}, +D{l:9,t:0,i:82}, +D{l:9,t:0,i:561}, +D{l:9,t:0,i:744}, +D{l:10,t:0,i:620}, +D{l:137,t:11,i:744}, +D{l:134,t:0,i:926}, +D{l:6,t:10,i:517}, +D{l:7,t:10,i:1159}, +D{l:10,t:10,i:621}, +D{l:139,t:10,i:192}, +D{l:137,t:0,i:827}, +D{l:8,t:0,i:194}, +D{l:136,t:0,i:756}, +D{l:10,t:10,i:223}, +D{l:139,t:10,i:645}, +D{l:7,t:10,i:64}, +D{l:136,t:10,i:245}, +D{l:4,t:11,i:399}, +D{l:5,t:11,i:119}, +D{l:5,t:11,i:494}, +D{l:7,t:11,i:751}, +D{l:137,t:11,i:556}, +D{l:132,t:0,i:808}, +D{l:135,t:0,i:22}, +D{l:7,t:10,i:1763}, +D{l:140,t:10,i:310}, +D{l:5,t:0,i:639}, +D{l:7,t:0,i:1249}, +D{l:11,t:0,i:896}, +D{l:134,t:11,i:584}, +D{l:134,t:0,i:1614}, +D{l:135,t:0,i:860}, +D{l:135,t:11,i:1121}, +D{l:5,t:10,i:129}, +D{l:6,t:10,i:61}, +D{l:135,t:10,i:947}, +D{l:4,t:0,i:102}, +D{l:7,t:0,i:815}, +D{l:7,t:0,i:1699}, +D{l:139,t:0,i:964}, +D{l:13,t:10,i:505}, +D{l:141,t:10,i:506}, +D{l:139,t:10,i:1000}, +D{l:132,t:11,i:679}, +D{l:132,t:0,i:899}, +D{l:132,t:0,i:569}, +D{l:5,t:11,i:694}, +D{l:137,t:11,i:714}, +D{l:136,t:0,i:795}, +D{l:6,t:0,i:2045}, +D{l:139,t:11,i:7}, +D{l:6,t:0,i:52}, +D{l:9,t:0,i:104}, +D{l:9,t:0,i:559}, +D{l:12,t:0,i:308}, +D{l:147,t:0,i:87}, +D{l:4,t:0,i:301}, +D{l:132,t:0,i:604}, +D{l:133,t:10,i:637}, +D{l:136,t:0,i:779}, +D{l:5,t:11,i:143}, +D{l:5,t:11,i:769}, +D{l:6,t:11,i:1760}, +D{l:7,t:11,i:682}, +D{l:7,t:11,i:1992}, +D{l:136,t:11,i:736}, +D{l:137,t:10,i:590}, +D{l:147,t:0,i:32}, +D{l:137,t:11,i:527}, +D{l:5,t:10,i:280}, +D{l:135,t:10,i:1226}, +D{l:134,t:0,i:494}, +D{l:6,t:0,i:677}, +D{l:6,t:0,i:682}, +D{l:134,t:0,i:1044}, +D{l:133,t:10,i:281}, +D{l:135,t:10,i:1064}, +D{l:7,t:0,i:508}, +D{l:133,t:11,i:860}, +D{l:6,t:11,i:422}, +D{l:7,t:11,i:0}, +D{l:7,t:11,i:1544}, +D{l:9,t:11,i:577}, +D{l:11,t:11,i:990}, +D{l:12,t:11,i:141}, +D{l:12,t:11,i:453}, +D{l:13,t:11,i:47}, +D{l:141,t:11,i:266}, +D{l:134,t:0,i:1014}, +D{l:5,t:11,i:515}, +D{l:137,t:11,i:131}, +D{l:134,t:0,i:957}, +D{l:132,t:11,i:646}, +D{l:6,t:0,i:310}, +D{l:7,t:0,i:1849}, +D{l:8,t:0,i:72}, +D{l:8,t:0,i:272}, +D{l:8,t:0,i:431}, +D{l:9,t:0,i:12}, +D{l:9,t:0,i:376}, +D{l:10,t:0,i:563}, +D{l:10,t:0,i:630}, +D{l:10,t:0,i:796}, +D{l:10,t:0,i:810}, +D{l:11,t:0,i:367}, +D{l:11,t:0,i:599}, +D{l:11,t:0,i:686}, +D{l:140,t:0,i:672}, +D{l:7,t:0,i:570}, +D{l:4,t:11,i:396}, +D{l:7,t:10,i:120}, +D{l:7,t:11,i:728}, +D{l:8,t:10,i:489}, +D{l:9,t:11,i:117}, +D{l:9,t:10,i:319}, +D{l:10,t:10,i:820}, +D{l:11,t:10,i:1004}, +D{l:12,t:10,i:379}, +D{l:12,t:10,i:679}, +D{l:13,t:10,i:117}, +D{l:13,t:11,i:202}, +D{l:13,t:10,i:412}, +D{l:14,t:10,i:25}, +D{l:15,t:10,i:52}, +D{l:15,t:10,i:161}, +D{l:16,t:10,i:47}, +D{l:20,t:11,i:51}, +D{l:149,t:10,i:2}, +D{l:6,t:11,i:121}, +D{l:6,t:11,i:124}, +D{l:6,t:11,i:357}, +D{l:7,t:11,i:1138}, +D{l:7,t:11,i:1295}, +D{l:8,t:11,i:162}, +D{l:139,t:11,i:655}, +D{l:8,t:0,i:449}, +D{l:4,t:10,i:937}, +D{l:5,t:10,i:801}, +D{l:136,t:11,i:449}, +D{l:139,t:11,i:958}, +D{l:6,t:0,i:181}, +D{l:7,t:0,i:537}, +D{l:8,t:0,i:64}, +D{l:9,t:0,i:127}, +D{l:10,t:0,i:496}, +D{l:12,t:0,i:510}, +D{l:141,t:0,i:384}, +D{l:138,t:11,i:253}, +D{l:4,t:0,i:244}, +D{l:135,t:0,i:233}, +D{l:133,t:11,i:237}, +D{l:132,t:10,i:365}, +D{l:6,t:0,i:1650}, +D{l:10,t:0,i:702}, +D{l:139,t:0,i:245}, +D{l:5,t:10,i:7}, +D{l:139,t:10,i:774}, +D{l:13,t:0,i:463}, +D{l:20,t:0,i:49}, +D{l:13,t:11,i:463}, +D{l:148,t:11,i:49}, +D{l:4,t:10,i:734}, +D{l:5,t:10,i:662}, +D{l:134,t:10,i:430}, +D{l:4,t:10,i:746}, +D{l:135,t:10,i:1090}, +D{l:5,t:10,i:360}, +D{l:136,t:10,i:237}, +D{l:137,t:0,i:338}, +D{l:143,t:11,i:10}, +D{l:7,t:11,i:571}, +D{l:138,t:11,i:366}, +D{l:134,t:0,i:1279}, +D{l:9,t:11,i:513}, +D{l:10,t:11,i:22}, +D{l:10,t:11,i:39}, +D{l:12,t:11,i:122}, +D{l:140,t:11,i:187}, +D{l:133,t:0,i:896}, +D{l:146,t:0,i:178}, +D{l:134,t:0,i:695}, +D{l:137,t:0,i:808}, +D{l:134,t:11,i:587}, +D{l:7,t:11,i:107}, +D{l:7,t:11,i:838}, +D{l:8,t:11,i:550}, +D{l:138,t:11,i:401}, +D{l:7,t:0,i:1117}, +D{l:136,t:0,i:539}, +D{l:4,t:10,i:277}, +D{l:5,t:10,i:608}, +D{l:6,t:10,i:493}, +D{l:7,t:10,i:457}, +D{l:140,t:10,i:384}, +D{l:133,t:11,i:768}, +D{l:12,t:0,i:257}, +D{l:7,t:10,i:27}, +D{l:135,t:10,i:316}, +D{l:140,t:0,i:1003}, +D{l:4,t:0,i:207}, +D{l:5,t:0,i:586}, +D{l:5,t:0,i:676}, +D{l:6,t:0,i:448}, +D{l:8,t:0,i:244}, +D{l:11,t:0,i:1}, +D{l:13,t:0,i:3}, +D{l:16,t:0,i:54}, +D{l:17,t:0,i:4}, +D{l:18,t:0,i:13}, +D{l:133,t:10,i:552}, +D{l:4,t:10,i:401}, +D{l:137,t:10,i:264}, +D{l:5,t:0,i:516}, +D{l:7,t:0,i:1883}, +D{l:135,t:11,i:1883}, +D{l:12,t:0,i:960}, +D{l:132,t:11,i:894}, +D{l:5,t:0,i:4}, +D{l:5,t:0,i:810}, +D{l:6,t:0,i:13}, +D{l:6,t:0,i:538}, +D{l:6,t:0,i:1690}, +D{l:6,t:0,i:1726}, +D{l:7,t:0,i:499}, +D{l:7,t:0,i:1819}, +D{l:8,t:0,i:148}, +D{l:8,t:0,i:696}, +D{l:8,t:0,i:791}, +D{l:12,t:0,i:125}, +D{l:143,t:0,i:9}, +D{l:135,t:0,i:1268}, +D{l:11,t:0,i:30}, +D{l:14,t:0,i:315}, +D{l:9,t:10,i:543}, +D{l:10,t:10,i:524}, +D{l:12,t:10,i:524}, +D{l:16,t:10,i:18}, +D{l:20,t:10,i:26}, +D{l:148,t:10,i:65}, +D{l:6,t:0,i:748}, +D{l:4,t:10,i:205}, +D{l:5,t:10,i:623}, +D{l:7,t:10,i:104}, +D{l:136,t:10,i:519}, +D{l:11,t:0,i:542}, +D{l:139,t:0,i:852}, +D{l:140,t:0,i:6}, +D{l:132,t:0,i:848}, +D{l:7,t:0,i:1385}, +D{l:11,t:0,i:582}, +D{l:11,t:0,i:650}, +D{l:11,t:0,i:901}, +D{l:11,t:0,i:949}, +D{l:12,t:0,i:232}, +D{l:12,t:0,i:236}, +D{l:13,t:0,i:413}, +D{l:13,t:0,i:501}, +D{l:18,t:0,i:116}, +D{l:7,t:10,i:579}, +D{l:9,t:10,i:41}, +D{l:9,t:10,i:244}, +D{l:9,t:10,i:669}, +D{l:10,t:10,i:5}, +D{l:11,t:10,i:861}, +D{l:11,t:10,i:951}, +D{l:139,t:10,i:980}, +D{l:4,t:0,i:945}, +D{l:6,t:0,i:1811}, +D{l:6,t:0,i:1845}, +D{l:6,t:0,i:1853}, +D{l:6,t:0,i:1858}, +D{l:8,t:0,i:862}, +D{l:12,t:0,i:782}, +D{l:12,t:0,i:788}, +D{l:18,t:0,i:160}, +D{l:148,t:0,i:117}, +D{l:132,t:10,i:717}, +D{l:4,t:0,i:925}, +D{l:5,t:0,i:803}, +D{l:8,t:0,i:698}, +D{l:138,t:0,i:828}, +D{l:134,t:0,i:1416}, +D{l:132,t:0,i:610}, +D{l:139,t:0,i:992}, +D{l:6,t:0,i:878}, +D{l:134,t:0,i:1477}, +D{l:135,t:0,i:1847}, +D{l:138,t:11,i:531}, +D{l:137,t:11,i:539}, +D{l:134,t:11,i:272}, +D{l:133,t:0,i:383}, +D{l:134,t:0,i:1404}, +D{l:132,t:10,i:489}, +D{l:4,t:11,i:9}, +D{l:5,t:11,i:128}, +D{l:7,t:11,i:368}, +D{l:11,t:11,i:480}, +D{l:148,t:11,i:3}, +D{l:136,t:0,i:986}, +D{l:9,t:0,i:660}, +D{l:138,t:0,i:347}, +D{l:135,t:10,i:892}, +D{l:136,t:11,i:682}, +D{l:7,t:0,i:572}, +D{l:9,t:0,i:592}, +D{l:11,t:0,i:680}, +D{l:12,t:0,i:356}, +D{l:140,t:0,i:550}, +D{l:7,t:0,i:1411}, +D{l:138,t:11,i:527}, +D{l:4,t:11,i:2}, +D{l:7,t:11,i:545}, +D{l:135,t:11,i:894}, +D{l:137,t:10,i:473}, +D{l:11,t:0,i:64}, +D{l:7,t:11,i:481}, +D{l:7,t:10,i:819}, +D{l:9,t:10,i:26}, +D{l:9,t:10,i:392}, +D{l:9,t:11,i:792}, +D{l:10,t:10,i:152}, +D{l:10,t:10,i:226}, +D{l:12,t:10,i:276}, +D{l:12,t:10,i:426}, +D{l:12,t:10,i:589}, +D{l:13,t:10,i:460}, +D{l:15,t:10,i:97}, +D{l:19,t:10,i:48}, +D{l:148,t:10,i:104}, +D{l:135,t:10,i:51}, +D{l:136,t:11,i:445}, +D{l:136,t:11,i:646}, +D{l:135,t:0,i:606}, +D{l:132,t:10,i:674}, +D{l:6,t:0,i:1829}, +D{l:134,t:0,i:1830}, +D{l:132,t:10,i:770}, +D{l:5,t:10,i:79}, +D{l:7,t:10,i:1027}, +D{l:7,t:10,i:1477}, +D{l:139,t:10,i:52}, +D{l:5,t:11,i:530}, +D{l:142,t:11,i:113}, +D{l:134,t:10,i:1666}, +D{l:7,t:0,i:748}, +D{l:139,t:0,i:700}, +D{l:134,t:10,i:195}, +D{l:133,t:10,i:789}, +D{l:9,t:0,i:87}, +D{l:10,t:0,i:365}, +D{l:4,t:10,i:251}, +D{l:4,t:10,i:688}, +D{l:7,t:10,i:513}, +D{l:135,t:10,i:1284}, +D{l:136,t:11,i:111}, +D{l:133,t:0,i:127}, +D{l:6,t:0,i:198}, +D{l:140,t:0,i:83}, +D{l:133,t:11,i:556}, +D{l:133,t:10,i:889}, +D{l:4,t:10,i:160}, +D{l:5,t:10,i:330}, +D{l:7,t:10,i:1434}, +D{l:136,t:10,i:174}, +D{l:5,t:0,i:276}, +D{l:6,t:0,i:55}, +D{l:7,t:0,i:1369}, +D{l:138,t:0,i:864}, +D{l:8,t:11,i:16}, +D{l:140,t:11,i:568}, +D{l:6,t:0,i:1752}, +D{l:136,t:0,i:726}, +D{l:135,t:0,i:1066}, +D{l:133,t:0,i:764}, +D{l:6,t:11,i:186}, +D{l:137,t:11,i:426}, +D{l:11,t:0,i:683}, +D{l:139,t:11,i:683}, +D{l:6,t:0,i:309}, +D{l:7,t:0,i:331}, +D{l:138,t:0,i:550}, +D{l:133,t:10,i:374}, +D{l:6,t:0,i:1212}, +D{l:6,t:0,i:1852}, +D{l:7,t:0,i:1062}, +D{l:8,t:0,i:874}, +D{l:8,t:0,i:882}, +D{l:138,t:0,i:936}, +D{l:132,t:11,i:585}, +D{l:134,t:0,i:1364}, +D{l:7,t:0,i:986}, +D{l:133,t:10,i:731}, +D{l:6,t:0,i:723}, +D{l:6,t:0,i:1408}, +D{l:138,t:0,i:381}, +D{l:135,t:0,i:1573}, +D{l:134,t:0,i:1025}, +D{l:4,t:10,i:626}, +D{l:5,t:10,i:642}, +D{l:6,t:10,i:425}, +D{l:10,t:10,i:202}, +D{l:139,t:10,i:141}, +D{l:4,t:11,i:93}, +D{l:5,t:11,i:252}, +D{l:6,t:11,i:229}, +D{l:7,t:11,i:291}, +D{l:9,t:11,i:550}, +D{l:139,t:11,i:644}, +D{l:137,t:11,i:749}, +D{l:137,t:11,i:162}, +D{l:132,t:11,i:381}, +D{l:135,t:0,i:1559}, +D{l:6,t:0,i:194}, +D{l:7,t:0,i:133}, +D{l:10,t:0,i:493}, +D{l:10,t:0,i:570}, +D{l:139,t:0,i:664}, +D{l:5,t:0,i:24}, +D{l:5,t:0,i:569}, +D{l:6,t:0,i:3}, +D{l:6,t:0,i:119}, +D{l:6,t:0,i:143}, +D{l:6,t:0,i:440}, +D{l:7,t:0,i:295}, +D{l:7,t:0,i:599}, +D{l:7,t:0,i:1686}, +D{l:7,t:0,i:1854}, +D{l:8,t:0,i:424}, +D{l:9,t:0,i:43}, +D{l:9,t:0,i:584}, +D{l:9,t:0,i:760}, +D{l:10,t:0,i:148}, +D{l:10,t:0,i:328}, +D{l:11,t:0,i:159}, +D{l:11,t:0,i:253}, +D{l:11,t:0,i:506}, +D{l:12,t:0,i:487}, +D{l:140,t:0,i:531}, +D{l:6,t:0,i:661}, +D{l:134,t:0,i:1517}, +D{l:136,t:10,i:835}, +D{l:151,t:10,i:17}, +D{l:5,t:0,i:14}, +D{l:5,t:0,i:892}, +D{l:6,t:0,i:283}, +D{l:7,t:0,i:234}, +D{l:136,t:0,i:537}, +D{l:139,t:0,i:541}, +D{l:4,t:0,i:126}, +D{l:8,t:0,i:635}, +D{l:147,t:0,i:34}, +D{l:4,t:0,i:316}, +D{l:4,t:0,i:495}, +D{l:135,t:0,i:1561}, +D{l:4,t:11,i:187}, +D{l:5,t:11,i:184}, +D{l:5,t:11,i:690}, +D{l:7,t:11,i:1869}, +D{l:138,t:11,i:756}, +D{l:139,t:11,i:783}, +D{l:4,t:0,i:998}, +D{l:137,t:0,i:861}, +D{l:136,t:0,i:1009}, +D{l:139,t:11,i:292}, +D{l:5,t:11,i:21}, +D{l:6,t:11,i:77}, +D{l:6,t:11,i:157}, +D{l:7,t:11,i:974}, +D{l:7,t:11,i:1301}, +D{l:7,t:11,i:1339}, +D{l:7,t:11,i:1490}, +D{l:7,t:11,i:1873}, +D{l:137,t:11,i:628}, +D{l:7,t:11,i:1283}, +D{l:9,t:11,i:227}, +D{l:9,t:11,i:499}, +D{l:10,t:11,i:341}, +D{l:11,t:11,i:325}, +D{l:11,t:11,i:408}, +D{l:14,t:11,i:180}, +D{l:15,t:11,i:144}, +D{l:18,t:11,i:47}, +D{l:147,t:11,i:49}, +D{l:4,t:0,i:64}, +D{l:5,t:0,i:352}, +D{l:5,t:0,i:720}, +D{l:6,t:0,i:368}, +D{l:139,t:0,i:359}, +D{l:5,t:10,i:384}, +D{l:8,t:10,i:455}, +D{l:140,t:10,i:48}, +D{l:5,t:10,i:264}, +D{l:134,t:10,i:184}, +D{l:7,t:0,i:1577}, +D{l:10,t:0,i:304}, +D{l:10,t:0,i:549}, +D{l:12,t:0,i:365}, +D{l:13,t:0,i:220}, +D{l:13,t:0,i:240}, +D{l:142,t:0,i:33}, +D{l:134,t:0,i:1107}, +D{l:134,t:0,i:929}, +D{l:135,t:0,i:1142}, +D{l:6,t:0,i:175}, +D{l:137,t:0,i:289}, +D{l:5,t:0,i:432}, +D{l:133,t:0,i:913}, +D{l:6,t:0,i:279}, +D{l:7,t:0,i:219}, +D{l:5,t:10,i:633}, +D{l:135,t:10,i:1323}, +D{l:7,t:0,i:785}, +D{l:7,t:10,i:359}, +D{l:8,t:10,i:243}, +D{l:140,t:10,i:175}, +D{l:139,t:0,i:595}, +D{l:132,t:10,i:105}, +D{l:8,t:11,i:398}, +D{l:9,t:11,i:681}, +D{l:139,t:11,i:632}, +D{l:140,t:0,i:80}, +D{l:5,t:0,i:931}, +D{l:134,t:0,i:1698}, +D{l:142,t:11,i:241}, +D{l:134,t:11,i:20}, +D{l:134,t:0,i:1323}, +D{l:11,t:0,i:526}, +D{l:11,t:0,i:939}, +D{l:141,t:0,i:290}, +D{l:5,t:0,i:774}, +D{l:6,t:0,i:780}, +D{l:6,t:0,i:1637}, +D{l:6,t:0,i:1686}, +D{l:6,t:0,i:1751}, +D{l:8,t:0,i:559}, +D{l:141,t:0,i:109}, +D{l:141,t:0,i:127}, +D{l:7,t:0,i:1167}, +D{l:11,t:0,i:934}, +D{l:13,t:0,i:391}, +D{l:17,t:0,i:76}, +D{l:135,t:11,i:709}, +D{l:135,t:0,i:963}, +D{l:6,t:0,i:260}, +D{l:135,t:0,i:1484}, +D{l:134,t:0,i:573}, +D{l:4,t:10,i:758}, +D{l:139,t:11,i:941}, +D{l:135,t:10,i:1649}, +D{l:145,t:11,i:36}, +D{l:4,t:0,i:292}, +D{l:137,t:0,i:580}, +D{l:4,t:0,i:736}, +D{l:5,t:0,i:871}, +D{l:6,t:0,i:1689}, +D{l:135,t:0,i:1944}, +D{l:7,t:11,i:945}, +D{l:11,t:11,i:713}, +D{l:139,t:11,i:744}, +D{l:134,t:0,i:1164}, +D{l:135,t:11,i:937}, +D{l:6,t:0,i:1922}, +D{l:9,t:0,i:982}, +D{l:15,t:0,i:173}, +D{l:15,t:0,i:178}, +D{l:15,t:0,i:200}, +D{l:18,t:0,i:189}, +D{l:18,t:0,i:207}, +D{l:21,t:0,i:47}, +D{l:135,t:11,i:1652}, +D{l:7,t:0,i:1695}, +D{l:139,t:10,i:128}, +D{l:6,t:0,i:63}, +D{l:135,t:0,i:920}, +D{l:133,t:0,i:793}, +D{l:143,t:11,i:134}, +D{l:133,t:10,i:918}, +D{l:5,t:0,i:67}, +D{l:6,t:0,i:62}, +D{l:6,t:0,i:374}, +D{l:135,t:0,i:1391}, +D{l:9,t:0,i:790}, +D{l:12,t:0,i:47}, +D{l:4,t:11,i:579}, +D{l:5,t:11,i:226}, +D{l:5,t:11,i:323}, +D{l:135,t:11,i:960}, +D{l:10,t:11,i:784}, +D{l:141,t:11,i:191}, +D{l:4,t:0,i:391}, +D{l:135,t:0,i:1169}, +D{l:137,t:0,i:443}, +D{l:13,t:11,i:232}, +D{l:146,t:11,i:35}, +D{l:132,t:10,i:340}, +D{l:132,t:0,i:271}, +D{l:137,t:11,i:313}, +D{l:5,t:11,i:973}, +D{l:137,t:11,i:659}, +D{l:134,t:0,i:1140}, +D{l:6,t:11,i:135}, +D{l:135,t:11,i:1176}, +D{l:4,t:0,i:253}, +D{l:5,t:0,i:544}, +D{l:7,t:0,i:300}, +D{l:137,t:0,i:340}, +D{l:7,t:0,i:897}, +D{l:5,t:10,i:985}, +D{l:7,t:10,i:509}, +D{l:145,t:10,i:96}, +D{l:138,t:11,i:735}, +D{l:135,t:10,i:1919}, +D{l:138,t:0,i:890}, +D{l:5,t:0,i:818}, +D{l:134,t:0,i:1122}, +D{l:5,t:0,i:53}, +D{l:5,t:0,i:541}, +D{l:6,t:0,i:94}, +D{l:6,t:0,i:499}, +D{l:7,t:0,i:230}, +D{l:139,t:0,i:321}, +D{l:4,t:0,i:920}, +D{l:5,t:0,i:25}, +D{l:5,t:0,i:790}, +D{l:6,t:0,i:457}, +D{l:7,t:0,i:853}, +D{l:8,t:0,i:788}, +D{l:142,t:11,i:31}, +D{l:132,t:10,i:247}, +D{l:135,t:11,i:314}, +D{l:132,t:0,i:468}, +D{l:7,t:0,i:243}, +D{l:6,t:10,i:337}, +D{l:7,t:10,i:494}, +D{l:8,t:10,i:27}, +D{l:8,t:10,i:599}, +D{l:138,t:10,i:153}, +D{l:4,t:10,i:184}, +D{l:5,t:10,i:390}, +D{l:7,t:10,i:618}, +D{l:7,t:10,i:1456}, +D{l:139,t:10,i:710}, +D{l:134,t:0,i:870}, +D{l:134,t:0,i:1238}, +D{l:134,t:0,i:1765}, +D{l:10,t:0,i:853}, +D{l:10,t:0,i:943}, +D{l:14,t:0,i:437}, +D{l:14,t:0,i:439}, +D{l:14,t:0,i:443}, +D{l:14,t:0,i:446}, +D{l:14,t:0,i:452}, +D{l:14,t:0,i:469}, +D{l:14,t:0,i:471}, +D{l:14,t:0,i:473}, +D{l:16,t:0,i:93}, +D{l:16,t:0,i:102}, +D{l:16,t:0,i:110}, +D{l:148,t:0,i:121}, +D{l:4,t:0,i:605}, +D{l:7,t:0,i:518}, +D{l:7,t:0,i:1282}, +D{l:7,t:0,i:1918}, +D{l:10,t:0,i:180}, +D{l:139,t:0,i:218}, +D{l:133,t:0,i:822}, +D{l:4,t:0,i:634}, +D{l:11,t:0,i:916}, +D{l:142,t:0,i:419}, +D{l:6,t:11,i:281}, +D{l:7,t:11,i:6}, +D{l:8,t:11,i:282}, +D{l:8,t:11,i:480}, +D{l:8,t:11,i:499}, +D{l:9,t:11,i:198}, +D{l:10,t:11,i:143}, +D{l:10,t:11,i:169}, +D{l:10,t:11,i:211}, +D{l:10,t:11,i:417}, +D{l:10,t:11,i:574}, +D{l:11,t:11,i:147}, +D{l:11,t:11,i:395}, +D{l:12,t:11,i:75}, +D{l:12,t:11,i:407}, +D{l:12,t:11,i:608}, +D{l:13,t:11,i:500}, +D{l:142,t:11,i:251}, +D{l:134,t:0,i:898}, +D{l:6,t:0,i:36}, +D{l:7,t:0,i:658}, +D{l:8,t:0,i:454}, +D{l:150,t:11,i:48}, +D{l:133,t:11,i:674}, +D{l:135,t:11,i:1776}, +D{l:4,t:11,i:419}, +D{l:10,t:10,i:227}, +D{l:11,t:10,i:497}, +D{l:11,t:10,i:709}, +D{l:140,t:10,i:415}, +D{l:6,t:10,i:360}, +D{l:7,t:10,i:1664}, +D{l:136,t:10,i:478}, +D{l:137,t:0,i:806}, +D{l:12,t:11,i:508}, +D{l:14,t:11,i:102}, +D{l:14,t:11,i:226}, +D{l:144,t:11,i:57}, +D{l:135,t:11,i:1123}, +D{l:4,t:11,i:138}, +D{l:7,t:11,i:1012}, +D{l:7,t:11,i:1280}, +D{l:137,t:11,i:76}, +D{l:5,t:11,i:29}, +D{l:140,t:11,i:638}, +D{l:136,t:10,i:699}, +D{l:134,t:0,i:1326}, +D{l:132,t:0,i:104}, +D{l:135,t:11,i:735}, +D{l:132,t:10,i:739}, +D{l:134,t:0,i:1331}, +D{l:7,t:0,i:260}, +D{l:135,t:11,i:260}, +D{l:135,t:11,i:1063}, +D{l:7,t:0,i:45}, +D{l:9,t:0,i:542}, +D{l:9,t:0,i:566}, +D{l:10,t:0,i:728}, +D{l:137,t:10,i:869}, +D{l:4,t:10,i:67}, +D{l:5,t:10,i:422}, +D{l:7,t:10,i:1037}, +D{l:7,t:10,i:1289}, +D{l:7,t:10,i:1555}, +D{l:9,t:10,i:741}, +D{l:145,t:10,i:108}, +D{l:139,t:0,i:263}, +D{l:134,t:0,i:1516}, +D{l:14,t:0,i:146}, +D{l:15,t:0,i:42}, +D{l:16,t:0,i:23}, +D{l:17,t:0,i:86}, +D{l:146,t:0,i:17}, +D{l:138,t:0,i:468}, +D{l:136,t:0,i:1005}, +D{l:4,t:11,i:17}, +D{l:5,t:11,i:23}, +D{l:7,t:11,i:995}, +D{l:11,t:11,i:383}, +D{l:11,t:11,i:437}, +D{l:12,t:11,i:460}, +D{l:140,t:11,i:532}, +D{l:7,t:0,i:87}, +D{l:142,t:0,i:288}, +D{l:138,t:10,i:96}, +D{l:135,t:11,i:626}, +D{l:144,t:10,i:26}, +D{l:7,t:0,i:988}, +D{l:7,t:0,i:1939}, +D{l:9,t:0,i:64}, +D{l:9,t:0,i:502}, +D{l:12,t:0,i:22}, +D{l:12,t:0,i:34}, +D{l:13,t:0,i:12}, +D{l:13,t:0,i:234}, +D{l:147,t:0,i:77}, +D{l:13,t:0,i:133}, +D{l:8,t:10,i:203}, +D{l:11,t:10,i:823}, +D{l:11,t:10,i:846}, +D{l:12,t:10,i:482}, +D{l:13,t:10,i:277}, +D{l:13,t:10,i:302}, +D{l:13,t:10,i:464}, +D{l:14,t:10,i:205}, +D{l:142,t:10,i:221}, +D{l:4,t:10,i:449}, +D{l:133,t:10,i:718}, +D{l:135,t:0,i:141}, +D{l:6,t:0,i:1842}, +D{l:136,t:0,i:872}, +D{l:8,t:11,i:70}, +D{l:12,t:11,i:171}, +D{l:141,t:11,i:272}, +D{l:4,t:10,i:355}, +D{l:6,t:10,i:311}, +D{l:9,t:10,i:256}, +D{l:138,t:10,i:404}, +D{l:132,t:0,i:619}, +D{l:137,t:0,i:261}, +D{l:10,t:11,i:233}, +D{l:10,t:10,i:758}, +D{l:139,t:11,i:76}, +D{l:5,t:0,i:246}, +D{l:8,t:0,i:189}, +D{l:9,t:0,i:355}, +D{l:9,t:0,i:512}, +D{l:10,t:0,i:124}, +D{l:10,t:0,i:453}, +D{l:11,t:0,i:143}, +D{l:11,t:0,i:416}, +D{l:11,t:0,i:859}, +D{l:141,t:0,i:341}, +D{l:134,t:11,i:442}, +D{l:133,t:10,i:827}, +D{l:5,t:10,i:64}, +D{l:140,t:10,i:581}, +D{l:4,t:10,i:442}, +D{l:7,t:10,i:1047}, +D{l:7,t:10,i:1352}, +D{l:135,t:10,i:1643}, +D{l:134,t:11,i:1709}, +D{l:5,t:0,i:678}, +D{l:6,t:0,i:305}, +D{l:7,t:0,i:775}, +D{l:7,t:0,i:1065}, +D{l:133,t:10,i:977}, +D{l:11,t:11,i:69}, +D{l:12,t:11,i:105}, +D{l:12,t:11,i:117}, +D{l:13,t:11,i:213}, +D{l:14,t:11,i:13}, +D{l:14,t:11,i:62}, +D{l:14,t:11,i:177}, +D{l:14,t:11,i:421}, +D{l:15,t:11,i:19}, +D{l:146,t:11,i:141}, +D{l:137,t:11,i:309}, +D{l:5,t:0,i:35}, +D{l:7,t:0,i:862}, +D{l:7,t:0,i:1886}, +D{l:138,t:0,i:179}, +D{l:136,t:0,i:285}, +D{l:132,t:0,i:517}, +D{l:7,t:11,i:976}, +D{l:9,t:11,i:146}, +D{l:10,t:11,i:206}, +D{l:10,t:11,i:596}, +D{l:13,t:11,i:218}, +D{l:142,t:11,i:153}, +D{l:132,t:10,i:254}, +D{l:6,t:0,i:214}, +D{l:12,t:0,i:540}, +D{l:4,t:10,i:275}, +D{l:7,t:10,i:1219}, +D{l:140,t:10,i:376}, +D{l:8,t:0,i:667}, +D{l:11,t:0,i:403}, +D{l:146,t:0,i:83}, +D{l:12,t:0,i:74}, +D{l:10,t:11,i:648}, +D{l:11,t:11,i:671}, +D{l:143,t:11,i:46}, +D{l:135,t:0,i:125}, +D{l:134,t:10,i:1753}, +D{l:133,t:0,i:761}, +D{l:6,t:0,i:912}, +D{l:4,t:11,i:518}, +D{l:6,t:10,i:369}, +D{l:6,t:10,i:502}, +D{l:7,t:10,i:1036}, +D{l:7,t:11,i:1136}, +D{l:8,t:10,i:348}, +D{l:9,t:10,i:452}, +D{l:10,t:10,i:26}, +D{l:11,t:10,i:224}, +D{l:11,t:10,i:387}, +D{l:11,t:10,i:772}, +D{l:12,t:10,i:95}, +D{l:12,t:10,i:629}, +D{l:13,t:10,i:195}, +D{l:13,t:10,i:207}, +D{l:13,t:10,i:241}, +D{l:14,t:10,i:260}, +D{l:14,t:10,i:270}, +D{l:143,t:10,i:140}, +D{l:10,t:0,i:131}, +D{l:140,t:0,i:72}, +D{l:132,t:10,i:269}, +D{l:5,t:10,i:480}, +D{l:7,t:10,i:532}, +D{l:7,t:10,i:1197}, +D{l:7,t:10,i:1358}, +D{l:8,t:10,i:291}, +D{l:11,t:10,i:349}, +D{l:142,t:10,i:396}, +D{l:8,t:11,i:689}, +D{l:137,t:11,i:863}, +D{l:8,t:0,i:333}, +D{l:138,t:0,i:182}, +D{l:4,t:11,i:18}, +D{l:7,t:11,i:145}, +D{l:7,t:11,i:444}, +D{l:7,t:11,i:1278}, +D{l:8,t:11,i:49}, +D{l:8,t:11,i:400}, +D{l:9,t:11,i:71}, +D{l:9,t:11,i:250}, +D{l:10,t:11,i:459}, +D{l:12,t:11,i:160}, +D{l:144,t:11,i:24}, +D{l:14,t:11,i:35}, +D{l:142,t:11,i:191}, +D{l:135,t:11,i:1864}, +D{l:135,t:0,i:1338}, +D{l:148,t:10,i:15}, +D{l:14,t:0,i:94}, +D{l:15,t:0,i:65}, +D{l:16,t:0,i:4}, +D{l:16,t:0,i:77}, +D{l:16,t:0,i:80}, +D{l:145,t:0,i:5}, +D{l:12,t:11,i:82}, +D{l:143,t:11,i:36}, +D{l:133,t:11,i:1010}, +D{l:133,t:0,i:449}, +D{l:133,t:0,i:646}, +D{l:7,t:0,i:86}, +D{l:8,t:0,i:103}, +D{l:135,t:10,i:657}, +D{l:7,t:0,i:2028}, +D{l:138,t:0,i:641}, +D{l:136,t:10,i:533}, +D{l:134,t:0,i:1}, +D{l:139,t:11,i:970}, +D{l:5,t:11,i:87}, +D{l:7,t:11,i:313}, +D{l:7,t:11,i:1103}, +D{l:10,t:11,i:112}, +D{l:10,t:11,i:582}, +D{l:11,t:11,i:389}, +D{l:11,t:11,i:813}, +D{l:12,t:11,i:385}, +D{l:13,t:11,i:286}, +D{l:14,t:11,i:124}, +D{l:146,t:11,i:108}, +D{l:6,t:0,i:869}, +D{l:132,t:11,i:267}, +D{l:6,t:0,i:277}, +D{l:7,t:0,i:1274}, +D{l:7,t:0,i:1386}, +D{l:146,t:0,i:87}, +D{l:6,t:0,i:187}, +D{l:7,t:0,i:39}, +D{l:7,t:0,i:1203}, +D{l:8,t:0,i:380}, +D{l:14,t:0,i:117}, +D{l:149,t:0,i:28}, +D{l:4,t:10,i:211}, +D{l:4,t:10,i:332}, +D{l:5,t:10,i:335}, +D{l:6,t:10,i:238}, +D{l:7,t:10,i:269}, +D{l:7,t:10,i:811}, +D{l:7,t:10,i:1797}, +D{l:8,t:10,i:836}, +D{l:9,t:10,i:507}, +D{l:141,t:10,i:242}, +D{l:4,t:0,i:785}, +D{l:5,t:0,i:368}, +D{l:6,t:0,i:297}, +D{l:7,t:0,i:793}, +D{l:139,t:0,i:938}, +D{l:7,t:0,i:464}, +D{l:8,t:0,i:558}, +D{l:11,t:0,i:105}, +D{l:12,t:0,i:231}, +D{l:14,t:0,i:386}, +D{l:15,t:0,i:102}, +D{l:148,t:0,i:75}, +D{l:133,t:10,i:1009}, +D{l:8,t:0,i:877}, +D{l:140,t:0,i:731}, +D{l:139,t:11,i:289}, +D{l:10,t:11,i:249}, +D{l:139,t:11,i:209}, +D{l:132,t:11,i:561}, +D{l:134,t:0,i:1608}, +D{l:132,t:11,i:760}, +D{l:134,t:0,i:1429}, +D{l:9,t:11,i:154}, +D{l:140,t:11,i:485}, +D{l:5,t:10,i:228}, +D{l:6,t:10,i:203}, +D{l:7,t:10,i:156}, +D{l:8,t:10,i:347}, +D{l:137,t:10,i:265}, +D{l:7,t:0,i:1010}, +D{l:11,t:0,i:733}, +D{l:11,t:0,i:759}, +D{l:13,t:0,i:34}, +D{l:14,t:0,i:427}, +D{l:146,t:0,i:45}, +D{l:7,t:10,i:1131}, +D{l:135,t:10,i:1468}, +D{l:136,t:11,i:255}, +D{l:7,t:0,i:1656}, +D{l:9,t:0,i:369}, +D{l:10,t:0,i:338}, +D{l:10,t:0,i:490}, +D{l:11,t:0,i:154}, +D{l:11,t:0,i:545}, +D{l:11,t:0,i:775}, +D{l:13,t:0,i:77}, +D{l:141,t:0,i:274}, +D{l:133,t:11,i:621}, +D{l:134,t:0,i:1038}, +D{l:4,t:11,i:368}, +D{l:135,t:11,i:641}, +D{l:6,t:0,i:2010}, +D{l:8,t:0,i:979}, +D{l:8,t:0,i:985}, +D{l:10,t:0,i:951}, +D{l:138,t:0,i:1011}, +D{l:134,t:0,i:1005}, +D{l:19,t:0,i:121}, +D{l:5,t:10,i:291}, +D{l:5,t:10,i:318}, +D{l:7,t:10,i:765}, +D{l:9,t:10,i:389}, +D{l:140,t:10,i:548}, +D{l:5,t:0,i:20}, +D{l:6,t:0,i:298}, +D{l:7,t:0,i:659}, +D{l:137,t:0,i:219}, +D{l:7,t:0,i:1440}, +D{l:11,t:0,i:854}, +D{l:11,t:0,i:872}, +D{l:11,t:0,i:921}, +D{l:12,t:0,i:551}, +D{l:13,t:0,i:472}, +D{l:142,t:0,i:367}, +D{l:5,t:0,i:490}, +D{l:6,t:0,i:615}, +D{l:6,t:0,i:620}, +D{l:135,t:0,i:683}, +D{l:6,t:0,i:1070}, +D{l:134,t:0,i:1597}, +D{l:139,t:0,i:522}, +D{l:132,t:0,i:439}, +D{l:136,t:0,i:669}, +D{l:6,t:0,i:766}, +D{l:6,t:0,i:1143}, +D{l:6,t:0,i:1245}, +D{l:10,t:10,i:525}, +D{l:139,t:10,i:82}, +D{l:9,t:11,i:92}, +D{l:147,t:11,i:91}, +D{l:6,t:0,i:668}, +D{l:134,t:0,i:1218}, +D{l:6,t:11,i:525}, +D{l:9,t:11,i:876}, +D{l:140,t:11,i:284}, +D{l:132,t:0,i:233}, +D{l:136,t:0,i:547}, +D{l:132,t:10,i:422}, +D{l:5,t:10,i:355}, +D{l:145,t:10,i:0}, +D{l:6,t:11,i:300}, +D{l:135,t:11,i:1515}, +D{l:4,t:0,i:482}, +D{l:137,t:10,i:905}, +D{l:4,t:0,i:886}, +D{l:7,t:0,i:346}, +D{l:133,t:11,i:594}, +D{l:133,t:10,i:865}, +D{l:5,t:10,i:914}, +D{l:134,t:10,i:1625}, +D{l:135,t:0,i:334}, +D{l:5,t:0,i:795}, +D{l:6,t:0,i:1741}, +D{l:133,t:10,i:234}, +D{l:135,t:10,i:1383}, +D{l:6,t:11,i:1641}, +D{l:136,t:11,i:820}, +D{l:135,t:0,i:371}, +D{l:7,t:11,i:1313}, +D{l:138,t:11,i:660}, +D{l:135,t:10,i:1312}, +D{l:135,t:0,i:622}, +D{l:7,t:0,i:625}, +D{l:135,t:0,i:1750}, +D{l:135,t:0,i:339}, +D{l:4,t:0,i:203}, +D{l:135,t:0,i:1936}, +D{l:15,t:0,i:29}, +D{l:16,t:0,i:38}, +D{l:15,t:11,i:29}, +D{l:144,t:11,i:38}, +D{l:5,t:0,i:338}, +D{l:135,t:0,i:1256}, +D{l:135,t:10,i:1493}, +D{l:10,t:0,i:130}, +D{l:6,t:10,i:421}, +D{l:7,t:10,i:61}, +D{l:7,t:10,i:1540}, +D{l:138,t:10,i:501}, +D{l:6,t:11,i:389}, +D{l:7,t:11,i:149}, +D{l:9,t:11,i:142}, +D{l:138,t:11,i:94}, +D{l:137,t:10,i:341}, +D{l:11,t:0,i:678}, +D{l:12,t:0,i:307}, +D{l:142,t:10,i:98}, +D{l:6,t:11,i:8}, +D{l:7,t:11,i:1881}, +D{l:136,t:11,i:91}, +D{l:135,t:0,i:2044}, +D{l:6,t:0,i:770}, +D{l:6,t:0,i:802}, +D{l:6,t:0,i:812}, +D{l:7,t:0,i:311}, +D{l:9,t:0,i:308}, +D{l:12,t:0,i:255}, +D{l:6,t:10,i:102}, +D{l:7,t:10,i:72}, +D{l:15,t:10,i:142}, +D{l:147,t:10,i:67}, +D{l:151,t:10,i:30}, +D{l:135,t:10,i:823}, +D{l:135,t:0,i:1266}, +D{l:135,t:11,i:1746}, +D{l:135,t:10,i:1870}, +D{l:4,t:0,i:400}, +D{l:5,t:0,i:267}, +D{l:135,t:0,i:232}, +D{l:7,t:11,i:24}, +D{l:11,t:11,i:542}, +D{l:139,t:11,i:852}, +D{l:135,t:11,i:1739}, +D{l:4,t:11,i:503}, +D{l:135,t:11,i:1661}, +D{l:5,t:11,i:130}, +D{l:7,t:11,i:1314}, +D{l:9,t:11,i:610}, +D{l:10,t:11,i:718}, +D{l:11,t:11,i:601}, +D{l:11,t:11,i:819}, +D{l:11,t:11,i:946}, +D{l:140,t:11,i:536}, +D{l:10,t:11,i:149}, +D{l:11,t:11,i:280}, +D{l:142,t:11,i:336}, +D{l:7,t:0,i:739}, +D{l:11,t:0,i:690}, +D{l:7,t:11,i:1946}, +D{l:8,t:10,i:48}, +D{l:8,t:10,i:88}, +D{l:8,t:10,i:582}, +D{l:8,t:10,i:681}, +D{l:9,t:10,i:373}, +D{l:9,t:10,i:864}, +D{l:11,t:10,i:157}, +D{l:11,t:10,i:843}, +D{l:148,t:10,i:27}, +D{l:134,t:0,i:990}, +D{l:4,t:10,i:88}, +D{l:5,t:10,i:137}, +D{l:5,t:10,i:174}, +D{l:5,t:10,i:777}, +D{l:6,t:10,i:1664}, +D{l:6,t:10,i:1725}, +D{l:7,t:10,i:77}, +D{l:7,t:10,i:426}, +D{l:7,t:10,i:1317}, +D{l:7,t:10,i:1355}, +D{l:8,t:10,i:126}, +D{l:8,t:10,i:563}, +D{l:9,t:10,i:523}, +D{l:9,t:10,i:750}, +D{l:10,t:10,i:310}, +D{l:10,t:10,i:836}, +D{l:11,t:10,i:42}, +D{l:11,t:10,i:318}, +D{l:11,t:10,i:731}, +D{l:12,t:10,i:68}, +D{l:12,t:10,i:92}, +D{l:12,t:10,i:507}, +D{l:12,t:10,i:692}, +D{l:13,t:10,i:81}, +D{l:13,t:10,i:238}, +D{l:13,t:10,i:374}, +D{l:14,t:10,i:436}, +D{l:18,t:10,i:138}, +D{l:19,t:10,i:78}, +D{l:19,t:10,i:111}, +D{l:20,t:10,i:55}, +D{l:20,t:10,i:77}, +D{l:148,t:10,i:92}, +D{l:141,t:10,i:418}, +D{l:7,t:0,i:1831}, +D{l:132,t:10,i:938}, +D{l:6,t:0,i:776}, +D{l:134,t:0,i:915}, +D{l:138,t:10,i:351}, +D{l:5,t:11,i:348}, +D{l:6,t:11,i:522}, +D{l:6,t:10,i:1668}, +D{l:7,t:10,i:1499}, +D{l:8,t:10,i:117}, +D{l:9,t:10,i:314}, +D{l:138,t:10,i:174}, +D{l:135,t:10,i:707}, +D{l:132,t:0,i:613}, +D{l:133,t:10,i:403}, +D{l:132,t:11,i:392}, +D{l:5,t:11,i:433}, +D{l:9,t:11,i:633}, +D{l:139,t:11,i:629}, +D{l:133,t:0,i:763}, +D{l:132,t:0,i:878}, +D{l:132,t:0,i:977}, +D{l:132,t:0,i:100}, +D{l:6,t:0,i:463}, +D{l:4,t:10,i:44}, +D{l:5,t:10,i:311}, +D{l:7,t:10,i:639}, +D{l:7,t:10,i:762}, +D{l:7,t:10,i:1827}, +D{l:9,t:10,i:8}, +D{l:9,t:10,i:462}, +D{l:148,t:10,i:83}, +D{l:134,t:11,i:234}, +D{l:4,t:10,i:346}, +D{l:7,t:10,i:115}, +D{l:9,t:10,i:180}, +D{l:9,t:10,i:456}, +D{l:138,t:10,i:363}, +D{l:5,t:0,i:362}, +D{l:5,t:0,i:443}, +D{l:6,t:0,i:318}, +D{l:7,t:0,i:1019}, +D{l:139,t:0,i:623}, +D{l:5,t:0,i:463}, +D{l:8,t:0,i:296}, +D{l:7,t:11,i:140}, +D{l:7,t:11,i:1950}, +D{l:8,t:11,i:680}, +D{l:11,t:11,i:817}, +D{l:147,t:11,i:88}, +D{l:7,t:11,i:1222}, +D{l:138,t:11,i:386}, +D{l:142,t:0,i:137}, +D{l:132,t:0,i:454}, +D{l:7,t:0,i:1914}, +D{l:6,t:11,i:5}, +D{l:7,t:10,i:1051}, +D{l:9,t:10,i:545}, +D{l:11,t:11,i:249}, +D{l:12,t:11,i:313}, +D{l:16,t:11,i:66}, +D{l:145,t:11,i:26}, +D{l:135,t:0,i:1527}, +D{l:145,t:0,i:58}, +D{l:148,t:11,i:59}, +D{l:5,t:0,i:48}, +D{l:5,t:0,i:404}, +D{l:6,t:0,i:557}, +D{l:7,t:0,i:458}, +D{l:8,t:0,i:597}, +D{l:10,t:0,i:455}, +D{l:10,t:0,i:606}, +D{l:11,t:0,i:49}, +D{l:11,t:0,i:548}, +D{l:12,t:0,i:476}, +D{l:13,t:0,i:18}, +D{l:141,t:0,i:450}, +D{l:5,t:11,i:963}, +D{l:134,t:11,i:1773}, +D{l:133,t:0,i:729}, +D{l:138,t:11,i:586}, +D{l:5,t:0,i:442}, +D{l:135,t:0,i:1984}, +D{l:134,t:0,i:449}, +D{l:144,t:0,i:40}, +D{l:4,t:0,i:853}, +D{l:7,t:11,i:180}, +D{l:8,t:11,i:509}, +D{l:136,t:11,i:792}, +D{l:6,t:10,i:185}, +D{l:7,t:10,i:1899}, +D{l:9,t:10,i:875}, +D{l:139,t:10,i:673}, +D{l:134,t:11,i:524}, +D{l:12,t:0,i:227}, +D{l:4,t:10,i:327}, +D{l:5,t:10,i:478}, +D{l:7,t:10,i:1332}, +D{l:136,t:10,i:753}, +D{l:6,t:0,i:1491}, +D{l:5,t:10,i:1020}, +D{l:133,t:10,i:1022}, +D{l:4,t:10,i:103}, +D{l:133,t:10,i:401}, +D{l:132,t:11,i:931}, +D{l:4,t:10,i:499}, +D{l:135,t:10,i:1421}, +D{l:5,t:0,i:55}, +D{l:7,t:0,i:376}, +D{l:140,t:0,i:161}, +D{l:133,t:0,i:450}, +D{l:6,t:0,i:1174}, +D{l:134,t:0,i:1562}, +D{l:10,t:0,i:62}, +D{l:13,t:0,i:400}, +D{l:135,t:11,i:1837}, +D{l:140,t:0,i:207}, +D{l:135,t:0,i:869}, +D{l:4,t:11,i:773}, +D{l:5,t:11,i:618}, +D{l:137,t:11,i:756}, +D{l:132,t:10,i:96}, +D{l:4,t:0,i:213}, +D{l:7,t:0,i:223}, +D{l:8,t:0,i:80}, +D{l:135,t:10,i:968}, +D{l:4,t:11,i:90}, +D{l:5,t:11,i:337}, +D{l:5,t:11,i:545}, +D{l:7,t:11,i:754}, +D{l:9,t:11,i:186}, +D{l:10,t:11,i:72}, +D{l:10,t:11,i:782}, +D{l:11,t:11,i:513}, +D{l:11,t:11,i:577}, +D{l:11,t:11,i:610}, +D{l:11,t:11,i:889}, +D{l:11,t:11,i:961}, +D{l:12,t:11,i:354}, +D{l:12,t:11,i:362}, +D{l:12,t:11,i:461}, +D{l:12,t:11,i:595}, +D{l:13,t:11,i:79}, +D{l:143,t:11,i:121}, +D{l:7,t:0,i:381}, +D{l:7,t:0,i:806}, +D{l:7,t:0,i:820}, +D{l:8,t:0,i:354}, +D{l:8,t:0,i:437}, +D{l:8,t:0,i:787}, +D{l:9,t:0,i:657}, +D{l:10,t:0,i:58}, +D{l:10,t:0,i:339}, +D{l:10,t:0,i:749}, +D{l:11,t:0,i:914}, +D{l:12,t:0,i:162}, +D{l:13,t:0,i:75}, +D{l:14,t:0,i:106}, +D{l:14,t:0,i:198}, +D{l:14,t:0,i:320}, +D{l:14,t:0,i:413}, +D{l:146,t:0,i:43}, +D{l:136,t:0,i:747}, +D{l:136,t:0,i:954}, +D{l:134,t:0,i:1073}, +D{l:135,t:0,i:556}, +D{l:7,t:11,i:151}, +D{l:9,t:11,i:329}, +D{l:139,t:11,i:254}, +D{l:5,t:0,i:692}, +D{l:134,t:0,i:1395}, +D{l:6,t:10,i:563}, +D{l:137,t:10,i:224}, +D{l:134,t:0,i:191}, +D{l:132,t:0,i:804}, +D{l:9,t:11,i:187}, +D{l:10,t:11,i:36}, +D{l:17,t:11,i:44}, +D{l:146,t:11,i:64}, +D{l:7,t:11,i:165}, +D{l:7,t:11,i:919}, +D{l:136,t:11,i:517}, +D{l:4,t:11,i:506}, +D{l:5,t:11,i:295}, +D{l:7,t:11,i:1680}, +D{l:15,t:11,i:14}, +D{l:144,t:11,i:5}, +D{l:4,t:0,i:706}, +D{l:6,t:0,i:162}, +D{l:7,t:0,i:1960}, +D{l:136,t:0,i:831}, +D{l:135,t:11,i:1376}, +D{l:7,t:11,i:987}, +D{l:9,t:11,i:688}, +D{l:10,t:11,i:522}, +D{l:11,t:11,i:788}, +D{l:140,t:11,i:566}, +D{l:150,t:0,i:35}, +D{l:138,t:0,i:426}, +D{l:135,t:0,i:1235}, +D{l:135,t:11,i:1741}, +D{l:7,t:11,i:389}, +D{l:7,t:11,i:700}, +D{l:7,t:11,i:940}, +D{l:8,t:11,i:514}, +D{l:9,t:11,i:116}, +D{l:9,t:11,i:535}, +D{l:10,t:11,i:118}, +D{l:11,t:11,i:107}, +D{l:11,t:11,i:148}, +D{l:11,t:11,i:922}, +D{l:12,t:11,i:254}, +D{l:12,t:11,i:421}, +D{l:142,t:11,i:238}, +D{l:134,t:0,i:1234}, +D{l:132,t:11,i:743}, +D{l:4,t:10,i:910}, +D{l:5,t:10,i:832}, +D{l:135,t:11,i:1335}, +D{l:141,t:0,i:96}, +D{l:135,t:11,i:185}, +D{l:146,t:0,i:149}, +D{l:4,t:0,i:204}, +D{l:137,t:0,i:902}, +D{l:4,t:11,i:784}, +D{l:133,t:11,i:745}, +D{l:136,t:0,i:833}, +D{l:136,t:0,i:949}, +D{l:7,t:0,i:366}, +D{l:9,t:0,i:287}, +D{l:12,t:0,i:199}, +D{l:12,t:0,i:556}, +D{l:12,t:0,i:577}, +D{l:5,t:11,i:81}, +D{l:7,t:11,i:146}, +D{l:7,t:11,i:1342}, +D{l:7,t:11,i:1446}, +D{l:8,t:11,i:53}, +D{l:8,t:11,i:561}, +D{l:8,t:11,i:694}, +D{l:8,t:11,i:754}, +D{l:9,t:11,i:97}, +D{l:9,t:11,i:115}, +D{l:9,t:11,i:894}, +D{l:10,t:11,i:462}, +D{l:10,t:11,i:813}, +D{l:11,t:11,i:230}, +D{l:11,t:11,i:657}, +D{l:11,t:11,i:699}, +D{l:11,t:11,i:748}, +D{l:12,t:11,i:119}, +D{l:12,t:11,i:200}, +D{l:12,t:11,i:283}, +D{l:14,t:11,i:273}, +D{l:145,t:11,i:15}, +D{l:5,t:11,i:408}, +D{l:137,t:11,i:747}, +D{l:9,t:11,i:498}, +D{l:140,t:11,i:181}, +D{l:6,t:0,i:2020}, +D{l:136,t:0,i:992}, +D{l:5,t:0,i:356}, +D{l:135,t:0,i:224}, +D{l:134,t:0,i:784}, +D{l:7,t:0,i:630}, +D{l:9,t:0,i:567}, +D{l:11,t:0,i:150}, +D{l:11,t:0,i:444}, +D{l:13,t:0,i:119}, +D{l:8,t:10,i:528}, +D{l:137,t:10,i:348}, +D{l:134,t:0,i:539}, +D{l:4,t:10,i:20}, +D{l:133,t:10,i:616}, +D{l:142,t:0,i:27}, +D{l:7,t:11,i:30}, +D{l:8,t:11,i:86}, +D{l:8,t:11,i:315}, +D{l:8,t:11,i:700}, +D{l:9,t:11,i:576}, +D{l:9,t:11,i:858}, +D{l:11,t:11,i:310}, +D{l:11,t:11,i:888}, +D{l:11,t:11,i:904}, +D{l:12,t:11,i:361}, +D{l:141,t:11,i:248}, +D{l:138,t:11,i:839}, +D{l:134,t:0,i:755}, +D{l:134,t:0,i:1063}, +D{l:7,t:10,i:1091}, +D{l:135,t:10,i:1765}, +D{l:134,t:11,i:428}, +D{l:7,t:11,i:524}, +D{l:8,t:11,i:169}, +D{l:8,t:11,i:234}, +D{l:9,t:11,i:480}, +D{l:138,t:11,i:646}, +D{l:139,t:0,i:814}, +D{l:7,t:11,i:1462}, +D{l:139,t:11,i:659}, +D{l:4,t:10,i:26}, +D{l:5,t:10,i:429}, +D{l:6,t:10,i:245}, +D{l:7,t:10,i:704}, +D{l:7,t:10,i:1379}, +D{l:135,t:10,i:1474}, +D{l:7,t:11,i:1205}, +D{l:138,t:11,i:637}, +D{l:139,t:11,i:803}, +D{l:132,t:10,i:621}, +D{l:136,t:0,i:987}, +D{l:4,t:11,i:266}, +D{l:8,t:11,i:4}, +D{l:9,t:11,i:39}, +D{l:10,t:11,i:166}, +D{l:11,t:11,i:918}, +D{l:12,t:11,i:635}, +D{l:20,t:11,i:10}, +D{l:22,t:11,i:27}, +D{l:150,t:11,i:43}, +D{l:4,t:0,i:235}, +D{l:135,t:0,i:255}, +D{l:4,t:0,i:194}, +D{l:5,t:0,i:584}, +D{l:6,t:0,i:384}, +D{l:7,t:0,i:583}, +D{l:10,t:0,i:761}, +D{l:11,t:0,i:760}, +D{l:139,t:0,i:851}, +D{l:133,t:10,i:542}, +D{l:134,t:0,i:1086}, +D{l:133,t:10,i:868}, +D{l:8,t:0,i:1016}, +D{l:136,t:0,i:1018}, +D{l:7,t:0,i:1396}, +D{l:7,t:11,i:1396}, +D{l:136,t:10,i:433}, +D{l:135,t:10,i:1495}, +D{l:138,t:10,i:215}, +D{l:141,t:10,i:124}, +D{l:7,t:11,i:157}, +D{l:8,t:11,i:279}, +D{l:9,t:11,i:759}, +D{l:16,t:11,i:31}, +D{l:16,t:11,i:39}, +D{l:16,t:11,i:75}, +D{l:18,t:11,i:24}, +D{l:20,t:11,i:42}, +D{l:152,t:11,i:1}, +D{l:5,t:0,i:562}, +D{l:134,t:11,i:604}, +D{l:134,t:0,i:913}, +D{l:5,t:0,i:191}, +D{l:137,t:0,i:271}, +D{l:4,t:0,i:470}, +D{l:6,t:0,i:153}, +D{l:7,t:0,i:1503}, +D{l:7,t:0,i:1923}, +D{l:10,t:0,i:701}, +D{l:11,t:0,i:132}, +D{l:11,t:0,i:227}, +D{l:11,t:0,i:320}, +D{l:11,t:0,i:436}, +D{l:11,t:0,i:525}, +D{l:11,t:0,i:855}, +D{l:11,t:0,i:873}, +D{l:12,t:0,i:41}, +D{l:12,t:0,i:286}, +D{l:13,t:0,i:103}, +D{l:13,t:0,i:284}, +D{l:14,t:0,i:255}, +D{l:14,t:0,i:262}, +D{l:15,t:0,i:117}, +D{l:143,t:0,i:127}, +D{l:7,t:0,i:475}, +D{l:12,t:0,i:45}, +D{l:147,t:10,i:112}, +D{l:132,t:11,i:567}, +D{l:137,t:11,i:859}, +D{l:6,t:0,i:713}, +D{l:6,t:0,i:969}, +D{l:6,t:0,i:1290}, +D{l:134,t:0,i:1551}, +D{l:133,t:0,i:327}, +D{l:6,t:0,i:552}, +D{l:6,t:0,i:1292}, +D{l:7,t:0,i:1754}, +D{l:137,t:0,i:604}, +D{l:4,t:0,i:223}, +D{l:6,t:0,i:359}, +D{l:11,t:0,i:3}, +D{l:13,t:0,i:108}, +D{l:14,t:0,i:89}, +D{l:16,t:0,i:22}, +D{l:5,t:11,i:762}, +D{l:7,t:11,i:1880}, +D{l:9,t:11,i:680}, +D{l:139,t:11,i:798}, +D{l:5,t:0,i:80}, +D{l:6,t:0,i:405}, +D{l:7,t:0,i:403}, +D{l:7,t:0,i:1502}, +D{l:8,t:0,i:456}, +D{l:9,t:0,i:487}, +D{l:9,t:0,i:853}, +D{l:9,t:0,i:889}, +D{l:10,t:0,i:309}, +D{l:11,t:0,i:721}, +D{l:11,t:0,i:994}, +D{l:12,t:0,i:430}, +D{l:141,t:0,i:165}, +D{l:133,t:11,i:298}, +D{l:132,t:10,i:647}, +D{l:134,t:0,i:2016}, +D{l:18,t:10,i:10}, +D{l:146,t:11,i:10}, +D{l:4,t:0,i:453}, +D{l:5,t:0,i:887}, +D{l:6,t:0,i:535}, +D{l:8,t:0,i:6}, +D{l:8,t:0,i:543}, +D{l:136,t:0,i:826}, +D{l:136,t:0,i:975}, +D{l:10,t:0,i:961}, +D{l:138,t:0,i:962}, +D{l:138,t:10,i:220}, +D{l:6,t:0,i:1891}, +D{l:6,t:0,i:1893}, +D{l:9,t:0,i:916}, +D{l:9,t:0,i:965}, +D{l:9,t:0,i:972}, +D{l:12,t:0,i:801}, +D{l:12,t:0,i:859}, +D{l:12,t:0,i:883}, +D{l:15,t:0,i:226}, +D{l:149,t:0,i:51}, +D{l:132,t:10,i:109}, +D{l:135,t:11,i:267}, +D{l:7,t:11,i:92}, +D{l:7,t:11,i:182}, +D{l:8,t:11,i:453}, +D{l:9,t:11,i:204}, +D{l:11,t:11,i:950}, +D{l:12,t:11,i:94}, +D{l:12,t:11,i:644}, +D{l:16,t:11,i:20}, +D{l:16,t:11,i:70}, +D{l:16,t:11,i:90}, +D{l:147,t:11,i:55}, +D{l:134,t:10,i:1746}, +D{l:6,t:11,i:71}, +D{l:7,t:11,i:845}, +D{l:7,t:11,i:1308}, +D{l:8,t:11,i:160}, +D{l:137,t:11,i:318}, +D{l:5,t:0,i:101}, +D{l:6,t:0,i:88}, +D{l:7,t:0,i:263}, +D{l:7,t:0,i:628}, +D{l:7,t:0,i:1677}, +D{l:8,t:0,i:349}, +D{l:9,t:0,i:100}, +D{l:10,t:0,i:677}, +D{l:14,t:0,i:169}, +D{l:14,t:0,i:302}, +D{l:14,t:0,i:313}, +D{l:15,t:0,i:48}, +D{l:15,t:0,i:84}, +D{l:7,t:11,i:237}, +D{l:8,t:11,i:664}, +D{l:9,t:11,i:42}, +D{l:9,t:11,i:266}, +D{l:9,t:11,i:380}, +D{l:9,t:11,i:645}, +D{l:10,t:11,i:177}, +D{l:138,t:11,i:276}, +D{l:138,t:11,i:69}, +D{l:4,t:0,i:310}, +D{l:7,t:0,i:708}, +D{l:7,t:0,i:996}, +D{l:9,t:0,i:795}, +D{l:10,t:0,i:390}, +D{l:10,t:0,i:733}, +D{l:11,t:0,i:451}, +D{l:12,t:0,i:249}, +D{l:14,t:0,i:115}, +D{l:14,t:0,i:286}, +D{l:143,t:0,i:100}, +D{l:5,t:0,i:587}, +D{l:4,t:10,i:40}, +D{l:10,t:10,i:67}, +D{l:11,t:10,i:117}, +D{l:11,t:10,i:768}, +D{l:139,t:10,i:935}, +D{l:6,t:0,i:1942}, +D{l:7,t:0,i:512}, +D{l:136,t:0,i:983}, +D{l:7,t:10,i:992}, +D{l:8,t:10,i:301}, +D{l:9,t:10,i:722}, +D{l:12,t:10,i:63}, +D{l:13,t:10,i:29}, +D{l:14,t:10,i:161}, +D{l:143,t:10,i:18}, +D{l:136,t:11,i:76}, +D{l:139,t:10,i:923}, +D{l:134,t:0,i:645}, +D{l:134,t:0,i:851}, +D{l:4,t:0,i:498}, +D{l:132,t:11,i:293}, +D{l:7,t:0,i:217}, +D{l:8,t:0,i:140}, +D{l:10,t:0,i:610}, +D{l:14,t:11,i:352}, +D{l:17,t:11,i:53}, +D{l:18,t:11,i:146}, +D{l:18,t:11,i:152}, +D{l:19,t:11,i:11}, +D{l:150,t:11,i:54}, +D{l:134,t:0,i:1448}, +D{l:138,t:11,i:841}, +D{l:133,t:0,i:905}, +D{l:4,t:11,i:605}, +D{l:7,t:11,i:518}, +D{l:7,t:11,i:1282}, +D{l:7,t:11,i:1918}, +D{l:10,t:11,i:180}, +D{l:139,t:11,i:218}, +D{l:139,t:11,i:917}, +D{l:135,t:10,i:825}, +D{l:140,t:10,i:328}, +D{l:4,t:0,i:456}, +D{l:7,t:0,i:105}, +D{l:7,t:0,i:358}, +D{l:7,t:0,i:1637}, +D{l:8,t:0,i:643}, +D{l:139,t:0,i:483}, +D{l:134,t:0,i:792}, +D{l:6,t:11,i:96}, +D{l:135,t:11,i:1426}, +D{l:137,t:11,i:691}, +D{l:4,t:11,i:651}, +D{l:133,t:11,i:289}, +D{l:7,t:11,i:688}, +D{l:8,t:11,i:35}, +D{l:9,t:11,i:511}, +D{l:10,t:11,i:767}, +D{l:147,t:11,i:118}, +D{l:150,t:0,i:56}, +D{l:5,t:0,i:243}, +D{l:5,t:0,i:535}, +D{l:6,t:10,i:204}, +D{l:10,t:10,i:320}, +D{l:10,t:10,i:583}, +D{l:13,t:10,i:502}, +D{l:14,t:10,i:72}, +D{l:14,t:10,i:274}, +D{l:14,t:10,i:312}, +D{l:14,t:10,i:344}, +D{l:15,t:10,i:159}, +D{l:16,t:10,i:62}, +D{l:16,t:10,i:69}, +D{l:17,t:10,i:30}, +D{l:18,t:10,i:42}, +D{l:18,t:10,i:53}, +D{l:18,t:10,i:84}, +D{l:18,t:10,i:140}, +D{l:19,t:10,i:68}, +D{l:19,t:10,i:85}, +D{l:20,t:10,i:5}, +D{l:20,t:10,i:45}, +D{l:20,t:10,i:101}, +D{l:22,t:10,i:7}, +D{l:150,t:10,i:20}, +D{l:4,t:10,i:558}, +D{l:6,t:10,i:390}, +D{l:7,t:10,i:162}, +D{l:7,t:10,i:689}, +D{l:9,t:10,i:360}, +D{l:138,t:10,i:653}, +D{l:146,t:11,i:23}, +D{l:135,t:0,i:1748}, +D{l:5,t:10,i:856}, +D{l:6,t:10,i:1672}, +D{l:6,t:10,i:1757}, +D{l:134,t:10,i:1781}, +D{l:5,t:0,i:539}, +D{l:5,t:0,i:754}, +D{l:6,t:0,i:876}, +D{l:132,t:11,i:704}, +D{l:135,t:11,i:1078}, +D{l:5,t:10,i:92}, +D{l:10,t:10,i:736}, +D{l:140,t:10,i:102}, +D{l:17,t:0,i:91}, +D{l:5,t:10,i:590}, +D{l:137,t:10,i:213}, +D{l:134,t:0,i:1565}, +D{l:6,t:0,i:91}, +D{l:135,t:0,i:435}, +D{l:4,t:0,i:939}, +D{l:140,t:0,i:792}, +D{l:134,t:0,i:1399}, +D{l:4,t:0,i:16}, +D{l:5,t:0,i:316}, +D{l:5,t:0,i:842}, +D{l:6,t:0,i:370}, +D{l:6,t:0,i:1778}, +D{l:8,t:0,i:166}, +D{l:11,t:0,i:812}, +D{l:12,t:0,i:206}, +D{l:12,t:0,i:351}, +D{l:14,t:0,i:418}, +D{l:16,t:0,i:15}, +D{l:16,t:0,i:34}, +D{l:18,t:0,i:3}, +D{l:19,t:0,i:3}, +D{l:19,t:0,i:7}, +D{l:20,t:0,i:4}, +D{l:21,t:0,i:21}, +D{l:4,t:11,i:720}, +D{l:133,t:11,i:306}, +D{l:144,t:0,i:95}, +D{l:133,t:11,i:431}, +D{l:132,t:11,i:234}, +D{l:135,t:0,i:551}, +D{l:4,t:0,i:999}, +D{l:6,t:0,i:1966}, +D{l:134,t:0,i:2042}, +D{l:7,t:0,i:619}, +D{l:10,t:0,i:547}, +D{l:11,t:0,i:122}, +D{l:12,t:0,i:601}, +D{l:15,t:0,i:7}, +D{l:148,t:0,i:20}, +D{l:5,t:11,i:464}, +D{l:6,t:11,i:236}, +D{l:7,t:11,i:276}, +D{l:7,t:11,i:696}, +D{l:7,t:11,i:914}, +D{l:7,t:11,i:1108}, +D{l:7,t:11,i:1448}, +D{l:9,t:11,i:15}, +D{l:9,t:11,i:564}, +D{l:10,t:11,i:14}, +D{l:12,t:11,i:565}, +D{l:13,t:11,i:449}, +D{l:14,t:11,i:53}, +D{l:15,t:11,i:13}, +D{l:16,t:11,i:64}, +D{l:145,t:11,i:41}, +D{l:6,t:0,i:884}, +D{l:6,t:0,i:1019}, +D{l:134,t:0,i:1150}, +D{l:6,t:11,i:1767}, +D{l:12,t:11,i:194}, +D{l:145,t:11,i:107}, +D{l:136,t:10,i:503}, +D{l:133,t:11,i:840}, +D{l:7,t:0,i:671}, +D{l:134,t:10,i:466}, +D{l:132,t:0,i:888}, +D{l:4,t:0,i:149}, +D{l:138,t:0,i:368}, +D{l:4,t:0,i:154}, +D{l:7,t:0,i:1134}, +D{l:136,t:0,i:105}, +D{l:135,t:0,i:983}, +D{l:9,t:11,i:642}, +D{l:11,t:11,i:236}, +D{l:142,t:11,i:193}, +D{l:4,t:0,i:31}, +D{l:6,t:0,i:429}, +D{l:7,t:0,i:962}, +D{l:9,t:0,i:458}, +D{l:139,t:0,i:691}, +D{l:6,t:0,i:643}, +D{l:134,t:0,i:1102}, +D{l:132,t:0,i:312}, +D{l:4,t:11,i:68}, +D{l:5,t:11,i:634}, +D{l:6,t:11,i:386}, +D{l:7,t:11,i:794}, +D{l:8,t:11,i:273}, +D{l:9,t:11,i:563}, +D{l:10,t:11,i:105}, +D{l:10,t:11,i:171}, +D{l:11,t:11,i:94}, +D{l:139,t:11,i:354}, +D{l:133,t:0,i:740}, +D{l:135,t:0,i:1642}, +D{l:4,t:11,i:95}, +D{l:7,t:11,i:416}, +D{l:8,t:11,i:211}, +D{l:139,t:11,i:830}, +D{l:132,t:0,i:236}, +D{l:138,t:10,i:241}, +D{l:7,t:11,i:731}, +D{l:13,t:11,i:20}, +D{l:143,t:11,i:11}, +D{l:5,t:0,i:836}, +D{l:5,t:0,i:857}, +D{l:6,t:0,i:1680}, +D{l:135,t:0,i:59}, +D{l:10,t:0,i:68}, +D{l:11,t:0,i:494}, +D{l:152,t:11,i:6}, +D{l:4,t:0,i:81}, +D{l:139,t:0,i:867}, +D{l:135,t:0,i:795}, +D{l:133,t:11,i:689}, +D{l:4,t:0,i:1001}, +D{l:5,t:0,i:282}, +D{l:6,t:0,i:1932}, +D{l:6,t:0,i:1977}, +D{l:6,t:0,i:1987}, +D{l:6,t:0,i:1992}, +D{l:8,t:0,i:650}, +D{l:8,t:0,i:919}, +D{l:8,t:0,i:920}, +D{l:8,t:0,i:923}, +D{l:8,t:0,i:926}, +D{l:8,t:0,i:927}, +D{l:8,t:0,i:931}, +D{l:8,t:0,i:939}, +D{l:8,t:0,i:947}, +D{l:8,t:0,i:956}, +D{l:8,t:0,i:997}, +D{l:9,t:0,i:907}, +D{l:10,t:0,i:950}, +D{l:10,t:0,i:953}, +D{l:10,t:0,i:954}, +D{l:10,t:0,i:956}, +D{l:10,t:0,i:958}, +D{l:10,t:0,i:959}, +D{l:10,t:0,i:964}, +D{l:10,t:0,i:970}, +D{l:10,t:0,i:972}, +D{l:10,t:0,i:973}, +D{l:10,t:0,i:975}, +D{l:10,t:0,i:976}, +D{l:10,t:0,i:980}, +D{l:10,t:0,i:981}, +D{l:10,t:0,i:984}, +D{l:10,t:0,i:988}, +D{l:10,t:0,i:990}, +D{l:10,t:0,i:995}, +D{l:10,t:0,i:999}, +D{l:10,t:0,i:1002}, +D{l:10,t:0,i:1003}, +D{l:10,t:0,i:1005}, +D{l:10,t:0,i:1006}, +D{l:10,t:0,i:1008}, +D{l:10,t:0,i:1009}, +D{l:10,t:0,i:1012}, +D{l:10,t:0,i:1014}, +D{l:10,t:0,i:1015}, +D{l:10,t:0,i:1019}, +D{l:10,t:0,i:1020}, +D{l:10,t:0,i:1022}, +D{l:12,t:0,i:959}, +D{l:12,t:0,i:961}, +D{l:12,t:0,i:962}, +D{l:12,t:0,i:963}, +D{l:12,t:0,i:964}, +D{l:12,t:0,i:965}, +D{l:12,t:0,i:967}, +D{l:12,t:0,i:968}, +D{l:12,t:0,i:969}, +D{l:12,t:0,i:970}, +D{l:12,t:0,i:971}, +D{l:12,t:0,i:972}, +D{l:12,t:0,i:973}, +D{l:12,t:0,i:974}, +D{l:12,t:0,i:975}, +D{l:12,t:0,i:976}, +D{l:12,t:0,i:977}, +D{l:12,t:0,i:979}, +D{l:12,t:0,i:981}, +D{l:12,t:0,i:982}, +D{l:12,t:0,i:983}, +D{l:12,t:0,i:984}, +D{l:12,t:0,i:985}, +D{l:12,t:0,i:986}, +D{l:12,t:0,i:987}, +D{l:12,t:0,i:989}, +D{l:12,t:0,i:990}, +D{l:12,t:0,i:992}, +D{l:12,t:0,i:993}, +D{l:12,t:0,i:995}, +D{l:12,t:0,i:998}, +D{l:12,t:0,i:999}, +D{l:12,t:0,i:1000}, +D{l:12,t:0,i:1001}, +D{l:12,t:0,i:1002}, +D{l:12,t:0,i:1004}, +D{l:12,t:0,i:1005}, +D{l:12,t:0,i:1006}, +D{l:12,t:0,i:1007}, +D{l:12,t:0,i:1008}, +D{l:12,t:0,i:1009}, +D{l:12,t:0,i:1010}, +D{l:12,t:0,i:1011}, +D{l:12,t:0,i:1012}, +D{l:12,t:0,i:1014}, +D{l:12,t:0,i:1015}, +D{l:12,t:0,i:1016}, +D{l:12,t:0,i:1017}, +D{l:12,t:0,i:1018}, +D{l:12,t:0,i:1019}, +D{l:12,t:0,i:1022}, +D{l:12,t:0,i:1023}, +D{l:14,t:0,i:475}, +D{l:14,t:0,i:477}, +D{l:14,t:0,i:478}, +D{l:14,t:0,i:479}, +D{l:14,t:0,i:480}, +D{l:14,t:0,i:482}, +D{l:14,t:0,i:483}, +D{l:14,t:0,i:484}, +D{l:14,t:0,i:485}, +D{l:14,t:0,i:486}, +D{l:14,t:0,i:487}, +D{l:14,t:0,i:488}, +D{l:14,t:0,i:489}, +D{l:14,t:0,i:490}, +D{l:14,t:0,i:491}, +D{l:14,t:0,i:492}, +D{l:14,t:0,i:493}, +D{l:14,t:0,i:494}, +D{l:14,t:0,i:495}, +D{l:14,t:0,i:496}, +D{l:14,t:0,i:497}, +D{l:14,t:0,i:498}, +D{l:14,t:0,i:499}, +D{l:14,t:0,i:500}, +D{l:14,t:0,i:501}, +D{l:14,t:0,i:502}, +D{l:14,t:0,i:503}, +D{l:14,t:0,i:504}, +D{l:14,t:0,i:506}, +D{l:14,t:0,i:507}, +D{l:14,t:0,i:508}, +D{l:14,t:0,i:509}, +D{l:14,t:0,i:510}, +D{l:14,t:0,i:511}, +D{l:16,t:0,i:113}, +D{l:16,t:0,i:114}, +D{l:16,t:0,i:115}, +D{l:16,t:0,i:117}, +D{l:16,t:0,i:118}, +D{l:16,t:0,i:119}, +D{l:16,t:0,i:121}, +D{l:16,t:0,i:122}, +D{l:16,t:0,i:123}, +D{l:16,t:0,i:124}, +D{l:16,t:0,i:125}, +D{l:16,t:0,i:126}, +D{l:16,t:0,i:127}, +D{l:18,t:0,i:242}, +D{l:18,t:0,i:243}, +D{l:18,t:0,i:244}, +D{l:18,t:0,i:245}, +D{l:18,t:0,i:248}, +D{l:18,t:0,i:249}, +D{l:18,t:0,i:250}, +D{l:18,t:0,i:251}, +D{l:18,t:0,i:252}, +D{l:18,t:0,i:253}, +D{l:18,t:0,i:254}, +D{l:18,t:0,i:255}, +D{l:20,t:0,i:125}, +D{l:20,t:0,i:126}, +D{l:148,t:0,i:127}, +D{l:7,t:11,i:1717}, +D{l:7,t:11,i:1769}, +D{l:138,t:11,i:546}, +D{l:7,t:11,i:1127}, +D{l:7,t:11,i:1572}, +D{l:10,t:11,i:297}, +D{l:10,t:11,i:422}, +D{l:11,t:11,i:764}, +D{l:11,t:11,i:810}, +D{l:12,t:11,i:264}, +D{l:13,t:11,i:102}, +D{l:13,t:11,i:300}, +D{l:13,t:11,i:484}, +D{l:14,t:11,i:147}, +D{l:14,t:11,i:229}, +D{l:17,t:11,i:71}, +D{l:18,t:11,i:118}, +D{l:147,t:11,i:120}, +D{l:6,t:0,i:1148}, +D{l:134,t:0,i:1586}, +D{l:132,t:0,i:775}, +D{l:135,t:10,i:954}, +D{l:133,t:11,i:864}, +D{l:133,t:11,i:928}, +D{l:138,t:11,i:189}, +D{l:135,t:10,i:1958}, +D{l:6,t:10,i:549}, +D{l:8,t:10,i:34}, +D{l:8,t:10,i:283}, +D{l:9,t:10,i:165}, +D{l:138,t:10,i:475}, +D{l:5,t:10,i:652}, +D{l:5,t:10,i:701}, +D{l:135,t:10,i:449}, +D{l:135,t:11,i:695}, +D{l:4,t:10,i:655}, +D{l:7,t:10,i:850}, +D{l:17,t:10,i:75}, +D{l:146,t:10,i:137}, +D{l:140,t:11,i:682}, +D{l:133,t:11,i:523}, +D{l:8,t:0,i:970}, +D{l:136,t:10,i:670}, +D{l:136,t:11,i:555}, +D{l:7,t:11,i:76}, +D{l:8,t:11,i:44}, +D{l:9,t:11,i:884}, +D{l:10,t:11,i:580}, +D{l:11,t:11,i:399}, +D{l:11,t:11,i:894}, +D{l:15,t:11,i:122}, +D{l:18,t:11,i:144}, +D{l:147,t:11,i:61}, +D{l:6,t:10,i:159}, +D{l:6,t:10,i:364}, +D{l:7,t:10,i:516}, +D{l:7,t:10,i:1439}, +D{l:137,t:10,i:518}, +D{l:4,t:0,i:71}, +D{l:5,t:0,i:376}, +D{l:7,t:0,i:119}, +D{l:138,t:0,i:665}, +D{l:141,t:10,i:151}, +D{l:11,t:0,i:827}, +D{l:14,t:0,i:34}, +D{l:143,t:0,i:148}, +D{l:133,t:11,i:518}, +D{l:4,t:0,i:479}, +D{l:135,t:11,i:1787}, +D{l:135,t:11,i:1852}, +D{l:135,t:10,i:993}, +D{l:7,t:0,i:607}, +D{l:136,t:0,i:99}, +D{l:134,t:0,i:1960}, +D{l:132,t:0,i:793}, +D{l:4,t:0,i:41}, +D{l:5,t:0,i:74}, +D{l:7,t:0,i:1627}, +D{l:11,t:0,i:871}, +D{l:140,t:0,i:619}, +D{l:7,t:0,i:94}, +D{l:11,t:0,i:329}, +D{l:11,t:0,i:965}, +D{l:12,t:0,i:241}, +D{l:14,t:0,i:354}, +D{l:15,t:0,i:22}, +D{l:148,t:0,i:63}, +D{l:7,t:10,i:501}, +D{l:9,t:10,i:111}, +D{l:10,t:10,i:141}, +D{l:11,t:10,i:332}, +D{l:13,t:10,i:43}, +D{l:13,t:10,i:429}, +D{l:14,t:10,i:130}, +D{l:14,t:10,i:415}, +D{l:145,t:10,i:102}, +D{l:9,t:0,i:209}, +D{l:137,t:0,i:300}, +D{l:134,t:0,i:1497}, +D{l:138,t:11,i:255}, +D{l:4,t:11,i:934}, +D{l:5,t:11,i:138}, +D{l:136,t:11,i:610}, +D{l:133,t:0,i:98}, +D{l:6,t:0,i:1316}, +D{l:10,t:11,i:804}, +D{l:138,t:11,i:832}, +D{l:8,t:11,i:96}, +D{l:9,t:11,i:36}, +D{l:10,t:11,i:607}, +D{l:11,t:11,i:423}, +D{l:11,t:11,i:442}, +D{l:12,t:11,i:309}, +D{l:14,t:11,i:199}, +D{l:15,t:11,i:90}, +D{l:145,t:11,i:110}, +D{l:132,t:0,i:463}, +D{l:5,t:10,i:149}, +D{l:136,t:10,i:233}, +D{l:133,t:10,i:935}, +D{l:4,t:11,i:652}, +D{l:8,t:11,i:320}, +D{l:9,t:11,i:13}, +D{l:9,t:11,i:398}, +D{l:9,t:11,i:727}, +D{l:10,t:11,i:75}, +D{l:10,t:11,i:184}, +D{l:10,t:11,i:230}, +D{l:10,t:11,i:564}, +D{l:10,t:11,i:569}, +D{l:11,t:11,i:973}, +D{l:12,t:11,i:70}, +D{l:12,t:11,i:189}, +D{l:13,t:11,i:57}, +D{l:13,t:11,i:257}, +D{l:22,t:11,i:6}, +D{l:150,t:11,i:16}, +D{l:142,t:0,i:291}, +D{l:12,t:10,i:582}, +D{l:146,t:10,i:131}, +D{l:136,t:10,i:801}, +D{l:133,t:0,i:984}, +D{l:145,t:11,i:116}, +D{l:4,t:11,i:692}, +D{l:133,t:11,i:321}, +D{l:4,t:0,i:182}, +D{l:6,t:0,i:205}, +D{l:135,t:0,i:220}, +D{l:4,t:0,i:42}, +D{l:9,t:0,i:205}, +D{l:9,t:0,i:786}, +D{l:138,t:0,i:659}, +D{l:6,t:0,i:801}, +D{l:11,t:11,i:130}, +D{l:140,t:11,i:609}, +D{l:132,t:0,i:635}, +D{l:5,t:11,i:345}, +D{l:135,t:11,i:1016}, +D{l:139,t:0,i:533}, +D{l:132,t:0,i:371}, +D{l:4,t:0,i:272}, +D{l:135,t:0,i:836}, +D{l:6,t:0,i:1282}, +D{l:135,t:11,i:1100}, +D{l:5,t:0,i:825}, +D{l:134,t:0,i:1640}, +D{l:135,t:11,i:1325}, +D{l:133,t:11,i:673}, +D{l:4,t:11,i:287}, +D{l:133,t:11,i:1018}, +D{l:135,t:0,i:357}, +D{l:6,t:0,i:467}, +D{l:137,t:0,i:879}, +D{l:7,t:0,i:317}, +D{l:135,t:0,i:569}, +D{l:6,t:0,i:924}, +D{l:134,t:0,i:1588}, +D{l:5,t:11,i:34}, +D{l:5,t:10,i:406}, +D{l:10,t:11,i:724}, +D{l:12,t:11,i:444}, +D{l:13,t:11,i:354}, +D{l:18,t:11,i:32}, +D{l:23,t:11,i:24}, +D{l:23,t:11,i:31}, +D{l:152,t:11,i:5}, +D{l:6,t:0,i:1795}, +D{l:6,t:0,i:1835}, +D{l:6,t:0,i:1836}, +D{l:6,t:0,i:1856}, +D{l:8,t:0,i:844}, +D{l:8,t:0,i:849}, +D{l:8,t:0,i:854}, +D{l:8,t:0,i:870}, +D{l:8,t:0,i:887}, +D{l:10,t:0,i:852}, +D{l:138,t:0,i:942}, +D{l:6,t:10,i:69}, +D{l:135,t:10,i:117}, +D{l:137,t:0,i:307}, +D{l:4,t:0,i:944}, +D{l:6,t:0,i:1799}, +D{l:6,t:0,i:1825}, +D{l:10,t:0,i:848}, +D{l:10,t:0,i:875}, +D{l:10,t:0,i:895}, +D{l:10,t:0,i:899}, +D{l:10,t:0,i:902}, +D{l:140,t:0,i:773}, +D{l:11,t:0,i:43}, +D{l:13,t:0,i:72}, +D{l:141,t:0,i:142}, +D{l:135,t:10,i:1830}, +D{l:134,t:11,i:382}, +D{l:4,t:10,i:432}, +D{l:135,t:10,i:824}, +D{l:132,t:11,i:329}, +D{l:7,t:0,i:1820}, +D{l:139,t:11,i:124}, +D{l:133,t:10,i:826}, +D{l:133,t:0,i:525}, +D{l:132,t:11,i:906}, +D{l:7,t:11,i:1940}, +D{l:136,t:11,i:366}, +D{l:138,t:11,i:10}, +D{l:4,t:11,i:123}, +D{l:4,t:11,i:649}, +D{l:5,t:11,i:605}, +D{l:7,t:11,i:1509}, +D{l:136,t:11,i:36}, +D{l:6,t:0,i:110}, +D{l:135,t:0,i:1681}, +D{l:133,t:0,i:493}, +D{l:133,t:11,i:767}, +D{l:4,t:0,i:174}, +D{l:135,t:0,i:911}, +D{l:138,t:11,i:786}, +D{l:8,t:0,i:417}, +D{l:137,t:0,i:782}, +D{l:133,t:10,i:1000}, +D{l:7,t:0,i:733}, +D{l:137,t:0,i:583}, +D{l:4,t:10,i:297}, +D{l:6,t:10,i:529}, +D{l:7,t:10,i:152}, +D{l:7,t:10,i:713}, +D{l:7,t:10,i:1845}, +D{l:8,t:10,i:710}, +D{l:8,t:10,i:717}, +D{l:12,t:10,i:639}, +D{l:140,t:10,i:685}, +D{l:4,t:0,i:32}, +D{l:5,t:0,i:215}, +D{l:6,t:0,i:269}, +D{l:7,t:0,i:1782}, +D{l:7,t:0,i:1892}, +D{l:10,t:0,i:16}, +D{l:11,t:0,i:822}, +D{l:11,t:0,i:954}, +D{l:141,t:0,i:481}, +D{l:4,t:11,i:273}, +D{l:5,t:11,i:658}, +D{l:133,t:11,i:995}, +D{l:136,t:0,i:477}, +D{l:134,t:11,i:72}, +D{l:135,t:11,i:1345}, +D{l:5,t:0,i:308}, +D{l:7,t:0,i:1088}, +D{l:4,t:10,i:520}, +D{l:135,t:10,i:575}, +D{l:133,t:11,i:589}, +D{l:5,t:0,i:126}, +D{l:8,t:0,i:297}, +D{l:9,t:0,i:366}, +D{l:140,t:0,i:374}, +D{l:7,t:0,i:1551}, +D{l:139,t:0,i:361}, +D{l:5,t:11,i:117}, +D{l:6,t:11,i:514}, +D{l:6,t:11,i:541}, +D{l:7,t:11,i:1164}, +D{l:7,t:11,i:1436}, +D{l:8,t:11,i:220}, +D{l:8,t:11,i:648}, +D{l:10,t:11,i:688}, +D{l:139,t:11,i:560}, +D{l:133,t:11,i:686}, +D{l:4,t:0,i:946}, +D{l:6,t:0,i:1807}, +D{l:8,t:0,i:871}, +D{l:10,t:0,i:854}, +D{l:10,t:0,i:870}, +D{l:10,t:0,i:888}, +D{l:10,t:0,i:897}, +D{l:10,t:0,i:920}, +D{l:12,t:0,i:722}, +D{l:12,t:0,i:761}, +D{l:12,t:0,i:763}, +D{l:12,t:0,i:764}, +D{l:14,t:0,i:454}, +D{l:14,t:0,i:465}, +D{l:16,t:0,i:107}, +D{l:18,t:0,i:167}, +D{l:18,t:0,i:168}, +D{l:146,t:0,i:172}, +D{l:132,t:0,i:175}, +D{l:135,t:0,i:1307}, +D{l:132,t:0,i:685}, +D{l:135,t:11,i:1834}, +D{l:133,t:0,i:797}, +D{l:6,t:0,i:745}, +D{l:6,t:0,i:858}, +D{l:134,t:0,i:963}, +D{l:133,t:0,i:565}, +D{l:5,t:10,i:397}, +D{l:6,t:10,i:154}, +D{l:7,t:11,i:196}, +D{l:7,t:10,i:676}, +D{l:8,t:10,i:443}, +D{l:8,t:10,i:609}, +D{l:9,t:10,i:24}, +D{l:9,t:10,i:325}, +D{l:10,t:10,i:35}, +D{l:10,t:11,i:765}, +D{l:11,t:11,i:347}, +D{l:11,t:10,i:535}, +D{l:11,t:11,i:552}, +D{l:11,t:11,i:576}, +D{l:11,t:10,i:672}, +D{l:11,t:11,i:790}, +D{l:11,t:10,i:1018}, +D{l:12,t:11,i:263}, +D{l:12,t:10,i:637}, +D{l:13,t:11,i:246}, +D{l:13,t:11,i:270}, +D{l:13,t:11,i:395}, +D{l:14,t:11,i:74}, +D{l:14,t:11,i:176}, +D{l:14,t:11,i:190}, +D{l:14,t:11,i:398}, +D{l:14,t:11,i:412}, +D{l:15,t:11,i:32}, +D{l:15,t:11,i:63}, +D{l:16,t:10,i:30}, +D{l:16,t:11,i:88}, +D{l:147,t:11,i:105}, +D{l:13,t:11,i:84}, +D{l:141,t:11,i:122}, +D{l:4,t:0,i:252}, +D{l:7,t:0,i:1068}, +D{l:10,t:0,i:434}, +D{l:11,t:0,i:228}, +D{l:11,t:0,i:426}, +D{l:13,t:0,i:231}, +D{l:18,t:0,i:106}, +D{l:148,t:0,i:87}, +D{l:137,t:0,i:826}, +D{l:4,t:11,i:589}, +D{l:139,t:11,i:282}, +D{l:5,t:11,i:381}, +D{l:135,t:11,i:1792}, +D{l:132,t:0,i:791}, +D{l:5,t:0,i:231}, +D{l:10,t:0,i:509}, +D{l:133,t:10,i:981}, +D{l:7,t:0,i:601}, +D{l:9,t:0,i:277}, +D{l:9,t:0,i:674}, +D{l:10,t:0,i:178}, +D{l:10,t:0,i:418}, +D{l:10,t:0,i:571}, +D{l:11,t:0,i:531}, +D{l:12,t:0,i:113}, +D{l:12,t:0,i:475}, +D{l:13,t:0,i:99}, +D{l:142,t:0,i:428}, +D{l:4,t:10,i:56}, +D{l:7,t:11,i:616}, +D{l:7,t:10,i:1791}, +D{l:8,t:10,i:607}, +D{l:8,t:10,i:651}, +D{l:10,t:11,i:413}, +D{l:11,t:10,i:465}, +D{l:11,t:10,i:835}, +D{l:12,t:10,i:337}, +D{l:141,t:10,i:480}, +D{l:7,t:0,i:1591}, +D{l:144,t:0,i:43}, +D{l:9,t:10,i:158}, +D{l:138,t:10,i:411}, +D{l:135,t:0,i:1683}, +D{l:8,t:0,i:289}, +D{l:11,t:0,i:45}, +D{l:12,t:0,i:278}, +D{l:140,t:0,i:537}, +D{l:6,t:11,i:120}, +D{l:7,t:11,i:1188}, +D{l:7,t:11,i:1710}, +D{l:8,t:11,i:286}, +D{l:9,t:11,i:667}, +D{l:11,t:11,i:592}, +D{l:139,t:11,i:730}, +D{l:136,t:10,i:617}, +D{l:135,t:0,i:1120}, +D{l:135,t:11,i:1146}, +D{l:139,t:10,i:563}, +D{l:4,t:11,i:352}, +D{l:4,t:10,i:369}, +D{l:135,t:11,i:687}, +D{l:143,t:11,i:38}, +D{l:4,t:0,i:399}, +D{l:5,t:0,i:119}, +D{l:5,t:0,i:494}, +D{l:7,t:0,i:751}, +D{l:9,t:0,i:556}, +D{l:14,t:11,i:179}, +D{l:15,t:11,i:151}, +D{l:150,t:11,i:11}, +D{l:4,t:11,i:192}, +D{l:5,t:11,i:49}, +D{l:6,t:11,i:200}, +D{l:6,t:11,i:293}, +D{l:6,t:11,i:1696}, +D{l:135,t:11,i:488}, +D{l:4,t:0,i:398}, +D{l:133,t:0,i:660}, +D{l:7,t:0,i:1030}, +D{l:134,t:10,i:622}, +D{l:135,t:11,i:595}, +D{l:141,t:0,i:168}, +D{l:132,t:11,i:147}, +D{l:7,t:0,i:973}, +D{l:10,t:10,i:624}, +D{l:142,t:10,i:279}, +D{l:132,t:10,i:363}, +D{l:132,t:0,i:642}, +D{l:133,t:11,i:934}, +D{l:134,t:0,i:1615}, +D{l:7,t:11,i:505}, +D{l:135,t:11,i:523}, +D{l:7,t:0,i:594}, +D{l:7,t:0,i:851}, +D{l:7,t:0,i:1858}, +D{l:9,t:0,i:411}, +D{l:9,t:0,i:574}, +D{l:9,t:0,i:666}, +D{l:9,t:0,i:737}, +D{l:10,t:0,i:346}, +D{l:10,t:0,i:712}, +D{l:11,t:0,i:246}, +D{l:11,t:0,i:432}, +D{l:11,t:0,i:517}, +D{l:11,t:0,i:647}, +D{l:11,t:0,i:679}, +D{l:11,t:0,i:727}, +D{l:12,t:0,i:304}, +D{l:12,t:0,i:305}, +D{l:12,t:0,i:323}, +D{l:12,t:0,i:483}, +D{l:12,t:0,i:572}, +D{l:12,t:0,i:593}, +D{l:12,t:0,i:602}, +D{l:13,t:0,i:95}, +D{l:13,t:0,i:101}, +D{l:13,t:0,i:171}, +D{l:13,t:0,i:315}, +D{l:13,t:0,i:378}, +D{l:13,t:0,i:425}, +D{l:13,t:0,i:475}, +D{l:14,t:0,i:63}, +D{l:14,t:0,i:380}, +D{l:14,t:0,i:384}, +D{l:15,t:0,i:133}, +D{l:18,t:0,i:112}, +D{l:148,t:0,i:72}, +D{l:135,t:0,i:1093}, +D{l:132,t:0,i:679}, +D{l:8,t:0,i:913}, +D{l:10,t:0,i:903}, +D{l:10,t:0,i:915}, +D{l:12,t:0,i:648}, +D{l:12,t:0,i:649}, +D{l:14,t:0,i:455}, +D{l:16,t:0,i:112}, +D{l:138,t:11,i:438}, +D{l:137,t:0,i:203}, +D{l:134,t:10,i:292}, +D{l:134,t:0,i:1492}, +D{l:7,t:0,i:1374}, +D{l:8,t:0,i:540}, +D{l:5,t:10,i:177}, +D{l:6,t:10,i:616}, +D{l:7,t:10,i:827}, +D{l:9,t:10,i:525}, +D{l:138,t:10,i:656}, +D{l:135,t:0,i:1486}, +D{l:9,t:0,i:714}, +D{l:138,t:10,i:31}, +D{l:136,t:0,i:825}, +D{l:134,t:0,i:1511}, +D{l:132,t:11,i:637}, +D{l:134,t:0,i:952}, +D{l:4,t:10,i:161}, +D{l:133,t:10,i:631}, +D{l:5,t:0,i:143}, +D{l:5,t:0,i:769}, +D{l:6,t:0,i:1760}, +D{l:7,t:0,i:682}, +D{l:7,t:0,i:1992}, +D{l:136,t:0,i:736}, +D{l:132,t:0,i:700}, +D{l:134,t:0,i:1540}, +D{l:132,t:11,i:777}, +D{l:9,t:11,i:867}, +D{l:138,t:11,i:837}, +D{l:7,t:0,i:1557}, +D{l:135,t:10,i:1684}, +D{l:133,t:0,i:860}, +D{l:6,t:0,i:422}, +D{l:7,t:0,i:0}, +D{l:7,t:0,i:1544}, +D{l:9,t:0,i:605}, +D{l:11,t:0,i:990}, +D{l:12,t:0,i:235}, +D{l:12,t:0,i:453}, +D{l:13,t:0,i:47}, +D{l:13,t:0,i:266}, +D{l:9,t:10,i:469}, +D{l:9,t:10,i:709}, +D{l:12,t:10,i:512}, +D{l:14,t:10,i:65}, +D{l:145,t:10,i:12}, +D{l:11,t:0,i:807}, +D{l:10,t:10,i:229}, +D{l:11,t:10,i:73}, +D{l:139,t:10,i:376}, +D{l:6,t:11,i:170}, +D{l:7,t:11,i:1080}, +D{l:8,t:11,i:395}, +D{l:8,t:11,i:487}, +D{l:11,t:11,i:125}, +D{l:141,t:11,i:147}, +D{l:5,t:0,i:515}, +D{l:137,t:0,i:131}, +D{l:7,t:0,i:1605}, +D{l:11,t:0,i:962}, +D{l:146,t:0,i:139}, +D{l:132,t:0,i:646}, +D{l:4,t:0,i:396}, +D{l:7,t:0,i:728}, +D{l:9,t:0,i:117}, +D{l:13,t:0,i:202}, +D{l:148,t:0,i:51}, +D{l:6,t:0,i:121}, +D{l:6,t:0,i:124}, +D{l:6,t:0,i:357}, +D{l:7,t:0,i:1138}, +D{l:7,t:0,i:1295}, +D{l:8,t:0,i:162}, +D{l:8,t:0,i:508}, +D{l:11,t:0,i:655}, +D{l:4,t:11,i:535}, +D{l:6,t:10,i:558}, +D{l:7,t:10,i:651}, +D{l:8,t:11,i:618}, +D{l:9,t:10,i:0}, +D{l:10,t:10,i:34}, +D{l:139,t:10,i:1008}, +D{l:135,t:11,i:1245}, +D{l:138,t:0,i:357}, +D{l:150,t:11,i:23}, +D{l:133,t:0,i:237}, +D{l:135,t:0,i:1784}, +D{l:7,t:10,i:1832}, +D{l:138,t:10,i:374}, +D{l:132,t:0,i:713}, +D{l:132,t:11,i:46}, +D{l:6,t:0,i:1536}, +D{l:10,t:0,i:348}, +D{l:5,t:11,i:811}, +D{l:6,t:11,i:1679}, +D{l:6,t:11,i:1714}, +D{l:135,t:11,i:2032}, +D{l:11,t:11,i:182}, +D{l:142,t:11,i:195}, +D{l:6,t:0,i:523}, +D{l:7,t:0,i:738}, +D{l:7,t:10,i:771}, +D{l:7,t:10,i:1731}, +D{l:9,t:10,i:405}, +D{l:138,t:10,i:421}, +D{l:7,t:11,i:1458}, +D{l:9,t:11,i:407}, +D{l:139,t:11,i:15}, +D{l:6,t:11,i:34}, +D{l:7,t:11,i:69}, +D{l:7,t:11,i:640}, +D{l:7,t:11,i:1089}, +D{l:8,t:11,i:708}, +D{l:8,t:11,i:721}, +D{l:9,t:11,i:363}, +D{l:9,t:11,i:643}, +D{l:10,t:11,i:628}, +D{l:148,t:11,i:98}, +D{l:133,t:0,i:434}, +D{l:135,t:0,i:1877}, +D{l:7,t:0,i:571}, +D{l:138,t:0,i:366}, +D{l:5,t:10,i:881}, +D{l:133,t:10,i:885}, +D{l:9,t:0,i:513}, +D{l:10,t:0,i:25}, +D{l:10,t:0,i:39}, +D{l:12,t:0,i:122}, +D{l:140,t:0,i:187}, +D{l:132,t:0,i:580}, +D{l:5,t:10,i:142}, +D{l:134,t:10,i:546}, +D{l:132,t:11,i:462}, +D{l:137,t:0,i:873}, +D{l:5,t:10,i:466}, +D{l:11,t:10,i:571}, +D{l:12,t:10,i:198}, +D{l:13,t:10,i:283}, +D{l:14,t:10,i:186}, +D{l:15,t:10,i:21}, +D{l:143,t:10,i:103}, +D{l:7,t:0,i:171}, +D{l:4,t:10,i:185}, +D{l:5,t:10,i:257}, +D{l:5,t:10,i:839}, +D{l:5,t:10,i:936}, +D{l:9,t:10,i:399}, +D{l:10,t:10,i:258}, +D{l:10,t:10,i:395}, +D{l:10,t:10,i:734}, +D{l:11,t:10,i:1014}, +D{l:12,t:10,i:23}, +D{l:13,t:10,i:350}, +D{l:14,t:10,i:150}, +D{l:147,t:10,i:6}, +D{l:134,t:0,i:625}, +D{l:7,t:0,i:107}, +D{l:7,t:0,i:838}, +D{l:8,t:0,i:550}, +D{l:138,t:0,i:401}, +D{l:5,t:11,i:73}, +D{l:6,t:11,i:23}, +D{l:134,t:11,i:338}, +D{l:4,t:0,i:943}, +D{l:6,t:0,i:1850}, +D{l:12,t:0,i:713}, +D{l:142,t:0,i:434}, +D{l:11,t:0,i:588}, +D{l:11,t:0,i:864}, +D{l:11,t:0,i:936}, +D{l:11,t:0,i:968}, +D{l:12,t:0,i:73}, +D{l:12,t:0,i:343}, +D{l:12,t:0,i:394}, +D{l:13,t:0,i:275}, +D{l:14,t:0,i:257}, +D{l:15,t:0,i:160}, +D{l:7,t:10,i:404}, +D{l:7,t:10,i:1377}, +D{l:7,t:10,i:1430}, +D{l:7,t:10,i:2017}, +D{l:8,t:10,i:149}, +D{l:8,t:10,i:239}, +D{l:8,t:10,i:512}, +D{l:8,t:10,i:793}, +D{l:8,t:10,i:818}, +D{l:9,t:10,i:474}, +D{l:9,t:10,i:595}, +D{l:10,t:10,i:122}, +D{l:10,t:10,i:565}, +D{l:10,t:10,i:649}, +D{l:10,t:10,i:783}, +D{l:11,t:10,i:239}, +D{l:11,t:10,i:295}, +D{l:11,t:10,i:447}, +D{l:11,t:10,i:528}, +D{l:11,t:10,i:639}, +D{l:11,t:10,i:800}, +D{l:12,t:10,i:25}, +D{l:12,t:10,i:157}, +D{l:12,t:10,i:316}, +D{l:12,t:10,i:390}, +D{l:12,t:10,i:391}, +D{l:12,t:10,i:395}, +D{l:12,t:10,i:478}, +D{l:12,t:10,i:503}, +D{l:12,t:10,i:592}, +D{l:12,t:10,i:680}, +D{l:13,t:10,i:50}, +D{l:13,t:10,i:53}, +D{l:13,t:10,i:132}, +D{l:13,t:10,i:198}, +D{l:13,t:10,i:322}, +D{l:13,t:10,i:415}, +D{l:13,t:10,i:511}, +D{l:14,t:10,i:71}, +D{l:14,t:10,i:395}, +D{l:15,t:10,i:71}, +D{l:15,t:10,i:136}, +D{l:17,t:10,i:123}, +D{l:18,t:10,i:93}, +D{l:147,t:10,i:58}, +D{l:133,t:0,i:768}, +D{l:11,t:0,i:103}, +D{l:142,t:0,i:0}, +D{l:136,t:10,i:712}, +D{l:132,t:0,i:799}, +D{l:132,t:0,i:894}, +D{l:7,t:11,i:725}, +D{l:8,t:11,i:498}, +D{l:139,t:11,i:268}, +D{l:135,t:11,i:1798}, +D{l:135,t:11,i:773}, +D{l:141,t:11,i:360}, +D{l:4,t:10,i:377}, +D{l:152,t:10,i:13}, +D{l:135,t:0,i:1673}, +D{l:132,t:11,i:583}, +D{l:134,t:0,i:1052}, +D{l:133,t:11,i:220}, +D{l:140,t:11,i:69}, +D{l:132,t:11,i:544}, +D{l:4,t:10,i:180}, +D{l:135,t:10,i:1906}, +D{l:134,t:0,i:272}, +D{l:4,t:0,i:441}, +D{l:134,t:0,i:1421}, +D{l:4,t:0,i:9}, +D{l:5,t:0,i:128}, +D{l:7,t:0,i:368}, +D{l:11,t:0,i:480}, +D{l:148,t:0,i:3}, +D{l:5,t:11,i:176}, +D{l:6,t:11,i:437}, +D{l:6,t:11,i:564}, +D{l:11,t:11,i:181}, +D{l:141,t:11,i:183}, +D{l:132,t:10,i:491}, +D{l:7,t:0,i:1182}, +D{l:141,t:11,i:67}, +D{l:6,t:0,i:1346}, +D{l:4,t:10,i:171}, +D{l:138,t:10,i:234}, +D{l:4,t:10,i:586}, +D{l:7,t:10,i:1186}, +D{l:138,t:10,i:631}, +D{l:136,t:0,i:682}, +D{l:134,t:0,i:1004}, +D{l:15,t:0,i:24}, +D{l:143,t:11,i:24}, +D{l:134,t:0,i:968}, +D{l:4,t:0,i:2}, +D{l:6,t:0,i:742}, +D{l:6,t:0,i:793}, +D{l:7,t:0,i:545}, +D{l:7,t:0,i:894}, +D{l:9,t:10,i:931}, +D{l:10,t:10,i:334}, +D{l:148,t:10,i:71}, +D{l:136,t:11,i:600}, +D{l:133,t:10,i:765}, +D{l:9,t:0,i:769}, +D{l:140,t:0,i:185}, +D{l:4,t:11,i:790}, +D{l:5,t:11,i:273}, +D{l:134,t:11,i:394}, +D{l:7,t:0,i:474}, +D{l:137,t:0,i:578}, +D{l:4,t:11,i:135}, +D{l:6,t:11,i:127}, +D{l:7,t:11,i:1185}, +D{l:7,t:11,i:1511}, +D{l:8,t:11,i:613}, +D{l:11,t:11,i:5}, +D{l:12,t:11,i:133}, +D{l:12,t:11,i:495}, +D{l:12,t:11,i:586}, +D{l:14,t:11,i:385}, +D{l:15,t:11,i:118}, +D{l:17,t:11,i:20}, +D{l:146,t:11,i:98}, +D{l:133,t:10,i:424}, +D{l:5,t:0,i:530}, +D{l:142,t:0,i:113}, +D{l:6,t:11,i:230}, +D{l:7,t:11,i:961}, +D{l:7,t:11,i:1085}, +D{l:136,t:11,i:462}, +D{l:7,t:11,i:1954}, +D{l:137,t:11,i:636}, +D{l:136,t:10,i:714}, +D{l:149,t:11,i:6}, +D{l:135,t:10,i:685}, +D{l:9,t:10,i:420}, +D{l:10,t:10,i:269}, +D{l:10,t:10,i:285}, +D{l:10,t:10,i:576}, +D{l:11,t:10,i:397}, +D{l:13,t:10,i:175}, +D{l:145,t:10,i:90}, +D{l:132,t:10,i:429}, +D{l:5,t:0,i:556}, +D{l:5,t:11,i:162}, +D{l:136,t:11,i:68}, +D{l:132,t:11,i:654}, +D{l:4,t:11,i:156}, +D{l:7,t:11,i:998}, +D{l:7,t:11,i:1045}, +D{l:7,t:11,i:1860}, +D{l:9,t:11,i:48}, +D{l:9,t:11,i:692}, +D{l:11,t:11,i:419}, +D{l:139,t:11,i:602}, +D{l:6,t:0,i:1317}, +D{l:8,t:0,i:16}, +D{l:9,t:0,i:825}, +D{l:12,t:0,i:568}, +D{l:7,t:11,i:1276}, +D{l:8,t:11,i:474}, +D{l:137,t:11,i:652}, +D{l:18,t:0,i:97}, +D{l:7,t:10,i:18}, +D{l:7,t:10,i:699}, +D{l:7,t:10,i:1966}, +D{l:8,t:10,i:752}, +D{l:9,t:10,i:273}, +D{l:9,t:10,i:412}, +D{l:9,t:10,i:703}, +D{l:10,t:10,i:71}, +D{l:10,t:10,i:427}, +D{l:138,t:10,i:508}, +D{l:10,t:0,i:703}, +D{l:7,t:11,i:1454}, +D{l:138,t:11,i:703}, +D{l:4,t:10,i:53}, +D{l:5,t:10,i:186}, +D{l:135,t:10,i:752}, +D{l:134,t:0,i:892}, +D{l:134,t:0,i:1571}, +D{l:8,t:10,i:575}, +D{l:10,t:10,i:289}, +D{l:139,t:10,i:319}, +D{l:6,t:0,i:186}, +D{l:137,t:0,i:426}, +D{l:134,t:0,i:1101}, +D{l:132,t:10,i:675}, +D{l:132,t:0,i:585}, +D{l:6,t:0,i:1870}, +D{l:137,t:0,i:937}, +D{l:152,t:11,i:10}, +D{l:9,t:11,i:197}, +D{l:10,t:11,i:300}, +D{l:12,t:11,i:473}, +D{l:13,t:11,i:90}, +D{l:141,t:11,i:405}, +D{l:4,t:0,i:93}, +D{l:5,t:0,i:252}, +D{l:6,t:0,i:229}, +D{l:7,t:0,i:291}, +D{l:9,t:0,i:550}, +D{l:139,t:0,i:644}, +D{l:137,t:0,i:749}, +D{l:9,t:0,i:162}, +D{l:6,t:10,i:209}, +D{l:8,t:10,i:468}, +D{l:9,t:10,i:210}, +D{l:11,t:10,i:36}, +D{l:12,t:10,i:28}, +D{l:12,t:10,i:630}, +D{l:13,t:10,i:21}, +D{l:13,t:10,i:349}, +D{l:14,t:10,i:7}, +D{l:145,t:10,i:13}, +D{l:132,t:0,i:381}, +D{l:132,t:11,i:606}, +D{l:4,t:10,i:342}, +D{l:135,t:10,i:1179}, +D{l:7,t:11,i:1587}, +D{l:7,t:11,i:1707}, +D{l:10,t:11,i:528}, +D{l:139,t:11,i:504}, +D{l:12,t:11,i:39}, +D{l:13,t:11,i:265}, +D{l:141,t:11,i:439}, +D{l:4,t:10,i:928}, +D{l:133,t:10,i:910}, +D{l:7,t:10,i:1838}, +D{l:7,t:11,i:1978}, +D{l:136,t:11,i:676}, +D{l:6,t:0,i:762}, +D{l:6,t:0,i:796}, +D{l:134,t:0,i:956}, +D{l:4,t:10,i:318}, +D{l:4,t:10,i:496}, +D{l:7,t:10,i:856}, +D{l:139,t:10,i:654}, +D{l:137,t:11,i:242}, +D{l:4,t:11,i:361}, +D{l:133,t:11,i:315}, +D{l:132,t:11,i:461}, +D{l:132,t:11,i:472}, +D{l:132,t:0,i:857}, +D{l:5,t:0,i:21}, +D{l:6,t:0,i:77}, +D{l:6,t:0,i:157}, +D{l:7,t:0,i:974}, +D{l:7,t:0,i:1301}, +D{l:7,t:0,i:1339}, +D{l:7,t:0,i:1490}, +D{l:7,t:0,i:1873}, +D{l:9,t:0,i:628}, +D{l:7,t:10,i:915}, +D{l:8,t:10,i:247}, +D{l:147,t:10,i:0}, +D{l:4,t:10,i:202}, +D{l:5,t:10,i:382}, +D{l:6,t:10,i:454}, +D{l:7,t:10,i:936}, +D{l:7,t:10,i:1803}, +D{l:8,t:10,i:758}, +D{l:9,t:10,i:375}, +D{l:9,t:10,i:895}, +D{l:10,t:10,i:743}, +D{l:10,t:10,i:792}, +D{l:11,t:10,i:978}, +D{l:11,t:10,i:1012}, +D{l:142,t:10,i:109}, +D{l:7,t:11,i:617}, +D{l:10,t:11,i:498}, +D{l:11,t:11,i:501}, +D{l:12,t:11,i:16}, +D{l:140,t:11,i:150}, +D{l:7,t:10,i:1150}, +D{l:7,t:10,i:1425}, +D{l:7,t:10,i:1453}, +D{l:10,t:11,i:747}, +D{l:140,t:10,i:513}, +D{l:133,t:11,i:155}, +D{l:11,t:0,i:919}, +D{l:141,t:0,i:409}, +D{l:138,t:10,i:791}, +D{l:10,t:0,i:633}, +D{l:139,t:11,i:729}, +D{l:7,t:11,i:163}, +D{l:8,t:11,i:319}, +D{l:9,t:11,i:402}, +D{l:10,t:11,i:24}, +D{l:10,t:11,i:681}, +D{l:11,t:11,i:200}, +D{l:11,t:11,i:567}, +D{l:12,t:11,i:253}, +D{l:12,t:11,i:410}, +D{l:142,t:11,i:219}, +D{l:5,t:11,i:475}, +D{l:7,t:11,i:1780}, +D{l:9,t:11,i:230}, +D{l:11,t:11,i:297}, +D{l:11,t:11,i:558}, +D{l:14,t:11,i:322}, +D{l:147,t:11,i:76}, +D{l:7,t:0,i:332}, +D{l:6,t:10,i:445}, +D{l:137,t:10,i:909}, +D{l:135,t:11,i:1956}, +D{l:136,t:11,i:274}, +D{l:134,t:10,i:578}, +D{l:135,t:0,i:1489}, +D{l:135,t:11,i:1848}, +D{l:5,t:11,i:944}, +D{l:134,t:11,i:1769}, +D{l:132,t:11,i:144}, +D{l:136,t:10,i:766}, +D{l:4,t:0,i:832}, +D{l:135,t:10,i:541}, +D{l:8,t:0,i:398}, +D{l:9,t:0,i:681}, +D{l:139,t:0,i:632}, +D{l:136,t:0,i:645}, +D{l:9,t:0,i:791}, +D{l:10,t:0,i:93}, +D{l:16,t:0,i:13}, +D{l:17,t:0,i:23}, +D{l:18,t:0,i:135}, +D{l:19,t:0,i:12}, +D{l:20,t:0,i:1}, +D{l:20,t:0,i:12}, +D{l:148,t:0,i:14}, +D{l:6,t:11,i:247}, +D{l:137,t:11,i:555}, +D{l:134,t:0,i:20}, +D{l:132,t:0,i:800}, +D{l:135,t:0,i:1841}, +D{l:139,t:10,i:983}, +D{l:137,t:10,i:768}, +D{l:132,t:10,i:584}, +D{l:141,t:11,i:51}, +D{l:6,t:0,i:1993}, +D{l:4,t:11,i:620}, +D{l:138,t:11,i:280}, +D{l:136,t:0,i:769}, +D{l:11,t:0,i:290}, +D{l:11,t:0,i:665}, +D{l:7,t:11,i:1810}, +D{l:11,t:11,i:866}, +D{l:12,t:11,i:103}, +D{l:13,t:11,i:495}, +D{l:17,t:11,i:67}, +D{l:147,t:11,i:74}, +D{l:134,t:0,i:1426}, +D{l:139,t:0,i:60}, +D{l:4,t:10,i:326}, +D{l:135,t:10,i:1770}, +D{l:7,t:0,i:1874}, +D{l:9,t:0,i:641}, +D{l:132,t:10,i:226}, +D{l:6,t:0,i:644}, +D{l:5,t:10,i:426}, +D{l:8,t:10,i:30}, +D{l:9,t:10,i:2}, +D{l:11,t:10,i:549}, +D{l:147,t:10,i:122}, +D{l:5,t:11,i:428}, +D{l:138,t:11,i:442}, +D{l:135,t:11,i:1871}, +D{l:135,t:0,i:1757}, +D{l:147,t:10,i:117}, +D{l:135,t:0,i:937}, +D{l:135,t:0,i:1652}, +D{l:6,t:0,i:654}, +D{l:134,t:0,i:1476}, +D{l:133,t:11,i:99}, +D{l:135,t:0,i:527}, +D{l:132,t:10,i:345}, +D{l:4,t:10,i:385}, +D{l:4,t:11,i:397}, +D{l:7,t:10,i:265}, +D{l:135,t:10,i:587}, +D{l:4,t:0,i:579}, +D{l:5,t:0,i:226}, +D{l:5,t:0,i:323}, +D{l:135,t:0,i:960}, +D{l:134,t:0,i:1486}, +D{l:8,t:11,i:502}, +D{l:144,t:11,i:9}, +D{l:4,t:10,i:347}, +D{l:5,t:10,i:423}, +D{l:5,t:10,i:996}, +D{l:135,t:10,i:1329}, +D{l:7,t:11,i:727}, +D{l:146,t:11,i:73}, +D{l:4,t:11,i:485}, +D{l:7,t:11,i:353}, +D{l:7,t:10,i:1259}, +D{l:7,t:11,i:1523}, +D{l:9,t:10,i:125}, +D{l:139,t:10,i:65}, +D{l:6,t:0,i:325}, +D{l:5,t:10,i:136}, +D{l:6,t:11,i:366}, +D{l:7,t:11,i:1384}, +D{l:7,t:11,i:1601}, +D{l:136,t:10,i:644}, +D{l:138,t:11,i:160}, +D{l:6,t:0,i:1345}, +D{l:137,t:11,i:282}, +D{l:18,t:0,i:91}, +D{l:147,t:0,i:70}, +D{l:136,t:0,i:404}, +D{l:4,t:11,i:157}, +D{l:133,t:11,i:471}, +D{l:133,t:0,i:973}, +D{l:6,t:0,i:135}, +D{l:135,t:0,i:1176}, +D{l:8,t:11,i:116}, +D{l:11,t:11,i:551}, +D{l:142,t:11,i:159}, +D{l:4,t:0,i:549}, +D{l:4,t:10,i:433}, +D{l:133,t:10,i:719}, +D{l:136,t:0,i:976}, +D{l:5,t:11,i:160}, +D{l:7,t:11,i:363}, +D{l:7,t:11,i:589}, +D{l:10,t:11,i:170}, +D{l:141,t:11,i:55}, +D{l:144,t:0,i:21}, +D{l:144,t:0,i:51}, +D{l:135,t:0,i:314}, +D{l:135,t:10,i:1363}, +D{l:4,t:11,i:108}, +D{l:7,t:11,i:405}, +D{l:10,t:11,i:491}, +D{l:139,t:11,i:498}, +D{l:146,t:0,i:4}, +D{l:4,t:10,i:555}, +D{l:8,t:10,i:536}, +D{l:10,t:10,i:288}, +D{l:139,t:10,i:1005}, +D{l:135,t:11,i:1005}, +D{l:6,t:0,i:281}, +D{l:7,t:0,i:6}, +D{l:8,t:0,i:282}, +D{l:8,t:0,i:480}, +D{l:8,t:0,i:499}, +D{l:9,t:0,i:198}, +D{l:10,t:0,i:143}, +D{l:10,t:0,i:169}, +D{l:10,t:0,i:211}, +D{l:10,t:0,i:417}, +D{l:10,t:0,i:574}, +D{l:11,t:0,i:147}, +D{l:11,t:0,i:395}, +D{l:12,t:0,i:75}, +D{l:12,t:0,i:407}, +D{l:12,t:0,i:608}, +D{l:13,t:0,i:500}, +D{l:142,t:0,i:251}, +D{l:6,t:0,i:1093}, +D{l:6,t:0,i:1405}, +D{l:9,t:10,i:370}, +D{l:138,t:10,i:90}, +D{l:4,t:11,i:926}, +D{l:133,t:11,i:983}, +D{l:135,t:0,i:1776}, +D{l:134,t:0,i:1528}, +D{l:132,t:0,i:419}, +D{l:132,t:11,i:538}, +D{l:6,t:11,i:294}, +D{l:7,t:11,i:1267}, +D{l:136,t:11,i:624}, +D{l:135,t:11,i:1772}, +D{l:138,t:11,i:301}, +D{l:4,t:10,i:257}, +D{l:135,t:10,i:2031}, +D{l:4,t:0,i:138}, +D{l:7,t:0,i:1012}, +D{l:7,t:0,i:1280}, +D{l:9,t:0,i:76}, +D{l:135,t:10,i:1768}, +D{l:132,t:11,i:757}, +D{l:5,t:0,i:29}, +D{l:140,t:0,i:638}, +D{l:7,t:11,i:655}, +D{l:135,t:11,i:1844}, +D{l:7,t:0,i:1418}, +D{l:6,t:11,i:257}, +D{l:135,t:11,i:1522}, +D{l:8,t:11,i:469}, +D{l:138,t:11,i:47}, +D{l:142,t:11,i:278}, +D{l:6,t:10,i:83}, +D{l:6,t:10,i:1733}, +D{l:135,t:10,i:1389}, +D{l:11,t:11,i:204}, +D{l:11,t:11,i:243}, +D{l:140,t:11,i:293}, +D{l:135,t:11,i:1875}, +D{l:6,t:0,i:1710}, +D{l:135,t:0,i:2038}, +D{l:137,t:11,i:299}, +D{l:4,t:0,i:17}, +D{l:5,t:0,i:23}, +D{l:7,t:0,i:995}, +D{l:11,t:0,i:383}, +D{l:11,t:0,i:437}, +D{l:12,t:0,i:460}, +D{l:140,t:0,i:532}, +D{l:133,t:0,i:862}, +D{l:137,t:10,i:696}, +D{l:6,t:0,i:592}, +D{l:138,t:0,i:946}, +D{l:138,t:11,i:599}, +D{l:7,t:10,i:1718}, +D{l:9,t:10,i:95}, +D{l:9,t:10,i:274}, +D{l:10,t:10,i:279}, +D{l:10,t:10,i:317}, +D{l:10,t:10,i:420}, +D{l:11,t:10,i:303}, +D{l:11,t:10,i:808}, +D{l:12,t:10,i:134}, +D{l:12,t:10,i:367}, +D{l:13,t:10,i:149}, +D{l:13,t:10,i:347}, +D{l:14,t:10,i:349}, +D{l:14,t:10,i:406}, +D{l:18,t:10,i:22}, +D{l:18,t:10,i:89}, +D{l:18,t:10,i:122}, +D{l:147,t:10,i:47}, +D{l:8,t:0,i:70}, +D{l:12,t:0,i:171}, +D{l:141,t:0,i:272}, +D{l:133,t:10,i:26}, +D{l:132,t:10,i:550}, +D{l:137,t:0,i:812}, +D{l:10,t:0,i:233}, +D{l:139,t:0,i:76}, +D{l:134,t:0,i:988}, +D{l:134,t:0,i:442}, +D{l:136,t:10,i:822}, +D{l:7,t:0,i:896}, +D{l:4,t:10,i:902}, +D{l:5,t:10,i:809}, +D{l:134,t:10,i:122}, +D{l:5,t:11,i:150}, +D{l:7,t:11,i:106}, +D{l:8,t:11,i:603}, +D{l:9,t:11,i:593}, +D{l:9,t:11,i:634}, +D{l:10,t:11,i:44}, +D{l:10,t:11,i:173}, +D{l:11,t:11,i:462}, +D{l:11,t:11,i:515}, +D{l:13,t:11,i:216}, +D{l:13,t:11,i:288}, +D{l:142,t:11,i:400}, +D{l:136,t:0,i:483}, +D{l:135,t:10,i:262}, +D{l:6,t:0,i:1709}, +D{l:133,t:10,i:620}, +D{l:4,t:10,i:34}, +D{l:5,t:10,i:574}, +D{l:7,t:10,i:279}, +D{l:7,t:10,i:1624}, +D{l:136,t:10,i:601}, +D{l:137,t:10,i:170}, +D{l:147,t:0,i:119}, +D{l:12,t:11,i:108}, +D{l:141,t:11,i:291}, +D{l:11,t:0,i:69}, +D{l:12,t:0,i:105}, +D{l:12,t:0,i:117}, +D{l:13,t:0,i:213}, +D{l:14,t:0,i:13}, +D{l:14,t:0,i:62}, +D{l:14,t:0,i:177}, +D{l:14,t:0,i:421}, +D{l:15,t:0,i:19}, +D{l:146,t:0,i:141}, +D{l:137,t:0,i:309}, +D{l:11,t:11,i:278}, +D{l:142,t:11,i:73}, +D{l:7,t:0,i:608}, +D{l:7,t:0,i:976}, +D{l:9,t:0,i:146}, +D{l:10,t:0,i:206}, +D{l:10,t:0,i:596}, +D{l:13,t:0,i:218}, +D{l:142,t:0,i:153}, +D{l:133,t:10,i:332}, +D{l:6,t:10,i:261}, +D{l:8,t:10,i:182}, +D{l:139,t:10,i:943}, +D{l:4,t:11,i:493}, +D{l:144,t:11,i:55}, +D{l:134,t:10,i:1721}, +D{l:132,t:0,i:768}, +D{l:4,t:10,i:933}, +D{l:133,t:10,i:880}, +D{l:7,t:11,i:555}, +D{l:7,t:11,i:1316}, +D{l:7,t:11,i:1412}, +D{l:7,t:11,i:1839}, +D{l:9,t:11,i:192}, +D{l:9,t:11,i:589}, +D{l:11,t:11,i:241}, +D{l:11,t:11,i:676}, +D{l:11,t:11,i:811}, +D{l:11,t:11,i:891}, +D{l:12,t:11,i:140}, +D{l:12,t:11,i:346}, +D{l:12,t:11,i:479}, +D{l:13,t:11,i:30}, +D{l:13,t:11,i:49}, +D{l:13,t:11,i:381}, +D{l:14,t:11,i:188}, +D{l:15,t:11,i:150}, +D{l:16,t:11,i:76}, +D{l:18,t:11,i:30}, +D{l:148,t:11,i:52}, +D{l:4,t:0,i:518}, +D{l:135,t:0,i:1136}, +D{l:6,t:11,i:568}, +D{l:7,t:11,i:112}, +D{l:7,t:11,i:1804}, +D{l:8,t:11,i:362}, +D{l:8,t:11,i:410}, +D{l:8,t:11,i:830}, +D{l:9,t:11,i:514}, +D{l:11,t:11,i:649}, +D{l:142,t:11,i:157}, +D{l:135,t:11,i:673}, +D{l:8,t:0,i:689}, +D{l:137,t:0,i:863}, +D{l:4,t:0,i:18}, +D{l:7,t:0,i:145}, +D{l:7,t:0,i:444}, +D{l:7,t:0,i:1278}, +D{l:8,t:0,i:49}, +D{l:8,t:0,i:400}, +D{l:9,t:0,i:71}, +D{l:9,t:0,i:250}, +D{l:10,t:0,i:459}, +D{l:12,t:0,i:160}, +D{l:16,t:0,i:24}, +D{l:132,t:11,i:625}, +D{l:140,t:0,i:1020}, +D{l:4,t:0,i:997}, +D{l:6,t:0,i:1946}, +D{l:6,t:0,i:1984}, +D{l:134,t:0,i:1998}, +D{l:6,t:11,i:16}, +D{l:6,t:11,i:158}, +D{l:7,t:11,i:43}, +D{l:7,t:11,i:129}, +D{l:7,t:11,i:181}, +D{l:8,t:11,i:276}, +D{l:8,t:11,i:377}, +D{l:10,t:11,i:523}, +D{l:11,t:11,i:816}, +D{l:12,t:11,i:455}, +D{l:13,t:11,i:303}, +D{l:142,t:11,i:135}, +D{l:133,t:10,i:812}, +D{l:134,t:0,i:658}, +D{l:4,t:11,i:1}, +D{l:7,t:11,i:1143}, +D{l:7,t:11,i:1463}, +D{l:8,t:11,i:61}, +D{l:9,t:11,i:207}, +D{l:9,t:11,i:390}, +D{l:9,t:11,i:467}, +D{l:139,t:11,i:836}, +D{l:150,t:11,i:26}, +D{l:140,t:0,i:106}, +D{l:6,t:0,i:1827}, +D{l:10,t:0,i:931}, +D{l:18,t:0,i:166}, +D{l:20,t:0,i:114}, +D{l:4,t:10,i:137}, +D{l:7,t:10,i:1178}, +D{l:7,t:11,i:1319}, +D{l:135,t:10,i:1520}, +D{l:133,t:0,i:1010}, +D{l:4,t:11,i:723}, +D{l:5,t:11,i:895}, +D{l:7,t:11,i:1031}, +D{l:8,t:11,i:199}, +D{l:8,t:11,i:340}, +D{l:9,t:11,i:153}, +D{l:9,t:11,i:215}, +D{l:10,t:11,i:21}, +D{l:10,t:11,i:59}, +D{l:10,t:11,i:80}, +D{l:10,t:11,i:224}, +D{l:11,t:11,i:229}, +D{l:11,t:11,i:652}, +D{l:12,t:11,i:192}, +D{l:13,t:11,i:146}, +D{l:142,t:11,i:91}, +D{l:132,t:11,i:295}, +D{l:6,t:11,i:619}, +D{l:7,t:11,i:898}, +D{l:7,t:11,i:1092}, +D{l:8,t:11,i:485}, +D{l:18,t:11,i:28}, +D{l:147,t:11,i:116}, +D{l:137,t:11,i:51}, +D{l:6,t:10,i:1661}, +D{l:7,t:10,i:1975}, +D{l:7,t:10,i:2009}, +D{l:135,t:10,i:2011}, +D{l:5,t:11,i:309}, +D{l:140,t:11,i:211}, +D{l:5,t:0,i:87}, +D{l:7,t:0,i:313}, +D{l:7,t:0,i:1103}, +D{l:10,t:0,i:208}, +D{l:10,t:0,i:582}, +D{l:11,t:0,i:389}, +D{l:11,t:0,i:813}, +D{l:12,t:0,i:385}, +D{l:13,t:0,i:286}, +D{l:14,t:0,i:124}, +D{l:146,t:0,i:108}, +D{l:5,t:11,i:125}, +D{l:8,t:11,i:77}, +D{l:138,t:11,i:15}, +D{l:132,t:0,i:267}, +D{l:133,t:0,i:703}, +D{l:137,t:11,i:155}, +D{l:133,t:11,i:439}, +D{l:11,t:11,i:164}, +D{l:140,t:11,i:76}, +D{l:9,t:0,i:496}, +D{l:5,t:10,i:89}, +D{l:7,t:10,i:1915}, +D{l:9,t:10,i:185}, +D{l:9,t:10,i:235}, +D{l:10,t:10,i:64}, +D{l:10,t:10,i:270}, +D{l:10,t:10,i:403}, +D{l:10,t:10,i:469}, +D{l:10,t:10,i:529}, +D{l:10,t:10,i:590}, +D{l:11,t:10,i:140}, +D{l:11,t:10,i:860}, +D{l:13,t:10,i:1}, +D{l:13,t:10,i:422}, +D{l:14,t:10,i:341}, +D{l:14,t:10,i:364}, +D{l:17,t:10,i:93}, +D{l:18,t:10,i:113}, +D{l:19,t:10,i:97}, +D{l:147,t:10,i:113}, +D{l:133,t:10,i:695}, +D{l:135,t:0,i:1121}, +D{l:5,t:10,i:6}, +D{l:6,t:10,i:183}, +D{l:7,t:10,i:680}, +D{l:7,t:10,i:978}, +D{l:7,t:10,i:1013}, +D{l:7,t:10,i:1055}, +D{l:12,t:10,i:230}, +D{l:13,t:10,i:172}, +D{l:146,t:10,i:29}, +D{l:4,t:11,i:8}, +D{l:7,t:11,i:1152}, +D{l:7,t:11,i:1153}, +D{l:7,t:11,i:1715}, +D{l:9,t:11,i:374}, +D{l:10,t:11,i:478}, +D{l:139,t:11,i:648}, +D{l:135,t:11,i:1099}, +D{l:6,t:10,i:29}, +D{l:139,t:10,i:63}, +D{l:4,t:0,i:561}, +D{l:10,t:0,i:249}, +D{l:139,t:0,i:209}, +D{l:132,t:0,i:760}, +D{l:7,t:11,i:799}, +D{l:138,t:11,i:511}, +D{l:136,t:11,i:87}, +D{l:9,t:0,i:154}, +D{l:140,t:0,i:485}, +D{l:136,t:0,i:255}, +D{l:132,t:0,i:323}, +D{l:140,t:0,i:419}, +D{l:132,t:10,i:311}, +D{l:134,t:10,i:1740}, +D{l:4,t:0,i:368}, +D{l:135,t:0,i:641}, +D{l:7,t:10,i:170}, +D{l:8,t:10,i:90}, +D{l:8,t:10,i:177}, +D{l:8,t:10,i:415}, +D{l:11,t:10,i:714}, +D{l:142,t:10,i:281}, +D{l:4,t:11,i:69}, +D{l:5,t:11,i:122}, +D{l:9,t:11,i:656}, +D{l:138,t:11,i:464}, +D{l:5,t:11,i:849}, +D{l:134,t:11,i:1633}, +D{l:8,t:0,i:522}, +D{l:142,t:0,i:328}, +D{l:11,t:10,i:91}, +D{l:13,t:10,i:129}, +D{l:15,t:10,i:101}, +D{l:145,t:10,i:125}, +D{l:7,t:0,i:562}, +D{l:8,t:0,i:551}, +D{l:4,t:10,i:494}, +D{l:6,t:10,i:74}, +D{l:7,t:10,i:44}, +D{l:11,t:11,i:499}, +D{l:12,t:10,i:17}, +D{l:15,t:10,i:5}, +D{l:148,t:10,i:11}, +D{l:4,t:10,i:276}, +D{l:133,t:10,i:296}, +D{l:9,t:0,i:92}, +D{l:147,t:0,i:91}, +D{l:4,t:10,i:7}, +D{l:5,t:10,i:90}, +D{l:5,t:10,i:158}, +D{l:6,t:10,i:542}, +D{l:7,t:10,i:221}, +D{l:7,t:10,i:1574}, +D{l:9,t:10,i:490}, +D{l:10,t:10,i:540}, +D{l:11,t:10,i:443}, +D{l:139,t:10,i:757}, +D{l:6,t:0,i:525}, +D{l:6,t:0,i:1976}, +D{l:8,t:0,i:806}, +D{l:9,t:0,i:876}, +D{l:140,t:0,i:284}, +D{l:5,t:11,i:859}, +D{l:7,t:10,i:588}, +D{l:7,t:11,i:1160}, +D{l:8,t:11,i:107}, +D{l:9,t:10,i:175}, +D{l:9,t:11,i:291}, +D{l:9,t:11,i:439}, +D{l:10,t:10,i:530}, +D{l:10,t:11,i:663}, +D{l:11,t:11,i:609}, +D{l:140,t:11,i:197}, +D{l:7,t:11,i:168}, +D{l:13,t:11,i:196}, +D{l:141,t:11,i:237}, +D{l:139,t:0,i:958}, +D{l:133,t:0,i:594}, +D{l:135,t:10,i:580}, +D{l:7,t:10,i:88}, +D{l:136,t:10,i:627}, +D{l:6,t:0,i:479}, +D{l:6,t:0,i:562}, +D{l:7,t:0,i:1060}, +D{l:13,t:0,i:6}, +D{l:5,t:10,i:872}, +D{l:6,t:10,i:57}, +D{l:7,t:10,i:471}, +D{l:9,t:10,i:447}, +D{l:137,t:10,i:454}, +D{l:136,t:11,i:413}, +D{l:145,t:11,i:19}, +D{l:4,t:11,i:117}, +D{l:6,t:11,i:372}, +D{l:7,t:11,i:1905}, +D{l:142,t:11,i:323}, +D{l:4,t:11,i:722}, +D{l:139,t:11,i:471}, +D{l:17,t:0,i:61}, +D{l:5,t:10,i:31}, +D{l:134,t:10,i:614}, +D{l:8,t:10,i:330}, +D{l:140,t:10,i:477}, +D{l:7,t:10,i:1200}, +D{l:138,t:10,i:460}, +D{l:6,t:10,i:424}, +D{l:135,t:10,i:1866}, +D{l:6,t:0,i:1641}, +D{l:136,t:0,i:820}, +D{l:6,t:0,i:1556}, +D{l:134,t:0,i:1618}, +D{l:9,t:11,i:5}, +D{l:12,t:11,i:216}, +D{l:12,t:11,i:294}, +D{l:12,t:11,i:298}, +D{l:12,t:11,i:400}, +D{l:12,t:11,i:518}, +D{l:13,t:11,i:229}, +D{l:143,t:11,i:139}, +D{l:15,t:11,i:155}, +D{l:144,t:11,i:79}, +D{l:4,t:0,i:302}, +D{l:135,t:0,i:1766}, +D{l:5,t:10,i:13}, +D{l:134,t:10,i:142}, +D{l:6,t:0,i:148}, +D{l:7,t:0,i:1313}, +D{l:7,t:10,i:116}, +D{l:8,t:10,i:322}, +D{l:8,t:10,i:755}, +D{l:9,t:10,i:548}, +D{l:10,t:10,i:714}, +D{l:11,t:10,i:884}, +D{l:141,t:10,i:324}, +D{l:137,t:0,i:676}, +D{l:9,t:11,i:88}, +D{l:139,t:11,i:270}, +D{l:5,t:11,i:12}, +D{l:7,t:11,i:375}, +D{l:137,t:11,i:438}, +D{l:134,t:0,i:1674}, +D{l:7,t:10,i:1472}, +D{l:135,t:10,i:1554}, +D{l:11,t:0,i:178}, +D{l:7,t:10,i:1071}, +D{l:7,t:10,i:1541}, +D{l:7,t:10,i:1767}, +D{l:7,t:10,i:1806}, +D{l:11,t:10,i:162}, +D{l:11,t:10,i:242}, +D{l:12,t:10,i:605}, +D{l:15,t:10,i:26}, +D{l:144,t:10,i:44}, +D{l:6,t:0,i:389}, +D{l:7,t:0,i:149}, +D{l:9,t:0,i:142}, +D{l:138,t:0,i:94}, +D{l:140,t:11,i:71}, +D{l:145,t:10,i:115}, +D{l:6,t:0,i:8}, +D{l:7,t:0,i:1881}, +D{l:8,t:0,i:91}, +D{l:11,t:11,i:966}, +D{l:12,t:11,i:287}, +D{l:13,t:11,i:342}, +D{l:13,t:11,i:402}, +D{l:15,t:11,i:110}, +D{l:143,t:11,i:163}, +D{l:4,t:11,i:258}, +D{l:136,t:11,i:639}, +D{l:6,t:11,i:22}, +D{l:7,t:11,i:903}, +D{l:138,t:11,i:577}, +D{l:133,t:11,i:681}, +D{l:135,t:10,i:1111}, +D{l:135,t:11,i:1286}, +D{l:9,t:0,i:112}, +D{l:8,t:10,i:1}, +D{l:138,t:10,i:326}, +D{l:5,t:10,i:488}, +D{l:6,t:10,i:527}, +D{l:7,t:10,i:489}, +D{l:7,t:10,i:1636}, +D{l:8,t:10,i:121}, +D{l:8,t:10,i:144}, +D{l:8,t:10,i:359}, +D{l:9,t:10,i:193}, +D{l:9,t:10,i:241}, +D{l:9,t:10,i:336}, +D{l:9,t:10,i:882}, +D{l:11,t:10,i:266}, +D{l:11,t:10,i:372}, +D{l:11,t:10,i:944}, +D{l:12,t:10,i:401}, +D{l:140,t:10,i:641}, +D{l:4,t:11,i:664}, +D{l:133,t:11,i:804}, +D{l:6,t:0,i:747}, +D{l:134,t:0,i:1015}, +D{l:135,t:0,i:1746}, +D{l:9,t:10,i:31}, +D{l:10,t:10,i:244}, +D{l:10,t:10,i:699}, +D{l:12,t:10,i:149}, +D{l:141,t:10,i:497}, +D{l:133,t:10,i:377}, +D{l:135,t:0,i:24}, +D{l:6,t:0,i:1352}, +D{l:5,t:11,i:32}, +D{l:145,t:10,i:101}, +D{l:7,t:0,i:1530}, +D{l:10,t:0,i:158}, +D{l:13,t:0,i:13}, +D{l:13,t:0,i:137}, +D{l:13,t:0,i:258}, +D{l:14,t:0,i:111}, +D{l:14,t:0,i:225}, +D{l:14,t:0,i:253}, +D{l:14,t:0,i:304}, +D{l:14,t:0,i:339}, +D{l:14,t:0,i:417}, +D{l:146,t:0,i:33}, +D{l:4,t:0,i:503}, +D{l:135,t:0,i:1661}, +D{l:5,t:0,i:130}, +D{l:6,t:0,i:845}, +D{l:7,t:0,i:1314}, +D{l:9,t:0,i:610}, +D{l:10,t:0,i:718}, +D{l:11,t:0,i:601}, +D{l:11,t:0,i:819}, +D{l:11,t:0,i:946}, +D{l:140,t:0,i:536}, +D{l:10,t:0,i:149}, +D{l:11,t:0,i:280}, +D{l:142,t:0,i:336}, +D{l:134,t:0,i:1401}, +D{l:135,t:0,i:1946}, +D{l:8,t:0,i:663}, +D{l:144,t:0,i:8}, +D{l:134,t:0,i:1607}, +D{l:135,t:10,i:2023}, +D{l:4,t:11,i:289}, +D{l:7,t:11,i:629}, +D{l:7,t:11,i:1698}, +D{l:7,t:11,i:1711}, +D{l:140,t:11,i:215}, +D{l:6,t:11,i:450}, +D{l:136,t:11,i:109}, +D{l:10,t:0,i:882}, +D{l:10,t:0,i:883}, +D{l:10,t:0,i:914}, +D{l:138,t:0,i:928}, +D{l:133,t:10,i:843}, +D{l:136,t:11,i:705}, +D{l:132,t:10,i:554}, +D{l:133,t:10,i:536}, +D{l:5,t:0,i:417}, +D{l:9,t:10,i:79}, +D{l:11,t:10,i:625}, +D{l:145,t:10,i:7}, +D{l:7,t:11,i:1238}, +D{l:142,t:11,i:37}, +D{l:4,t:0,i:392}, +D{l:135,t:0,i:1597}, +D{l:5,t:0,i:433}, +D{l:9,t:0,i:633}, +D{l:11,t:0,i:629}, +D{l:132,t:10,i:424}, +D{l:7,t:10,i:336}, +D{l:136,t:10,i:785}, +D{l:134,t:11,i:355}, +D{l:6,t:0,i:234}, +D{l:7,t:0,i:769}, +D{l:9,t:0,i:18}, +D{l:138,t:0,i:358}, +D{l:4,t:10,i:896}, +D{l:134,t:10,i:1777}, +D{l:138,t:11,i:323}, +D{l:7,t:0,i:140}, +D{l:7,t:0,i:1950}, +D{l:8,t:0,i:680}, +D{l:11,t:0,i:817}, +D{l:147,t:0,i:88}, +D{l:7,t:0,i:1222}, +D{l:138,t:0,i:386}, +D{l:139,t:11,i:908}, +D{l:11,t:0,i:249}, +D{l:12,t:0,i:313}, +D{l:16,t:0,i:66}, +D{l:145,t:0,i:26}, +D{l:134,t:0,i:5}, +D{l:7,t:10,i:750}, +D{l:9,t:10,i:223}, +D{l:11,t:10,i:27}, +D{l:11,t:10,i:466}, +D{l:12,t:10,i:624}, +D{l:14,t:10,i:265}, +D{l:146,t:10,i:61}, +D{l:134,t:11,i:26}, +D{l:134,t:0,i:1216}, +D{l:5,t:0,i:963}, +D{l:134,t:0,i:1773}, +D{l:4,t:11,i:414}, +D{l:5,t:11,i:467}, +D{l:9,t:11,i:654}, +D{l:10,t:11,i:451}, +D{l:12,t:11,i:59}, +D{l:141,t:11,i:375}, +D{l:135,t:11,i:17}, +D{l:4,t:10,i:603}, +D{l:133,t:10,i:661}, +D{l:4,t:10,i:11}, +D{l:6,t:10,i:128}, +D{l:7,t:10,i:231}, +D{l:7,t:10,i:1533}, +D{l:138,t:10,i:725}, +D{l:135,t:11,i:955}, +D{l:7,t:0,i:180}, +D{l:8,t:0,i:509}, +D{l:136,t:0,i:792}, +D{l:132,t:10,i:476}, +D{l:132,t:0,i:1002}, +D{l:133,t:11,i:538}, +D{l:135,t:10,i:1807}, +D{l:132,t:0,i:931}, +D{l:7,t:0,i:943}, +D{l:11,t:0,i:614}, +D{l:140,t:0,i:747}, +D{l:135,t:0,i:1837}, +D{l:9,t:10,i:20}, +D{l:10,t:10,i:324}, +D{l:10,t:10,i:807}, +D{l:139,t:10,i:488}, +D{l:134,t:0,i:641}, +D{l:6,t:11,i:280}, +D{l:10,t:11,i:502}, +D{l:11,t:11,i:344}, +D{l:140,t:11,i:38}, +D{l:5,t:11,i:45}, +D{l:7,t:11,i:1161}, +D{l:11,t:11,i:448}, +D{l:11,t:11,i:880}, +D{l:13,t:11,i:139}, +D{l:13,t:11,i:407}, +D{l:15,t:11,i:16}, +D{l:17,t:11,i:95}, +D{l:18,t:11,i:66}, +D{l:18,t:11,i:88}, +D{l:18,t:11,i:123}, +D{l:149,t:11,i:7}, +D{l:9,t:0,i:280}, +D{l:138,t:0,i:134}, +D{l:22,t:0,i:22}, +D{l:23,t:0,i:5}, +D{l:151,t:0,i:29}, +D{l:136,t:11,i:777}, +D{l:4,t:0,i:90}, +D{l:5,t:0,i:545}, +D{l:7,t:0,i:754}, +D{l:9,t:0,i:186}, +D{l:10,t:0,i:72}, +D{l:10,t:0,i:782}, +D{l:11,t:0,i:577}, +D{l:11,t:0,i:610}, +D{l:11,t:0,i:960}, +D{l:12,t:0,i:354}, +D{l:12,t:0,i:362}, +D{l:12,t:0,i:595}, +D{l:4,t:11,i:410}, +D{l:135,t:11,i:521}, +D{l:135,t:11,i:1778}, +D{l:5,t:10,i:112}, +D{l:6,t:10,i:103}, +D{l:134,t:10,i:150}, +D{l:138,t:10,i:356}, +D{l:132,t:0,i:742}, +D{l:7,t:0,i:151}, +D{l:9,t:0,i:329}, +D{l:139,t:0,i:254}, +D{l:8,t:0,i:853}, +D{l:8,t:0,i:881}, +D{l:8,t:0,i:911}, +D{l:8,t:0,i:912}, +D{l:10,t:0,i:872}, +D{l:12,t:0,i:741}, +D{l:12,t:0,i:742}, +D{l:152,t:0,i:18}, +D{l:4,t:11,i:573}, +D{l:136,t:11,i:655}, +D{l:6,t:0,i:921}, +D{l:134,t:0,i:934}, +D{l:9,t:0,i:187}, +D{l:10,t:0,i:36}, +D{l:11,t:0,i:1016}, +D{l:17,t:0,i:44}, +D{l:146,t:0,i:64}, +D{l:7,t:0,i:833}, +D{l:136,t:0,i:517}, +D{l:4,t:0,i:506}, +D{l:5,t:0,i:295}, +D{l:135,t:0,i:1680}, +D{l:4,t:10,i:708}, +D{l:8,t:10,i:15}, +D{l:9,t:10,i:50}, +D{l:9,t:10,i:386}, +D{l:11,t:10,i:18}, +D{l:11,t:10,i:529}, +D{l:140,t:10,i:228}, +D{l:7,t:0,i:251}, +D{l:7,t:0,i:1701}, +D{l:8,t:0,i:436}, +D{l:4,t:10,i:563}, +D{l:7,t:10,i:592}, +D{l:7,t:10,i:637}, +D{l:7,t:10,i:770}, +D{l:8,t:10,i:463}, +D{l:9,t:10,i:60}, +D{l:9,t:10,i:335}, +D{l:9,t:10,i:904}, +D{l:10,t:10,i:73}, +D{l:11,t:10,i:434}, +D{l:12,t:10,i:585}, +D{l:13,t:10,i:331}, +D{l:18,t:10,i:110}, +D{l:148,t:10,i:60}, +D{l:132,t:10,i:502}, +D{l:136,t:0,i:584}, +D{l:6,t:10,i:347}, +D{l:138,t:10,i:161}, +D{l:7,t:0,i:987}, +D{l:9,t:0,i:688}, +D{l:10,t:0,i:522}, +D{l:11,t:0,i:788}, +D{l:12,t:0,i:137}, +D{l:12,t:0,i:566}, +D{l:14,t:0,i:9}, +D{l:14,t:0,i:24}, +D{l:14,t:0,i:64}, +D{l:7,t:11,i:899}, +D{l:142,t:11,i:325}, +D{l:4,t:0,i:214}, +D{l:5,t:0,i:500}, +D{l:5,t:10,i:102}, +D{l:6,t:10,i:284}, +D{l:7,t:10,i:1079}, +D{l:7,t:10,i:1423}, +D{l:7,t:10,i:1702}, +D{l:8,t:10,i:470}, +D{l:9,t:10,i:554}, +D{l:9,t:10,i:723}, +D{l:139,t:10,i:333}, +D{l:7,t:10,i:246}, +D{l:135,t:10,i:840}, +D{l:6,t:10,i:10}, +D{l:8,t:10,i:571}, +D{l:9,t:10,i:739}, +D{l:143,t:10,i:91}, +D{l:133,t:10,i:626}, +D{l:146,t:0,i:195}, +D{l:134,t:0,i:1775}, +D{l:7,t:0,i:389}, +D{l:7,t:0,i:700}, +D{l:7,t:0,i:940}, +D{l:8,t:0,i:514}, +D{l:9,t:0,i:116}, +D{l:9,t:0,i:535}, +D{l:10,t:0,i:118}, +D{l:11,t:0,i:107}, +D{l:11,t:0,i:148}, +D{l:11,t:0,i:922}, +D{l:12,t:0,i:254}, +D{l:12,t:0,i:421}, +D{l:142,t:0,i:238}, +D{l:5,t:10,i:18}, +D{l:6,t:10,i:526}, +D{l:13,t:10,i:24}, +D{l:13,t:10,i:110}, +D{l:19,t:10,i:5}, +D{l:147,t:10,i:44}, +D{l:132,t:0,i:743}, +D{l:11,t:0,i:292}, +D{l:4,t:10,i:309}, +D{l:5,t:10,i:462}, +D{l:7,t:10,i:970}, +D{l:135,t:10,i:1097}, +D{l:22,t:10,i:30}, +D{l:150,t:10,i:33}, +D{l:139,t:11,i:338}, +D{l:135,t:11,i:1598}, +D{l:7,t:0,i:1283}, +D{l:9,t:0,i:227}, +D{l:11,t:0,i:325}, +D{l:11,t:0,i:408}, +D{l:14,t:0,i:180}, +D{l:146,t:0,i:47}, +D{l:4,t:0,i:953}, +D{l:6,t:0,i:1805}, +D{l:6,t:0,i:1814}, +D{l:6,t:0,i:1862}, +D{l:140,t:0,i:774}, +D{l:6,t:11,i:611}, +D{l:135,t:11,i:1733}, +D{l:135,t:11,i:1464}, +D{l:5,t:0,i:81}, +D{l:7,t:0,i:146}, +D{l:7,t:0,i:1342}, +D{l:8,t:0,i:53}, +D{l:8,t:0,i:561}, +D{l:8,t:0,i:694}, +D{l:8,t:0,i:754}, +D{l:9,t:0,i:115}, +D{l:9,t:0,i:179}, +D{l:9,t:0,i:894}, +D{l:10,t:0,i:462}, +D{l:10,t:0,i:813}, +D{l:11,t:0,i:230}, +D{l:11,t:0,i:657}, +D{l:11,t:0,i:699}, +D{l:11,t:0,i:748}, +D{l:12,t:0,i:119}, +D{l:12,t:0,i:200}, +D{l:12,t:0,i:283}, +D{l:142,t:0,i:273}, +D{l:5,t:0,i:408}, +D{l:6,t:0,i:789}, +D{l:6,t:0,i:877}, +D{l:6,t:0,i:1253}, +D{l:6,t:0,i:1413}, +D{l:137,t:0,i:747}, +D{l:134,t:10,i:1704}, +D{l:135,t:11,i:663}, +D{l:6,t:0,i:1910}, +D{l:6,t:0,i:1915}, +D{l:6,t:0,i:1923}, +D{l:9,t:0,i:913}, +D{l:9,t:0,i:928}, +D{l:9,t:0,i:950}, +D{l:9,t:0,i:954}, +D{l:9,t:0,i:978}, +D{l:9,t:0,i:993}, +D{l:12,t:0,i:812}, +D{l:12,t:0,i:819}, +D{l:12,t:0,i:831}, +D{l:12,t:0,i:833}, +D{l:12,t:0,i:838}, +D{l:12,t:0,i:909}, +D{l:12,t:0,i:928}, +D{l:12,t:0,i:931}, +D{l:12,t:0,i:950}, +D{l:15,t:0,i:186}, +D{l:15,t:0,i:187}, +D{l:15,t:0,i:195}, +D{l:15,t:0,i:196}, +D{l:15,t:0,i:209}, +D{l:15,t:0,i:215}, +D{l:15,t:0,i:236}, +D{l:15,t:0,i:241}, +D{l:15,t:0,i:249}, +D{l:15,t:0,i:253}, +D{l:18,t:0,i:180}, +D{l:18,t:0,i:221}, +D{l:18,t:0,i:224}, +D{l:18,t:0,i:227}, +D{l:18,t:0,i:229}, +D{l:149,t:0,i:60}, +D{l:7,t:0,i:1826}, +D{l:135,t:0,i:1938}, +D{l:11,t:0,i:490}, +D{l:18,t:0,i:143}, +D{l:5,t:10,i:86}, +D{l:7,t:10,i:743}, +D{l:9,t:10,i:85}, +D{l:10,t:10,i:281}, +D{l:10,t:10,i:432}, +D{l:12,t:10,i:251}, +D{l:13,t:10,i:118}, +D{l:142,t:10,i:378}, +D{l:5,t:10,i:524}, +D{l:133,t:10,i:744}, +D{l:141,t:11,i:442}, +D{l:10,t:10,i:107}, +D{l:140,t:10,i:436}, +D{l:135,t:11,i:503}, +D{l:134,t:0,i:1162}, +D{l:132,t:10,i:927}, +D{l:7,t:0,i:30}, +D{l:8,t:0,i:86}, +D{l:8,t:0,i:315}, +D{l:8,t:0,i:700}, +D{l:9,t:0,i:576}, +D{l:9,t:0,i:858}, +D{l:10,t:0,i:414}, +D{l:11,t:0,i:310}, +D{l:11,t:0,i:888}, +D{l:11,t:0,i:904}, +D{l:12,t:0,i:361}, +D{l:13,t:0,i:248}, +D{l:13,t:0,i:371}, +D{l:14,t:0,i:142}, +D{l:12,t:10,i:670}, +D{l:146,t:10,i:94}, +D{l:134,t:0,i:721}, +D{l:4,t:11,i:113}, +D{l:5,t:11,i:163}, +D{l:5,t:11,i:735}, +D{l:7,t:11,i:1009}, +D{l:7,t:10,i:1149}, +D{l:9,t:11,i:9}, +D{l:9,t:10,i:156}, +D{l:9,t:11,i:771}, +D{l:12,t:11,i:90}, +D{l:13,t:11,i:138}, +D{l:13,t:11,i:410}, +D{l:143,t:11,i:128}, +D{l:138,t:0,i:839}, +D{l:133,t:10,i:778}, +D{l:137,t:0,i:617}, +D{l:133,t:10,i:502}, +D{l:8,t:10,i:196}, +D{l:10,t:10,i:283}, +D{l:139,t:10,i:406}, +D{l:6,t:0,i:428}, +D{l:7,t:0,i:524}, +D{l:8,t:0,i:169}, +D{l:8,t:0,i:234}, +D{l:9,t:0,i:480}, +D{l:138,t:0,i:646}, +D{l:133,t:10,i:855}, +D{l:134,t:0,i:1648}, +D{l:7,t:0,i:1205}, +D{l:138,t:0,i:637}, +D{l:7,t:0,i:1596}, +D{l:4,t:11,i:935}, +D{l:133,t:11,i:823}, +D{l:5,t:11,i:269}, +D{l:7,t:11,i:434}, +D{l:7,t:11,i:891}, +D{l:8,t:11,i:339}, +D{l:9,t:11,i:702}, +D{l:11,t:11,i:594}, +D{l:11,t:11,i:718}, +D{l:145,t:11,i:100}, +D{l:7,t:11,i:878}, +D{l:9,t:11,i:485}, +D{l:141,t:11,i:264}, +D{l:4,t:0,i:266}, +D{l:8,t:0,i:4}, +D{l:9,t:0,i:39}, +D{l:10,t:0,i:166}, +D{l:11,t:0,i:918}, +D{l:12,t:0,i:635}, +D{l:20,t:0,i:10}, +D{l:22,t:0,i:27}, +D{l:22,t:0,i:43}, +D{l:22,t:0,i:52}, +D{l:134,t:11,i:1713}, +D{l:7,t:10,i:1400}, +D{l:9,t:10,i:446}, +D{l:138,t:10,i:45}, +D{l:135,t:11,i:900}, +D{l:132,t:0,i:862}, +D{l:134,t:0,i:1554}, +D{l:135,t:11,i:1033}, +D{l:19,t:0,i:16}, +D{l:147,t:11,i:16}, +D{l:135,t:11,i:1208}, +D{l:7,t:0,i:157}, +D{l:136,t:0,i:279}, +D{l:6,t:0,i:604}, +D{l:136,t:0,i:391}, +D{l:13,t:10,i:455}, +D{l:15,t:10,i:99}, +D{l:15,t:10,i:129}, +D{l:144,t:10,i:68}, +D{l:135,t:10,i:172}, +D{l:7,t:0,i:945}, +D{l:11,t:0,i:713}, +D{l:139,t:0,i:744}, +D{l:4,t:0,i:973}, +D{l:10,t:0,i:877}, +D{l:10,t:0,i:937}, +D{l:10,t:0,i:938}, +D{l:140,t:0,i:711}, +D{l:139,t:0,i:1022}, +D{l:132,t:10,i:568}, +D{l:142,t:11,i:143}, +D{l:4,t:0,i:567}, +D{l:9,t:0,i:859}, +D{l:132,t:10,i:732}, +D{l:7,t:0,i:1846}, +D{l:136,t:0,i:628}, +D{l:136,t:10,i:733}, +D{l:133,t:0,i:762}, +D{l:4,t:10,i:428}, +D{l:135,t:10,i:1789}, +D{l:10,t:0,i:784}, +D{l:13,t:0,i:191}, +D{l:7,t:10,i:2015}, +D{l:140,t:10,i:665}, +D{l:133,t:0,i:298}, +D{l:7,t:0,i:633}, +D{l:7,t:0,i:905}, +D{l:7,t:0,i:909}, +D{l:7,t:0,i:1538}, +D{l:9,t:0,i:767}, +D{l:140,t:0,i:636}, +D{l:138,t:10,i:806}, +D{l:132,t:0,i:795}, +D{l:139,t:0,i:301}, +D{l:135,t:0,i:1970}, +D{l:5,t:11,i:625}, +D{l:135,t:11,i:1617}, +D{l:135,t:11,i:275}, +D{l:7,t:11,i:37}, +D{l:8,t:11,i:425}, +D{l:8,t:11,i:693}, +D{l:9,t:11,i:720}, +D{l:10,t:11,i:380}, +D{l:10,t:11,i:638}, +D{l:11,t:11,i:273}, +D{l:11,t:11,i:307}, +D{l:11,t:11,i:473}, +D{l:12,t:11,i:61}, +D{l:143,t:11,i:43}, +D{l:135,t:11,i:198}, +D{l:134,t:0,i:1236}, +D{l:7,t:0,i:369}, +D{l:12,t:0,i:644}, +D{l:12,t:0,i:645}, +D{l:144,t:0,i:90}, +D{l:19,t:0,i:15}, +D{l:149,t:0,i:27}, +D{l:6,t:0,i:71}, +D{l:7,t:0,i:845}, +D{l:8,t:0,i:160}, +D{l:9,t:0,i:318}, +D{l:6,t:10,i:1623}, +D{l:134,t:10,i:1681}, +D{l:134,t:0,i:1447}, +D{l:134,t:0,i:1255}, +D{l:138,t:0,i:735}, +D{l:8,t:0,i:76}, +D{l:132,t:11,i:168}, +D{l:6,t:10,i:1748}, +D{l:8,t:10,i:715}, +D{l:9,t:10,i:802}, +D{l:10,t:10,i:46}, +D{l:10,t:10,i:819}, +D{l:13,t:10,i:308}, +D{l:14,t:10,i:351}, +D{l:14,t:10,i:363}, +D{l:146,t:10,i:67}, +D{l:135,t:11,i:91}, +D{l:6,t:0,i:474}, +D{l:4,t:10,i:63}, +D{l:133,t:10,i:347}, +D{l:133,t:10,i:749}, +D{l:138,t:0,i:841}, +D{l:133,t:10,i:366}, +D{l:6,t:0,i:836}, +D{l:132,t:11,i:225}, +D{l:135,t:0,i:1622}, +D{l:135,t:10,i:89}, +D{l:140,t:0,i:735}, +D{l:134,t:0,i:1601}, +D{l:138,t:11,i:145}, +D{l:6,t:0,i:1390}, +D{l:137,t:0,i:804}, +D{l:142,t:0,i:394}, +D{l:6,t:11,i:15}, +D{l:7,t:11,i:70}, +D{l:10,t:11,i:240}, +D{l:147,t:11,i:93}, +D{l:6,t:0,i:96}, +D{l:135,t:0,i:1426}, +D{l:4,t:0,i:651}, +D{l:133,t:0,i:289}, +D{l:7,t:11,i:956}, +D{l:7,t:10,i:977}, +D{l:7,t:11,i:1157}, +D{l:7,t:11,i:1506}, +D{l:7,t:11,i:1606}, +D{l:7,t:11,i:1615}, +D{l:7,t:11,i:1619}, +D{l:7,t:11,i:1736}, +D{l:7,t:11,i:1775}, +D{l:8,t:11,i:590}, +D{l:9,t:11,i:324}, +D{l:9,t:11,i:736}, +D{l:9,t:11,i:774}, +D{l:9,t:11,i:776}, +D{l:9,t:11,i:784}, +D{l:10,t:11,i:567}, +D{l:10,t:11,i:708}, +D{l:11,t:11,i:518}, +D{l:11,t:11,i:613}, +D{l:11,t:11,i:695}, +D{l:11,t:11,i:716}, +D{l:11,t:11,i:739}, +D{l:11,t:11,i:770}, +D{l:11,t:11,i:771}, +D{l:11,t:11,i:848}, +D{l:11,t:11,i:857}, +D{l:11,t:11,i:931}, +D{l:11,t:11,i:947}, +D{l:12,t:11,i:326}, +D{l:12,t:11,i:387}, +D{l:12,t:11,i:484}, +D{l:12,t:11,i:528}, +D{l:12,t:11,i:552}, +D{l:12,t:11,i:613}, +D{l:13,t:11,i:189}, +D{l:13,t:11,i:256}, +D{l:13,t:11,i:340}, +D{l:13,t:11,i:432}, +D{l:13,t:11,i:436}, +D{l:13,t:11,i:440}, +D{l:13,t:11,i:454}, +D{l:14,t:11,i:174}, +D{l:14,t:11,i:220}, +D{l:14,t:11,i:284}, +D{l:14,t:11,i:390}, +D{l:145,t:11,i:121}, +D{l:7,t:0,i:688}, +D{l:8,t:0,i:35}, +D{l:9,t:0,i:511}, +D{l:10,t:0,i:767}, +D{l:147,t:0,i:118}, +D{l:134,t:0,i:667}, +D{l:4,t:0,i:513}, +D{l:5,t:10,i:824}, +D{l:133,t:10,i:941}, +D{l:7,t:10,i:440}, +D{l:8,t:10,i:230}, +D{l:139,t:10,i:106}, +D{l:134,t:0,i:2034}, +D{l:135,t:11,i:1399}, +D{l:143,t:11,i:66}, +D{l:135,t:11,i:1529}, +D{l:4,t:11,i:145}, +D{l:6,t:11,i:176}, +D{l:7,t:11,i:395}, +D{l:9,t:11,i:562}, +D{l:144,t:11,i:28}, +D{l:132,t:11,i:501}, +D{l:132,t:0,i:704}, +D{l:134,t:0,i:1524}, +D{l:7,t:0,i:1078}, +D{l:134,t:11,i:464}, +D{l:6,t:11,i:509}, +D{l:10,t:11,i:82}, +D{l:20,t:11,i:91}, +D{l:151,t:11,i:13}, +D{l:4,t:0,i:720}, +D{l:133,t:0,i:306}, +D{l:133,t:0,i:431}, +D{l:7,t:0,i:1196}, +D{l:4,t:10,i:914}, +D{l:5,t:10,i:800}, +D{l:133,t:10,i:852}, +D{l:135,t:11,i:1189}, +D{l:10,t:0,i:54}, +D{l:141,t:10,i:115}, +D{l:7,t:10,i:564}, +D{l:142,t:10,i:168}, +D{l:5,t:0,i:464}, +D{l:6,t:0,i:236}, +D{l:7,t:0,i:696}, +D{l:7,t:0,i:914}, +D{l:7,t:0,i:1108}, +D{l:7,t:0,i:1448}, +D{l:9,t:0,i:15}, +D{l:9,t:0,i:564}, +D{l:10,t:0,i:14}, +D{l:12,t:0,i:565}, +D{l:13,t:0,i:449}, +D{l:14,t:0,i:53}, +D{l:15,t:0,i:13}, +D{l:16,t:0,i:64}, +D{l:17,t:0,i:41}, +D{l:4,t:10,i:918}, +D{l:133,t:10,i:876}, +D{l:6,t:0,i:1418}, +D{l:134,t:10,i:1764}, +D{l:4,t:10,i:92}, +D{l:133,t:10,i:274}, +D{l:134,t:0,i:907}, +D{l:4,t:11,i:114}, +D{l:8,t:10,i:501}, +D{l:9,t:11,i:492}, +D{l:13,t:11,i:462}, +D{l:142,t:11,i:215}, +D{l:4,t:11,i:77}, +D{l:5,t:11,i:361}, +D{l:6,t:11,i:139}, +D{l:6,t:11,i:401}, +D{l:6,t:11,i:404}, +D{l:7,t:11,i:413}, +D{l:7,t:11,i:715}, +D{l:7,t:11,i:1716}, +D{l:11,t:11,i:279}, +D{l:12,t:11,i:179}, +D{l:12,t:11,i:258}, +D{l:13,t:11,i:244}, +D{l:142,t:11,i:358}, +D{l:6,t:0,i:1767}, +D{l:12,t:0,i:194}, +D{l:145,t:0,i:107}, +D{l:134,t:11,i:1717}, +D{l:5,t:10,i:743}, +D{l:142,t:11,i:329}, +D{l:4,t:10,i:49}, +D{l:7,t:10,i:280}, +D{l:135,t:10,i:1633}, +D{l:5,t:0,i:840}, +D{l:7,t:11,i:1061}, +D{l:8,t:11,i:82}, +D{l:11,t:11,i:250}, +D{l:12,t:11,i:420}, +D{l:141,t:11,i:184}, +D{l:135,t:11,i:724}, +D{l:134,t:0,i:900}, +D{l:136,t:10,i:47}, +D{l:134,t:0,i:1436}, +D{l:144,t:11,i:0}, +D{l:6,t:0,i:675}, +D{l:7,t:0,i:1008}, +D{l:7,t:0,i:1560}, +D{l:9,t:0,i:642}, +D{l:11,t:0,i:236}, +D{l:14,t:0,i:193}, +D{l:5,t:10,i:272}, +D{l:5,t:10,i:908}, +D{l:5,t:10,i:942}, +D{l:8,t:10,i:197}, +D{l:9,t:10,i:47}, +D{l:11,t:10,i:538}, +D{l:139,t:10,i:742}, +D{l:4,t:0,i:68}, +D{l:5,t:0,i:628}, +D{l:5,t:0,i:634}, +D{l:6,t:0,i:386}, +D{l:7,t:0,i:794}, +D{l:8,t:0,i:273}, +D{l:9,t:0,i:563}, +D{l:10,t:0,i:105}, +D{l:10,t:0,i:171}, +D{l:11,t:0,i:94}, +D{l:139,t:0,i:354}, +D{l:135,t:10,i:1911}, +D{l:137,t:10,i:891}, +D{l:4,t:0,i:95}, +D{l:6,t:0,i:1297}, +D{l:6,t:0,i:1604}, +D{l:7,t:0,i:416}, +D{l:139,t:0,i:830}, +D{l:6,t:11,i:513}, +D{l:135,t:11,i:1052}, +D{l:7,t:0,i:731}, +D{l:13,t:0,i:20}, +D{l:143,t:0,i:11}, +D{l:137,t:11,i:899}, +D{l:10,t:0,i:850}, +D{l:140,t:0,i:697}, +D{l:4,t:0,i:662}, +D{l:7,t:11,i:1417}, +D{l:12,t:11,i:382}, +D{l:17,t:11,i:48}, +D{l:152,t:11,i:12}, +D{l:133,t:0,i:736}, +D{l:132,t:0,i:861}, +D{l:4,t:10,i:407}, +D{l:132,t:10,i:560}, +D{l:141,t:10,i:490}, +D{l:6,t:11,i:545}, +D{l:7,t:11,i:565}, +D{l:7,t:11,i:1669}, +D{l:10,t:11,i:114}, +D{l:11,t:11,i:642}, +D{l:140,t:11,i:618}, +D{l:6,t:0,i:871}, +D{l:134,t:0,i:1000}, +D{l:5,t:0,i:864}, +D{l:10,t:0,i:648}, +D{l:11,t:0,i:671}, +D{l:15,t:0,i:46}, +D{l:133,t:11,i:5}, +D{l:133,t:0,i:928}, +D{l:11,t:0,i:90}, +D{l:13,t:0,i:7}, +D{l:4,t:10,i:475}, +D{l:11,t:10,i:35}, +D{l:13,t:10,i:71}, +D{l:13,t:10,i:177}, +D{l:142,t:10,i:422}, +D{l:136,t:0,i:332}, +D{l:135,t:11,i:192}, +D{l:134,t:0,i:1055}, +D{l:136,t:11,i:763}, +D{l:11,t:0,i:986}, +D{l:140,t:0,i:682}, +D{l:7,t:0,i:76}, +D{l:8,t:0,i:44}, +D{l:9,t:0,i:884}, +D{l:10,t:0,i:580}, +D{l:11,t:0,i:399}, +D{l:11,t:0,i:894}, +D{l:143,t:0,i:122}, +D{l:135,t:11,i:1237}, +D{l:135,t:10,i:636}, +D{l:11,t:0,i:300}, +D{l:6,t:10,i:222}, +D{l:7,t:10,i:1620}, +D{l:8,t:10,i:409}, +D{l:137,t:10,i:693}, +D{l:4,t:11,i:87}, +D{l:5,t:11,i:250}, +D{l:10,t:11,i:601}, +D{l:13,t:11,i:298}, +D{l:13,t:11,i:353}, +D{l:141,t:11,i:376}, +D{l:5,t:0,i:518}, +D{l:10,t:0,i:340}, +D{l:11,t:0,i:175}, +D{l:149,t:0,i:16}, +D{l:140,t:0,i:771}, +D{l:6,t:0,i:1108}, +D{l:137,t:0,i:831}, +D{l:132,t:0,i:836}, +D{l:135,t:0,i:1852}, +D{l:4,t:0,i:957}, +D{l:6,t:0,i:1804}, +D{l:8,t:0,i:842}, +D{l:8,t:0,i:843}, +D{l:8,t:0,i:851}, +D{l:8,t:0,i:855}, +D{l:140,t:0,i:767}, +D{l:135,t:11,i:814}, +D{l:4,t:11,i:57}, +D{l:7,t:11,i:1195}, +D{l:7,t:11,i:1438}, +D{l:7,t:11,i:1548}, +D{l:7,t:11,i:1835}, +D{l:7,t:11,i:1904}, +D{l:9,t:11,i:757}, +D{l:10,t:11,i:604}, +D{l:139,t:11,i:519}, +D{l:133,t:10,i:882}, +D{l:138,t:0,i:246}, +D{l:4,t:0,i:934}, +D{l:5,t:0,i:202}, +D{l:8,t:0,i:610}, +D{l:7,t:11,i:1897}, +D{l:12,t:11,i:290}, +D{l:13,t:11,i:80}, +D{l:13,t:11,i:437}, +D{l:145,t:11,i:74}, +D{l:8,t:0,i:96}, +D{l:9,t:0,i:36}, +D{l:10,t:0,i:607}, +D{l:10,t:0,i:804}, +D{l:10,t:0,i:832}, +D{l:11,t:0,i:423}, +D{l:11,t:0,i:442}, +D{l:12,t:0,i:309}, +D{l:14,t:0,i:199}, +D{l:15,t:0,i:90}, +D{l:145,t:0,i:110}, +D{l:132,t:10,i:426}, +D{l:7,t:0,i:654}, +D{l:8,t:0,i:240}, +D{l:6,t:10,i:58}, +D{l:7,t:10,i:745}, +D{l:7,t:10,i:1969}, +D{l:8,t:10,i:675}, +D{l:9,t:10,i:479}, +D{l:9,t:10,i:731}, +D{l:10,t:10,i:330}, +D{l:10,t:10,i:593}, +D{l:10,t:10,i:817}, +D{l:11,t:10,i:32}, +D{l:11,t:10,i:133}, +D{l:11,t:10,i:221}, +D{l:145,t:10,i:68}, +D{l:9,t:0,i:13}, +D{l:9,t:0,i:398}, +D{l:9,t:0,i:727}, +D{l:10,t:0,i:75}, +D{l:10,t:0,i:184}, +D{l:10,t:0,i:230}, +D{l:10,t:0,i:564}, +D{l:10,t:0,i:569}, +D{l:11,t:0,i:973}, +D{l:12,t:0,i:70}, +D{l:12,t:0,i:189}, +D{l:13,t:0,i:57}, +D{l:141,t:0,i:257}, +D{l:4,t:11,i:209}, +D{l:135,t:11,i:902}, +D{l:7,t:0,i:391}, +D{l:137,t:10,i:538}, +D{l:134,t:0,i:403}, +D{l:6,t:11,i:303}, +D{l:7,t:11,i:335}, +D{l:7,t:11,i:1437}, +D{l:7,t:11,i:1668}, +D{l:8,t:11,i:553}, +D{l:8,t:11,i:652}, +D{l:8,t:11,i:656}, +D{l:9,t:11,i:558}, +D{l:11,t:11,i:743}, +D{l:149,t:11,i:18}, +D{l:132,t:11,i:559}, +D{l:11,t:0,i:75}, +D{l:142,t:0,i:267}, +D{l:6,t:0,i:815}, +D{l:141,t:11,i:2}, +D{l:141,t:0,i:366}, +D{l:137,t:0,i:631}, +D{l:133,t:11,i:1017}, +D{l:5,t:0,i:345}, +D{l:135,t:0,i:1016}, +D{l:133,t:11,i:709}, +D{l:134,t:11,i:1745}, +D{l:133,t:10,i:566}, +D{l:7,t:0,i:952}, +D{l:6,t:10,i:48}, +D{l:9,t:10,i:139}, +D{l:10,t:10,i:399}, +D{l:11,t:10,i:469}, +D{l:12,t:10,i:634}, +D{l:141,t:10,i:223}, +D{l:133,t:0,i:673}, +D{l:9,t:0,i:850}, +D{l:7,t:11,i:8}, +D{l:136,t:11,i:206}, +D{l:6,t:0,i:662}, +D{l:149,t:0,i:35}, +D{l:4,t:0,i:287}, +D{l:133,t:0,i:1018}, +D{l:6,t:10,i:114}, +D{l:7,t:10,i:1224}, +D{l:7,t:10,i:1556}, +D{l:136,t:10,i:3}, +D{l:8,t:10,i:576}, +D{l:137,t:10,i:267}, +D{l:4,t:0,i:884}, +D{l:5,t:0,i:34}, +D{l:10,t:0,i:724}, +D{l:12,t:0,i:444}, +D{l:13,t:0,i:354}, +D{l:18,t:0,i:32}, +D{l:23,t:0,i:24}, +D{l:23,t:0,i:31}, +D{l:152,t:0,i:5}, +D{l:133,t:10,i:933}, +D{l:132,t:11,i:776}, +D{l:138,t:0,i:151}, +D{l:136,t:0,i:427}, +D{l:134,t:0,i:382}, +D{l:132,t:0,i:329}, +D{l:9,t:0,i:846}, +D{l:10,t:0,i:827}, +D{l:138,t:11,i:33}, +D{l:9,t:0,i:279}, +D{l:10,t:0,i:407}, +D{l:14,t:0,i:84}, +D{l:22,t:0,i:18}, +D{l:135,t:11,i:1297}, +D{l:136,t:11,i:406}, +D{l:132,t:0,i:906}, +D{l:136,t:0,i:366}, +D{l:134,t:0,i:843}, +D{l:134,t:0,i:1443}, +D{l:135,t:0,i:1372}, +D{l:138,t:0,i:992}, +D{l:4,t:0,i:123}, +D{l:5,t:0,i:605}, +D{l:7,t:0,i:1509}, +D{l:136,t:0,i:36}, +D{l:132,t:0,i:649}, +D{l:8,t:11,i:175}, +D{l:10,t:11,i:168}, +D{l:138,t:11,i:573}, +D{l:133,t:0,i:767}, +D{l:134,t:0,i:1018}, +D{l:135,t:11,i:1305}, +D{l:12,t:10,i:30}, +D{l:13,t:10,i:148}, +D{l:14,t:10,i:87}, +D{l:14,t:10,i:182}, +D{l:16,t:10,i:42}, +D{l:148,t:10,i:70}, +D{l:134,t:11,i:607}, +D{l:4,t:0,i:273}, +D{l:5,t:0,i:658}, +D{l:133,t:0,i:995}, +D{l:6,t:0,i:72}, +D{l:139,t:11,i:174}, +D{l:10,t:0,i:483}, +D{l:12,t:0,i:368}, +D{l:7,t:10,i:56}, +D{l:7,t:10,i:1989}, +D{l:8,t:10,i:337}, +D{l:8,t:10,i:738}, +D{l:9,t:10,i:600}, +D{l:13,t:10,i:447}, +D{l:142,t:10,i:92}, +D{l:5,t:11,i:784}, +D{l:138,t:10,i:666}, +D{l:135,t:0,i:1345}, +D{l:139,t:11,i:882}, +D{l:134,t:0,i:1293}, +D{l:133,t:0,i:589}, +D{l:134,t:0,i:1988}, +D{l:5,t:0,i:117}, +D{l:6,t:0,i:514}, +D{l:6,t:0,i:541}, +D{l:7,t:0,i:1164}, +D{l:7,t:0,i:1436}, +D{l:8,t:0,i:220}, +D{l:8,t:0,i:648}, +D{l:10,t:0,i:688}, +D{l:139,t:0,i:560}, +D{l:136,t:0,i:379}, +D{l:5,t:0,i:686}, +D{l:7,t:10,i:866}, +D{l:135,t:10,i:1163}, +D{l:132,t:10,i:328}, +D{l:9,t:11,i:14}, +D{l:9,t:11,i:441}, +D{l:10,t:11,i:306}, +D{l:139,t:11,i:9}, +D{l:4,t:10,i:101}, +D{l:135,t:10,i:1171}, +D{l:5,t:10,i:833}, +D{l:136,t:10,i:744}, +D{l:5,t:11,i:161}, +D{l:7,t:11,i:839}, +D{l:135,t:11,i:887}, +D{l:7,t:0,i:196}, +D{l:10,t:0,i:765}, +D{l:11,t:0,i:347}, +D{l:11,t:0,i:552}, +D{l:11,t:0,i:790}, +D{l:12,t:0,i:263}, +D{l:13,t:0,i:246}, +D{l:13,t:0,i:270}, +D{l:13,t:0,i:395}, +D{l:14,t:0,i:176}, +D{l:14,t:0,i:190}, +D{l:14,t:0,i:398}, +D{l:14,t:0,i:412}, +D{l:15,t:0,i:32}, +D{l:15,t:0,i:63}, +D{l:16,t:0,i:88}, +D{l:147,t:0,i:105}, +D{l:6,t:10,i:9}, +D{l:6,t:10,i:397}, +D{l:7,t:10,i:53}, +D{l:7,t:10,i:1742}, +D{l:10,t:10,i:632}, +D{l:11,t:10,i:828}, +D{l:140,t:10,i:146}, +D{l:5,t:0,i:381}, +D{l:135,t:0,i:1792}, +D{l:134,t:0,i:1452}, +D{l:135,t:11,i:429}, +D{l:8,t:0,i:367}, +D{l:10,t:0,i:760}, +D{l:14,t:0,i:79}, +D{l:20,t:0,i:17}, +D{l:152,t:0,i:0}, +D{l:7,t:0,i:616}, +D{l:138,t:0,i:413}, +D{l:11,t:10,i:417}, +D{l:12,t:10,i:223}, +D{l:140,t:10,i:265}, +D{l:7,t:11,i:1611}, +D{l:13,t:11,i:14}, +D{l:15,t:11,i:44}, +D{l:19,t:11,i:13}, +D{l:148,t:11,i:76}, +D{l:135,t:0,i:1229}, +D{l:6,t:0,i:120}, +D{l:7,t:0,i:1188}, +D{l:7,t:0,i:1710}, +D{l:8,t:0,i:286}, +D{l:9,t:0,i:667}, +D{l:11,t:0,i:592}, +D{l:139,t:0,i:730}, +D{l:135,t:11,i:1814}, +D{l:135,t:0,i:1146}, +D{l:4,t:10,i:186}, +D{l:5,t:10,i:157}, +D{l:8,t:10,i:168}, +D{l:138,t:10,i:6}, +D{l:4,t:0,i:352}, +D{l:135,t:0,i:687}, +D{l:4,t:0,i:192}, +D{l:5,t:0,i:49}, +D{l:6,t:0,i:200}, +D{l:6,t:0,i:293}, +D{l:6,t:0,i:1696}, +D{l:135,t:0,i:1151}, +D{l:133,t:10,i:875}, +D{l:5,t:10,i:773}, +D{l:5,t:10,i:991}, +D{l:6,t:10,i:1635}, +D{l:134,t:10,i:1788}, +D{l:7,t:10,i:111}, +D{l:136,t:10,i:581}, +D{l:6,t:0,i:935}, +D{l:134,t:0,i:1151}, +D{l:134,t:0,i:1050}, +D{l:132,t:0,i:650}, +D{l:132,t:0,i:147}, +D{l:11,t:0,i:194}, +D{l:12,t:0,i:62}, +D{l:12,t:0,i:88}, +D{l:11,t:11,i:194}, +D{l:12,t:11,i:62}, +D{l:140,t:11,i:88}, +D{l:6,t:0,i:339}, +D{l:135,t:0,i:923}, +D{l:134,t:10,i:1747}, +D{l:7,t:11,i:643}, +D{l:136,t:11,i:236}, +D{l:133,t:0,i:934}, +D{l:7,t:10,i:1364}, +D{l:7,t:10,i:1907}, +D{l:141,t:10,i:158}, +D{l:132,t:10,i:659}, +D{l:4,t:10,i:404}, +D{l:135,t:10,i:675}, +D{l:7,t:11,i:581}, +D{l:9,t:11,i:644}, +D{l:137,t:11,i:699}, +D{l:13,t:0,i:211}, +D{l:14,t:0,i:133}, +D{l:14,t:0,i:204}, +D{l:15,t:0,i:64}, +D{l:15,t:0,i:69}, +D{l:15,t:0,i:114}, +D{l:16,t:0,i:10}, +D{l:19,t:0,i:23}, +D{l:19,t:0,i:35}, +D{l:19,t:0,i:39}, +D{l:19,t:0,i:51}, +D{l:19,t:0,i:71}, +D{l:19,t:0,i:75}, +D{l:152,t:0,i:15}, +D{l:133,t:10,i:391}, +D{l:5,t:11,i:54}, +D{l:135,t:11,i:1513}, +D{l:7,t:0,i:222}, +D{l:8,t:0,i:341}, +D{l:5,t:10,i:540}, +D{l:134,t:10,i:1697}, +D{l:134,t:10,i:78}, +D{l:132,t:11,i:744}, +D{l:136,t:0,i:293}, +D{l:137,t:11,i:701}, +D{l:7,t:11,i:930}, +D{l:10,t:11,i:402}, +D{l:10,t:11,i:476}, +D{l:13,t:11,i:452}, +D{l:18,t:11,i:55}, +D{l:147,t:11,i:104}, +D{l:132,t:0,i:637}, +D{l:133,t:10,i:460}, +D{l:8,t:11,i:50}, +D{l:137,t:11,i:624}, +D{l:132,t:11,i:572}, +D{l:134,t:0,i:1159}, +D{l:4,t:10,i:199}, +D{l:139,t:10,i:34}, +D{l:134,t:0,i:847}, +D{l:134,t:10,i:388}, +D{l:6,t:11,i:43}, +D{l:7,t:11,i:38}, +D{l:8,t:11,i:248}, +D{l:9,t:11,i:504}, +D{l:138,t:11,i:513}, +D{l:9,t:0,i:683}, +D{l:4,t:10,i:511}, +D{l:6,t:10,i:608}, +D{l:9,t:10,i:333}, +D{l:10,t:10,i:602}, +D{l:11,t:10,i:441}, +D{l:11,t:10,i:723}, +D{l:11,t:10,i:976}, +D{l:140,t:10,i:357}, +D{l:9,t:0,i:867}, +D{l:138,t:0,i:837}, +D{l:6,t:0,i:944}, +D{l:135,t:11,i:326}, +D{l:135,t:0,i:1809}, +D{l:5,t:10,i:938}, +D{l:7,t:11,i:783}, +D{l:136,t:10,i:707}, +D{l:133,t:11,i:766}, +D{l:133,t:11,i:363}, +D{l:6,t:0,i:170}, +D{l:7,t:0,i:1080}, +D{l:8,t:0,i:395}, +D{l:8,t:0,i:487}, +D{l:141,t:0,i:147}, +D{l:6,t:11,i:258}, +D{l:140,t:11,i:409}, +D{l:4,t:0,i:535}, +D{l:8,t:0,i:618}, +D{l:5,t:11,i:249}, +D{l:148,t:11,i:82}, +D{l:6,t:0,i:1379}, +D{l:149,t:11,i:15}, +D{l:135,t:0,i:1625}, +D{l:150,t:0,i:23}, +D{l:5,t:11,i:393}, +D{l:6,t:11,i:378}, +D{l:7,t:11,i:1981}, +D{l:9,t:11,i:32}, +D{l:9,t:11,i:591}, +D{l:10,t:11,i:685}, +D{l:10,t:11,i:741}, +D{l:142,t:11,i:382}, +D{l:133,t:11,i:788}, +D{l:7,t:11,i:1968}, +D{l:10,t:11,i:19}, +D{l:139,t:11,i:911}, +D{l:7,t:11,i:1401}, +D{l:135,t:11,i:1476}, +D{l:4,t:11,i:61}, +D{l:5,t:11,i:58}, +D{l:5,t:11,i:171}, +D{l:5,t:11,i:635}, +D{l:5,t:11,i:683}, +D{l:5,t:11,i:700}, +D{l:6,t:11,i:291}, +D{l:6,t:11,i:566}, +D{l:7,t:11,i:1650}, +D{l:11,t:11,i:523}, +D{l:12,t:11,i:273}, +D{l:12,t:11,i:303}, +D{l:15,t:11,i:39}, +D{l:143,t:11,i:111}, +D{l:6,t:10,i:469}, +D{l:7,t:10,i:1709}, +D{l:138,t:10,i:515}, +D{l:4,t:0,i:778}, +D{l:134,t:11,i:589}, +D{l:132,t:0,i:46}, +D{l:5,t:0,i:811}, +D{l:6,t:0,i:1679}, +D{l:6,t:0,i:1714}, +D{l:135,t:0,i:2032}, +D{l:7,t:0,i:1458}, +D{l:9,t:0,i:407}, +D{l:11,t:0,i:15}, +D{l:12,t:0,i:651}, +D{l:149,t:0,i:37}, +D{l:7,t:0,i:938}, +D{l:132,t:10,i:500}, +D{l:6,t:0,i:34}, +D{l:7,t:0,i:69}, +D{l:7,t:0,i:1089}, +D{l:7,t:0,i:1281}, +D{l:8,t:0,i:708}, +D{l:8,t:0,i:721}, +D{l:9,t:0,i:363}, +D{l:148,t:0,i:98}, +D{l:10,t:11,i:231}, +D{l:147,t:11,i:124}, +D{l:7,t:11,i:726}, +D{l:152,t:11,i:9}, +D{l:5,t:10,i:68}, +D{l:134,t:10,i:383}, +D{l:136,t:11,i:583}, +D{l:4,t:11,i:917}, +D{l:133,t:11,i:1005}, +D{l:11,t:10,i:216}, +D{l:139,t:10,i:340}, +D{l:135,t:11,i:1675}, +D{l:8,t:0,i:441}, +D{l:10,t:0,i:314}, +D{l:143,t:0,i:3}, +D{l:132,t:11,i:919}, +D{l:4,t:10,i:337}, +D{l:6,t:10,i:353}, +D{l:7,t:10,i:1934}, +D{l:8,t:10,i:488}, +D{l:137,t:10,i:429}, +D{l:7,t:0,i:889}, +D{l:7,t:10,i:1795}, +D{l:8,t:10,i:259}, +D{l:9,t:10,i:135}, +D{l:9,t:10,i:177}, +D{l:9,t:10,i:860}, +D{l:10,t:10,i:825}, +D{l:11,t:10,i:115}, +D{l:11,t:10,i:370}, +D{l:11,t:10,i:405}, +D{l:11,t:10,i:604}, +D{l:12,t:10,i:10}, +D{l:12,t:10,i:667}, +D{l:12,t:10,i:669}, +D{l:13,t:10,i:76}, +D{l:14,t:10,i:310}, +D{l:15,t:10,i:76}, +D{l:15,t:10,i:147}, +D{l:148,t:10,i:23}, +D{l:4,t:10,i:15}, +D{l:4,t:11,i:255}, +D{l:5,t:10,i:22}, +D{l:5,t:11,i:302}, +D{l:6,t:11,i:132}, +D{l:6,t:10,i:244}, +D{l:7,t:10,i:40}, +D{l:7,t:11,i:128}, +D{l:7,t:10,i:200}, +D{l:7,t:11,i:283}, +D{l:7,t:10,i:906}, +D{l:7,t:10,i:1199}, +D{l:7,t:11,i:1299}, +D{l:9,t:10,i:616}, +D{l:10,t:11,i:52}, +D{l:10,t:11,i:514}, +D{l:10,t:10,i:716}, +D{l:11,t:10,i:635}, +D{l:11,t:10,i:801}, +D{l:11,t:11,i:925}, +D{l:12,t:10,i:458}, +D{l:13,t:11,i:92}, +D{l:142,t:11,i:309}, +D{l:132,t:0,i:462}, +D{l:137,t:11,i:173}, +D{l:135,t:10,i:1735}, +D{l:8,t:0,i:525}, +D{l:5,t:10,i:598}, +D{l:7,t:10,i:791}, +D{l:8,t:10,i:108}, +D{l:137,t:10,i:123}, +D{l:5,t:0,i:73}, +D{l:6,t:0,i:23}, +D{l:134,t:0,i:338}, +D{l:132,t:0,i:676}, +D{l:132,t:10,i:683}, +D{l:7,t:0,i:725}, +D{l:8,t:0,i:498}, +D{l:139,t:0,i:268}, +D{l:12,t:0,i:21}, +D{l:151,t:0,i:7}, +D{l:135,t:0,i:773}, +D{l:4,t:10,i:155}, +D{l:135,t:10,i:1689}, +D{l:4,t:0,i:164}, +D{l:5,t:0,i:730}, +D{l:5,t:10,i:151}, +D{l:5,t:10,i:741}, +D{l:6,t:11,i:210}, +D{l:7,t:10,i:498}, +D{l:7,t:10,i:870}, +D{l:7,t:10,i:1542}, +D{l:12,t:10,i:213}, +D{l:14,t:10,i:36}, +D{l:14,t:10,i:391}, +D{l:17,t:10,i:111}, +D{l:18,t:10,i:6}, +D{l:18,t:10,i:46}, +D{l:18,t:10,i:151}, +D{l:19,t:10,i:36}, +D{l:20,t:10,i:32}, +D{l:20,t:10,i:56}, +D{l:20,t:10,i:69}, +D{l:20,t:10,i:102}, +D{l:21,t:10,i:4}, +D{l:22,t:10,i:8}, +D{l:22,t:10,i:10}, +D{l:22,t:10,i:14}, +D{l:150,t:10,i:31}, +D{l:4,t:10,i:624}, +D{l:135,t:10,i:1752}, +D{l:4,t:0,i:583}, +D{l:9,t:0,i:936}, +D{l:15,t:0,i:214}, +D{l:18,t:0,i:199}, +D{l:24,t:0,i:26}, +D{l:134,t:11,i:588}, +D{l:7,t:0,i:1462}, +D{l:11,t:0,i:659}, +D{l:4,t:11,i:284}, +D{l:134,t:11,i:223}, +D{l:133,t:0,i:220}, +D{l:139,t:0,i:803}, +D{l:132,t:0,i:544}, +D{l:4,t:10,i:492}, +D{l:133,t:10,i:451}, +D{l:16,t:0,i:98}, +D{l:148,t:0,i:119}, +D{l:4,t:11,i:218}, +D{l:7,t:11,i:526}, +D{l:143,t:11,i:137}, +D{l:135,t:10,i:835}, +D{l:4,t:11,i:270}, +D{l:5,t:11,i:192}, +D{l:6,t:11,i:332}, +D{l:7,t:11,i:1322}, +D{l:13,t:11,i:9}, +D{l:13,t:10,i:70}, +D{l:14,t:11,i:104}, +D{l:142,t:11,i:311}, +D{l:132,t:10,i:539}, +D{l:140,t:11,i:661}, +D{l:5,t:0,i:176}, +D{l:6,t:0,i:437}, +D{l:6,t:0,i:564}, +D{l:11,t:0,i:181}, +D{l:141,t:0,i:183}, +D{l:135,t:0,i:1192}, +D{l:6,t:10,i:113}, +D{l:135,t:10,i:436}, +D{l:136,t:10,i:718}, +D{l:135,t:10,i:520}, +D{l:135,t:0,i:1878}, +D{l:140,t:11,i:196}, +D{l:7,t:11,i:379}, +D{l:8,t:11,i:481}, +D{l:137,t:11,i:377}, +D{l:5,t:11,i:1003}, +D{l:6,t:11,i:149}, +D{l:137,t:11,i:746}, +D{l:8,t:11,i:262}, +D{l:9,t:11,i:627}, +D{l:10,t:11,i:18}, +D{l:11,t:11,i:214}, +D{l:11,t:11,i:404}, +D{l:11,t:11,i:457}, +D{l:11,t:11,i:780}, +D{l:11,t:11,i:849}, +D{l:11,t:11,i:913}, +D{l:13,t:11,i:330}, +D{l:13,t:11,i:401}, +D{l:142,t:11,i:200}, +D{l:149,t:0,i:26}, +D{l:136,t:11,i:304}, +D{l:132,t:11,i:142}, +D{l:135,t:0,i:944}, +D{l:4,t:0,i:790}, +D{l:5,t:0,i:273}, +D{l:134,t:0,i:394}, +D{l:134,t:0,i:855}, +D{l:4,t:0,i:135}, +D{l:6,t:0,i:127}, +D{l:7,t:0,i:1185}, +D{l:7,t:0,i:1511}, +D{l:8,t:0,i:613}, +D{l:11,t:0,i:5}, +D{l:12,t:0,i:336}, +D{l:12,t:0,i:495}, +D{l:12,t:0,i:586}, +D{l:12,t:0,i:660}, +D{l:12,t:0,i:668}, +D{l:14,t:0,i:385}, +D{l:15,t:0,i:118}, +D{l:17,t:0,i:20}, +D{l:146,t:0,i:98}, +D{l:6,t:0,i:230}, +D{l:9,t:0,i:752}, +D{l:18,t:0,i:109}, +D{l:12,t:10,i:610}, +D{l:13,t:10,i:431}, +D{l:144,t:10,i:59}, +D{l:7,t:0,i:1954}, +D{l:135,t:11,i:925}, +D{l:4,t:11,i:471}, +D{l:5,t:11,i:51}, +D{l:6,t:11,i:602}, +D{l:8,t:11,i:484}, +D{l:10,t:11,i:195}, +D{l:140,t:11,i:159}, +D{l:132,t:10,i:307}, +D{l:136,t:11,i:688}, +D{l:132,t:11,i:697}, +D{l:7,t:11,i:812}, +D{l:7,t:11,i:1261}, +D{l:7,t:11,i:1360}, +D{l:9,t:11,i:632}, +D{l:140,t:11,i:352}, +D{l:5,t:0,i:162}, +D{l:8,t:0,i:68}, +D{l:133,t:10,i:964}, +D{l:4,t:0,i:654}, +D{l:136,t:11,i:212}, +D{l:4,t:0,i:156}, +D{l:7,t:0,i:998}, +D{l:7,t:0,i:1045}, +D{l:7,t:0,i:1860}, +D{l:9,t:0,i:48}, +D{l:9,t:0,i:692}, +D{l:11,t:0,i:419}, +D{l:139,t:0,i:602}, +D{l:133,t:11,i:221}, +D{l:4,t:11,i:373}, +D{l:5,t:11,i:283}, +D{l:6,t:11,i:480}, +D{l:135,t:11,i:609}, +D{l:142,t:11,i:216}, +D{l:132,t:0,i:240}, +D{l:6,t:11,i:192}, +D{l:9,t:11,i:793}, +D{l:145,t:11,i:55}, +D{l:4,t:10,i:75}, +D{l:5,t:10,i:180}, +D{l:6,t:10,i:500}, +D{l:7,t:10,i:58}, +D{l:7,t:10,i:710}, +D{l:138,t:10,i:645}, +D{l:4,t:11,i:132}, +D{l:5,t:11,i:69}, +D{l:5,t:10,i:649}, +D{l:135,t:11,i:1242}, +D{l:6,t:10,i:276}, +D{l:7,t:10,i:282}, +D{l:7,t:10,i:879}, +D{l:7,t:10,i:924}, +D{l:8,t:10,i:459}, +D{l:9,t:10,i:599}, +D{l:9,t:10,i:754}, +D{l:11,t:10,i:574}, +D{l:12,t:10,i:128}, +D{l:12,t:10,i:494}, +D{l:13,t:10,i:52}, +D{l:13,t:10,i:301}, +D{l:15,t:10,i:30}, +D{l:143,t:10,i:132}, +D{l:132,t:10,i:200}, +D{l:4,t:11,i:111}, +D{l:135,t:11,i:302}, +D{l:9,t:0,i:197}, +D{l:10,t:0,i:300}, +D{l:12,t:0,i:473}, +D{l:13,t:0,i:90}, +D{l:141,t:0,i:405}, +D{l:132,t:11,i:767}, +D{l:6,t:11,i:42}, +D{l:7,t:11,i:1416}, +D{l:7,t:11,i:1590}, +D{l:7,t:11,i:2005}, +D{l:8,t:11,i:131}, +D{l:8,t:11,i:466}, +D{l:9,t:11,i:672}, +D{l:13,t:11,i:252}, +D{l:148,t:11,i:103}, +D{l:8,t:0,i:958}, +D{l:8,t:0,i:999}, +D{l:10,t:0,i:963}, +D{l:138,t:0,i:1001}, +D{l:135,t:10,i:1621}, +D{l:135,t:0,i:858}, +D{l:4,t:0,i:606}, +D{l:137,t:11,i:444}, +D{l:6,t:11,i:44}, +D{l:136,t:11,i:368}, +D{l:139,t:11,i:172}, +D{l:4,t:11,i:570}, +D{l:133,t:11,i:120}, +D{l:139,t:11,i:624}, +D{l:7,t:0,i:1978}, +D{l:8,t:0,i:676}, +D{l:6,t:10,i:225}, +D{l:137,t:10,i:211}, +D{l:7,t:0,i:972}, +D{l:11,t:0,i:102}, +D{l:136,t:10,i:687}, +D{l:6,t:11,i:227}, +D{l:135,t:11,i:1589}, +D{l:8,t:10,i:58}, +D{l:9,t:10,i:724}, +D{l:11,t:10,i:809}, +D{l:13,t:10,i:113}, +D{l:145,t:10,i:72}, +D{l:4,t:0,i:361}, +D{l:133,t:0,i:315}, +D{l:132,t:0,i:461}, +D{l:6,t:10,i:345}, +D{l:135,t:10,i:1247}, +D{l:132,t:0,i:472}, +D{l:8,t:10,i:767}, +D{l:8,t:10,i:803}, +D{l:9,t:10,i:301}, +D{l:137,t:10,i:903}, +D{l:135,t:11,i:1333}, +D{l:135,t:11,i:477}, +D{l:7,t:10,i:1949}, +D{l:136,t:10,i:674}, +D{l:6,t:0,i:905}, +D{l:138,t:0,i:747}, +D{l:133,t:0,i:155}, +D{l:134,t:10,i:259}, +D{l:7,t:0,i:163}, +D{l:8,t:0,i:319}, +D{l:9,t:0,i:402}, +D{l:10,t:0,i:24}, +D{l:10,t:0,i:681}, +D{l:11,t:0,i:200}, +D{l:12,t:0,i:253}, +D{l:12,t:0,i:410}, +D{l:142,t:0,i:219}, +D{l:5,t:0,i:475}, +D{l:7,t:0,i:1780}, +D{l:9,t:0,i:230}, +D{l:11,t:0,i:297}, +D{l:11,t:0,i:558}, +D{l:14,t:0,i:322}, +D{l:19,t:0,i:76}, +D{l:6,t:11,i:1667}, +D{l:7,t:11,i:2036}, +D{l:138,t:11,i:600}, +D{l:136,t:10,i:254}, +D{l:6,t:0,i:848}, +D{l:135,t:0,i:1956}, +D{l:6,t:11,i:511}, +D{l:140,t:11,i:132}, +D{l:5,t:11,i:568}, +D{l:6,t:11,i:138}, +D{l:135,t:11,i:1293}, +D{l:6,t:0,i:631}, +D{l:137,t:0,i:838}, +D{l:149,t:0,i:36}, +D{l:4,t:11,i:565}, +D{l:8,t:11,i:23}, +D{l:136,t:11,i:827}, +D{l:5,t:0,i:944}, +D{l:134,t:0,i:1769}, +D{l:4,t:0,i:144}, +D{l:6,t:0,i:842}, +D{l:6,t:0,i:1400}, +D{l:4,t:11,i:922}, +D{l:133,t:11,i:1023}, +D{l:133,t:10,i:248}, +D{l:9,t:10,i:800}, +D{l:10,t:10,i:693}, +D{l:11,t:10,i:482}, +D{l:11,t:10,i:734}, +D{l:139,t:10,i:789}, +D{l:7,t:11,i:1002}, +D{l:139,t:11,i:145}, +D{l:4,t:10,i:116}, +D{l:5,t:10,i:95}, +D{l:5,t:10,i:445}, +D{l:7,t:10,i:1688}, +D{l:8,t:10,i:29}, +D{l:9,t:10,i:272}, +D{l:11,t:10,i:509}, +D{l:139,t:10,i:915}, +D{l:14,t:0,i:369}, +D{l:146,t:0,i:72}, +D{l:135,t:10,i:1641}, +D{l:132,t:11,i:740}, +D{l:133,t:10,i:543}, +D{l:140,t:11,i:116}, +D{l:6,t:0,i:247}, +D{l:9,t:0,i:555}, +D{l:5,t:10,i:181}, +D{l:136,t:10,i:41}, +D{l:133,t:10,i:657}, +D{l:136,t:0,i:996}, +D{l:138,t:10,i:709}, +D{l:7,t:0,i:189}, +D{l:8,t:10,i:202}, +D{l:138,t:10,i:536}, +D{l:136,t:11,i:402}, +D{l:4,t:11,i:716}, +D{l:141,t:11,i:31}, +D{l:10,t:0,i:280}, +D{l:138,t:0,i:797}, +D{l:9,t:10,i:423}, +D{l:140,t:10,i:89}, +D{l:8,t:10,i:113}, +D{l:9,t:10,i:877}, +D{l:10,t:10,i:554}, +D{l:11,t:10,i:83}, +D{l:12,t:10,i:136}, +D{l:147,t:10,i:109}, +D{l:133,t:10,i:976}, +D{l:7,t:0,i:746}, +D{l:132,t:10,i:206}, +D{l:136,t:0,i:526}, +D{l:139,t:0,i:345}, +D{l:136,t:0,i:1017}, +D{l:8,t:11,i:152}, +D{l:9,t:11,i:53}, +D{l:9,t:11,i:268}, +D{l:9,t:11,i:901}, +D{l:10,t:11,i:518}, +D{l:10,t:11,i:829}, +D{l:11,t:11,i:188}, +D{l:13,t:11,i:74}, +D{l:14,t:11,i:46}, +D{l:15,t:11,i:17}, +D{l:15,t:11,i:33}, +D{l:17,t:11,i:40}, +D{l:18,t:11,i:36}, +D{l:19,t:11,i:20}, +D{l:22,t:11,i:1}, +D{l:152,t:11,i:2}, +D{l:133,t:11,i:736}, +D{l:136,t:11,i:532}, +D{l:5,t:0,i:428}, +D{l:138,t:0,i:651}, +D{l:135,t:11,i:681}, +D{l:135,t:0,i:1162}, +D{l:7,t:0,i:327}, +D{l:13,t:0,i:230}, +D{l:17,t:0,i:113}, +D{l:8,t:10,i:226}, +D{l:10,t:10,i:537}, +D{l:11,t:10,i:570}, +D{l:11,t:10,i:605}, +D{l:11,t:10,i:799}, +D{l:11,t:10,i:804}, +D{l:12,t:10,i:85}, +D{l:12,t:10,i:516}, +D{l:12,t:10,i:623}, +D{l:12,t:11,i:677}, +D{l:13,t:10,i:361}, +D{l:14,t:10,i:77}, +D{l:14,t:10,i:78}, +D{l:147,t:10,i:110}, +D{l:4,t:0,i:792}, +D{l:7,t:0,i:1717}, +D{l:10,t:0,i:546}, +D{l:132,t:10,i:769}, +D{l:4,t:11,i:684}, +D{l:136,t:11,i:384}, +D{l:132,t:10,i:551}, +D{l:134,t:0,i:1203}, +D{l:9,t:10,i:57}, +D{l:9,t:10,i:459}, +D{l:10,t:10,i:425}, +D{l:11,t:10,i:119}, +D{l:12,t:10,i:184}, +D{l:12,t:10,i:371}, +D{l:13,t:10,i:358}, +D{l:145,t:10,i:51}, +D{l:5,t:0,i:672}, +D{l:5,t:10,i:814}, +D{l:8,t:10,i:10}, +D{l:9,t:10,i:421}, +D{l:9,t:10,i:729}, +D{l:10,t:10,i:609}, +D{l:139,t:10,i:689}, +D{l:138,t:0,i:189}, +D{l:134,t:10,i:624}, +D{l:7,t:11,i:110}, +D{l:7,t:11,i:188}, +D{l:8,t:11,i:290}, +D{l:8,t:11,i:591}, +D{l:9,t:11,i:382}, +D{l:9,t:11,i:649}, +D{l:11,t:11,i:71}, +D{l:11,t:11,i:155}, +D{l:11,t:11,i:313}, +D{l:12,t:11,i:5}, +D{l:13,t:11,i:325}, +D{l:142,t:11,i:287}, +D{l:133,t:0,i:99}, +D{l:6,t:0,i:1053}, +D{l:135,t:0,i:298}, +D{l:7,t:11,i:360}, +D{l:7,t:11,i:425}, +D{l:9,t:11,i:66}, +D{l:9,t:11,i:278}, +D{l:138,t:11,i:644}, +D{l:4,t:0,i:397}, +D{l:136,t:0,i:555}, +D{l:137,t:10,i:269}, +D{l:132,t:10,i:528}, +D{l:4,t:11,i:900}, +D{l:133,t:11,i:861}, +D{l:6,t:0,i:1157}, +D{l:5,t:11,i:254}, +D{l:7,t:11,i:985}, +D{l:136,t:11,i:73}, +D{l:7,t:11,i:1959}, +D{l:136,t:11,i:683}, +D{l:12,t:0,i:398}, +D{l:20,t:0,i:39}, +D{l:21,t:0,i:11}, +D{l:150,t:0,i:41}, +D{l:4,t:0,i:485}, +D{l:7,t:0,i:353}, +D{l:135,t:0,i:1523}, +D{l:6,t:0,i:366}, +D{l:7,t:0,i:1384}, +D{l:135,t:0,i:1601}, +D{l:138,t:0,i:787}, +D{l:137,t:0,i:282}, +D{l:5,t:10,i:104}, +D{l:6,t:10,i:173}, +D{l:135,t:10,i:1631}, +D{l:139,t:11,i:146}, +D{l:4,t:0,i:157}, +D{l:133,t:0,i:471}, +D{l:134,t:0,i:941}, +D{l:132,t:11,i:725}, +D{l:7,t:0,i:1336}, +D{l:8,t:10,i:138}, +D{l:8,t:10,i:342}, +D{l:9,t:10,i:84}, +D{l:10,t:10,i:193}, +D{l:11,t:10,i:883}, +D{l:140,t:10,i:359}, +D{l:134,t:11,i:196}, +D{l:136,t:0,i:116}, +D{l:133,t:11,i:831}, +D{l:134,t:0,i:787}, +D{l:134,t:10,i:95}, +D{l:6,t:10,i:406}, +D{l:10,t:10,i:409}, +D{l:10,t:10,i:447}, +D{l:11,t:10,i:44}, +D{l:140,t:10,i:100}, +D{l:5,t:0,i:160}, +D{l:7,t:0,i:363}, +D{l:7,t:0,i:589}, +D{l:10,t:0,i:170}, +D{l:141,t:0,i:55}, +D{l:134,t:0,i:1815}, +D{l:132,t:0,i:866}, +D{l:6,t:0,i:889}, +D{l:6,t:0,i:1067}, +D{l:6,t:0,i:1183}, +D{l:4,t:11,i:321}, +D{l:134,t:11,i:569}, +D{l:5,t:11,i:848}, +D{l:134,t:11,i:66}, +D{l:4,t:11,i:36}, +D{l:6,t:10,i:1636}, +D{l:7,t:11,i:1387}, +D{l:10,t:11,i:205}, +D{l:11,t:11,i:755}, +D{l:141,t:11,i:271}, +D{l:132,t:0,i:689}, +D{l:9,t:0,i:820}, +D{l:4,t:10,i:282}, +D{l:7,t:10,i:1034}, +D{l:11,t:10,i:398}, +D{l:11,t:10,i:634}, +D{l:12,t:10,i:1}, +D{l:12,t:10,i:79}, +D{l:12,t:10,i:544}, +D{l:14,t:10,i:237}, +D{l:17,t:10,i:10}, +D{l:146,t:10,i:20}, +D{l:4,t:0,i:108}, +D{l:7,t:0,i:804}, +D{l:139,t:0,i:498}, +D{l:132,t:11,i:887}, +D{l:6,t:0,i:1119}, +D{l:135,t:11,i:620}, +D{l:6,t:11,i:165}, +D{l:138,t:11,i:388}, +D{l:5,t:0,i:244}, +D{l:5,t:10,i:499}, +D{l:6,t:10,i:476}, +D{l:7,t:10,i:600}, +D{l:7,t:10,i:888}, +D{l:135,t:10,i:1096}, +D{l:140,t:0,i:609}, +D{l:135,t:0,i:1005}, +D{l:4,t:0,i:412}, +D{l:133,t:0,i:581}, +D{l:4,t:11,i:719}, +D{l:135,t:11,i:155}, +D{l:7,t:10,i:296}, +D{l:7,t:10,i:596}, +D{l:8,t:10,i:560}, +D{l:8,t:10,i:586}, +D{l:9,t:10,i:612}, +D{l:11,t:10,i:304}, +D{l:12,t:10,i:46}, +D{l:13,t:10,i:89}, +D{l:14,t:10,i:112}, +D{l:145,t:10,i:122}, +D{l:4,t:0,i:895}, +D{l:133,t:0,i:772}, +D{l:142,t:11,i:307}, +D{l:135,t:0,i:1898}, +D{l:4,t:0,i:926}, +D{l:133,t:0,i:983}, +D{l:4,t:11,i:353}, +D{l:6,t:11,i:146}, +D{l:6,t:11,i:1789}, +D{l:7,t:11,i:288}, +D{l:7,t:11,i:990}, +D{l:7,t:11,i:1348}, +D{l:9,t:11,i:665}, +D{l:9,t:11,i:898}, +D{l:11,t:11,i:893}, +D{l:142,t:11,i:212}, +D{l:132,t:0,i:538}, +D{l:133,t:11,i:532}, +D{l:6,t:0,i:294}, +D{l:7,t:0,i:1267}, +D{l:8,t:0,i:624}, +D{l:141,t:0,i:496}, +D{l:7,t:0,i:1325}, +D{l:4,t:11,i:45}, +D{l:135,t:11,i:1257}, +D{l:138,t:0,i:301}, +D{l:9,t:0,i:298}, +D{l:12,t:0,i:291}, +D{l:13,t:0,i:276}, +D{l:14,t:0,i:6}, +D{l:17,t:0,i:18}, +D{l:21,t:0,i:32}, +D{l:7,t:10,i:1599}, +D{l:7,t:10,i:1723}, +D{l:8,t:10,i:79}, +D{l:8,t:10,i:106}, +D{l:8,t:10,i:190}, +D{l:8,t:10,i:302}, +D{l:8,t:10,i:383}, +D{l:8,t:10,i:713}, +D{l:9,t:10,i:119}, +D{l:9,t:10,i:233}, +D{l:9,t:10,i:419}, +D{l:9,t:10,i:471}, +D{l:10,t:10,i:181}, +D{l:10,t:10,i:406}, +D{l:11,t:10,i:57}, +D{l:11,t:10,i:85}, +D{l:11,t:10,i:120}, +D{l:11,t:10,i:177}, +D{l:11,t:10,i:296}, +D{l:11,t:10,i:382}, +D{l:11,t:10,i:454}, +D{l:11,t:10,i:758}, +D{l:11,t:10,i:999}, +D{l:12,t:10,i:27}, +D{l:12,t:10,i:131}, +D{l:12,t:10,i:245}, +D{l:12,t:10,i:312}, +D{l:12,t:10,i:446}, +D{l:12,t:10,i:454}, +D{l:13,t:10,i:98}, +D{l:13,t:10,i:426}, +D{l:13,t:10,i:508}, +D{l:14,t:10,i:163}, +D{l:14,t:10,i:272}, +D{l:14,t:10,i:277}, +D{l:14,t:10,i:370}, +D{l:15,t:10,i:95}, +D{l:15,t:10,i:138}, +D{l:15,t:10,i:167}, +D{l:17,t:10,i:38}, +D{l:148,t:10,i:96}, +D{l:132,t:0,i:757}, +D{l:134,t:0,i:1263}, +D{l:4,t:0,i:820}, +D{l:134,t:10,i:1759}, +D{l:133,t:0,i:722}, +D{l:136,t:11,i:816}, +D{l:138,t:10,i:372}, +D{l:145,t:10,i:16}, +D{l:134,t:0,i:1039}, +D{l:4,t:0,i:991}, +D{l:134,t:0,i:2028}, +D{l:133,t:10,i:258}, +D{l:7,t:0,i:1875}, +D{l:139,t:0,i:124}, +D{l:6,t:11,i:559}, +D{l:6,t:11,i:1691}, +D{l:135,t:11,i:586}, +D{l:5,t:0,i:324}, +D{l:7,t:0,i:881}, +D{l:8,t:10,i:134}, +D{l:9,t:10,i:788}, +D{l:140,t:10,i:438}, +D{l:7,t:11,i:1823}, +D{l:139,t:11,i:693}, +D{l:6,t:0,i:1348}, +D{l:134,t:0,i:1545}, +D{l:134,t:0,i:911}, +D{l:132,t:0,i:954}, +D{l:8,t:0,i:329}, +D{l:8,t:0,i:414}, +D{l:7,t:10,i:1948}, +D{l:135,t:10,i:2004}, +D{l:5,t:0,i:517}, +D{l:6,t:10,i:439}, +D{l:7,t:10,i:780}, +D{l:135,t:10,i:1040}, +D{l:132,t:0,i:816}, +D{l:5,t:10,i:1}, +D{l:6,t:10,i:81}, +D{l:138,t:10,i:520}, +D{l:9,t:0,i:713}, +D{l:10,t:0,i:222}, +D{l:5,t:10,i:482}, +D{l:8,t:10,i:98}, +D{l:10,t:10,i:700}, +D{l:10,t:10,i:822}, +D{l:11,t:10,i:302}, +D{l:11,t:10,i:778}, +D{l:12,t:10,i:50}, +D{l:12,t:10,i:127}, +D{l:12,t:10,i:396}, +D{l:13,t:10,i:62}, +D{l:13,t:10,i:328}, +D{l:14,t:10,i:122}, +D{l:147,t:10,i:72}, +D{l:137,t:0,i:33}, +D{l:5,t:10,i:2}, +D{l:7,t:10,i:1494}, +D{l:136,t:10,i:589}, +D{l:6,t:10,i:512}, +D{l:7,t:10,i:797}, +D{l:8,t:10,i:253}, +D{l:9,t:10,i:77}, +D{l:10,t:10,i:1}, +D{l:10,t:11,i:108}, +D{l:10,t:10,i:129}, +D{l:10,t:10,i:225}, +D{l:11,t:11,i:116}, +D{l:11,t:10,i:118}, +D{l:11,t:10,i:226}, +D{l:11,t:10,i:251}, +D{l:11,t:10,i:430}, +D{l:11,t:10,i:701}, +D{l:11,t:10,i:974}, +D{l:11,t:10,i:982}, +D{l:12,t:10,i:64}, +D{l:12,t:10,i:260}, +D{l:12,t:10,i:488}, +D{l:140,t:10,i:690}, +D{l:134,t:11,i:456}, +D{l:133,t:11,i:925}, +D{l:5,t:0,i:150}, +D{l:7,t:0,i:106}, +D{l:7,t:0,i:774}, +D{l:8,t:0,i:603}, +D{l:9,t:0,i:593}, +D{l:9,t:0,i:634}, +D{l:10,t:0,i:44}, +D{l:10,t:0,i:173}, +D{l:11,t:0,i:462}, +D{l:11,t:0,i:515}, +D{l:13,t:0,i:216}, +D{l:13,t:0,i:288}, +D{l:142,t:0,i:400}, +D{l:137,t:10,i:347}, +D{l:5,t:0,i:748}, +D{l:134,t:0,i:553}, +D{l:12,t:0,i:108}, +D{l:141,t:0,i:291}, +D{l:7,t:0,i:420}, +D{l:4,t:10,i:12}, +D{l:7,t:10,i:522}, +D{l:7,t:10,i:809}, +D{l:8,t:10,i:797}, +D{l:141,t:10,i:88}, +D{l:6,t:11,i:193}, +D{l:7,t:11,i:240}, +D{l:7,t:11,i:1682}, +D{l:10,t:11,i:51}, +D{l:10,t:11,i:640}, +D{l:11,t:11,i:410}, +D{l:13,t:11,i:82}, +D{l:14,t:11,i:247}, +D{l:14,t:11,i:331}, +D{l:142,t:11,i:377}, +D{l:133,t:10,i:528}, +D{l:135,t:0,i:1777}, +D{l:4,t:0,i:493}, +D{l:144,t:0,i:55}, +D{l:136,t:11,i:633}, +D{l:139,t:0,i:81}, +D{l:6,t:0,i:980}, +D{l:136,t:0,i:321}, +D{l:148,t:10,i:109}, +D{l:5,t:10,i:266}, +D{l:9,t:10,i:290}, +D{l:9,t:10,i:364}, +D{l:10,t:10,i:293}, +D{l:11,t:10,i:606}, +D{l:142,t:10,i:45}, +D{l:6,t:0,i:568}, +D{l:7,t:0,i:112}, +D{l:7,t:0,i:1804}, +D{l:8,t:0,i:362}, +D{l:8,t:0,i:410}, +D{l:8,t:0,i:830}, +D{l:9,t:0,i:514}, +D{l:11,t:0,i:649}, +D{l:142,t:0,i:157}, +D{l:4,t:0,i:74}, +D{l:6,t:0,i:510}, +D{l:6,t:10,i:594}, +D{l:9,t:10,i:121}, +D{l:10,t:10,i:49}, +D{l:10,t:10,i:412}, +D{l:139,t:10,i:834}, +D{l:134,t:0,i:838}, +D{l:136,t:10,i:748}, +D{l:132,t:10,i:466}, +D{l:132,t:0,i:625}, +D{l:135,t:11,i:1443}, +D{l:4,t:11,i:237}, +D{l:135,t:11,i:514}, +D{l:9,t:10,i:378}, +D{l:141,t:10,i:162}, +D{l:6,t:0,i:16}, +D{l:6,t:0,i:158}, +D{l:7,t:0,i:43}, +D{l:7,t:0,i:129}, +D{l:7,t:0,i:181}, +D{l:8,t:0,i:276}, +D{l:8,t:0,i:377}, +D{l:10,t:0,i:523}, +D{l:11,t:0,i:816}, +D{l:12,t:0,i:455}, +D{l:13,t:0,i:303}, +D{l:142,t:0,i:135}, +D{l:135,t:0,i:281}, +D{l:4,t:0,i:1}, +D{l:7,t:0,i:1143}, +D{l:7,t:0,i:1463}, +D{l:8,t:0,i:61}, +D{l:9,t:0,i:207}, +D{l:9,t:0,i:390}, +D{l:9,t:0,i:467}, +D{l:139,t:0,i:836}, +D{l:6,t:11,i:392}, +D{l:7,t:11,i:65}, +D{l:135,t:11,i:2019}, +D{l:132,t:10,i:667}, +D{l:4,t:0,i:723}, +D{l:5,t:0,i:895}, +D{l:7,t:0,i:1031}, +D{l:8,t:0,i:199}, +D{l:8,t:0,i:340}, +D{l:9,t:0,i:153}, +D{l:9,t:0,i:215}, +D{l:10,t:0,i:21}, +D{l:10,t:0,i:59}, +D{l:10,t:0,i:80}, +D{l:10,t:0,i:224}, +D{l:10,t:0,i:838}, +D{l:11,t:0,i:229}, +D{l:11,t:0,i:652}, +D{l:12,t:0,i:192}, +D{l:13,t:0,i:146}, +D{l:142,t:0,i:91}, +D{l:132,t:0,i:295}, +D{l:137,t:0,i:51}, +D{l:9,t:11,i:222}, +D{l:10,t:11,i:43}, +D{l:139,t:11,i:900}, +D{l:5,t:0,i:309}, +D{l:140,t:0,i:211}, +D{l:5,t:0,i:125}, +D{l:8,t:0,i:77}, +D{l:138,t:0,i:15}, +D{l:136,t:11,i:604}, +D{l:138,t:0,i:789}, +D{l:5,t:0,i:173}, +D{l:4,t:10,i:39}, +D{l:7,t:10,i:1843}, +D{l:8,t:10,i:407}, +D{l:11,t:10,i:144}, +D{l:140,t:10,i:523}, +D{l:138,t:11,i:265}, +D{l:133,t:0,i:439}, +D{l:132,t:10,i:510}, +D{l:7,t:0,i:648}, +D{l:7,t:0,i:874}, +D{l:11,t:0,i:164}, +D{l:12,t:0,i:76}, +D{l:18,t:0,i:9}, +D{l:7,t:10,i:1980}, +D{l:10,t:10,i:487}, +D{l:138,t:10,i:809}, +D{l:12,t:0,i:111}, +D{l:14,t:0,i:294}, +D{l:19,t:0,i:45}, +D{l:13,t:10,i:260}, +D{l:146,t:10,i:63}, +D{l:133,t:11,i:549}, +D{l:134,t:10,i:570}, +D{l:4,t:0,i:8}, +D{l:7,t:0,i:1152}, +D{l:7,t:0,i:1153}, +D{l:7,t:0,i:1715}, +D{l:9,t:0,i:374}, +D{l:10,t:0,i:478}, +D{l:139,t:0,i:648}, +D{l:135,t:0,i:1099}, +D{l:5,t:0,i:575}, +D{l:6,t:0,i:354}, +D{l:135,t:0,i:701}, +D{l:7,t:11,i:36}, +D{l:8,t:11,i:201}, +D{l:136,t:11,i:605}, +D{l:4,t:10,i:787}, +D{l:136,t:11,i:156}, +D{l:6,t:0,i:518}, +D{l:149,t:11,i:13}, +D{l:140,t:11,i:224}, +D{l:134,t:0,i:702}, +D{l:132,t:10,i:516}, +D{l:5,t:11,i:724}, +D{l:10,t:11,i:305}, +D{l:11,t:11,i:151}, +D{l:12,t:11,i:33}, +D{l:12,t:11,i:121}, +D{l:12,t:11,i:381}, +D{l:17,t:11,i:3}, +D{l:17,t:11,i:27}, +D{l:17,t:11,i:78}, +D{l:18,t:11,i:18}, +D{l:19,t:11,i:54}, +D{l:149,t:11,i:5}, +D{l:8,t:0,i:87}, +D{l:4,t:11,i:523}, +D{l:5,t:11,i:638}, +D{l:11,t:10,i:887}, +D{l:14,t:10,i:365}, +D{l:142,t:10,i:375}, +D{l:138,t:0,i:438}, +D{l:136,t:10,i:821}, +D{l:135,t:11,i:1908}, +D{l:6,t:11,i:242}, +D{l:7,t:11,i:227}, +D{l:7,t:11,i:1581}, +D{l:8,t:11,i:104}, +D{l:9,t:11,i:113}, +D{l:9,t:11,i:220}, +D{l:9,t:11,i:427}, +D{l:10,t:11,i:74}, +D{l:10,t:11,i:239}, +D{l:11,t:11,i:579}, +D{l:11,t:11,i:1023}, +D{l:13,t:11,i:4}, +D{l:13,t:11,i:204}, +D{l:13,t:11,i:316}, +D{l:18,t:11,i:95}, +D{l:148,t:11,i:86}, +D{l:4,t:0,i:69}, +D{l:5,t:0,i:122}, +D{l:5,t:0,i:849}, +D{l:6,t:0,i:1633}, +D{l:9,t:0,i:656}, +D{l:138,t:0,i:464}, +D{l:7,t:0,i:1802}, +D{l:4,t:10,i:10}, +D{l:139,t:10,i:786}, +D{l:135,t:11,i:861}, +D{l:139,t:0,i:499}, +D{l:7,t:0,i:476}, +D{l:7,t:0,i:1592}, +D{l:138,t:0,i:87}, +D{l:133,t:10,i:684}, +D{l:4,t:0,i:840}, +D{l:134,t:10,i:27}, +D{l:142,t:0,i:283}, +D{l:6,t:0,i:1620}, +D{l:7,t:11,i:1328}, +D{l:136,t:11,i:494}, +D{l:5,t:0,i:859}, +D{l:7,t:0,i:1160}, +D{l:8,t:0,i:107}, +D{l:9,t:0,i:291}, +D{l:9,t:0,i:439}, +D{l:10,t:0,i:663}, +D{l:11,t:0,i:609}, +D{l:140,t:0,i:197}, +D{l:7,t:11,i:1306}, +D{l:8,t:11,i:505}, +D{l:9,t:11,i:482}, +D{l:10,t:11,i:126}, +D{l:11,t:11,i:225}, +D{l:12,t:11,i:347}, +D{l:12,t:11,i:449}, +D{l:13,t:11,i:19}, +D{l:142,t:11,i:218}, +D{l:5,t:11,i:268}, +D{l:10,t:11,i:764}, +D{l:12,t:11,i:120}, +D{l:13,t:11,i:39}, +D{l:145,t:11,i:127}, +D{l:145,t:10,i:56}, +D{l:7,t:11,i:1672}, +D{l:10,t:11,i:472}, +D{l:11,t:11,i:189}, +D{l:143,t:11,i:51}, +D{l:6,t:10,i:342}, +D{l:6,t:10,i:496}, +D{l:8,t:10,i:275}, +D{l:137,t:10,i:206}, +D{l:133,t:0,i:600}, +D{l:4,t:0,i:117}, +D{l:6,t:0,i:372}, +D{l:7,t:0,i:1905}, +D{l:142,t:0,i:323}, +D{l:4,t:10,i:909}, +D{l:5,t:10,i:940}, +D{l:135,t:11,i:1471}, +D{l:132,t:10,i:891}, +D{l:4,t:0,i:722}, +D{l:139,t:0,i:471}, +D{l:4,t:11,i:384}, +D{l:135,t:11,i:1022}, +D{l:132,t:10,i:687}, +D{l:9,t:0,i:5}, +D{l:12,t:0,i:216}, +D{l:12,t:0,i:294}, +D{l:12,t:0,i:298}, +D{l:12,t:0,i:400}, +D{l:12,t:0,i:518}, +D{l:13,t:0,i:229}, +D{l:143,t:0,i:139}, +D{l:135,t:11,i:1703}, +D{l:7,t:11,i:1602}, +D{l:10,t:11,i:698}, +D{l:12,t:11,i:212}, +D{l:141,t:11,i:307}, +D{l:6,t:10,i:41}, +D{l:141,t:10,i:160}, +D{l:135,t:11,i:1077}, +D{l:9,t:11,i:159}, +D{l:11,t:11,i:28}, +D{l:140,t:11,i:603}, +D{l:4,t:0,i:514}, +D{l:7,t:0,i:1304}, +D{l:138,t:0,i:477}, +D{l:134,t:0,i:1774}, +D{l:9,t:0,i:88}, +D{l:139,t:0,i:270}, +D{l:5,t:0,i:12}, +D{l:7,t:0,i:375}, +D{l:9,t:0,i:438}, +D{l:134,t:10,i:1718}, +D{l:132,t:11,i:515}, +D{l:136,t:10,i:778}, +D{l:8,t:11,i:632}, +D{l:8,t:11,i:697}, +D{l:137,t:11,i:854}, +D{l:6,t:0,i:362}, +D{l:6,t:0,i:997}, +D{l:146,t:0,i:51}, +D{l:7,t:0,i:816}, +D{l:7,t:0,i:1241}, +D{l:9,t:0,i:283}, +D{l:9,t:0,i:520}, +D{l:10,t:0,i:213}, +D{l:10,t:0,i:307}, +D{l:10,t:0,i:463}, +D{l:10,t:0,i:671}, +D{l:10,t:0,i:746}, +D{l:11,t:0,i:401}, +D{l:11,t:0,i:794}, +D{l:12,t:0,i:517}, +D{l:18,t:0,i:107}, +D{l:147,t:0,i:115}, +D{l:133,t:10,i:115}, +D{l:150,t:11,i:28}, +D{l:4,t:11,i:136}, +D{l:133,t:11,i:551}, +D{l:142,t:10,i:314}, +D{l:132,t:0,i:258}, +D{l:6,t:0,i:22}, +D{l:7,t:0,i:903}, +D{l:7,t:0,i:1963}, +D{l:8,t:0,i:639}, +D{l:138,t:0,i:577}, +D{l:5,t:0,i:681}, +D{l:8,t:0,i:782}, +D{l:13,t:0,i:130}, +D{l:17,t:0,i:84}, +D{l:5,t:10,i:193}, +D{l:140,t:10,i:178}, +D{l:9,t:11,i:17}, +D{l:138,t:11,i:291}, +D{l:7,t:11,i:1287}, +D{l:9,t:11,i:44}, +D{l:10,t:11,i:552}, +D{l:10,t:11,i:642}, +D{l:11,t:11,i:839}, +D{l:12,t:11,i:274}, +D{l:12,t:11,i:275}, +D{l:12,t:11,i:372}, +D{l:13,t:11,i:91}, +D{l:142,t:11,i:125}, +D{l:135,t:10,i:174}, +D{l:4,t:0,i:664}, +D{l:5,t:0,i:804}, +D{l:139,t:0,i:1013}, +D{l:134,t:0,i:942}, +D{l:6,t:0,i:1349}, +D{l:6,t:0,i:1353}, +D{l:6,t:0,i:1450}, +D{l:7,t:11,i:1518}, +D{l:139,t:11,i:694}, +D{l:11,t:0,i:356}, +D{l:4,t:10,i:122}, +D{l:5,t:10,i:796}, +D{l:5,t:10,i:952}, +D{l:6,t:10,i:1660}, +D{l:6,t:10,i:1671}, +D{l:8,t:10,i:567}, +D{l:9,t:10,i:687}, +D{l:9,t:10,i:742}, +D{l:10,t:10,i:686}, +D{l:11,t:10,i:682}, +D{l:140,t:10,i:281}, +D{l:5,t:0,i:32}, +D{l:6,t:11,i:147}, +D{l:7,t:11,i:886}, +D{l:9,t:11,i:753}, +D{l:138,t:11,i:268}, +D{l:5,t:10,i:179}, +D{l:7,t:10,i:1095}, +D{l:135,t:10,i:1213}, +D{l:4,t:10,i:66}, +D{l:7,t:10,i:722}, +D{l:135,t:10,i:904}, +D{l:135,t:10,i:352}, +D{l:9,t:11,i:245}, +D{l:138,t:11,i:137}, +D{l:4,t:0,i:289}, +D{l:7,t:0,i:629}, +D{l:7,t:0,i:1698}, +D{l:7,t:0,i:1711}, +D{l:12,t:0,i:215}, +D{l:133,t:11,i:414}, +D{l:6,t:0,i:1975}, +D{l:135,t:11,i:1762}, +D{l:6,t:0,i:450}, +D{l:136,t:0,i:109}, +D{l:141,t:10,i:35}, +D{l:134,t:11,i:599}, +D{l:136,t:0,i:705}, +D{l:133,t:0,i:664}, +D{l:134,t:11,i:1749}, +D{l:11,t:11,i:402}, +D{l:12,t:11,i:109}, +D{l:12,t:11,i:431}, +D{l:13,t:11,i:179}, +D{l:13,t:11,i:206}, +D{l:14,t:11,i:175}, +D{l:14,t:11,i:217}, +D{l:16,t:11,i:3}, +D{l:148,t:11,i:53}, +D{l:135,t:0,i:1238}, +D{l:134,t:11,i:1627}, +D{l:132,t:11,i:488}, +D{l:13,t:0,i:318}, +D{l:10,t:10,i:592}, +D{l:10,t:10,i:753}, +D{l:12,t:10,i:317}, +D{l:12,t:10,i:355}, +D{l:12,t:10,i:465}, +D{l:12,t:10,i:469}, +D{l:12,t:10,i:560}, +D{l:140,t:10,i:578}, +D{l:133,t:10,i:564}, +D{l:132,t:11,i:83}, +D{l:140,t:11,i:676}, +D{l:6,t:0,i:1872}, +D{l:6,t:0,i:1906}, +D{l:6,t:0,i:1907}, +D{l:9,t:0,i:934}, +D{l:9,t:0,i:956}, +D{l:9,t:0,i:960}, +D{l:9,t:0,i:996}, +D{l:12,t:0,i:794}, +D{l:12,t:0,i:876}, +D{l:12,t:0,i:880}, +D{l:12,t:0,i:918}, +D{l:15,t:0,i:230}, +D{l:18,t:0,i:234}, +D{l:18,t:0,i:238}, +D{l:21,t:0,i:38}, +D{l:149,t:0,i:62}, +D{l:134,t:10,i:556}, +D{l:134,t:11,i:278}, +D{l:137,t:0,i:103}, +D{l:7,t:10,i:544}, +D{l:8,t:10,i:719}, +D{l:138,t:10,i:61}, +D{l:4,t:10,i:5}, +D{l:5,t:10,i:498}, +D{l:8,t:10,i:637}, +D{l:137,t:10,i:521}, +D{l:7,t:0,i:777}, +D{l:12,t:0,i:229}, +D{l:12,t:0,i:239}, +D{l:15,t:0,i:12}, +D{l:12,t:11,i:229}, +D{l:12,t:11,i:239}, +D{l:143,t:11,i:12}, +D{l:6,t:0,i:26}, +D{l:7,t:11,i:388}, +D{l:7,t:11,i:644}, +D{l:139,t:11,i:781}, +D{l:7,t:11,i:229}, +D{l:8,t:11,i:59}, +D{l:9,t:11,i:190}, +D{l:9,t:11,i:257}, +D{l:10,t:11,i:378}, +D{l:140,t:11,i:191}, +D{l:133,t:10,i:927}, +D{l:135,t:10,i:1441}, +D{l:4,t:10,i:893}, +D{l:5,t:10,i:780}, +D{l:133,t:10,i:893}, +D{l:4,t:0,i:414}, +D{l:5,t:0,i:467}, +D{l:9,t:0,i:654}, +D{l:10,t:0,i:451}, +D{l:12,t:0,i:59}, +D{l:141,t:0,i:375}, +D{l:142,t:0,i:173}, +D{l:135,t:0,i:17}, +D{l:7,t:0,i:1350}, +D{l:133,t:10,i:238}, +D{l:135,t:0,i:955}, +D{l:4,t:0,i:960}, +D{l:10,t:0,i:887}, +D{l:12,t:0,i:753}, +D{l:18,t:0,i:161}, +D{l:18,t:0,i:162}, +D{l:152,t:0,i:19}, +D{l:136,t:11,i:344}, +D{l:6,t:10,i:1729}, +D{l:137,t:11,i:288}, +D{l:132,t:11,i:660}, +D{l:4,t:0,i:217}, +D{l:5,t:0,i:710}, +D{l:7,t:0,i:760}, +D{l:7,t:0,i:1926}, +D{l:9,t:0,i:428}, +D{l:9,t:0,i:708}, +D{l:10,t:0,i:254}, +D{l:10,t:0,i:296}, +D{l:10,t:0,i:720}, +D{l:11,t:0,i:109}, +D{l:11,t:0,i:255}, +D{l:12,t:0,i:165}, +D{l:12,t:0,i:315}, +D{l:13,t:0,i:107}, +D{l:13,t:0,i:203}, +D{l:14,t:0,i:54}, +D{l:14,t:0,i:99}, +D{l:14,t:0,i:114}, +D{l:14,t:0,i:388}, +D{l:16,t:0,i:85}, +D{l:17,t:0,i:9}, +D{l:17,t:0,i:33}, +D{l:20,t:0,i:25}, +D{l:20,t:0,i:28}, +D{l:20,t:0,i:29}, +D{l:21,t:0,i:9}, +D{l:21,t:0,i:10}, +D{l:21,t:0,i:34}, +D{l:22,t:0,i:17}, +D{l:4,t:10,i:60}, +D{l:7,t:10,i:1800}, +D{l:8,t:10,i:314}, +D{l:9,t:10,i:700}, +D{l:139,t:10,i:487}, +D{l:7,t:11,i:1035}, +D{l:138,t:11,i:737}, +D{l:7,t:11,i:690}, +D{l:9,t:11,i:217}, +D{l:9,t:11,i:587}, +D{l:140,t:11,i:521}, +D{l:6,t:0,i:919}, +D{l:7,t:11,i:706}, +D{l:7,t:11,i:1058}, +D{l:138,t:11,i:538}, +D{l:7,t:10,i:1853}, +D{l:138,t:10,i:437}, +D{l:136,t:10,i:419}, +D{l:6,t:0,i:280}, +D{l:10,t:0,i:502}, +D{l:11,t:0,i:344}, +D{l:140,t:0,i:38}, +D{l:5,t:0,i:45}, +D{l:7,t:0,i:1161}, +D{l:11,t:0,i:448}, +D{l:11,t:0,i:880}, +D{l:13,t:0,i:139}, +D{l:13,t:0,i:407}, +D{l:15,t:0,i:16}, +D{l:17,t:0,i:95}, +D{l:18,t:0,i:66}, +D{l:18,t:0,i:88}, +D{l:18,t:0,i:123}, +D{l:149,t:0,i:7}, +D{l:11,t:11,i:92}, +D{l:11,t:11,i:196}, +D{l:11,t:11,i:409}, +D{l:11,t:11,i:450}, +D{l:11,t:11,i:666}, +D{l:11,t:11,i:777}, +D{l:12,t:11,i:262}, +D{l:13,t:11,i:385}, +D{l:13,t:11,i:393}, +D{l:15,t:11,i:115}, +D{l:16,t:11,i:45}, +D{l:145,t:11,i:82}, +D{l:136,t:0,i:777}, +D{l:134,t:11,i:1744}, +D{l:4,t:0,i:410}, +D{l:7,t:0,i:521}, +D{l:133,t:10,i:828}, +D{l:134,t:0,i:673}, +D{l:7,t:0,i:1110}, +D{l:7,t:0,i:1778}, +D{l:7,t:10,i:176}, +D{l:135,t:10,i:178}, +D{l:5,t:10,i:806}, +D{l:7,t:11,i:268}, +D{l:7,t:10,i:1976}, +D{l:136,t:11,i:569}, +D{l:4,t:11,i:733}, +D{l:9,t:11,i:194}, +D{l:10,t:11,i:92}, +D{l:11,t:11,i:198}, +D{l:12,t:11,i:84}, +D{l:12,t:11,i:87}, +D{l:13,t:11,i:128}, +D{l:144,t:11,i:74}, +D{l:5,t:0,i:341}, +D{l:7,t:0,i:1129}, +D{l:11,t:0,i:414}, +D{l:4,t:10,i:51}, +D{l:6,t:10,i:4}, +D{l:7,t:10,i:591}, +D{l:7,t:10,i:849}, +D{l:7,t:10,i:951}, +D{l:7,t:10,i:1613}, +D{l:7,t:10,i:1760}, +D{l:7,t:10,i:1988}, +D{l:9,t:10,i:434}, +D{l:10,t:10,i:754}, +D{l:11,t:10,i:25}, +D{l:139,t:10,i:37}, +D{l:133,t:10,i:902}, +D{l:135,t:10,i:928}, +D{l:135,t:0,i:787}, +D{l:132,t:0,i:436}, +D{l:134,t:10,i:270}, +D{l:7,t:0,i:1587}, +D{l:135,t:0,i:1707}, +D{l:6,t:0,i:377}, +D{l:7,t:0,i:1025}, +D{l:9,t:0,i:613}, +D{l:145,t:0,i:104}, +D{l:7,t:11,i:982}, +D{l:7,t:11,i:1361}, +D{l:10,t:11,i:32}, +D{l:143,t:11,i:56}, +D{l:139,t:0,i:96}, +D{l:132,t:0,i:451}, +D{l:132,t:10,i:416}, +D{l:142,t:10,i:372}, +D{l:5,t:10,i:152}, +D{l:5,t:10,i:197}, +D{l:7,t:11,i:306}, +D{l:7,t:10,i:340}, +D{l:7,t:10,i:867}, +D{l:10,t:10,i:548}, +D{l:10,t:10,i:581}, +D{l:11,t:10,i:6}, +D{l:12,t:10,i:3}, +D{l:12,t:10,i:19}, +D{l:14,t:10,i:110}, +D{l:142,t:10,i:289}, +D{l:134,t:0,i:680}, +D{l:134,t:11,i:609}, +D{l:7,t:0,i:483}, +D{l:7,t:10,i:190}, +D{l:8,t:10,i:28}, +D{l:8,t:10,i:141}, +D{l:8,t:10,i:444}, +D{l:8,t:10,i:811}, +D{l:9,t:10,i:468}, +D{l:11,t:10,i:334}, +D{l:12,t:10,i:24}, +D{l:12,t:10,i:386}, +D{l:140,t:10,i:576}, +D{l:10,t:0,i:916}, +D{l:133,t:10,i:757}, +D{l:5,t:10,i:721}, +D{l:135,t:10,i:1553}, +D{l:133,t:11,i:178}, +D{l:134,t:0,i:937}, +D{l:132,t:10,i:898}, +D{l:133,t:0,i:739}, +D{l:147,t:0,i:82}, +D{l:135,t:0,i:663}, +D{l:146,t:0,i:128}, +D{l:5,t:10,i:277}, +D{l:141,t:10,i:247}, +D{l:134,t:0,i:1087}, +D{l:132,t:10,i:435}, +D{l:6,t:11,i:381}, +D{l:7,t:11,i:645}, +D{l:7,t:11,i:694}, +D{l:136,t:11,i:546}, +D{l:7,t:0,i:503}, +D{l:135,t:0,i:1885}, +D{l:6,t:0,i:1965}, +D{l:8,t:0,i:925}, +D{l:138,t:0,i:955}, +D{l:4,t:0,i:113}, +D{l:5,t:0,i:163}, +D{l:5,t:0,i:735}, +D{l:7,t:0,i:1009}, +D{l:9,t:0,i:9}, +D{l:9,t:0,i:771}, +D{l:12,t:0,i:90}, +D{l:13,t:0,i:138}, +D{l:13,t:0,i:410}, +D{l:143,t:0,i:128}, +D{l:4,t:0,i:324}, +D{l:138,t:0,i:104}, +D{l:7,t:0,i:460}, +D{l:5,t:10,i:265}, +D{l:134,t:10,i:212}, +D{l:133,t:11,i:105}, +D{l:7,t:11,i:261}, +D{l:7,t:11,i:1107}, +D{l:7,t:11,i:1115}, +D{l:7,t:11,i:1354}, +D{l:7,t:11,i:1588}, +D{l:7,t:11,i:1705}, +D{l:7,t:11,i:1902}, +D{l:9,t:11,i:465}, +D{l:10,t:11,i:248}, +D{l:10,t:11,i:349}, +D{l:10,t:11,i:647}, +D{l:11,t:11,i:527}, +D{l:11,t:11,i:660}, +D{l:11,t:11,i:669}, +D{l:12,t:11,i:529}, +D{l:141,t:11,i:305}, +D{l:5,t:11,i:438}, +D{l:9,t:11,i:694}, +D{l:12,t:11,i:627}, +D{l:141,t:11,i:210}, +D{l:152,t:11,i:11}, +D{l:4,t:0,i:935}, +D{l:133,t:0,i:823}, +D{l:132,t:10,i:702}, +D{l:5,t:0,i:269}, +D{l:7,t:0,i:434}, +D{l:7,t:0,i:891}, +D{l:8,t:0,i:339}, +D{l:9,t:0,i:702}, +D{l:11,t:0,i:594}, +D{l:11,t:0,i:718}, +D{l:17,t:0,i:100}, +D{l:5,t:10,i:808}, +D{l:135,t:10,i:2045}, +D{l:7,t:0,i:1014}, +D{l:9,t:0,i:485}, +D{l:141,t:0,i:264}, +D{l:134,t:0,i:1713}, +D{l:7,t:0,i:1810}, +D{l:11,t:0,i:866}, +D{l:12,t:0,i:103}, +D{l:13,t:0,i:495}, +D{l:140,t:11,i:233}, +D{l:4,t:0,i:423}, +D{l:10,t:0,i:949}, +D{l:138,t:0,i:1013}, +D{l:135,t:0,i:900}, +D{l:8,t:11,i:25}, +D{l:138,t:11,i:826}, +D{l:5,t:10,i:166}, +D{l:8,t:10,i:739}, +D{l:140,t:10,i:511}, +D{l:134,t:0,i:2018}, +D{l:7,t:11,i:1270}, +D{l:139,t:11,i:612}, +D{l:4,t:10,i:119}, +D{l:5,t:10,i:170}, +D{l:5,t:10,i:447}, +D{l:7,t:10,i:1708}, +D{l:7,t:10,i:1889}, +D{l:9,t:10,i:357}, +D{l:9,t:10,i:719}, +D{l:12,t:10,i:486}, +D{l:140,t:10,i:596}, +D{l:12,t:0,i:574}, +D{l:140,t:11,i:574}, +D{l:132,t:11,i:308}, +D{l:6,t:0,i:964}, +D{l:6,t:0,i:1206}, +D{l:134,t:0,i:1302}, +D{l:4,t:10,i:450}, +D{l:135,t:10,i:1158}, +D{l:135,t:11,i:150}, +D{l:136,t:11,i:649}, +D{l:14,t:0,i:213}, +D{l:148,t:0,i:38}, +D{l:9,t:11,i:45}, +D{l:9,t:11,i:311}, +D{l:141,t:11,i:42}, +D{l:134,t:11,i:521}, +D{l:7,t:10,i:1375}, +D{l:7,t:10,i:1466}, +D{l:138,t:10,i:331}, +D{l:132,t:10,i:754}, +D{l:5,t:11,i:339}, +D{l:7,t:11,i:1442}, +D{l:14,t:11,i:3}, +D{l:15,t:11,i:41}, +D{l:147,t:11,i:66}, +D{l:136,t:11,i:378}, +D{l:134,t:0,i:1022}, +D{l:5,t:10,i:850}, +D{l:136,t:10,i:799}, +D{l:142,t:0,i:143}, +D{l:135,t:0,i:2029}, +D{l:134,t:11,i:1628}, +D{l:8,t:0,i:523}, +D{l:150,t:0,i:34}, +D{l:5,t:0,i:625}, +D{l:135,t:0,i:1617}, +D{l:7,t:0,i:275}, +D{l:7,t:10,i:238}, +D{l:7,t:10,i:2033}, +D{l:8,t:10,i:120}, +D{l:8,t:10,i:188}, +D{l:8,t:10,i:659}, +D{l:9,t:10,i:598}, +D{l:10,t:10,i:466}, +D{l:12,t:10,i:342}, +D{l:12,t:10,i:588}, +D{l:13,t:10,i:503}, +D{l:14,t:10,i:246}, +D{l:143,t:10,i:92}, +D{l:7,t:0,i:37}, +D{l:8,t:0,i:425}, +D{l:8,t:0,i:693}, +D{l:9,t:0,i:720}, +D{l:10,t:0,i:380}, +D{l:10,t:0,i:638}, +D{l:11,t:0,i:273}, +D{l:11,t:0,i:473}, +D{l:12,t:0,i:61}, +D{l:143,t:0,i:43}, +D{l:135,t:11,i:829}, +D{l:135,t:0,i:1943}, +D{l:132,t:0,i:765}, +D{l:5,t:11,i:486}, +D{l:135,t:11,i:1349}, +D{l:7,t:11,i:1635}, +D{l:8,t:11,i:17}, +D{l:10,t:11,i:217}, +D{l:138,t:11,i:295}, +D{l:4,t:10,i:201}, +D{l:7,t:10,i:1744}, +D{l:8,t:10,i:602}, +D{l:11,t:10,i:247}, +D{l:11,t:10,i:826}, +D{l:145,t:10,i:65}, +D{l:138,t:11,i:558}, +D{l:11,t:0,i:551}, +D{l:142,t:0,i:159}, +D{l:8,t:10,i:164}, +D{l:146,t:10,i:62}, +D{l:139,t:11,i:176}, +D{l:132,t:0,i:168}, +D{l:136,t:0,i:1010}, +D{l:134,t:0,i:1994}, +D{l:135,t:0,i:91}, +D{l:138,t:0,i:532}, +D{l:135,t:10,i:1243}, +D{l:135,t:0,i:1884}, +D{l:132,t:10,i:907}, +D{l:5,t:10,i:100}, +D{l:10,t:10,i:329}, +D{l:12,t:10,i:416}, +D{l:149,t:10,i:29}, +D{l:134,t:11,i:447}, +D{l:132,t:10,i:176}, +D{l:5,t:10,i:636}, +D{l:5,t:10,i:998}, +D{l:7,t:10,i:9}, +D{l:7,t:10,i:1508}, +D{l:8,t:10,i:26}, +D{l:9,t:10,i:317}, +D{l:9,t:10,i:358}, +D{l:10,t:10,i:210}, +D{l:10,t:10,i:292}, +D{l:10,t:10,i:533}, +D{l:11,t:10,i:555}, +D{l:12,t:10,i:526}, +D{l:12,t:10,i:607}, +D{l:13,t:10,i:263}, +D{l:13,t:10,i:459}, +D{l:142,t:10,i:271}, +D{l:4,t:11,i:609}, +D{l:135,t:11,i:756}, +D{l:6,t:0,i:15}, +D{l:7,t:0,i:70}, +D{l:10,t:0,i:240}, +D{l:147,t:0,i:93}, +D{l:4,t:11,i:930}, +D{l:133,t:11,i:947}, +D{l:134,t:0,i:1227}, +D{l:134,t:0,i:1534}, +D{l:133,t:11,i:939}, +D{l:133,t:11,i:962}, +D{l:5,t:11,i:651}, +D{l:8,t:11,i:170}, +D{l:9,t:11,i:61}, +D{l:9,t:11,i:63}, +D{l:10,t:11,i:23}, +D{l:10,t:11,i:37}, +D{l:10,t:11,i:834}, +D{l:11,t:11,i:4}, +D{l:11,t:11,i:187}, +D{l:11,t:11,i:281}, +D{l:11,t:11,i:503}, +D{l:11,t:11,i:677}, +D{l:12,t:11,i:96}, +D{l:12,t:11,i:130}, +D{l:12,t:11,i:244}, +D{l:14,t:11,i:5}, +D{l:14,t:11,i:40}, +D{l:14,t:11,i:162}, +D{l:14,t:11,i:202}, +D{l:146,t:11,i:133}, +D{l:4,t:11,i:406}, +D{l:5,t:11,i:579}, +D{l:12,t:11,i:492}, +D{l:150,t:11,i:15}, +D{l:139,t:0,i:392}, +D{l:6,t:10,i:610}, +D{l:10,t:10,i:127}, +D{l:141,t:10,i:27}, +D{l:7,t:0,i:655}, +D{l:7,t:0,i:1844}, +D{l:136,t:10,i:119}, +D{l:4,t:0,i:145}, +D{l:6,t:0,i:176}, +D{l:7,t:0,i:395}, +D{l:137,t:0,i:562}, +D{l:132,t:0,i:501}, +D{l:140,t:11,i:145}, +D{l:136,t:0,i:1019}, +D{l:134,t:0,i:509}, +D{l:139,t:0,i:267}, +D{l:6,t:11,i:17}, +D{l:7,t:11,i:16}, +D{l:7,t:11,i:1001}, +D{l:7,t:11,i:1982}, +D{l:9,t:11,i:886}, +D{l:10,t:11,i:489}, +D{l:10,t:11,i:800}, +D{l:11,t:11,i:782}, +D{l:12,t:11,i:320}, +D{l:13,t:11,i:467}, +D{l:14,t:11,i:145}, +D{l:14,t:11,i:387}, +D{l:143,t:11,i:119}, +D{l:145,t:11,i:17}, +D{l:6,t:0,i:1099}, +D{l:133,t:11,i:458}, +D{l:7,t:11,i:1983}, +D{l:8,t:11,i:0}, +D{l:8,t:11,i:171}, +D{l:9,t:11,i:120}, +D{l:9,t:11,i:732}, +D{l:10,t:11,i:473}, +D{l:11,t:11,i:656}, +D{l:11,t:11,i:998}, +D{l:18,t:11,i:0}, +D{l:18,t:11,i:2}, +D{l:147,t:11,i:21}, +D{l:12,t:11,i:427}, +D{l:146,t:11,i:38}, +D{l:10,t:0,i:948}, +D{l:138,t:0,i:968}, +D{l:7,t:10,i:126}, +D{l:136,t:10,i:84}, +D{l:136,t:10,i:790}, +D{l:4,t:0,i:114}, +D{l:9,t:0,i:492}, +D{l:13,t:0,i:462}, +D{l:142,t:0,i:215}, +D{l:6,t:10,i:64}, +D{l:12,t:10,i:377}, +D{l:141,t:10,i:309}, +D{l:4,t:0,i:77}, +D{l:5,t:0,i:361}, +D{l:6,t:0,i:139}, +D{l:6,t:0,i:401}, +D{l:6,t:0,i:404}, +D{l:7,t:0,i:413}, +D{l:7,t:0,i:715}, +D{l:7,t:0,i:1716}, +D{l:11,t:0,i:279}, +D{l:12,t:0,i:179}, +D{l:12,t:0,i:258}, +D{l:13,t:0,i:244}, +D{l:142,t:0,i:358}, +D{l:134,t:0,i:1717}, +D{l:7,t:0,i:772}, +D{l:7,t:0,i:1061}, +D{l:7,t:0,i:1647}, +D{l:8,t:0,i:82}, +D{l:11,t:0,i:250}, +D{l:11,t:0,i:607}, +D{l:12,t:0,i:311}, +D{l:12,t:0,i:420}, +D{l:13,t:0,i:184}, +D{l:13,t:0,i:367}, +D{l:7,t:10,i:1104}, +D{l:11,t:10,i:269}, +D{l:11,t:10,i:539}, +D{l:11,t:10,i:627}, +D{l:11,t:10,i:706}, +D{l:11,t:10,i:975}, +D{l:12,t:10,i:248}, +D{l:12,t:10,i:434}, +D{l:12,t:10,i:600}, +D{l:12,t:10,i:622}, +D{l:13,t:10,i:297}, +D{l:13,t:10,i:485}, +D{l:14,t:10,i:69}, +D{l:14,t:10,i:409}, +D{l:143,t:10,i:108}, +D{l:135,t:0,i:724}, +D{l:4,t:11,i:512}, +D{l:4,t:11,i:519}, +D{l:133,t:11,i:342}, +D{l:134,t:0,i:1133}, +D{l:145,t:11,i:29}, +D{l:11,t:10,i:977}, +D{l:141,t:10,i:507}, +D{l:6,t:0,i:841}, +D{l:6,t:0,i:1042}, +D{l:6,t:0,i:1194}, +D{l:10,t:0,i:993}, +D{l:140,t:0,i:1021}, +D{l:6,t:11,i:31}, +D{l:7,t:11,i:491}, +D{l:7,t:11,i:530}, +D{l:8,t:11,i:592}, +D{l:9,t:10,i:34}, +D{l:11,t:11,i:53}, +D{l:11,t:10,i:484}, +D{l:11,t:11,i:779}, +D{l:12,t:11,i:167}, +D{l:12,t:11,i:411}, +D{l:14,t:11,i:14}, +D{l:14,t:11,i:136}, +D{l:15,t:11,i:72}, +D{l:16,t:11,i:17}, +D{l:144,t:11,i:72}, +D{l:4,t:0,i:1021}, +D{l:6,t:0,i:2037}, +D{l:133,t:11,i:907}, +D{l:7,t:0,i:373}, +D{l:8,t:0,i:335}, +D{l:8,t:0,i:596}, +D{l:9,t:0,i:488}, +D{l:6,t:10,i:1700}, +D{l:7,t:10,i:293}, +D{l:7,t:10,i:382}, +D{l:7,t:10,i:1026}, +D{l:7,t:10,i:1087}, +D{l:7,t:10,i:2027}, +D{l:8,t:10,i:252}, +D{l:8,t:10,i:727}, +D{l:8,t:10,i:729}, +D{l:9,t:10,i:30}, +D{l:9,t:10,i:199}, +D{l:9,t:10,i:231}, +D{l:9,t:10,i:251}, +D{l:9,t:10,i:334}, +D{l:9,t:10,i:361}, +D{l:9,t:10,i:712}, +D{l:10,t:10,i:55}, +D{l:10,t:10,i:60}, +D{l:10,t:10,i:232}, +D{l:10,t:10,i:332}, +D{l:10,t:10,i:384}, +D{l:10,t:10,i:396}, +D{l:10,t:10,i:504}, +D{l:10,t:10,i:542}, +D{l:10,t:10,i:652}, +D{l:11,t:10,i:20}, +D{l:11,t:10,i:48}, +D{l:11,t:10,i:207}, +D{l:11,t:10,i:291}, +D{l:11,t:10,i:298}, +D{l:11,t:10,i:342}, +D{l:11,t:10,i:365}, +D{l:11,t:10,i:394}, +D{l:11,t:10,i:620}, +D{l:11,t:10,i:705}, +D{l:11,t:10,i:1017}, +D{l:12,t:10,i:123}, +D{l:12,t:10,i:340}, +D{l:12,t:10,i:406}, +D{l:12,t:10,i:643}, +D{l:13,t:10,i:61}, +D{l:13,t:10,i:269}, +D{l:13,t:10,i:311}, +D{l:13,t:10,i:319}, +D{l:13,t:10,i:486}, +D{l:14,t:10,i:234}, +D{l:15,t:10,i:62}, +D{l:15,t:10,i:85}, +D{l:16,t:10,i:71}, +D{l:18,t:10,i:119}, +D{l:148,t:10,i:105}, +D{l:150,t:0,i:37}, +D{l:4,t:11,i:208}, +D{l:5,t:11,i:106}, +D{l:6,t:11,i:531}, +D{l:8,t:11,i:408}, +D{l:9,t:11,i:188}, +D{l:138,t:11,i:572}, +D{l:132,t:0,i:564}, +D{l:6,t:0,i:513}, +D{l:135,t:0,i:1052}, +D{l:132,t:0,i:825}, +D{l:9,t:0,i:899}, +D{l:140,t:11,i:441}, +D{l:134,t:0,i:778}, +D{l:133,t:11,i:379}, +D{l:7,t:0,i:1417}, +D{l:12,t:0,i:382}, +D{l:17,t:0,i:48}, +D{l:152,t:0,i:12}, +D{l:132,t:11,i:241}, +D{l:7,t:0,i:1116}, +D{l:6,t:10,i:379}, +D{l:7,t:10,i:270}, +D{l:8,t:10,i:176}, +D{l:8,t:10,i:183}, +D{l:9,t:10,i:432}, +D{l:9,t:10,i:661}, +D{l:12,t:10,i:247}, +D{l:12,t:10,i:617}, +D{l:146,t:10,i:125}, +D{l:5,t:10,i:792}, +D{l:133,t:10,i:900}, +D{l:6,t:0,i:545}, +D{l:7,t:0,i:565}, +D{l:7,t:0,i:1669}, +D{l:10,t:0,i:114}, +D{l:11,t:0,i:642}, +D{l:140,t:0,i:618}, +D{l:133,t:0,i:5}, +D{l:138,t:11,i:7}, +D{l:132,t:11,i:259}, +D{l:135,t:0,i:192}, +D{l:134,t:0,i:701}, +D{l:136,t:0,i:763}, +D{l:135,t:10,i:1979}, +D{l:4,t:10,i:901}, +D{l:133,t:10,i:776}, +D{l:10,t:0,i:755}, +D{l:147,t:0,i:29}, +D{l:133,t:0,i:759}, +D{l:4,t:11,i:173}, +D{l:5,t:11,i:312}, +D{l:5,t:11,i:512}, +D{l:135,t:11,i:1285}, +D{l:7,t:11,i:1603}, +D{l:7,t:11,i:1691}, +D{l:9,t:11,i:464}, +D{l:11,t:11,i:195}, +D{l:12,t:11,i:279}, +D{l:12,t:11,i:448}, +D{l:14,t:11,i:11}, +D{l:147,t:11,i:102}, +D{l:7,t:0,i:370}, +D{l:7,t:0,i:1007}, +D{l:7,t:0,i:1177}, +D{l:135,t:0,i:1565}, +D{l:135,t:0,i:1237}, +D{l:4,t:0,i:87}, +D{l:5,t:0,i:250}, +D{l:141,t:0,i:298}, +D{l:4,t:11,i:452}, +D{l:5,t:11,i:583}, +D{l:5,t:11,i:817}, +D{l:6,t:11,i:433}, +D{l:7,t:11,i:593}, +D{l:7,t:11,i:720}, +D{l:7,t:11,i:1378}, +D{l:8,t:11,i:161}, +D{l:9,t:11,i:284}, +D{l:10,t:11,i:313}, +D{l:139,t:11,i:886}, +D{l:4,t:11,i:547}, +D{l:135,t:11,i:1409}, +D{l:136,t:11,i:722}, +D{l:4,t:10,i:37}, +D{l:5,t:10,i:334}, +D{l:135,t:10,i:1253}, +D{l:132,t:10,i:508}, +D{l:12,t:0,i:107}, +D{l:146,t:0,i:31}, +D{l:8,t:11,i:420}, +D{l:139,t:11,i:193}, +D{l:135,t:0,i:814}, +D{l:135,t:11,i:409}, +D{l:140,t:0,i:991}, +D{l:4,t:0,i:57}, +D{l:7,t:0,i:1195}, +D{l:7,t:0,i:1438}, +D{l:7,t:0,i:1548}, +D{l:7,t:0,i:1835}, +D{l:7,t:0,i:1904}, +D{l:9,t:0,i:757}, +D{l:10,t:0,i:604}, +D{l:139,t:0,i:519}, +D{l:132,t:0,i:540}, +D{l:138,t:11,i:308}, +D{l:132,t:10,i:533}, +D{l:136,t:0,i:608}, +D{l:144,t:11,i:65}, +D{l:4,t:0,i:1014}, +D{l:134,t:0,i:2029}, +D{l:4,t:0,i:209}, +D{l:7,t:0,i:902}, +D{l:5,t:11,i:1002}, +D{l:136,t:11,i:745}, +D{l:134,t:0,i:2030}, +D{l:6,t:0,i:303}, +D{l:7,t:0,i:335}, +D{l:7,t:0,i:1437}, +D{l:7,t:0,i:1668}, +D{l:8,t:0,i:553}, +D{l:8,t:0,i:652}, +D{l:8,t:0,i:656}, +D{l:9,t:0,i:558}, +D{l:11,t:0,i:743}, +D{l:149,t:0,i:18}, +D{l:5,t:11,i:575}, +D{l:6,t:11,i:354}, +D{l:135,t:11,i:701}, +D{l:4,t:11,i:239}, +D{l:6,t:11,i:477}, +D{l:7,t:11,i:1607}, +D{l:11,t:11,i:68}, +D{l:139,t:11,i:617}, +D{l:132,t:0,i:559}, +D{l:8,t:0,i:527}, +D{l:18,t:0,i:60}, +D{l:147,t:0,i:24}, +D{l:133,t:10,i:920}, +D{l:138,t:0,i:511}, +D{l:133,t:0,i:1017}, +D{l:133,t:0,i:675}, +D{l:138,t:10,i:391}, +D{l:11,t:0,i:156}, +D{l:135,t:10,i:1952}, +D{l:138,t:11,i:369}, +D{l:132,t:11,i:367}, +D{l:133,t:0,i:709}, +D{l:6,t:0,i:698}, +D{l:134,t:0,i:887}, +D{l:142,t:10,i:126}, +D{l:134,t:0,i:1745}, +D{l:132,t:10,i:483}, +D{l:13,t:11,i:299}, +D{l:142,t:11,i:75}, +D{l:133,t:0,i:714}, +D{l:7,t:0,i:8}, +D{l:136,t:0,i:206}, +D{l:138,t:10,i:480}, +D{l:4,t:11,i:694}, +D{l:9,t:10,i:495}, +D{l:146,t:10,i:104}, +D{l:7,t:11,i:1248}, +D{l:11,t:11,i:621}, +D{l:139,t:11,i:702}, +D{l:140,t:11,i:687}, +D{l:132,t:0,i:776}, +D{l:139,t:10,i:1009}, +D{l:135,t:0,i:1272}, +D{l:134,t:0,i:1059}, +D{l:8,t:10,i:653}, +D{l:13,t:10,i:93}, +D{l:147,t:10,i:14}, +D{l:135,t:11,i:213}, +D{l:136,t:0,i:406}, +D{l:133,t:10,i:172}, +D{l:132,t:0,i:947}, +D{l:8,t:0,i:175}, +D{l:10,t:0,i:168}, +D{l:138,t:0,i:573}, +D{l:132,t:0,i:870}, +D{l:6,t:0,i:1567}, +D{l:151,t:11,i:28}, +D{l:134,t:11,i:472}, +D{l:5,t:10,i:260}, +D{l:136,t:11,i:132}, +D{l:4,t:11,i:751}, +D{l:11,t:11,i:390}, +D{l:140,t:11,i:32}, +D{l:4,t:11,i:409}, +D{l:133,t:11,i:78}, +D{l:12,t:0,i:554}, +D{l:6,t:11,i:473}, +D{l:145,t:11,i:105}, +D{l:133,t:0,i:784}, +D{l:8,t:0,i:908}, +D{l:136,t:11,i:306}, +D{l:139,t:0,i:882}, +D{l:6,t:0,i:358}, +D{l:7,t:0,i:1393}, +D{l:8,t:0,i:396}, +D{l:10,t:0,i:263}, +D{l:14,t:0,i:154}, +D{l:16,t:0,i:48}, +D{l:17,t:0,i:8}, +D{l:7,t:11,i:1759}, +D{l:8,t:11,i:396}, +D{l:10,t:11,i:263}, +D{l:14,t:11,i:154}, +D{l:16,t:11,i:48}, +D{l:145,t:11,i:8}, +D{l:13,t:11,i:163}, +D{l:13,t:11,i:180}, +D{l:18,t:11,i:78}, +D{l:148,t:11,i:35}, +D{l:14,t:0,i:32}, +D{l:18,t:0,i:85}, +D{l:20,t:0,i:2}, +D{l:152,t:0,i:16}, +D{l:7,t:0,i:228}, +D{l:10,t:0,i:770}, +D{l:8,t:10,i:167}, +D{l:8,t:10,i:375}, +D{l:9,t:10,i:82}, +D{l:9,t:10,i:561}, +D{l:138,t:10,i:620}, +D{l:132,t:0,i:845}, +D{l:9,t:0,i:14}, +D{l:9,t:0,i:441}, +D{l:10,t:0,i:306}, +D{l:139,t:0,i:9}, +D{l:11,t:0,i:966}, +D{l:12,t:0,i:287}, +D{l:13,t:0,i:342}, +D{l:13,t:0,i:402}, +D{l:15,t:0,i:110}, +D{l:15,t:0,i:163}, +D{l:8,t:10,i:194}, +D{l:136,t:10,i:756}, +D{l:134,t:0,i:1578}, +D{l:4,t:0,i:967}, +D{l:6,t:0,i:1820}, +D{l:6,t:0,i:1847}, +D{l:140,t:0,i:716}, +D{l:136,t:0,i:594}, +D{l:7,t:0,i:1428}, +D{l:7,t:0,i:1640}, +D{l:7,t:0,i:1867}, +D{l:9,t:0,i:169}, +D{l:9,t:0,i:182}, +D{l:9,t:0,i:367}, +D{l:9,t:0,i:478}, +D{l:9,t:0,i:506}, +D{l:9,t:0,i:551}, +D{l:9,t:0,i:557}, +D{l:9,t:0,i:648}, +D{l:9,t:0,i:697}, +D{l:9,t:0,i:705}, +D{l:9,t:0,i:725}, +D{l:9,t:0,i:787}, +D{l:9,t:0,i:794}, +D{l:10,t:0,i:198}, +D{l:10,t:0,i:214}, +D{l:10,t:0,i:267}, +D{l:10,t:0,i:275}, +D{l:10,t:0,i:456}, +D{l:10,t:0,i:551}, +D{l:10,t:0,i:561}, +D{l:10,t:0,i:613}, +D{l:10,t:0,i:627}, +D{l:10,t:0,i:668}, +D{l:10,t:0,i:675}, +D{l:10,t:0,i:691}, +D{l:10,t:0,i:695}, +D{l:10,t:0,i:707}, +D{l:10,t:0,i:715}, +D{l:11,t:0,i:183}, +D{l:11,t:0,i:201}, +D{l:11,t:0,i:244}, +D{l:11,t:0,i:262}, +D{l:11,t:0,i:352}, +D{l:11,t:0,i:439}, +D{l:11,t:0,i:493}, +D{l:11,t:0,i:572}, +D{l:11,t:0,i:591}, +D{l:11,t:0,i:608}, +D{l:11,t:0,i:611}, +D{l:11,t:0,i:646}, +D{l:11,t:0,i:674}, +D{l:11,t:0,i:711}, +D{l:11,t:0,i:751}, +D{l:11,t:0,i:761}, +D{l:11,t:0,i:776}, +D{l:11,t:0,i:785}, +D{l:11,t:0,i:850}, +D{l:11,t:0,i:853}, +D{l:11,t:0,i:862}, +D{l:11,t:0,i:865}, +D{l:11,t:0,i:868}, +D{l:11,t:0,i:875}, +D{l:11,t:0,i:898}, +D{l:11,t:0,i:902}, +D{l:11,t:0,i:903}, +D{l:11,t:0,i:910}, +D{l:11,t:0,i:932}, +D{l:11,t:0,i:942}, +D{l:11,t:0,i:957}, +D{l:11,t:0,i:967}, +D{l:11,t:0,i:972}, +D{l:12,t:0,i:148}, +D{l:12,t:0,i:195}, +D{l:12,t:0,i:220}, +D{l:12,t:0,i:237}, +D{l:12,t:0,i:318}, +D{l:12,t:0,i:339}, +D{l:12,t:0,i:393}, +D{l:12,t:0,i:445}, +D{l:12,t:0,i:450}, +D{l:12,t:0,i:474}, +D{l:12,t:0,i:505}, +D{l:12,t:0,i:509}, +D{l:12,t:0,i:533}, +D{l:12,t:0,i:591}, +D{l:12,t:0,i:594}, +D{l:12,t:0,i:597}, +D{l:12,t:0,i:621}, +D{l:12,t:0,i:633}, +D{l:12,t:0,i:642}, +D{l:13,t:0,i:59}, +D{l:13,t:0,i:60}, +D{l:13,t:0,i:145}, +D{l:13,t:0,i:239}, +D{l:13,t:0,i:250}, +D{l:13,t:0,i:329}, +D{l:13,t:0,i:344}, +D{l:13,t:0,i:365}, +D{l:13,t:0,i:372}, +D{l:13,t:0,i:387}, +D{l:13,t:0,i:403}, +D{l:13,t:0,i:414}, +D{l:13,t:0,i:456}, +D{l:13,t:0,i:470}, +D{l:13,t:0,i:478}, +D{l:13,t:0,i:483}, +D{l:13,t:0,i:489}, +D{l:14,t:0,i:55}, +D{l:14,t:0,i:57}, +D{l:14,t:0,i:81}, +D{l:14,t:0,i:90}, +D{l:14,t:0,i:148}, +D{l:14,t:0,i:239}, +D{l:14,t:0,i:266}, +D{l:14,t:0,i:321}, +D{l:14,t:0,i:326}, +D{l:14,t:0,i:327}, +D{l:14,t:0,i:330}, +D{l:14,t:0,i:347}, +D{l:14,t:0,i:355}, +D{l:14,t:0,i:401}, +D{l:14,t:0,i:404}, +D{l:14,t:0,i:411}, +D{l:14,t:0,i:414}, +D{l:14,t:0,i:416}, +D{l:14,t:0,i:420}, +D{l:15,t:0,i:61}, +D{l:15,t:0,i:74}, +D{l:15,t:0,i:87}, +D{l:15,t:0,i:88}, +D{l:15,t:0,i:94}, +D{l:15,t:0,i:96}, +D{l:15,t:0,i:116}, +D{l:15,t:0,i:149}, +D{l:15,t:0,i:154}, +D{l:16,t:0,i:50}, +D{l:16,t:0,i:63}, +D{l:16,t:0,i:73}, +D{l:17,t:0,i:2}, +D{l:17,t:0,i:66}, +D{l:17,t:0,i:92}, +D{l:17,t:0,i:103}, +D{l:17,t:0,i:112}, +D{l:17,t:0,i:120}, +D{l:18,t:0,i:50}, +D{l:18,t:0,i:54}, +D{l:18,t:0,i:82}, +D{l:18,t:0,i:86}, +D{l:18,t:0,i:90}, +D{l:18,t:0,i:111}, +D{l:18,t:0,i:115}, +D{l:18,t:0,i:156}, +D{l:19,t:0,i:40}, +D{l:19,t:0,i:79}, +D{l:20,t:0,i:78}, +D{l:21,t:0,i:22}, +D{l:135,t:11,i:883}, +D{l:5,t:0,i:161}, +D{l:135,t:0,i:839}, +D{l:4,t:0,i:782}, +D{l:13,t:11,i:293}, +D{l:142,t:11,i:56}, +D{l:133,t:11,i:617}, +D{l:139,t:11,i:50}, +D{l:135,t:10,i:22}, +D{l:145,t:0,i:64}, +D{l:5,t:10,i:639}, +D{l:7,t:10,i:1249}, +D{l:139,t:10,i:896}, +D{l:138,t:0,i:998}, +D{l:135,t:11,i:2042}, +D{l:4,t:11,i:546}, +D{l:142,t:11,i:233}, +D{l:6,t:0,i:1043}, +D{l:134,t:0,i:1574}, +D{l:134,t:0,i:1496}, +D{l:4,t:10,i:102}, +D{l:7,t:10,i:815}, +D{l:7,t:10,i:1699}, +D{l:139,t:10,i:964}, +D{l:12,t:0,i:781}, +D{l:142,t:0,i:461}, +D{l:4,t:11,i:313}, +D{l:133,t:11,i:577}, +D{l:6,t:0,i:639}, +D{l:6,t:0,i:1114}, +D{l:137,t:0,i:817}, +D{l:8,t:11,i:184}, +D{l:141,t:11,i:433}, +D{l:7,t:0,i:1814}, +D{l:135,t:11,i:935}, +D{l:10,t:0,i:997}, +D{l:140,t:0,i:958}, +D{l:4,t:0,i:812}, +D{l:137,t:11,i:625}, +D{l:132,t:10,i:899}, +D{l:136,t:10,i:795}, +D{l:5,t:11,i:886}, +D{l:6,t:11,i:46}, +D{l:6,t:11,i:1790}, +D{l:7,t:11,i:14}, +D{l:7,t:11,i:732}, +D{l:7,t:11,i:1654}, +D{l:8,t:11,i:95}, +D{l:8,t:11,i:327}, +D{l:8,t:11,i:616}, +D{l:10,t:11,i:598}, +D{l:10,t:11,i:769}, +D{l:11,t:11,i:134}, +D{l:11,t:11,i:747}, +D{l:12,t:11,i:378}, +D{l:142,t:11,i:97}, +D{l:136,t:0,i:139}, +D{l:6,t:10,i:52}, +D{l:9,t:10,i:104}, +D{l:9,t:10,i:559}, +D{l:12,t:10,i:308}, +D{l:147,t:10,i:87}, +D{l:133,t:11,i:1021}, +D{l:132,t:10,i:604}, +D{l:132,t:10,i:301}, +D{l:136,t:10,i:779}, +D{l:7,t:0,i:643}, +D{l:136,t:0,i:236}, +D{l:132,t:11,i:153}, +D{l:134,t:0,i:1172}, +D{l:147,t:10,i:32}, +D{l:133,t:11,i:798}, +D{l:6,t:0,i:1338}, +D{l:132,t:11,i:587}, +D{l:6,t:11,i:598}, +D{l:7,t:11,i:42}, +D{l:8,t:11,i:695}, +D{l:10,t:11,i:212}, +D{l:11,t:11,i:158}, +D{l:14,t:11,i:196}, +D{l:145,t:11,i:85}, +D{l:135,t:10,i:508}, +D{l:5,t:11,i:957}, +D{l:5,t:11,i:1008}, +D{l:135,t:11,i:249}, +D{l:4,t:11,i:129}, +D{l:135,t:11,i:465}, +D{l:5,t:0,i:54}, +D{l:7,t:11,i:470}, +D{l:7,t:11,i:1057}, +D{l:7,t:11,i:1201}, +D{l:9,t:11,i:755}, +D{l:11,t:11,i:906}, +D{l:140,t:11,i:527}, +D{l:7,t:11,i:908}, +D{l:146,t:11,i:7}, +D{l:5,t:11,i:148}, +D{l:136,t:11,i:450}, +D{l:144,t:11,i:1}, +D{l:4,t:0,i:256}, +D{l:135,t:0,i:1488}, +D{l:9,t:0,i:351}, +D{l:6,t:10,i:310}, +D{l:7,t:10,i:1849}, +D{l:8,t:10,i:72}, +D{l:8,t:10,i:272}, +D{l:8,t:10,i:431}, +D{l:9,t:10,i:12}, +D{l:10,t:10,i:563}, +D{l:10,t:10,i:630}, +D{l:10,t:10,i:796}, +D{l:10,t:10,i:810}, +D{l:11,t:10,i:367}, +D{l:11,t:10,i:599}, +D{l:11,t:10,i:686}, +D{l:140,t:10,i:672}, +D{l:6,t:0,i:1885}, +D{l:6,t:0,i:1898}, +D{l:6,t:0,i:1899}, +D{l:140,t:0,i:955}, +D{l:4,t:0,i:714}, +D{l:133,t:0,i:469}, +D{l:6,t:0,i:1270}, +D{l:134,t:0,i:1456}, +D{l:132,t:0,i:744}, +D{l:6,t:0,i:313}, +D{l:7,t:10,i:537}, +D{l:8,t:10,i:64}, +D{l:9,t:10,i:127}, +D{l:10,t:10,i:496}, +D{l:12,t:10,i:510}, +D{l:141,t:10,i:384}, +D{l:4,t:11,i:217}, +D{l:4,t:10,i:244}, +D{l:5,t:11,i:710}, +D{l:7,t:10,i:233}, +D{l:7,t:11,i:1926}, +D{l:9,t:11,i:428}, +D{l:9,t:11,i:708}, +D{l:10,t:11,i:254}, +D{l:10,t:11,i:296}, +D{l:10,t:11,i:720}, +D{l:11,t:11,i:109}, +D{l:11,t:11,i:255}, +D{l:12,t:11,i:165}, +D{l:12,t:11,i:315}, +D{l:13,t:11,i:107}, +D{l:13,t:11,i:203}, +D{l:14,t:11,i:54}, +D{l:14,t:11,i:99}, +D{l:14,t:11,i:114}, +D{l:14,t:11,i:388}, +D{l:16,t:11,i:85}, +D{l:17,t:11,i:9}, +D{l:17,t:11,i:33}, +D{l:20,t:11,i:25}, +D{l:20,t:11,i:28}, +D{l:20,t:11,i:29}, +D{l:21,t:11,i:9}, +D{l:21,t:11,i:10}, +D{l:21,t:11,i:34}, +D{l:150,t:11,i:17}, +D{l:138,t:0,i:402}, +D{l:7,t:0,i:969}, +D{l:146,t:0,i:55}, +D{l:8,t:0,i:50}, +D{l:137,t:0,i:624}, +D{l:134,t:0,i:1355}, +D{l:132,t:0,i:572}, +D{l:134,t:10,i:1650}, +D{l:10,t:10,i:702}, +D{l:139,t:10,i:245}, +D{l:10,t:0,i:847}, +D{l:142,t:0,i:445}, +D{l:6,t:0,i:43}, +D{l:7,t:0,i:38}, +D{l:8,t:0,i:248}, +D{l:138,t:0,i:513}, +D{l:133,t:0,i:369}, +D{l:137,t:10,i:338}, +D{l:133,t:0,i:766}, +D{l:133,t:0,i:363}, +D{l:133,t:10,i:896}, +D{l:8,t:11,i:392}, +D{l:11,t:11,i:54}, +D{l:13,t:11,i:173}, +D{l:13,t:11,i:294}, +D{l:148,t:11,i:7}, +D{l:134,t:0,i:678}, +D{l:7,t:11,i:1230}, +D{l:136,t:11,i:531}, +D{l:6,t:0,i:258}, +D{l:140,t:0,i:409}, +D{l:5,t:0,i:249}, +D{l:148,t:0,i:82}, +D{l:7,t:10,i:1117}, +D{l:136,t:10,i:539}, +D{l:5,t:0,i:393}, +D{l:6,t:0,i:378}, +D{l:7,t:0,i:1981}, +D{l:9,t:0,i:32}, +D{l:9,t:0,i:591}, +D{l:10,t:0,i:685}, +D{l:10,t:0,i:741}, +D{l:142,t:0,i:382}, +D{l:133,t:0,i:788}, +D{l:134,t:0,i:1281}, +D{l:134,t:0,i:1295}, +D{l:7,t:0,i:1968}, +D{l:141,t:0,i:509}, +D{l:4,t:0,i:61}, +D{l:5,t:0,i:58}, +D{l:5,t:0,i:171}, +D{l:5,t:0,i:683}, +D{l:6,t:0,i:291}, +D{l:6,t:0,i:566}, +D{l:7,t:0,i:1650}, +D{l:11,t:0,i:523}, +D{l:12,t:0,i:273}, +D{l:12,t:0,i:303}, +D{l:15,t:0,i:39}, +D{l:143,t:0,i:111}, +D{l:6,t:0,i:706}, +D{l:134,t:0,i:1283}, +D{l:134,t:0,i:589}, +D{l:135,t:11,i:1433}, +D{l:133,t:11,i:435}, +D{l:7,t:0,i:1059}, +D{l:13,t:0,i:54}, +D{l:5,t:10,i:4}, +D{l:5,t:10,i:810}, +D{l:6,t:10,i:13}, +D{l:6,t:10,i:538}, +D{l:6,t:10,i:1690}, +D{l:6,t:10,i:1726}, +D{l:7,t:10,i:1819}, +D{l:8,t:10,i:148}, +D{l:8,t:10,i:696}, +D{l:8,t:10,i:791}, +D{l:12,t:10,i:125}, +D{l:143,t:10,i:9}, +D{l:135,t:10,i:1268}, +D{l:5,t:11,i:85}, +D{l:6,t:11,i:419}, +D{l:7,t:11,i:134}, +D{l:7,t:11,i:305}, +D{l:7,t:11,i:361}, +D{l:7,t:11,i:1337}, +D{l:8,t:11,i:71}, +D{l:140,t:11,i:519}, +D{l:137,t:0,i:824}, +D{l:140,t:11,i:688}, +D{l:5,t:11,i:691}, +D{l:7,t:11,i:345}, +D{l:7,t:10,i:1385}, +D{l:9,t:11,i:94}, +D{l:11,t:10,i:582}, +D{l:11,t:10,i:650}, +D{l:11,t:10,i:901}, +D{l:11,t:10,i:949}, +D{l:12,t:11,i:169}, +D{l:12,t:10,i:232}, +D{l:12,t:10,i:236}, +D{l:13,t:10,i:413}, +D{l:13,t:10,i:501}, +D{l:146,t:10,i:116}, +D{l:4,t:0,i:917}, +D{l:133,t:0,i:1005}, +D{l:7,t:0,i:1598}, +D{l:5,t:11,i:183}, +D{l:6,t:11,i:582}, +D{l:9,t:11,i:344}, +D{l:10,t:11,i:679}, +D{l:140,t:11,i:435}, +D{l:4,t:10,i:925}, +D{l:5,t:10,i:803}, +D{l:8,t:10,i:698}, +D{l:138,t:10,i:828}, +D{l:132,t:0,i:919}, +D{l:135,t:11,i:511}, +D{l:139,t:10,i:992}, +D{l:4,t:0,i:255}, +D{l:5,t:0,i:302}, +D{l:6,t:0,i:132}, +D{l:7,t:0,i:128}, +D{l:7,t:0,i:283}, +D{l:7,t:0,i:1299}, +D{l:10,t:0,i:52}, +D{l:10,t:0,i:514}, +D{l:11,t:0,i:925}, +D{l:13,t:0,i:92}, +D{l:142,t:0,i:309}, +D{l:134,t:0,i:1369}, +D{l:135,t:10,i:1847}, +D{l:134,t:0,i:328}, +D{l:7,t:11,i:1993}, +D{l:136,t:11,i:684}, +D{l:133,t:10,i:383}, +D{l:137,t:0,i:173}, +D{l:134,t:11,i:583}, +D{l:134,t:0,i:1411}, +D{l:19,t:0,i:65}, +D{l:5,t:11,i:704}, +D{l:8,t:11,i:357}, +D{l:10,t:11,i:745}, +D{l:14,t:11,i:426}, +D{l:17,t:11,i:94}, +D{l:147,t:11,i:57}, +D{l:9,t:10,i:660}, +D{l:138,t:10,i:347}, +D{l:4,t:11,i:179}, +D{l:5,t:11,i:198}, +D{l:133,t:11,i:697}, +D{l:7,t:11,i:347}, +D{l:7,t:11,i:971}, +D{l:8,t:11,i:181}, +D{l:138,t:11,i:711}, +D{l:141,t:0,i:442}, +D{l:11,t:0,i:842}, +D{l:11,t:0,i:924}, +D{l:13,t:0,i:317}, +D{l:13,t:0,i:370}, +D{l:13,t:0,i:469}, +D{l:13,t:0,i:471}, +D{l:14,t:0,i:397}, +D{l:18,t:0,i:69}, +D{l:18,t:0,i:145}, +D{l:7,t:10,i:572}, +D{l:9,t:10,i:592}, +D{l:11,t:10,i:680}, +D{l:12,t:10,i:356}, +D{l:140,t:10,i:550}, +D{l:14,t:11,i:19}, +D{l:14,t:11,i:28}, +D{l:144,t:11,i:29}, +D{l:136,t:0,i:534}, +D{l:4,t:11,i:243}, +D{l:5,t:11,i:203}, +D{l:7,t:11,i:19}, +D{l:7,t:11,i:71}, +D{l:7,t:11,i:113}, +D{l:10,t:11,i:405}, +D{l:11,t:11,i:357}, +D{l:142,t:11,i:240}, +D{l:6,t:0,i:210}, +D{l:10,t:0,i:845}, +D{l:138,t:0,i:862}, +D{l:7,t:11,i:1351}, +D{l:9,t:11,i:581}, +D{l:10,t:11,i:639}, +D{l:11,t:11,i:453}, +D{l:140,t:11,i:584}, +D{l:7,t:11,i:1450}, +D{l:139,t:11,i:99}, +D{l:10,t:0,i:892}, +D{l:12,t:0,i:719}, +D{l:144,t:0,i:105}, +D{l:4,t:0,i:284}, +D{l:6,t:0,i:223}, +D{l:134,t:11,i:492}, +D{l:5,t:11,i:134}, +D{l:6,t:11,i:408}, +D{l:6,t:11,i:495}, +D{l:135,t:11,i:1593}, +D{l:136,t:0,i:529}, +D{l:137,t:0,i:807}, +D{l:4,t:0,i:218}, +D{l:7,t:0,i:526}, +D{l:143,t:0,i:137}, +D{l:6,t:0,i:1444}, +D{l:142,t:11,i:4}, +D{l:132,t:11,i:665}, +D{l:4,t:0,i:270}, +D{l:5,t:0,i:192}, +D{l:6,t:0,i:332}, +D{l:7,t:0,i:1322}, +D{l:4,t:11,i:248}, +D{l:7,t:11,i:137}, +D{l:137,t:11,i:349}, +D{l:140,t:0,i:661}, +D{l:7,t:0,i:1517}, +D{l:11,t:0,i:597}, +D{l:14,t:0,i:76}, +D{l:14,t:0,i:335}, +D{l:20,t:0,i:33}, +D{l:7,t:10,i:748}, +D{l:139,t:10,i:700}, +D{l:5,t:11,i:371}, +D{l:135,t:11,i:563}, +D{l:146,t:11,i:57}, +D{l:133,t:10,i:127}, +D{l:133,t:0,i:418}, +D{l:4,t:11,i:374}, +D{l:7,t:11,i:547}, +D{l:7,t:11,i:1700}, +D{l:7,t:11,i:1833}, +D{l:139,t:11,i:858}, +D{l:6,t:10,i:198}, +D{l:140,t:10,i:83}, +D{l:7,t:11,i:1812}, +D{l:13,t:11,i:259}, +D{l:13,t:11,i:356}, +D{l:14,t:11,i:242}, +D{l:147,t:11,i:114}, +D{l:7,t:0,i:379}, +D{l:8,t:0,i:481}, +D{l:9,t:0,i:377}, +D{l:5,t:10,i:276}, +D{l:6,t:10,i:55}, +D{l:135,t:10,i:1369}, +D{l:138,t:11,i:286}, +D{l:5,t:0,i:1003}, +D{l:6,t:0,i:149}, +D{l:6,t:10,i:1752}, +D{l:136,t:10,i:726}, +D{l:8,t:0,i:262}, +D{l:9,t:0,i:627}, +D{l:10,t:0,i:18}, +D{l:11,t:0,i:214}, +D{l:11,t:0,i:404}, +D{l:11,t:0,i:457}, +D{l:11,t:0,i:780}, +D{l:11,t:0,i:913}, +D{l:13,t:0,i:401}, +D{l:14,t:0,i:200}, +D{l:6,t:11,i:1647}, +D{l:7,t:11,i:1552}, +D{l:7,t:11,i:2010}, +D{l:9,t:11,i:494}, +D{l:137,t:11,i:509}, +D{l:135,t:0,i:742}, +D{l:136,t:0,i:304}, +D{l:132,t:0,i:142}, +D{l:133,t:10,i:764}, +D{l:6,t:10,i:309}, +D{l:7,t:10,i:331}, +D{l:138,t:10,i:550}, +D{l:135,t:10,i:1062}, +D{l:6,t:11,i:123}, +D{l:7,t:11,i:214}, +D{l:7,t:10,i:986}, +D{l:9,t:11,i:728}, +D{l:10,t:11,i:157}, +D{l:11,t:11,i:346}, +D{l:11,t:11,i:662}, +D{l:143,t:11,i:106}, +D{l:135,t:10,i:1573}, +D{l:7,t:0,i:925}, +D{l:137,t:0,i:799}, +D{l:4,t:0,i:471}, +D{l:5,t:0,i:51}, +D{l:6,t:0,i:602}, +D{l:8,t:0,i:484}, +D{l:138,t:0,i:195}, +D{l:136,t:0,i:688}, +D{l:132,t:0,i:697}, +D{l:6,t:0,i:1169}, +D{l:6,t:0,i:1241}, +D{l:6,t:10,i:194}, +D{l:7,t:10,i:133}, +D{l:10,t:10,i:493}, +D{l:10,t:10,i:570}, +D{l:139,t:10,i:664}, +D{l:140,t:0,i:751}, +D{l:7,t:0,i:929}, +D{l:10,t:0,i:452}, +D{l:11,t:0,i:878}, +D{l:16,t:0,i:33}, +D{l:5,t:10,i:24}, +D{l:5,t:10,i:569}, +D{l:6,t:10,i:3}, +D{l:6,t:10,i:119}, +D{l:6,t:10,i:143}, +D{l:6,t:10,i:440}, +D{l:7,t:10,i:599}, +D{l:7,t:10,i:1686}, +D{l:7,t:10,i:1854}, +D{l:8,t:10,i:424}, +D{l:9,t:10,i:43}, +D{l:9,t:10,i:584}, +D{l:9,t:10,i:760}, +D{l:10,t:10,i:328}, +D{l:11,t:10,i:159}, +D{l:11,t:10,i:253}, +D{l:12,t:10,i:487}, +D{l:140,t:10,i:531}, +D{l:4,t:11,i:707}, +D{l:13,t:11,i:106}, +D{l:18,t:11,i:49}, +D{l:147,t:11,i:41}, +D{l:5,t:0,i:221}, +D{l:5,t:11,i:588}, +D{l:134,t:11,i:393}, +D{l:134,t:0,i:1437}, +D{l:6,t:11,i:211}, +D{l:7,t:11,i:1690}, +D{l:11,t:11,i:486}, +D{l:140,t:11,i:369}, +D{l:5,t:10,i:14}, +D{l:5,t:10,i:892}, +D{l:6,t:10,i:283}, +D{l:7,t:10,i:234}, +D{l:136,t:10,i:537}, +D{l:4,t:0,i:988}, +D{l:136,t:0,i:955}, +D{l:135,t:0,i:1251}, +D{l:4,t:10,i:126}, +D{l:8,t:10,i:635}, +D{l:147,t:10,i:34}, +D{l:4,t:10,i:316}, +D{l:135,t:10,i:1561}, +D{l:137,t:10,i:861}, +D{l:4,t:10,i:64}, +D{l:5,t:10,i:352}, +D{l:5,t:10,i:720}, +D{l:6,t:10,i:368}, +D{l:139,t:10,i:359}, +D{l:134,t:0,i:192}, +D{l:4,t:0,i:132}, +D{l:5,t:0,i:69}, +D{l:135,t:0,i:1242}, +D{l:7,t:10,i:1577}, +D{l:10,t:10,i:304}, +D{l:10,t:10,i:549}, +D{l:12,t:10,i:365}, +D{l:13,t:10,i:220}, +D{l:13,t:10,i:240}, +D{l:142,t:10,i:33}, +D{l:4,t:0,i:111}, +D{l:7,t:0,i:865}, +D{l:134,t:11,i:219}, +D{l:5,t:11,i:582}, +D{l:6,t:11,i:1646}, +D{l:7,t:11,i:99}, +D{l:7,t:11,i:1962}, +D{l:7,t:11,i:1986}, +D{l:8,t:11,i:515}, +D{l:8,t:11,i:773}, +D{l:9,t:11,i:23}, +D{l:9,t:11,i:491}, +D{l:12,t:11,i:620}, +D{l:14,t:11,i:52}, +D{l:145,t:11,i:50}, +D{l:132,t:0,i:767}, +D{l:7,t:11,i:568}, +D{l:148,t:11,i:21}, +D{l:6,t:0,i:42}, +D{l:7,t:0,i:1416}, +D{l:7,t:0,i:2005}, +D{l:8,t:0,i:131}, +D{l:8,t:0,i:466}, +D{l:9,t:0,i:672}, +D{l:13,t:0,i:252}, +D{l:20,t:0,i:103}, +D{l:133,t:11,i:851}, +D{l:135,t:0,i:1050}, +D{l:6,t:10,i:175}, +D{l:137,t:10,i:289}, +D{l:5,t:10,i:432}, +D{l:133,t:10,i:913}, +D{l:6,t:0,i:44}, +D{l:136,t:0,i:368}, +D{l:135,t:11,i:784}, +D{l:132,t:0,i:570}, +D{l:133,t:0,i:120}, +D{l:139,t:10,i:595}, +D{l:140,t:0,i:29}, +D{l:6,t:0,i:227}, +D{l:135,t:0,i:1589}, +D{l:4,t:11,i:98}, +D{l:7,t:11,i:1365}, +D{l:9,t:11,i:422}, +D{l:9,t:11,i:670}, +D{l:10,t:11,i:775}, +D{l:11,t:11,i:210}, +D{l:13,t:11,i:26}, +D{l:13,t:11,i:457}, +D{l:141,t:11,i:476}, +D{l:140,t:10,i:80}, +D{l:5,t:10,i:931}, +D{l:134,t:10,i:1698}, +D{l:133,t:0,i:522}, +D{l:134,t:0,i:1120}, +D{l:135,t:0,i:1529}, +D{l:12,t:0,i:739}, +D{l:14,t:0,i:448}, +D{l:142,t:0,i:467}, +D{l:11,t:10,i:526}, +D{l:11,t:10,i:939}, +D{l:141,t:10,i:290}, +D{l:5,t:10,i:774}, +D{l:6,t:10,i:1637}, +D{l:6,t:10,i:1686}, +D{l:134,t:10,i:1751}, +D{l:6,t:0,i:1667}, +D{l:135,t:0,i:2036}, +D{l:7,t:10,i:1167}, +D{l:11,t:10,i:934}, +D{l:13,t:10,i:391}, +D{l:145,t:10,i:76}, +D{l:137,t:11,i:147}, +D{l:6,t:10,i:260}, +D{l:7,t:10,i:1484}, +D{l:11,t:11,i:821}, +D{l:12,t:11,i:110}, +D{l:12,t:11,i:153}, +D{l:18,t:11,i:41}, +D{l:150,t:11,i:19}, +D{l:6,t:0,i:511}, +D{l:12,t:0,i:132}, +D{l:134,t:10,i:573}, +D{l:5,t:0,i:568}, +D{l:6,t:0,i:138}, +D{l:135,t:0,i:1293}, +D{l:132,t:0,i:1020}, +D{l:8,t:0,i:258}, +D{l:9,t:0,i:208}, +D{l:137,t:0,i:359}, +D{l:4,t:0,i:565}, +D{l:8,t:0,i:23}, +D{l:136,t:0,i:827}, +D{l:134,t:0,i:344}, +D{l:4,t:0,i:922}, +D{l:5,t:0,i:1023}, +D{l:13,t:11,i:477}, +D{l:14,t:11,i:120}, +D{l:148,t:11,i:61}, +D{l:134,t:0,i:240}, +D{l:5,t:11,i:209}, +D{l:6,t:11,i:30}, +D{l:11,t:11,i:56}, +D{l:139,t:11,i:305}, +D{l:6,t:0,i:171}, +D{l:7,t:0,i:1002}, +D{l:7,t:0,i:1324}, +D{l:9,t:0,i:415}, +D{l:14,t:0,i:230}, +D{l:18,t:0,i:68}, +D{l:4,t:10,i:292}, +D{l:4,t:10,i:736}, +D{l:5,t:10,i:871}, +D{l:6,t:10,i:1689}, +D{l:7,t:10,i:1944}, +D{l:137,t:10,i:580}, +D{l:9,t:11,i:635}, +D{l:139,t:11,i:559}, +D{l:4,t:11,i:150}, +D{l:5,t:11,i:303}, +D{l:134,t:11,i:327}, +D{l:6,t:10,i:63}, +D{l:135,t:10,i:920}, +D{l:133,t:10,i:793}, +D{l:8,t:11,i:192}, +D{l:10,t:11,i:78}, +D{l:10,t:11,i:555}, +D{l:11,t:11,i:308}, +D{l:13,t:11,i:359}, +D{l:147,t:11,i:95}, +D{l:135,t:11,i:786}, +D{l:135,t:11,i:1712}, +D{l:136,t:0,i:402}, +D{l:6,t:0,i:754}, +D{l:6,t:11,i:1638}, +D{l:7,t:11,i:79}, +D{l:7,t:11,i:496}, +D{l:9,t:11,i:138}, +D{l:10,t:11,i:336}, +D{l:11,t:11,i:12}, +D{l:12,t:11,i:412}, +D{l:12,t:11,i:440}, +D{l:142,t:11,i:305}, +D{l:4,t:0,i:716}, +D{l:141,t:0,i:31}, +D{l:133,t:0,i:982}, +D{l:8,t:0,i:691}, +D{l:8,t:0,i:731}, +D{l:5,t:10,i:67}, +D{l:6,t:10,i:62}, +D{l:6,t:10,i:374}, +D{l:135,t:10,i:1391}, +D{l:9,t:10,i:790}, +D{l:140,t:10,i:47}, +D{l:139,t:11,i:556}, +D{l:151,t:11,i:1}, +D{l:7,t:11,i:204}, +D{l:7,t:11,i:415}, +D{l:8,t:11,i:42}, +D{l:10,t:11,i:85}, +D{l:11,t:11,i:33}, +D{l:11,t:11,i:564}, +D{l:12,t:11,i:571}, +D{l:149,t:11,i:1}, +D{l:8,t:0,i:888}, +D{l:7,t:11,i:610}, +D{l:135,t:11,i:1501}, +D{l:4,t:10,i:391}, +D{l:135,t:10,i:1169}, +D{l:5,t:0,i:847}, +D{l:9,t:0,i:840}, +D{l:138,t:0,i:803}, +D{l:137,t:0,i:823}, +D{l:134,t:0,i:785}, +D{l:8,t:0,i:152}, +D{l:9,t:0,i:53}, +D{l:9,t:0,i:268}, +D{l:9,t:0,i:901}, +D{l:10,t:0,i:518}, +D{l:10,t:0,i:829}, +D{l:11,t:0,i:188}, +D{l:13,t:0,i:74}, +D{l:14,t:0,i:46}, +D{l:15,t:0,i:17}, +D{l:15,t:0,i:33}, +D{l:17,t:0,i:40}, +D{l:18,t:0,i:36}, +D{l:19,t:0,i:20}, +D{l:22,t:0,i:1}, +D{l:152,t:0,i:2}, +D{l:4,t:11,i:3}, +D{l:5,t:11,i:247}, +D{l:5,t:11,i:644}, +D{l:7,t:11,i:744}, +D{l:7,t:11,i:1207}, +D{l:7,t:11,i:1225}, +D{l:7,t:11,i:1909}, +D{l:146,t:11,i:147}, +D{l:136,t:0,i:532}, +D{l:135,t:0,i:681}, +D{l:132,t:10,i:271}, +D{l:140,t:0,i:314}, +D{l:140,t:0,i:677}, +D{l:4,t:0,i:684}, +D{l:136,t:0,i:384}, +D{l:5,t:11,i:285}, +D{l:9,t:11,i:67}, +D{l:13,t:11,i:473}, +D{l:143,t:11,i:82}, +D{l:4,t:10,i:253}, +D{l:5,t:10,i:544}, +D{l:7,t:10,i:300}, +D{l:137,t:10,i:340}, +D{l:7,t:0,i:110}, +D{l:7,t:0,i:447}, +D{l:8,t:0,i:290}, +D{l:8,t:0,i:591}, +D{l:9,t:0,i:382}, +D{l:9,t:0,i:649}, +D{l:11,t:0,i:71}, +D{l:11,t:0,i:155}, +D{l:11,t:0,i:313}, +D{l:12,t:0,i:5}, +D{l:13,t:0,i:325}, +D{l:142,t:0,i:287}, +D{l:134,t:0,i:1818}, +D{l:136,t:0,i:1007}, +D{l:138,t:0,i:321}, +D{l:7,t:0,i:360}, +D{l:7,t:0,i:425}, +D{l:9,t:0,i:66}, +D{l:9,t:0,i:278}, +D{l:138,t:0,i:644}, +D{l:133,t:10,i:818}, +D{l:5,t:0,i:385}, +D{l:5,t:10,i:541}, +D{l:6,t:10,i:94}, +D{l:6,t:10,i:499}, +D{l:7,t:10,i:230}, +D{l:139,t:10,i:321}, +D{l:4,t:10,i:920}, +D{l:5,t:10,i:25}, +D{l:5,t:10,i:790}, +D{l:6,t:10,i:457}, +D{l:7,t:10,i:853}, +D{l:136,t:10,i:788}, +D{l:4,t:0,i:900}, +D{l:133,t:0,i:861}, +D{l:5,t:0,i:254}, +D{l:7,t:0,i:985}, +D{l:136,t:0,i:73}, +D{l:7,t:0,i:1959}, +D{l:136,t:0,i:683}, +D{l:134,t:10,i:1765}, +D{l:133,t:10,i:822}, +D{l:132,t:10,i:634}, +D{l:4,t:11,i:29}, +D{l:6,t:11,i:532}, +D{l:7,t:11,i:1628}, +D{l:7,t:11,i:1648}, +D{l:9,t:11,i:303}, +D{l:9,t:11,i:350}, +D{l:10,t:11,i:433}, +D{l:11,t:11,i:97}, +D{l:11,t:11,i:557}, +D{l:11,t:11,i:745}, +D{l:12,t:11,i:289}, +D{l:12,t:11,i:335}, +D{l:12,t:11,i:348}, +D{l:12,t:11,i:606}, +D{l:13,t:11,i:116}, +D{l:13,t:11,i:233}, +D{l:13,t:11,i:466}, +D{l:14,t:11,i:181}, +D{l:14,t:11,i:209}, +D{l:14,t:11,i:232}, +D{l:14,t:11,i:236}, +D{l:14,t:11,i:300}, +D{l:16,t:11,i:41}, +D{l:148,t:11,i:97}, +D{l:19,t:0,i:86}, +D{l:6,t:10,i:36}, +D{l:7,t:10,i:658}, +D{l:136,t:10,i:454}, +D{l:135,t:11,i:1692}, +D{l:132,t:0,i:725}, +D{l:5,t:11,i:501}, +D{l:7,t:11,i:1704}, +D{l:9,t:11,i:553}, +D{l:11,t:11,i:520}, +D{l:12,t:11,i:557}, +D{l:141,t:11,i:249}, +D{l:134,t:0,i:196}, +D{l:133,t:0,i:831}, +D{l:136,t:0,i:723}, +D{l:7,t:0,i:1897}, +D{l:13,t:0,i:80}, +D{l:13,t:0,i:437}, +D{l:145,t:0,i:74}, +D{l:4,t:0,i:992}, +D{l:6,t:0,i:627}, +D{l:136,t:0,i:994}, +D{l:135,t:11,i:1294}, +D{l:132,t:10,i:104}, +D{l:5,t:0,i:848}, +D{l:6,t:0,i:66}, +D{l:136,t:0,i:764}, +D{l:4,t:0,i:36}, +D{l:7,t:0,i:1387}, +D{l:10,t:0,i:205}, +D{l:139,t:0,i:755}, +D{l:6,t:0,i:1046}, +D{l:134,t:0,i:1485}, +D{l:134,t:0,i:950}, +D{l:132,t:0,i:887}, +D{l:14,t:0,i:450}, +D{l:148,t:0,i:111}, +D{l:7,t:0,i:620}, +D{l:7,t:0,i:831}, +D{l:9,t:10,i:542}, +D{l:9,t:10,i:566}, +D{l:138,t:10,i:728}, +D{l:6,t:0,i:165}, +D{l:138,t:0,i:388}, +D{l:139,t:10,i:263}, +D{l:4,t:0,i:719}, +D{l:135,t:0,i:155}, +D{l:138,t:10,i:468}, +D{l:6,t:11,i:453}, +D{l:144,t:11,i:36}, +D{l:134,t:11,i:129}, +D{l:5,t:0,i:533}, +D{l:7,t:0,i:755}, +D{l:138,t:0,i:780}, +D{l:134,t:0,i:1465}, +D{l:4,t:0,i:353}, +D{l:6,t:0,i:146}, +D{l:6,t:0,i:1789}, +D{l:7,t:0,i:427}, +D{l:7,t:0,i:990}, +D{l:7,t:0,i:1348}, +D{l:9,t:0,i:665}, +D{l:9,t:0,i:898}, +D{l:11,t:0,i:893}, +D{l:142,t:0,i:212}, +D{l:7,t:10,i:87}, +D{l:142,t:10,i:288}, +D{l:4,t:0,i:45}, +D{l:135,t:0,i:1257}, +D{l:12,t:0,i:7}, +D{l:7,t:10,i:988}, +D{l:7,t:10,i:1939}, +D{l:9,t:10,i:64}, +D{l:9,t:10,i:502}, +D{l:12,t:10,i:34}, +D{l:13,t:10,i:12}, +D{l:13,t:10,i:234}, +D{l:147,t:10,i:77}, +D{l:4,t:0,i:607}, +D{l:5,t:11,i:60}, +D{l:6,t:11,i:504}, +D{l:7,t:11,i:614}, +D{l:7,t:11,i:1155}, +D{l:140,t:11,i:0}, +D{l:135,t:10,i:141}, +D{l:8,t:11,i:198}, +D{l:11,t:11,i:29}, +D{l:140,t:11,i:534}, +D{l:140,t:0,i:65}, +D{l:136,t:0,i:816}, +D{l:132,t:10,i:619}, +D{l:139,t:0,i:88}, +D{l:5,t:10,i:246}, +D{l:8,t:10,i:189}, +D{l:9,t:10,i:355}, +D{l:9,t:10,i:512}, +D{l:10,t:10,i:124}, +D{l:10,t:10,i:453}, +D{l:11,t:10,i:143}, +D{l:11,t:10,i:416}, +D{l:11,t:10,i:859}, +D{l:141,t:10,i:341}, +D{l:4,t:11,i:379}, +D{l:135,t:11,i:1397}, +D{l:4,t:0,i:600}, +D{l:137,t:0,i:621}, +D{l:133,t:0,i:367}, +D{l:134,t:0,i:561}, +D{l:6,t:0,i:559}, +D{l:134,t:0,i:1691}, +D{l:6,t:0,i:585}, +D{l:134,t:11,i:585}, +D{l:135,t:11,i:1228}, +D{l:4,t:11,i:118}, +D{l:5,t:10,i:678}, +D{l:6,t:11,i:274}, +D{l:6,t:11,i:361}, +D{l:7,t:11,i:75}, +D{l:141,t:11,i:441}, +D{l:135,t:11,i:1818}, +D{l:137,t:11,i:841}, +D{l:5,t:0,i:573}, +D{l:6,t:0,i:287}, +D{l:7,t:10,i:862}, +D{l:7,t:10,i:1886}, +D{l:138,t:10,i:179}, +D{l:132,t:10,i:517}, +D{l:140,t:11,i:693}, +D{l:5,t:11,i:314}, +D{l:6,t:11,i:221}, +D{l:7,t:11,i:419}, +D{l:10,t:11,i:650}, +D{l:11,t:11,i:396}, +D{l:12,t:11,i:156}, +D{l:13,t:11,i:369}, +D{l:14,t:11,i:333}, +D{l:145,t:11,i:47}, +D{l:140,t:10,i:540}, +D{l:136,t:10,i:667}, +D{l:11,t:10,i:403}, +D{l:146,t:10,i:83}, +D{l:6,t:0,i:672}, +D{l:133,t:10,i:761}, +D{l:9,t:0,i:157}, +D{l:10,t:10,i:131}, +D{l:140,t:10,i:72}, +D{l:7,t:0,i:714}, +D{l:134,t:11,i:460}, +D{l:134,t:0,i:456}, +D{l:133,t:0,i:925}, +D{l:5,t:11,i:682}, +D{l:135,t:11,i:1887}, +D{l:136,t:11,i:510}, +D{l:136,t:11,i:475}, +D{l:133,t:11,i:1016}, +D{l:9,t:0,i:19}, +D{l:7,t:11,i:602}, +D{l:8,t:11,i:179}, +D{l:10,t:11,i:781}, +D{l:140,t:11,i:126}, +D{l:6,t:11,i:329}, +D{l:138,t:11,i:111}, +D{l:6,t:0,i:822}, +D{l:134,t:0,i:1473}, +D{l:144,t:11,i:86}, +D{l:11,t:0,i:113}, +D{l:139,t:11,i:113}, +D{l:5,t:11,i:821}, +D{l:134,t:11,i:1687}, +D{l:133,t:10,i:449}, +D{l:7,t:0,i:463}, +D{l:17,t:0,i:69}, +D{l:136,t:10,i:103}, +D{l:7,t:10,i:2028}, +D{l:138,t:10,i:641}, +D{l:6,t:0,i:193}, +D{l:7,t:0,i:240}, +D{l:7,t:0,i:1682}, +D{l:10,t:0,i:51}, +D{l:10,t:0,i:640}, +D{l:11,t:0,i:410}, +D{l:13,t:0,i:82}, +D{l:14,t:0,i:247}, +D{l:14,t:0,i:331}, +D{l:142,t:0,i:377}, +D{l:6,t:0,i:471}, +D{l:11,t:0,i:411}, +D{l:142,t:0,i:2}, +D{l:5,t:11,i:71}, +D{l:7,t:11,i:1407}, +D{l:9,t:11,i:388}, +D{l:9,t:11,i:704}, +D{l:10,t:11,i:261}, +D{l:10,t:11,i:619}, +D{l:11,t:11,i:547}, +D{l:11,t:11,i:619}, +D{l:143,t:11,i:157}, +D{l:136,t:0,i:633}, +D{l:135,t:0,i:1148}, +D{l:6,t:0,i:554}, +D{l:7,t:0,i:1392}, +D{l:12,t:0,i:129}, +D{l:7,t:10,i:1274}, +D{l:7,t:10,i:1386}, +D{l:7,t:11,i:2008}, +D{l:9,t:11,i:337}, +D{l:10,t:11,i:517}, +D{l:146,t:10,i:87}, +D{l:7,t:0,i:803}, +D{l:8,t:0,i:542}, +D{l:6,t:10,i:187}, +D{l:7,t:10,i:1203}, +D{l:8,t:10,i:380}, +D{l:14,t:10,i:117}, +D{l:149,t:10,i:28}, +D{l:6,t:10,i:297}, +D{l:7,t:10,i:793}, +D{l:139,t:10,i:938}, +D{l:8,t:0,i:438}, +D{l:11,t:0,i:363}, +D{l:7,t:10,i:464}, +D{l:11,t:10,i:105}, +D{l:12,t:10,i:231}, +D{l:14,t:10,i:386}, +D{l:15,t:10,i:102}, +D{l:148,t:10,i:75}, +D{l:5,t:11,i:16}, +D{l:6,t:11,i:86}, +D{l:6,t:11,i:603}, +D{l:7,t:11,i:292}, +D{l:7,t:11,i:561}, +D{l:8,t:11,i:257}, +D{l:8,t:11,i:382}, +D{l:9,t:11,i:721}, +D{l:9,t:11,i:778}, +D{l:11,t:11,i:581}, +D{l:140,t:11,i:466}, +D{l:6,t:0,i:717}, +D{l:4,t:11,i:486}, +D{l:133,t:11,i:491}, +D{l:132,t:0,i:875}, +D{l:132,t:11,i:72}, +D{l:6,t:11,i:265}, +D{l:135,t:11,i:847}, +D{l:4,t:0,i:237}, +D{l:135,t:0,i:514}, +D{l:6,t:0,i:392}, +D{l:7,t:0,i:65}, +D{l:135,t:0,i:2019}, +D{l:140,t:11,i:261}, +D{l:135,t:11,i:922}, +D{l:137,t:11,i:404}, +D{l:12,t:0,i:563}, +D{l:14,t:0,i:101}, +D{l:18,t:0,i:129}, +D{l:7,t:10,i:1010}, +D{l:11,t:10,i:733}, +D{l:11,t:10,i:759}, +D{l:13,t:10,i:34}, +D{l:146,t:10,i:45}, +D{l:7,t:10,i:1656}, +D{l:9,t:10,i:369}, +D{l:10,t:10,i:338}, +D{l:10,t:10,i:490}, +D{l:11,t:10,i:154}, +D{l:11,t:10,i:545}, +D{l:11,t:10,i:775}, +D{l:13,t:10,i:77}, +D{l:141,t:10,i:274}, +D{l:4,t:0,i:444}, +D{l:10,t:0,i:146}, +D{l:140,t:0,i:9}, +D{l:139,t:11,i:163}, +D{l:7,t:0,i:1260}, +D{l:135,t:0,i:1790}, +D{l:9,t:0,i:222}, +D{l:10,t:0,i:43}, +D{l:139,t:0,i:900}, +D{l:137,t:11,i:234}, +D{l:138,t:0,i:971}, +D{l:137,t:0,i:761}, +D{l:134,t:0,i:699}, +D{l:136,t:11,i:434}, +D{l:6,t:0,i:1116}, +D{l:7,t:0,i:1366}, +D{l:5,t:10,i:20}, +D{l:6,t:11,i:197}, +D{l:6,t:10,i:298}, +D{l:7,t:10,i:659}, +D{l:8,t:11,i:205}, +D{l:137,t:10,i:219}, +D{l:132,t:11,i:490}, +D{l:11,t:11,i:820}, +D{l:150,t:11,i:51}, +D{l:7,t:10,i:1440}, +D{l:11,t:10,i:854}, +D{l:11,t:10,i:872}, +D{l:11,t:10,i:921}, +D{l:12,t:10,i:551}, +D{l:13,t:10,i:472}, +D{l:142,t:10,i:367}, +D{l:140,t:11,i:13}, +D{l:132,t:0,i:829}, +D{l:12,t:0,i:242}, +D{l:132,t:10,i:439}, +D{l:136,t:10,i:669}, +D{l:6,t:0,i:593}, +D{l:6,t:11,i:452}, +D{l:7,t:11,i:312}, +D{l:138,t:11,i:219}, +D{l:4,t:11,i:333}, +D{l:9,t:11,i:176}, +D{l:12,t:11,i:353}, +D{l:141,t:11,i:187}, +D{l:7,t:0,i:36}, +D{l:8,t:0,i:201}, +D{l:136,t:0,i:605}, +D{l:140,t:0,i:224}, +D{l:132,t:10,i:233}, +D{l:134,t:0,i:1430}, +D{l:134,t:0,i:1806}, +D{l:4,t:0,i:523}, +D{l:133,t:0,i:638}, +D{l:6,t:0,i:1889}, +D{l:9,t:0,i:958}, +D{l:9,t:0,i:971}, +D{l:9,t:0,i:976}, +D{l:12,t:0,i:796}, +D{l:12,t:0,i:799}, +D{l:12,t:0,i:808}, +D{l:12,t:0,i:835}, +D{l:12,t:0,i:836}, +D{l:12,t:0,i:914}, +D{l:12,t:0,i:946}, +D{l:15,t:0,i:216}, +D{l:15,t:0,i:232}, +D{l:18,t:0,i:183}, +D{l:18,t:0,i:187}, +D{l:18,t:0,i:194}, +D{l:18,t:0,i:212}, +D{l:18,t:0,i:232}, +D{l:149,t:0,i:49}, +D{l:132,t:10,i:482}, +D{l:6,t:0,i:827}, +D{l:134,t:0,i:1434}, +D{l:135,t:10,i:346}, +D{l:134,t:0,i:2043}, +D{l:6,t:0,i:242}, +D{l:7,t:0,i:227}, +D{l:7,t:0,i:1581}, +D{l:8,t:0,i:104}, +D{l:9,t:0,i:113}, +D{l:9,t:0,i:220}, +D{l:9,t:0,i:427}, +D{l:10,t:0,i:136}, +D{l:10,t:0,i:239}, +D{l:11,t:0,i:579}, +D{l:11,t:0,i:1023}, +D{l:13,t:0,i:4}, +D{l:13,t:0,i:204}, +D{l:13,t:0,i:316}, +D{l:148,t:0,i:86}, +D{l:134,t:11,i:1685}, +D{l:7,t:0,i:148}, +D{l:8,t:0,i:284}, +D{l:141,t:0,i:63}, +D{l:142,t:0,i:10}, +D{l:135,t:11,i:584}, +D{l:134,t:0,i:1249}, +D{l:7,t:0,i:861}, +D{l:135,t:10,i:334}, +D{l:5,t:10,i:795}, +D{l:6,t:10,i:1741}, +D{l:137,t:11,i:70}, +D{l:132,t:0,i:807}, +D{l:7,t:11,i:135}, +D{l:8,t:11,i:7}, +D{l:8,t:11,i:62}, +D{l:9,t:11,i:243}, +D{l:10,t:11,i:658}, +D{l:10,t:11,i:697}, +D{l:11,t:11,i:456}, +D{l:139,t:11,i:756}, +D{l:9,t:11,i:395}, +D{l:138,t:11,i:79}, +D{l:137,t:11,i:108}, +D{l:147,t:0,i:94}, +D{l:136,t:0,i:494}, +D{l:135,t:11,i:631}, +D{l:135,t:10,i:622}, +D{l:7,t:0,i:1510}, +D{l:135,t:10,i:1750}, +D{l:4,t:10,i:203}, +D{l:135,t:10,i:1936}, +D{l:7,t:11,i:406}, +D{l:7,t:11,i:459}, +D{l:8,t:11,i:606}, +D{l:139,t:11,i:726}, +D{l:7,t:0,i:1306}, +D{l:8,t:0,i:505}, +D{l:9,t:0,i:482}, +D{l:10,t:0,i:126}, +D{l:11,t:0,i:225}, +D{l:12,t:0,i:347}, +D{l:12,t:0,i:449}, +D{l:13,t:0,i:19}, +D{l:14,t:0,i:218}, +D{l:142,t:0,i:435}, +D{l:5,t:0,i:268}, +D{l:10,t:0,i:764}, +D{l:12,t:0,i:120}, +D{l:13,t:0,i:39}, +D{l:145,t:0,i:127}, +D{l:142,t:11,i:68}, +D{l:11,t:10,i:678}, +D{l:140,t:10,i:307}, +D{l:12,t:11,i:268}, +D{l:12,t:11,i:640}, +D{l:142,t:11,i:119}, +D{l:135,t:10,i:2044}, +D{l:133,t:11,i:612}, +D{l:4,t:11,i:372}, +D{l:7,t:11,i:482}, +D{l:8,t:11,i:158}, +D{l:9,t:11,i:602}, +D{l:9,t:11,i:615}, +D{l:10,t:11,i:245}, +D{l:10,t:11,i:678}, +D{l:10,t:11,i:744}, +D{l:11,t:11,i:248}, +D{l:139,t:11,i:806}, +D{l:7,t:10,i:311}, +D{l:9,t:10,i:308}, +D{l:140,t:10,i:255}, +D{l:4,t:0,i:384}, +D{l:135,t:0,i:1022}, +D{l:5,t:11,i:854}, +D{l:135,t:11,i:1991}, +D{l:135,t:10,i:1266}, +D{l:4,t:10,i:400}, +D{l:5,t:10,i:267}, +D{l:135,t:10,i:232}, +D{l:135,t:0,i:1703}, +D{l:9,t:0,i:159}, +D{l:11,t:0,i:661}, +D{l:140,t:0,i:603}, +D{l:4,t:0,i:964}, +D{l:14,t:0,i:438}, +D{l:14,t:0,i:444}, +D{l:14,t:0,i:456}, +D{l:22,t:0,i:60}, +D{l:22,t:0,i:63}, +D{l:9,t:11,i:106}, +D{l:9,t:11,i:163}, +D{l:9,t:11,i:296}, +D{l:10,t:11,i:167}, +D{l:10,t:11,i:172}, +D{l:10,t:11,i:777}, +D{l:139,t:11,i:16}, +D{l:136,t:0,i:583}, +D{l:132,t:0,i:515}, +D{l:8,t:0,i:632}, +D{l:8,t:0,i:697}, +D{l:137,t:0,i:854}, +D{l:5,t:11,i:195}, +D{l:135,t:11,i:1685}, +D{l:6,t:0,i:1123}, +D{l:134,t:0,i:1365}, +D{l:134,t:11,i:328}, +D{l:7,t:11,i:1997}, +D{l:8,t:11,i:730}, +D{l:139,t:11,i:1006}, +D{l:4,t:0,i:136}, +D{l:133,t:0,i:551}, +D{l:134,t:0,i:1782}, +D{l:7,t:0,i:1287}, +D{l:9,t:0,i:44}, +D{l:10,t:0,i:552}, +D{l:10,t:0,i:642}, +D{l:11,t:0,i:839}, +D{l:12,t:0,i:274}, +D{l:12,t:0,i:275}, +D{l:12,t:0,i:372}, +D{l:13,t:0,i:91}, +D{l:142,t:0,i:125}, +D{l:5,t:11,i:751}, +D{l:11,t:11,i:797}, +D{l:140,t:11,i:203}, +D{l:133,t:0,i:732}, +D{l:7,t:0,i:679}, +D{l:8,t:0,i:313}, +D{l:4,t:10,i:100}, +D{l:135,t:11,i:821}, +D{l:10,t:0,i:361}, +D{l:142,t:0,i:316}, +D{l:134,t:0,i:595}, +D{l:6,t:0,i:147}, +D{l:7,t:0,i:886}, +D{l:9,t:0,i:753}, +D{l:138,t:0,i:268}, +D{l:5,t:10,i:362}, +D{l:5,t:10,i:443}, +D{l:6,t:10,i:318}, +D{l:7,t:10,i:1019}, +D{l:139,t:10,i:623}, +D{l:5,t:10,i:463}, +D{l:136,t:10,i:296}, +D{l:4,t:10,i:454}, +D{l:5,t:11,i:950}, +D{l:5,t:11,i:994}, +D{l:134,t:11,i:351}, +D{l:138,t:0,i:137}, +D{l:5,t:10,i:48}, +D{l:5,t:10,i:404}, +D{l:6,t:10,i:557}, +D{l:7,t:10,i:458}, +D{l:8,t:10,i:597}, +D{l:10,t:10,i:455}, +D{l:10,t:10,i:606}, +D{l:11,t:10,i:49}, +D{l:11,t:10,i:548}, +D{l:12,t:10,i:476}, +D{l:13,t:10,i:18}, +D{l:141,t:10,i:450}, +D{l:133,t:0,i:414}, +D{l:135,t:0,i:1762}, +D{l:5,t:11,i:421}, +D{l:135,t:11,i:47}, +D{l:5,t:10,i:442}, +D{l:135,t:10,i:1984}, +D{l:134,t:0,i:599}, +D{l:134,t:0,i:1749}, +D{l:134,t:0,i:1627}, +D{l:4,t:0,i:488}, +D{l:132,t:11,i:350}, +D{l:137,t:11,i:751}, +D{l:132,t:0,i:83}, +D{l:140,t:0,i:676}, +D{l:133,t:11,i:967}, +D{l:7,t:0,i:1639}, +D{l:5,t:10,i:55}, +D{l:140,t:10,i:161}, +D{l:4,t:11,i:473}, +D{l:7,t:11,i:623}, +D{l:8,t:11,i:808}, +D{l:9,t:11,i:871}, +D{l:9,t:11,i:893}, +D{l:11,t:11,i:38}, +D{l:11,t:11,i:431}, +D{l:12,t:11,i:112}, +D{l:12,t:11,i:217}, +D{l:12,t:11,i:243}, +D{l:12,t:11,i:562}, +D{l:12,t:11,i:683}, +D{l:13,t:11,i:141}, +D{l:13,t:11,i:197}, +D{l:13,t:11,i:227}, +D{l:13,t:11,i:406}, +D{l:13,t:11,i:487}, +D{l:14,t:11,i:156}, +D{l:14,t:11,i:203}, +D{l:14,t:11,i:224}, +D{l:14,t:11,i:256}, +D{l:18,t:11,i:58}, +D{l:150,t:11,i:0}, +D{l:133,t:10,i:450}, +D{l:7,t:11,i:736}, +D{l:139,t:11,i:264}, +D{l:134,t:0,i:278}, +D{l:4,t:11,i:222}, +D{l:7,t:11,i:286}, +D{l:136,t:11,i:629}, +D{l:135,t:10,i:869}, +D{l:140,t:0,i:97}, +D{l:144,t:0,i:14}, +D{l:134,t:0,i:1085}, +D{l:4,t:10,i:213}, +D{l:7,t:10,i:223}, +D{l:136,t:10,i:80}, +D{l:7,t:0,i:388}, +D{l:7,t:0,i:644}, +D{l:139,t:0,i:781}, +D{l:132,t:0,i:849}, +D{l:7,t:0,i:229}, +D{l:8,t:0,i:59}, +D{l:9,t:0,i:190}, +D{l:10,t:0,i:378}, +D{l:140,t:0,i:191}, +D{l:7,t:10,i:381}, +D{l:7,t:10,i:806}, +D{l:7,t:10,i:820}, +D{l:8,t:10,i:354}, +D{l:8,t:10,i:437}, +D{l:8,t:10,i:787}, +D{l:9,t:10,i:657}, +D{l:10,t:10,i:58}, +D{l:10,t:10,i:339}, +D{l:10,t:10,i:749}, +D{l:11,t:10,i:914}, +D{l:12,t:10,i:162}, +D{l:13,t:10,i:75}, +D{l:14,t:10,i:106}, +D{l:14,t:10,i:198}, +D{l:14,t:10,i:320}, +D{l:14,t:10,i:413}, +D{l:146,t:10,i:43}, +D{l:141,t:11,i:306}, +D{l:136,t:10,i:747}, +D{l:134,t:0,i:1115}, +D{l:16,t:0,i:94}, +D{l:16,t:0,i:108}, +D{l:136,t:11,i:146}, +D{l:6,t:0,i:700}, +D{l:6,t:0,i:817}, +D{l:134,t:0,i:1002}, +D{l:133,t:10,i:692}, +D{l:4,t:11,i:465}, +D{l:135,t:11,i:1663}, +D{l:134,t:10,i:191}, +D{l:6,t:0,i:1414}, +D{l:135,t:11,i:913}, +D{l:132,t:0,i:660}, +D{l:7,t:0,i:1035}, +D{l:138,t:0,i:737}, +D{l:6,t:10,i:162}, +D{l:7,t:10,i:1960}, +D{l:136,t:10,i:831}, +D{l:132,t:10,i:706}, +D{l:7,t:0,i:690}, +D{l:9,t:0,i:217}, +D{l:9,t:0,i:587}, +D{l:140,t:0,i:521}, +D{l:138,t:10,i:426}, +D{l:135,t:10,i:1235}, +D{l:6,t:11,i:82}, +D{l:7,t:11,i:138}, +D{l:7,t:11,i:517}, +D{l:9,t:11,i:673}, +D{l:139,t:11,i:238}, +D{l:138,t:0,i:272}, +D{l:5,t:11,i:495}, +D{l:7,t:11,i:834}, +D{l:9,t:11,i:733}, +D{l:139,t:11,i:378}, +D{l:134,t:0,i:1744}, +D{l:132,t:0,i:1011}, +D{l:7,t:11,i:828}, +D{l:142,t:11,i:116}, +D{l:4,t:0,i:733}, +D{l:9,t:0,i:194}, +D{l:10,t:0,i:92}, +D{l:11,t:0,i:198}, +D{l:12,t:0,i:84}, +D{l:13,t:0,i:128}, +D{l:133,t:11,i:559}, +D{l:10,t:0,i:57}, +D{l:10,t:0,i:277}, +D{l:6,t:11,i:21}, +D{l:6,t:11,i:1737}, +D{l:7,t:11,i:1444}, +D{l:136,t:11,i:224}, +D{l:4,t:10,i:204}, +D{l:137,t:10,i:902}, +D{l:136,t:10,i:833}, +D{l:11,t:0,i:348}, +D{l:12,t:0,i:99}, +D{l:18,t:0,i:1}, +D{l:18,t:0,i:11}, +D{l:19,t:0,i:4}, +D{l:7,t:10,i:366}, +D{l:9,t:10,i:287}, +D{l:12,t:10,i:199}, +D{l:12,t:10,i:556}, +D{l:140,t:10,i:577}, +D{l:6,t:0,i:1981}, +D{l:136,t:0,i:936}, +D{l:21,t:0,i:33}, +D{l:150,t:0,i:40}, +D{l:5,t:11,i:519}, +D{l:138,t:11,i:204}, +D{l:5,t:10,i:356}, +D{l:135,t:10,i:224}, +D{l:134,t:0,i:775}, +D{l:135,t:0,i:306}, +D{l:7,t:10,i:630}, +D{l:9,t:10,i:567}, +D{l:11,t:10,i:150}, +D{l:11,t:10,i:444}, +D{l:141,t:10,i:119}, +D{l:5,t:0,i:979}, +D{l:134,t:10,i:539}, +D{l:133,t:0,i:611}, +D{l:4,t:11,i:402}, +D{l:135,t:11,i:1679}, +D{l:5,t:0,i:178}, +D{l:7,t:11,i:2}, +D{l:8,t:11,i:323}, +D{l:136,t:11,i:479}, +D{l:5,t:11,i:59}, +D{l:135,t:11,i:672}, +D{l:4,t:0,i:1010}, +D{l:6,t:0,i:1969}, +D{l:138,t:11,i:237}, +D{l:133,t:11,i:412}, +D{l:146,t:11,i:34}, +D{l:7,t:11,i:1740}, +D{l:146,t:11,i:48}, +D{l:134,t:0,i:664}, +D{l:139,t:10,i:814}, +D{l:4,t:11,i:85}, +D{l:135,t:11,i:549}, +D{l:133,t:11,i:94}, +D{l:133,t:11,i:457}, +D{l:132,t:0,i:390}, +D{l:134,t:0,i:1510}, +D{l:4,t:10,i:235}, +D{l:135,t:10,i:255}, +D{l:4,t:10,i:194}, +D{l:5,t:10,i:584}, +D{l:6,t:11,i:11}, +D{l:6,t:10,i:384}, +D{l:7,t:11,i:187}, +D{l:7,t:10,i:583}, +D{l:10,t:10,i:761}, +D{l:11,t:10,i:760}, +D{l:139,t:10,i:851}, +D{l:4,t:11,i:522}, +D{l:139,t:11,i:802}, +D{l:135,t:0,i:493}, +D{l:10,t:11,i:776}, +D{l:13,t:11,i:345}, +D{l:142,t:11,i:425}, +D{l:146,t:0,i:37}, +D{l:4,t:11,i:52}, +D{l:135,t:11,i:661}, +D{l:134,t:0,i:724}, +D{l:134,t:0,i:829}, +D{l:133,t:11,i:520}, +D{l:133,t:10,i:562}, +D{l:4,t:11,i:281}, +D{l:5,t:11,i:38}, +D{l:7,t:11,i:194}, +D{l:7,t:11,i:668}, +D{l:7,t:11,i:1893}, +D{l:137,t:11,i:397}, +D{l:5,t:10,i:191}, +D{l:137,t:10,i:271}, +D{l:7,t:0,i:1537}, +D{l:14,t:0,i:96}, +D{l:143,t:0,i:73}, +D{l:5,t:0,i:473}, +D{l:11,t:0,i:168}, +D{l:4,t:10,i:470}, +D{l:6,t:10,i:153}, +D{l:7,t:10,i:1503}, +D{l:7,t:10,i:1923}, +D{l:10,t:10,i:701}, +D{l:11,t:10,i:132}, +D{l:11,t:10,i:227}, +D{l:11,t:10,i:320}, +D{l:11,t:10,i:436}, +D{l:11,t:10,i:525}, +D{l:11,t:10,i:855}, +D{l:12,t:10,i:41}, +D{l:12,t:10,i:286}, +D{l:13,t:10,i:103}, +D{l:13,t:10,i:284}, +D{l:14,t:10,i:255}, +D{l:14,t:10,i:262}, +D{l:15,t:10,i:117}, +D{l:143,t:10,i:127}, +D{l:133,t:0,i:105}, +D{l:5,t:0,i:438}, +D{l:9,t:0,i:694}, +D{l:12,t:0,i:627}, +D{l:141,t:0,i:210}, +D{l:133,t:10,i:327}, +D{l:6,t:10,i:552}, +D{l:7,t:10,i:1754}, +D{l:137,t:10,i:604}, +D{l:134,t:0,i:1256}, +D{l:152,t:0,i:11}, +D{l:5,t:11,i:448}, +D{l:11,t:11,i:98}, +D{l:139,t:11,i:524}, +D{l:7,t:0,i:1626}, +D{l:5,t:10,i:80}, +D{l:6,t:10,i:405}, +D{l:7,t:10,i:403}, +D{l:7,t:10,i:1502}, +D{l:8,t:10,i:456}, +D{l:9,t:10,i:487}, +D{l:9,t:10,i:853}, +D{l:9,t:10,i:889}, +D{l:10,t:10,i:309}, +D{l:11,t:10,i:721}, +D{l:11,t:10,i:994}, +D{l:12,t:10,i:430}, +D{l:13,t:10,i:165}, +D{l:14,t:11,i:16}, +D{l:146,t:11,i:44}, +D{l:132,t:0,i:779}, +D{l:8,t:0,i:25}, +D{l:138,t:0,i:826}, +D{l:4,t:10,i:453}, +D{l:5,t:10,i:887}, +D{l:6,t:10,i:535}, +D{l:8,t:10,i:6}, +D{l:8,t:10,i:543}, +D{l:136,t:10,i:826}, +D{l:137,t:11,i:461}, +D{l:140,t:11,i:632}, +D{l:132,t:0,i:308}, +D{l:135,t:0,i:741}, +D{l:132,t:0,i:671}, +D{l:7,t:0,i:150}, +D{l:8,t:0,i:649}, +D{l:136,t:0,i:1020}, +D{l:9,t:0,i:99}, +D{l:6,t:11,i:336}, +D{l:8,t:11,i:552}, +D{l:9,t:11,i:285}, +D{l:10,t:11,i:99}, +D{l:139,t:11,i:568}, +D{l:134,t:0,i:521}, +D{l:5,t:0,i:339}, +D{l:14,t:0,i:3}, +D{l:15,t:0,i:41}, +D{l:15,t:0,i:166}, +D{l:147,t:0,i:66}, +D{l:6,t:11,i:423}, +D{l:7,t:11,i:665}, +D{l:7,t:11,i:1210}, +D{l:9,t:11,i:218}, +D{l:141,t:11,i:222}, +D{l:6,t:0,i:543}, +D{l:5,t:10,i:101}, +D{l:5,t:11,i:256}, +D{l:6,t:10,i:88}, +D{l:7,t:10,i:1677}, +D{l:9,t:10,i:100}, +D{l:10,t:10,i:677}, +D{l:14,t:10,i:169}, +D{l:14,t:10,i:302}, +D{l:14,t:10,i:313}, +D{l:15,t:10,i:48}, +D{l:143,t:10,i:84}, +D{l:4,t:10,i:310}, +D{l:7,t:10,i:708}, +D{l:7,t:10,i:996}, +D{l:9,t:10,i:795}, +D{l:10,t:10,i:390}, +D{l:10,t:10,i:733}, +D{l:11,t:10,i:451}, +D{l:12,t:10,i:249}, +D{l:14,t:10,i:115}, +D{l:14,t:10,i:286}, +D{l:143,t:10,i:100}, +D{l:133,t:10,i:587}, +D{l:13,t:11,i:417}, +D{l:14,t:11,i:129}, +D{l:143,t:11,i:15}, +D{l:134,t:0,i:1358}, +D{l:136,t:11,i:554}, +D{l:132,t:10,i:498}, +D{l:7,t:10,i:217}, +D{l:8,t:10,i:140}, +D{l:138,t:10,i:610}, +D{l:135,t:11,i:989}, +D{l:135,t:11,i:634}, +D{l:6,t:0,i:155}, +D{l:140,t:0,i:234}, +D{l:135,t:11,i:462}, +D{l:132,t:11,i:618}, +D{l:134,t:0,i:1628}, +D{l:132,t:0,i:766}, +D{l:4,t:11,i:339}, +D{l:5,t:10,i:905}, +D{l:135,t:11,i:259}, +D{l:135,t:0,i:829}, +D{l:4,t:11,i:759}, +D{l:141,t:11,i:169}, +D{l:7,t:0,i:1445}, +D{l:4,t:10,i:456}, +D{l:7,t:10,i:358}, +D{l:7,t:10,i:1637}, +D{l:8,t:10,i:643}, +D{l:139,t:10,i:483}, +D{l:5,t:0,i:486}, +D{l:135,t:0,i:1349}, +D{l:5,t:11,i:688}, +D{l:135,t:11,i:712}, +D{l:7,t:0,i:1635}, +D{l:8,t:0,i:17}, +D{l:10,t:0,i:217}, +D{l:10,t:0,i:295}, +D{l:12,t:0,i:2}, +D{l:140,t:11,i:2}, +D{l:138,t:0,i:558}, +D{l:150,t:10,i:56}, +D{l:4,t:11,i:278}, +D{l:5,t:11,i:465}, +D{l:135,t:11,i:1367}, +D{l:136,t:11,i:482}, +D{l:133,t:10,i:535}, +D{l:6,t:0,i:1362}, +D{l:6,t:0,i:1461}, +D{l:10,t:11,i:274}, +D{l:10,t:11,i:625}, +D{l:139,t:11,i:530}, +D{l:5,t:0,i:599}, +D{l:5,t:11,i:336}, +D{l:6,t:11,i:341}, +D{l:6,t:11,i:478}, +D{l:6,t:11,i:1763}, +D{l:136,t:11,i:386}, +D{l:7,t:10,i:1748}, +D{l:137,t:11,i:151}, +D{l:134,t:0,i:1376}, +D{l:133,t:10,i:539}, +D{l:135,t:11,i:73}, +D{l:135,t:11,i:1971}, +D{l:139,t:11,i:283}, +D{l:9,t:0,i:93}, +D{l:139,t:0,i:474}, +D{l:6,t:10,i:91}, +D{l:135,t:10,i:435}, +D{l:6,t:0,i:447}, +D{l:5,t:11,i:396}, +D{l:134,t:11,i:501}, +D{l:4,t:10,i:16}, +D{l:5,t:10,i:316}, +D{l:5,t:10,i:842}, +D{l:6,t:10,i:370}, +D{l:6,t:10,i:1778}, +D{l:8,t:10,i:166}, +D{l:11,t:10,i:812}, +D{l:12,t:10,i:206}, +D{l:12,t:10,i:351}, +D{l:14,t:10,i:418}, +D{l:16,t:10,i:15}, +D{l:16,t:10,i:34}, +D{l:18,t:10,i:3}, +D{l:19,t:10,i:3}, +D{l:19,t:10,i:7}, +D{l:20,t:10,i:4}, +D{l:149,t:10,i:21}, +D{l:7,t:0,i:577}, +D{l:7,t:0,i:1432}, +D{l:9,t:0,i:475}, +D{l:9,t:0,i:505}, +D{l:9,t:0,i:526}, +D{l:9,t:0,i:609}, +D{l:9,t:0,i:689}, +D{l:9,t:0,i:726}, +D{l:9,t:0,i:735}, +D{l:9,t:0,i:738}, +D{l:10,t:0,i:556}, +D{l:10,t:0,i:674}, +D{l:10,t:0,i:684}, +D{l:11,t:0,i:89}, +D{l:11,t:0,i:202}, +D{l:11,t:0,i:272}, +D{l:11,t:0,i:380}, +D{l:11,t:0,i:415}, +D{l:11,t:0,i:505}, +D{l:11,t:0,i:537}, +D{l:11,t:0,i:550}, +D{l:11,t:0,i:562}, +D{l:11,t:0,i:640}, +D{l:11,t:0,i:667}, +D{l:11,t:0,i:688}, +D{l:11,t:0,i:847}, +D{l:11,t:0,i:927}, +D{l:11,t:0,i:930}, +D{l:11,t:0,i:940}, +D{l:12,t:0,i:144}, +D{l:12,t:0,i:325}, +D{l:12,t:0,i:329}, +D{l:12,t:0,i:389}, +D{l:12,t:0,i:403}, +D{l:12,t:0,i:451}, +D{l:12,t:0,i:515}, +D{l:12,t:0,i:604}, +D{l:12,t:0,i:616}, +D{l:12,t:0,i:626}, +D{l:13,t:0,i:66}, +D{l:13,t:0,i:131}, +D{l:13,t:0,i:167}, +D{l:13,t:0,i:236}, +D{l:13,t:0,i:368}, +D{l:13,t:0,i:411}, +D{l:13,t:0,i:434}, +D{l:13,t:0,i:453}, +D{l:13,t:0,i:461}, +D{l:13,t:0,i:474}, +D{l:14,t:0,i:59}, +D{l:14,t:0,i:60}, +D{l:14,t:0,i:139}, +D{l:14,t:0,i:152}, +D{l:14,t:0,i:276}, +D{l:14,t:0,i:353}, +D{l:14,t:0,i:402}, +D{l:15,t:0,i:28}, +D{l:15,t:0,i:81}, +D{l:15,t:0,i:123}, +D{l:15,t:0,i:152}, +D{l:18,t:0,i:136}, +D{l:148,t:0,i:88}, +D{l:4,t:11,i:929}, +D{l:133,t:11,i:799}, +D{l:136,t:11,i:46}, +D{l:142,t:0,i:307}, +D{l:4,t:0,i:609}, +D{l:7,t:0,i:756}, +D{l:9,t:0,i:544}, +D{l:11,t:0,i:413}, +D{l:144,t:0,i:25}, +D{l:10,t:0,i:687}, +D{l:7,t:10,i:619}, +D{l:10,t:10,i:547}, +D{l:11,t:10,i:122}, +D{l:140,t:10,i:601}, +D{l:4,t:0,i:930}, +D{l:133,t:0,i:947}, +D{l:133,t:0,i:939}, +D{l:142,t:0,i:21}, +D{l:4,t:11,i:892}, +D{l:133,t:11,i:770}, +D{l:133,t:0,i:962}, +D{l:5,t:0,i:651}, +D{l:8,t:0,i:170}, +D{l:9,t:0,i:61}, +D{l:9,t:0,i:63}, +D{l:10,t:0,i:23}, +D{l:10,t:0,i:37}, +D{l:10,t:0,i:834}, +D{l:11,t:0,i:4}, +D{l:11,t:0,i:187}, +D{l:11,t:0,i:281}, +D{l:11,t:0,i:503}, +D{l:11,t:0,i:677}, +D{l:12,t:0,i:96}, +D{l:12,t:0,i:130}, +D{l:12,t:0,i:244}, +D{l:14,t:0,i:5}, +D{l:14,t:0,i:40}, +D{l:14,t:0,i:162}, +D{l:14,t:0,i:202}, +D{l:146,t:0,i:133}, +D{l:4,t:0,i:406}, +D{l:5,t:0,i:579}, +D{l:12,t:0,i:492}, +D{l:150,t:0,i:15}, +D{l:135,t:11,i:158}, +D{l:135,t:0,i:597}, +D{l:132,t:0,i:981}, +D{l:132,t:10,i:888}, +D{l:4,t:10,i:149}, +D{l:138,t:10,i:368}, +D{l:132,t:0,i:545}, +D{l:4,t:10,i:154}, +D{l:7,t:10,i:1134}, +D{l:136,t:10,i:105}, +D{l:135,t:11,i:2001}, +D{l:134,t:0,i:1558}, +D{l:4,t:10,i:31}, +D{l:6,t:10,i:429}, +D{l:7,t:10,i:962}, +D{l:9,t:10,i:458}, +D{l:139,t:10,i:691}, +D{l:132,t:10,i:312}, +D{l:135,t:10,i:1642}, +D{l:6,t:0,i:17}, +D{l:6,t:0,i:1304}, +D{l:7,t:0,i:16}, +D{l:7,t:0,i:1001}, +D{l:9,t:0,i:886}, +D{l:10,t:0,i:489}, +D{l:10,t:0,i:800}, +D{l:11,t:0,i:782}, +D{l:12,t:0,i:320}, +D{l:13,t:0,i:467}, +D{l:14,t:0,i:145}, +D{l:14,t:0,i:387}, +D{l:143,t:0,i:119}, +D{l:135,t:0,i:1982}, +D{l:17,t:0,i:17}, +D{l:7,t:11,i:1461}, +D{l:140,t:11,i:91}, +D{l:4,t:10,i:236}, +D{l:132,t:11,i:602}, +D{l:138,t:0,i:907}, +D{l:136,t:0,i:110}, +D{l:7,t:0,i:272}, +D{l:19,t:0,i:53}, +D{l:5,t:10,i:836}, +D{l:5,t:10,i:857}, +D{l:134,t:10,i:1680}, +D{l:5,t:0,i:458}, +D{l:7,t:11,i:1218}, +D{l:136,t:11,i:303}, +D{l:7,t:0,i:1983}, +D{l:8,t:0,i:0}, +D{l:8,t:0,i:171}, +D{l:9,t:0,i:120}, +D{l:9,t:0,i:732}, +D{l:10,t:0,i:473}, +D{l:11,t:0,i:656}, +D{l:11,t:0,i:998}, +D{l:18,t:0,i:0}, +D{l:18,t:0,i:2}, +D{l:19,t:0,i:21}, +D{l:10,t:10,i:68}, +D{l:139,t:10,i:494}, +D{l:137,t:11,i:662}, +D{l:4,t:11,i:13}, +D{l:5,t:11,i:567}, +D{l:7,t:11,i:1498}, +D{l:9,t:11,i:124}, +D{l:11,t:11,i:521}, +D{l:140,t:11,i:405}, +D{l:4,t:10,i:81}, +D{l:139,t:10,i:867}, +D{l:135,t:11,i:1006}, +D{l:7,t:11,i:800}, +D{l:7,t:11,i:1783}, +D{l:138,t:11,i:12}, +D{l:9,t:0,i:295}, +D{l:10,t:0,i:443}, +D{l:5,t:10,i:282}, +D{l:8,t:10,i:650}, +D{l:137,t:10,i:907}, +D{l:132,t:11,i:735}, +D{l:4,t:11,i:170}, +D{l:4,t:10,i:775}, +D{l:135,t:11,i:323}, +D{l:6,t:0,i:1844}, +D{l:10,t:0,i:924}, +D{l:11,t:11,i:844}, +D{l:12,t:11,i:104}, +D{l:140,t:11,i:625}, +D{l:5,t:11,i:304}, +D{l:7,t:11,i:1403}, +D{l:140,t:11,i:498}, +D{l:134,t:0,i:1232}, +D{l:4,t:0,i:519}, +D{l:10,t:0,i:70}, +D{l:12,t:0,i:26}, +D{l:14,t:0,i:17}, +D{l:14,t:0,i:178}, +D{l:15,t:0,i:34}, +D{l:149,t:0,i:12}, +D{l:132,t:0,i:993}, +D{l:4,t:11,i:148}, +D{l:133,t:11,i:742}, +D{l:6,t:0,i:31}, +D{l:7,t:0,i:491}, +D{l:7,t:0,i:530}, +D{l:8,t:0,i:592}, +D{l:11,t:0,i:53}, +D{l:11,t:0,i:779}, +D{l:12,t:0,i:167}, +D{l:12,t:0,i:411}, +D{l:14,t:0,i:14}, +D{l:14,t:0,i:136}, +D{l:15,t:0,i:72}, +D{l:16,t:0,i:17}, +D{l:144,t:0,i:72}, +D{l:133,t:0,i:907}, +D{l:134,t:0,i:733}, +D{l:133,t:11,i:111}, +D{l:4,t:10,i:71}, +D{l:5,t:10,i:376}, +D{l:7,t:10,i:119}, +D{l:138,t:10,i:665}, +D{l:136,t:0,i:55}, +D{l:8,t:0,i:430}, +D{l:136,t:11,i:430}, +D{l:4,t:0,i:208}, +D{l:5,t:0,i:106}, +D{l:6,t:0,i:531}, +D{l:8,t:0,i:408}, +D{l:9,t:0,i:188}, +D{l:138,t:0,i:572}, +D{l:12,t:0,i:56}, +D{l:11,t:10,i:827}, +D{l:14,t:10,i:34}, +D{l:143,t:10,i:148}, +D{l:134,t:0,i:1693}, +D{l:133,t:11,i:444}, +D{l:132,t:10,i:479}, +D{l:140,t:0,i:441}, +D{l:9,t:0,i:449}, +D{l:10,t:0,i:192}, +D{l:138,t:0,i:740}, +D{l:134,t:0,i:928}, +D{l:4,t:0,i:241}, +D{l:7,t:10,i:607}, +D{l:136,t:10,i:99}, +D{l:8,t:11,i:123}, +D{l:15,t:11,i:6}, +D{l:144,t:11,i:7}, +D{l:6,t:11,i:285}, +D{l:8,t:11,i:654}, +D{l:11,t:11,i:749}, +D{l:12,t:11,i:190}, +D{l:12,t:11,i:327}, +D{l:13,t:11,i:120}, +D{l:13,t:11,i:121}, +D{l:13,t:11,i:327}, +D{l:15,t:11,i:47}, +D{l:146,t:11,i:40}, +D{l:4,t:10,i:41}, +D{l:5,t:10,i:74}, +D{l:7,t:10,i:1627}, +D{l:11,t:10,i:871}, +D{l:140,t:10,i:619}, +D{l:7,t:0,i:1525}, +D{l:11,t:10,i:329}, +D{l:11,t:10,i:965}, +D{l:12,t:10,i:241}, +D{l:14,t:10,i:354}, +D{l:15,t:10,i:22}, +D{l:148,t:10,i:63}, +D{l:132,t:0,i:259}, +D{l:135,t:11,i:183}, +D{l:9,t:10,i:209}, +D{l:137,t:10,i:300}, +D{l:5,t:11,i:937}, +D{l:135,t:11,i:100}, +D{l:133,t:10,i:98}, +D{l:4,t:0,i:173}, +D{l:5,t:0,i:312}, +D{l:5,t:0,i:512}, +D{l:135,t:0,i:1285}, +D{l:141,t:0,i:185}, +D{l:7,t:0,i:1603}, +D{l:7,t:0,i:1691}, +D{l:9,t:0,i:464}, +D{l:11,t:0,i:195}, +D{l:12,t:0,i:279}, +D{l:12,t:0,i:448}, +D{l:14,t:0,i:11}, +D{l:147,t:0,i:102}, +D{l:135,t:0,i:1113}, +D{l:133,t:10,i:984}, +D{l:4,t:0,i:452}, +D{l:5,t:0,i:583}, +D{l:135,t:0,i:720}, +D{l:4,t:0,i:547}, +D{l:5,t:0,i:817}, +D{l:6,t:0,i:433}, +D{l:7,t:0,i:593}, +D{l:7,t:0,i:1378}, +D{l:8,t:0,i:161}, +D{l:9,t:0,i:284}, +D{l:10,t:0,i:313}, +D{l:139,t:0,i:886}, +D{l:8,t:0,i:722}, +D{l:4,t:10,i:182}, +D{l:6,t:10,i:205}, +D{l:135,t:10,i:220}, +D{l:150,t:0,i:13}, +D{l:4,t:10,i:42}, +D{l:9,t:10,i:205}, +D{l:9,t:10,i:786}, +D{l:138,t:10,i:659}, +D{l:6,t:0,i:289}, +D{l:7,t:0,i:1670}, +D{l:12,t:0,i:57}, +D{l:151,t:0,i:4}, +D{l:132,t:10,i:635}, +D{l:14,t:0,i:43}, +D{l:146,t:0,i:21}, +D{l:139,t:10,i:533}, +D{l:135,t:0,i:1694}, +D{l:8,t:0,i:420}, +D{l:139,t:0,i:193}, +D{l:135,t:0,i:409}, +D{l:132,t:10,i:371}, +D{l:4,t:10,i:272}, +D{l:135,t:10,i:836}, +D{l:5,t:10,i:825}, +D{l:134,t:10,i:1640}, +D{l:5,t:11,i:251}, +D{l:5,t:11,i:956}, +D{l:8,t:11,i:268}, +D{l:9,t:11,i:214}, +D{l:146,t:11,i:142}, +D{l:138,t:0,i:308}, +D{l:6,t:0,i:1863}, +D{l:141,t:11,i:37}, +D{l:137,t:10,i:879}, +D{l:7,t:10,i:317}, +D{l:135,t:10,i:569}, +D{l:132,t:11,i:294}, +D{l:134,t:0,i:790}, +D{l:5,t:0,i:1002}, +D{l:136,t:0,i:745}, +D{l:5,t:11,i:346}, +D{l:5,t:11,i:711}, +D{l:136,t:11,i:390}, +D{l:135,t:0,i:289}, +D{l:5,t:0,i:504}, +D{l:11,t:0,i:68}, +D{l:137,t:10,i:307}, +D{l:4,t:0,i:239}, +D{l:6,t:0,i:477}, +D{l:7,t:0,i:1607}, +D{l:139,t:0,i:617}, +D{l:149,t:0,i:13}, +D{l:133,t:0,i:609}, +D{l:133,t:11,i:624}, +D{l:5,t:11,i:783}, +D{l:7,t:11,i:1998}, +D{l:135,t:11,i:2047}, +D{l:133,t:10,i:525}, +D{l:132,t:0,i:367}, +D{l:132,t:11,i:594}, +D{l:6,t:0,i:528}, +D{l:133,t:10,i:493}, +D{l:4,t:10,i:174}, +D{l:135,t:10,i:911}, +D{l:8,t:10,i:417}, +D{l:137,t:10,i:782}, +D{l:132,t:0,i:694}, +D{l:7,t:0,i:548}, +D{l:137,t:0,i:58}, +D{l:4,t:10,i:32}, +D{l:5,t:10,i:215}, +D{l:6,t:10,i:269}, +D{l:7,t:10,i:1782}, +D{l:7,t:10,i:1892}, +D{l:10,t:10,i:16}, +D{l:11,t:10,i:822}, +D{l:11,t:10,i:954}, +D{l:141,t:10,i:481}, +D{l:140,t:0,i:687}, +D{l:7,t:0,i:1749}, +D{l:136,t:10,i:477}, +D{l:132,t:11,i:569}, +D{l:133,t:10,i:308}, +D{l:135,t:10,i:1088}, +D{l:4,t:0,i:661}, +D{l:138,t:0,i:1004}, +D{l:5,t:11,i:37}, +D{l:6,t:11,i:39}, +D{l:6,t:11,i:451}, +D{l:7,t:11,i:218}, +D{l:7,t:11,i:667}, +D{l:7,t:11,i:1166}, +D{l:7,t:11,i:1687}, +D{l:8,t:11,i:662}, +D{l:144,t:11,i:2}, +D{l:9,t:0,i:445}, +D{l:12,t:0,i:53}, +D{l:13,t:0,i:492}, +D{l:5,t:10,i:126}, +D{l:8,t:10,i:297}, +D{l:9,t:10,i:366}, +D{l:140,t:10,i:374}, +D{l:7,t:10,i:1551}, +D{l:139,t:10,i:361}, +D{l:148,t:0,i:74}, +D{l:134,t:11,i:508}, +D{l:135,t:0,i:213}, +D{l:132,t:10,i:175}, +D{l:132,t:10,i:685}, +D{l:6,t:0,i:760}, +D{l:6,t:0,i:834}, +D{l:134,t:0,i:1248}, +D{l:7,t:11,i:453}, +D{l:7,t:11,i:635}, +D{l:7,t:11,i:796}, +D{l:8,t:11,i:331}, +D{l:9,t:11,i:328}, +D{l:9,t:11,i:330}, +D{l:9,t:11,i:865}, +D{l:10,t:11,i:119}, +D{l:10,t:11,i:235}, +D{l:11,t:11,i:111}, +D{l:11,t:11,i:129}, +D{l:11,t:11,i:240}, +D{l:12,t:11,i:31}, +D{l:12,t:11,i:66}, +D{l:12,t:11,i:222}, +D{l:12,t:11,i:269}, +D{l:12,t:11,i:599}, +D{l:12,t:11,i:689}, +D{l:13,t:11,i:186}, +D{l:13,t:11,i:364}, +D{l:142,t:11,i:345}, +D{l:7,t:0,i:1672}, +D{l:139,t:0,i:189}, +D{l:133,t:10,i:797}, +D{l:133,t:10,i:565}, +D{l:6,t:0,i:1548}, +D{l:6,t:11,i:98}, +D{l:7,t:11,i:585}, +D{l:135,t:11,i:702}, +D{l:9,t:0,i:968}, +D{l:15,t:0,i:192}, +D{l:149,t:0,i:56}, +D{l:4,t:10,i:252}, +D{l:6,t:11,i:37}, +D{l:7,t:11,i:299}, +D{l:7,t:10,i:1068}, +D{l:7,t:11,i:1666}, +D{l:8,t:11,i:195}, +D{l:8,t:11,i:316}, +D{l:9,t:11,i:178}, +D{l:9,t:11,i:276}, +D{l:9,t:11,i:339}, +D{l:9,t:11,i:536}, +D{l:10,t:11,i:102}, +D{l:10,t:11,i:362}, +D{l:10,t:10,i:434}, +D{l:10,t:11,i:785}, +D{l:11,t:11,i:55}, +D{l:11,t:11,i:149}, +D{l:11,t:10,i:228}, +D{l:11,t:10,i:426}, +D{l:11,t:11,i:773}, +D{l:13,t:10,i:231}, +D{l:13,t:11,i:416}, +D{l:13,t:11,i:419}, +D{l:14,t:11,i:38}, +D{l:14,t:11,i:41}, +D{l:14,t:11,i:210}, +D{l:18,t:10,i:106}, +D{l:148,t:10,i:87}, +D{l:4,t:0,i:751}, +D{l:11,t:0,i:390}, +D{l:140,t:0,i:32}, +D{l:4,t:0,i:409}, +D{l:133,t:0,i:78}, +D{l:11,t:11,i:458}, +D{l:12,t:11,i:15}, +D{l:140,t:11,i:432}, +D{l:7,t:0,i:1602}, +D{l:10,t:0,i:257}, +D{l:10,t:0,i:698}, +D{l:11,t:0,i:544}, +D{l:11,t:0,i:585}, +D{l:12,t:0,i:212}, +D{l:13,t:0,i:307}, +D{l:5,t:10,i:231}, +D{l:7,t:10,i:601}, +D{l:9,t:10,i:277}, +D{l:9,t:10,i:674}, +D{l:10,t:10,i:178}, +D{l:10,t:10,i:418}, +D{l:10,t:10,i:509}, +D{l:11,t:10,i:531}, +D{l:12,t:10,i:113}, +D{l:12,t:10,i:475}, +D{l:13,t:10,i:99}, +D{l:142,t:10,i:428}, +D{l:6,t:0,i:473}, +D{l:145,t:0,i:105}, +D{l:6,t:0,i:1949}, +D{l:15,t:0,i:156}, +D{l:133,t:11,i:645}, +D{l:7,t:10,i:1591}, +D{l:144,t:10,i:43}, +D{l:135,t:0,i:1779}, +D{l:135,t:10,i:1683}, +D{l:4,t:11,i:290}, +D{l:135,t:11,i:1356}, +D{l:134,t:0,i:763}, +D{l:6,t:11,i:70}, +D{l:7,t:11,i:1292}, +D{l:10,t:11,i:762}, +D{l:139,t:11,i:288}, +D{l:142,t:0,i:29}, +D{l:140,t:11,i:428}, +D{l:7,t:0,i:883}, +D{l:7,t:11,i:131}, +D{l:7,t:11,i:422}, +D{l:8,t:11,i:210}, +D{l:140,t:11,i:573}, +D{l:134,t:0,i:488}, +D{l:4,t:10,i:399}, +D{l:5,t:10,i:119}, +D{l:5,t:10,i:494}, +D{l:7,t:10,i:751}, +D{l:137,t:10,i:556}, +D{l:133,t:0,i:617}, +D{l:132,t:11,i:936}, +D{l:139,t:0,i:50}, +D{l:7,t:0,i:1518}, +D{l:139,t:0,i:694}, +D{l:137,t:0,i:785}, +D{l:4,t:0,i:546}, +D{l:135,t:0,i:2042}, +D{l:7,t:11,i:716}, +D{l:13,t:11,i:97}, +D{l:141,t:11,i:251}, +D{l:132,t:11,i:653}, +D{l:145,t:0,i:22}, +D{l:134,t:0,i:1016}, +D{l:4,t:0,i:313}, +D{l:133,t:0,i:577}, +D{l:136,t:11,i:657}, +D{l:8,t:0,i:184}, +D{l:141,t:0,i:433}, +D{l:135,t:0,i:935}, +D{l:6,t:0,i:720}, +D{l:9,t:0,i:114}, +D{l:146,t:11,i:80}, +D{l:12,t:0,i:186}, +D{l:12,t:0,i:292}, +D{l:14,t:0,i:100}, +D{l:18,t:0,i:70}, +D{l:7,t:10,i:594}, +D{l:7,t:10,i:851}, +D{l:7,t:10,i:1858}, +D{l:9,t:10,i:411}, +D{l:9,t:10,i:574}, +D{l:9,t:10,i:666}, +D{l:9,t:10,i:737}, +D{l:10,t:10,i:346}, +D{l:10,t:10,i:712}, +D{l:11,t:10,i:246}, +D{l:11,t:10,i:432}, +D{l:11,t:10,i:517}, +D{l:11,t:10,i:647}, +D{l:11,t:10,i:679}, +D{l:11,t:10,i:727}, +D{l:12,t:10,i:304}, +D{l:12,t:10,i:305}, +D{l:12,t:10,i:323}, +D{l:12,t:10,i:483}, +D{l:12,t:10,i:572}, +D{l:12,t:10,i:593}, +D{l:12,t:10,i:602}, +D{l:13,t:10,i:95}, +D{l:13,t:10,i:101}, +D{l:13,t:10,i:171}, +D{l:13,t:10,i:315}, +D{l:13,t:10,i:378}, +D{l:13,t:10,i:425}, +D{l:13,t:10,i:475}, +D{l:14,t:10,i:63}, +D{l:14,t:10,i:380}, +D{l:14,t:10,i:384}, +D{l:15,t:10,i:133}, +D{l:18,t:10,i:112}, +D{l:148,t:10,i:72}, +D{l:135,t:10,i:1093}, +D{l:135,t:11,i:1836}, +D{l:132,t:10,i:679}, +D{l:137,t:10,i:203}, +D{l:11,t:0,i:402}, +D{l:12,t:0,i:109}, +D{l:12,t:0,i:431}, +D{l:13,t:0,i:179}, +D{l:13,t:0,i:206}, +D{l:14,t:0,i:217}, +D{l:16,t:0,i:3}, +D{l:148,t:0,i:53}, +D{l:7,t:11,i:1368}, +D{l:8,t:11,i:232}, +D{l:8,t:11,i:361}, +D{l:10,t:11,i:682}, +D{l:138,t:11,i:742}, +D{l:137,t:10,i:714}, +D{l:5,t:0,i:886}, +D{l:6,t:0,i:46}, +D{l:6,t:0,i:1790}, +D{l:7,t:0,i:14}, +D{l:7,t:0,i:732}, +D{l:7,t:0,i:1654}, +D{l:8,t:0,i:95}, +D{l:8,t:0,i:327}, +D{l:8,t:0,i:616}, +D{l:9,t:0,i:892}, +D{l:10,t:0,i:598}, +D{l:10,t:0,i:769}, +D{l:11,t:0,i:134}, +D{l:11,t:0,i:747}, +D{l:12,t:0,i:378}, +D{l:14,t:0,i:97}, +D{l:137,t:11,i:534}, +D{l:4,t:0,i:969}, +D{l:136,t:10,i:825}, +D{l:137,t:11,i:27}, +D{l:6,t:0,i:727}, +D{l:142,t:11,i:12}, +D{l:133,t:0,i:1021}, +D{l:134,t:0,i:1190}, +D{l:134,t:11,i:1657}, +D{l:5,t:10,i:143}, +D{l:5,t:10,i:769}, +D{l:6,t:10,i:1760}, +D{l:7,t:10,i:682}, +D{l:7,t:10,i:1992}, +D{l:136,t:10,i:736}, +D{l:132,t:0,i:153}, +D{l:135,t:11,i:127}, +D{l:133,t:0,i:798}, +D{l:132,t:0,i:587}, +D{l:6,t:0,i:598}, +D{l:7,t:0,i:42}, +D{l:8,t:0,i:695}, +D{l:10,t:0,i:212}, +D{l:11,t:0,i:158}, +D{l:14,t:0,i:196}, +D{l:145,t:0,i:85}, +D{l:133,t:10,i:860}, +D{l:6,t:0,i:1929}, +D{l:134,t:0,i:1933}, +D{l:5,t:0,i:957}, +D{l:5,t:0,i:1008}, +D{l:9,t:0,i:577}, +D{l:12,t:0,i:141}, +D{l:6,t:10,i:422}, +D{l:7,t:10,i:0}, +D{l:7,t:10,i:1544}, +D{l:8,t:11,i:364}, +D{l:11,t:10,i:990}, +D{l:12,t:10,i:453}, +D{l:13,t:10,i:47}, +D{l:141,t:10,i:266}, +D{l:134,t:0,i:1319}, +D{l:4,t:0,i:129}, +D{l:135,t:0,i:465}, +D{l:7,t:0,i:470}, +D{l:7,t:0,i:1057}, +D{l:7,t:0,i:1201}, +D{l:9,t:0,i:755}, +D{l:11,t:0,i:906}, +D{l:140,t:0,i:527}, +D{l:7,t:0,i:908}, +D{l:146,t:0,i:7}, +D{l:5,t:0,i:148}, +D{l:136,t:0,i:450}, +D{l:5,t:10,i:515}, +D{l:137,t:10,i:131}, +D{l:7,t:10,i:1605}, +D{l:11,t:10,i:962}, +D{l:146,t:10,i:139}, +D{l:132,t:10,i:646}, +D{l:134,t:0,i:1166}, +D{l:4,t:10,i:396}, +D{l:7,t:10,i:728}, +D{l:9,t:10,i:117}, +D{l:13,t:10,i:202}, +D{l:148,t:10,i:51}, +D{l:6,t:10,i:121}, +D{l:6,t:10,i:124}, +D{l:6,t:10,i:357}, +D{l:7,t:10,i:1138}, +D{l:7,t:10,i:1295}, +D{l:8,t:10,i:162}, +D{l:139,t:10,i:655}, +D{l:14,t:0,i:374}, +D{l:142,t:11,i:374}, +D{l:138,t:0,i:253}, +D{l:139,t:0,i:1003}, +D{l:5,t:11,i:909}, +D{l:9,t:11,i:849}, +D{l:138,t:11,i:805}, +D{l:133,t:10,i:237}, +D{l:7,t:11,i:525}, +D{l:7,t:11,i:1579}, +D{l:8,t:11,i:497}, +D{l:136,t:11,i:573}, +D{l:137,t:0,i:46}, +D{l:132,t:0,i:879}, +D{l:134,t:0,i:806}, +D{l:135,t:0,i:1868}, +D{l:6,t:0,i:1837}, +D{l:134,t:0,i:1846}, +D{l:6,t:0,i:730}, +D{l:134,t:0,i:881}, +D{l:7,t:0,i:965}, +D{l:7,t:0,i:1460}, +D{l:7,t:0,i:1604}, +D{l:7,t:11,i:193}, +D{l:7,t:11,i:397}, +D{l:7,t:11,i:1105}, +D{l:8,t:11,i:124}, +D{l:8,t:11,i:619}, +D{l:9,t:11,i:305}, +D{l:10,t:11,i:264}, +D{l:11,t:11,i:40}, +D{l:12,t:11,i:349}, +D{l:13,t:11,i:134}, +D{l:13,t:11,i:295}, +D{l:14,t:11,i:155}, +D{l:15,t:11,i:120}, +D{l:146,t:11,i:105}, +D{l:136,t:0,i:506}, +D{l:143,t:0,i:10}, +D{l:4,t:11,i:262}, +D{l:7,t:11,i:342}, +D{l:7,t:10,i:571}, +D{l:7,t:10,i:1877}, +D{l:10,t:10,i:366}, +D{l:141,t:11,i:23}, +D{l:133,t:11,i:641}, +D{l:10,t:0,i:22}, +D{l:9,t:10,i:513}, +D{l:10,t:10,i:39}, +D{l:12,t:10,i:122}, +D{l:140,t:10,i:187}, +D{l:135,t:11,i:1431}, +D{l:150,t:11,i:49}, +D{l:4,t:11,i:99}, +D{l:6,t:11,i:250}, +D{l:6,t:11,i:346}, +D{l:8,t:11,i:127}, +D{l:138,t:11,i:81}, +D{l:6,t:0,i:2014}, +D{l:8,t:0,i:928}, +D{l:10,t:0,i:960}, +D{l:10,t:0,i:979}, +D{l:140,t:0,i:996}, +D{l:134,t:0,i:296}, +D{l:132,t:11,i:915}, +D{l:5,t:11,i:75}, +D{l:9,t:11,i:517}, +D{l:10,t:11,i:470}, +D{l:12,t:11,i:155}, +D{l:141,t:11,i:224}, +D{l:137,t:10,i:873}, +D{l:4,t:0,i:854}, +D{l:140,t:11,i:18}, +D{l:134,t:0,i:587}, +D{l:7,t:10,i:107}, +D{l:7,t:10,i:838}, +D{l:8,t:10,i:550}, +D{l:138,t:10,i:401}, +D{l:11,t:0,i:636}, +D{l:15,t:0,i:145}, +D{l:17,t:0,i:34}, +D{l:19,t:0,i:50}, +D{l:23,t:0,i:20}, +D{l:11,t:10,i:588}, +D{l:11,t:10,i:864}, +D{l:11,t:10,i:968}, +D{l:143,t:10,i:160}, +D{l:135,t:11,i:216}, +D{l:7,t:0,i:982}, +D{l:10,t:0,i:32}, +D{l:143,t:0,i:56}, +D{l:133,t:10,i:768}, +D{l:133,t:11,i:954}, +D{l:6,t:11,i:304}, +D{l:7,t:11,i:1114}, +D{l:8,t:11,i:418}, +D{l:10,t:11,i:345}, +D{l:11,t:11,i:341}, +D{l:11,t:11,i:675}, +D{l:141,t:11,i:40}, +D{l:9,t:11,i:410}, +D{l:139,t:11,i:425}, +D{l:136,t:0,i:941}, +D{l:5,t:0,i:435}, +D{l:132,t:10,i:894}, +D{l:5,t:0,i:85}, +D{l:6,t:0,i:419}, +D{l:7,t:0,i:134}, +D{l:7,t:0,i:305}, +D{l:7,t:0,i:361}, +D{l:7,t:0,i:1337}, +D{l:8,t:0,i:71}, +D{l:140,t:0,i:519}, +D{l:140,t:0,i:688}, +D{l:135,t:0,i:740}, +D{l:5,t:0,i:691}, +D{l:7,t:0,i:345}, +D{l:9,t:0,i:94}, +D{l:140,t:0,i:169}, +D{l:5,t:0,i:183}, +D{l:6,t:0,i:582}, +D{l:10,t:0,i:679}, +D{l:140,t:0,i:435}, +D{l:134,t:11,i:14}, +D{l:6,t:0,i:945}, +D{l:135,t:0,i:511}, +D{l:134,t:11,i:1708}, +D{l:5,t:11,i:113}, +D{l:6,t:11,i:243}, +D{l:7,t:11,i:1865}, +D{l:11,t:11,i:161}, +D{l:16,t:11,i:37}, +D{l:145,t:11,i:99}, +D{l:132,t:11,i:274}, +D{l:137,t:0,i:539}, +D{l:7,t:0,i:1993}, +D{l:8,t:0,i:684}, +D{l:134,t:10,i:272}, +D{l:6,t:0,i:659}, +D{l:134,t:0,i:982}, +D{l:4,t:10,i:9}, +D{l:5,t:10,i:128}, +D{l:7,t:10,i:368}, +D{l:11,t:10,i:480}, +D{l:148,t:10,i:3}, +D{l:134,t:0,i:583}, +D{l:132,t:0,i:803}, +D{l:133,t:0,i:704}, +D{l:4,t:0,i:179}, +D{l:5,t:0,i:198}, +D{l:133,t:0,i:697}, +D{l:7,t:0,i:347}, +D{l:7,t:0,i:971}, +D{l:8,t:0,i:181}, +D{l:10,t:0,i:711}, +D{l:135,t:11,i:166}, +D{l:136,t:10,i:682}, +D{l:4,t:10,i:2}, +D{l:7,t:10,i:545}, +D{l:7,t:10,i:894}, +D{l:136,t:11,i:521}, +D{l:135,t:0,i:481}, +D{l:132,t:0,i:243}, +D{l:5,t:0,i:203}, +D{l:7,t:0,i:19}, +D{l:7,t:0,i:71}, +D{l:7,t:0,i:113}, +D{l:10,t:0,i:405}, +D{l:11,t:0,i:357}, +D{l:142,t:0,i:240}, +D{l:5,t:11,i:725}, +D{l:5,t:11,i:727}, +D{l:135,t:11,i:1811}, +D{l:6,t:0,i:826}, +D{l:137,t:11,i:304}, +D{l:7,t:0,i:1450}, +D{l:139,t:0,i:99}, +D{l:133,t:11,i:654}, +D{l:134,t:0,i:492}, +D{l:5,t:0,i:134}, +D{l:6,t:0,i:408}, +D{l:6,t:0,i:495}, +D{l:7,t:0,i:1593}, +D{l:6,t:11,i:273}, +D{l:10,t:11,i:188}, +D{l:13,t:11,i:377}, +D{l:146,t:11,i:77}, +D{l:9,t:10,i:769}, +D{l:140,t:10,i:185}, +D{l:135,t:11,i:410}, +D{l:142,t:0,i:4}, +D{l:4,t:0,i:665}, +D{l:134,t:11,i:1785}, +D{l:4,t:0,i:248}, +D{l:7,t:0,i:137}, +D{l:137,t:0,i:349}, +D{l:5,t:10,i:530}, +D{l:142,t:10,i:113}, +D{l:7,t:0,i:1270}, +D{l:139,t:0,i:612}, +D{l:132,t:11,i:780}, +D{l:5,t:0,i:371}, +D{l:135,t:0,i:563}, +D{l:135,t:0,i:826}, +D{l:6,t:0,i:1535}, +D{l:23,t:0,i:21}, +D{l:151,t:0,i:23}, +D{l:4,t:0,i:374}, +D{l:7,t:0,i:547}, +D{l:7,t:0,i:1700}, +D{l:7,t:0,i:1833}, +D{l:139,t:0,i:858}, +D{l:133,t:10,i:556}, +D{l:7,t:11,i:612}, +D{l:8,t:11,i:545}, +D{l:8,t:11,i:568}, +D{l:8,t:11,i:642}, +D{l:9,t:11,i:717}, +D{l:10,t:11,i:541}, +D{l:10,t:11,i:763}, +D{l:11,t:11,i:449}, +D{l:12,t:11,i:489}, +D{l:13,t:11,i:153}, +D{l:13,t:11,i:296}, +D{l:14,t:11,i:138}, +D{l:14,t:11,i:392}, +D{l:15,t:11,i:50}, +D{l:16,t:11,i:6}, +D{l:16,t:11,i:12}, +D{l:148,t:11,i:9}, +D{l:9,t:0,i:311}, +D{l:141,t:0,i:42}, +D{l:8,t:10,i:16}, +D{l:140,t:10,i:568}, +D{l:6,t:0,i:1968}, +D{l:6,t:0,i:2027}, +D{l:138,t:0,i:991}, +D{l:6,t:0,i:1647}, +D{l:7,t:0,i:1552}, +D{l:7,t:0,i:2010}, +D{l:9,t:0,i:494}, +D{l:137,t:0,i:509}, +D{l:133,t:11,i:948}, +D{l:6,t:10,i:186}, +D{l:137,t:10,i:426}, +D{l:134,t:0,i:769}, +D{l:134,t:0,i:642}, +D{l:132,t:10,i:585}, +D{l:6,t:0,i:123}, +D{l:7,t:0,i:214}, +D{l:9,t:0,i:728}, +D{l:10,t:0,i:157}, +D{l:11,t:0,i:346}, +D{l:11,t:0,i:662}, +D{l:143,t:0,i:106}, +D{l:142,t:11,i:381}, +D{l:135,t:0,i:1435}, +D{l:4,t:11,i:532}, +D{l:5,t:11,i:706}, +D{l:135,t:11,i:662}, +D{l:5,t:11,i:837}, +D{l:134,t:11,i:1651}, +D{l:4,t:10,i:93}, +D{l:5,t:10,i:252}, +D{l:6,t:10,i:229}, +D{l:7,t:10,i:291}, +D{l:9,t:10,i:550}, +D{l:139,t:10,i:644}, +D{l:148,t:0,i:79}, +D{l:137,t:10,i:749}, +D{l:134,t:0,i:1425}, +D{l:137,t:10,i:162}, +D{l:4,t:11,i:362}, +D{l:7,t:11,i:52}, +D{l:7,t:11,i:303}, +D{l:140,t:11,i:166}, +D{l:132,t:10,i:381}, +D{l:4,t:11,i:330}, +D{l:7,t:11,i:933}, +D{l:7,t:11,i:2012}, +D{l:136,t:11,i:292}, +D{l:135,t:11,i:767}, +D{l:4,t:0,i:707}, +D{l:5,t:0,i:588}, +D{l:6,t:0,i:393}, +D{l:13,t:0,i:106}, +D{l:18,t:0,i:49}, +D{l:147,t:0,i:41}, +D{l:6,t:0,i:211}, +D{l:7,t:0,i:1690}, +D{l:11,t:0,i:486}, +D{l:140,t:0,i:369}, +D{l:137,t:11,i:883}, +D{l:4,t:11,i:703}, +D{l:135,t:11,i:207}, +D{l:4,t:0,i:187}, +D{l:5,t:0,i:184}, +D{l:5,t:0,i:690}, +D{l:7,t:0,i:1869}, +D{l:10,t:0,i:756}, +D{l:139,t:0,i:783}, +D{l:132,t:11,i:571}, +D{l:134,t:0,i:1382}, +D{l:5,t:0,i:175}, +D{l:6,t:10,i:77}, +D{l:6,t:10,i:157}, +D{l:7,t:10,i:974}, +D{l:7,t:10,i:1301}, +D{l:7,t:10,i:1339}, +D{l:7,t:10,i:1490}, +D{l:7,t:10,i:1873}, +D{l:137,t:10,i:628}, +D{l:134,t:0,i:1493}, +D{l:5,t:11,i:873}, +D{l:133,t:11,i:960}, +D{l:134,t:0,i:1007}, +D{l:12,t:11,i:93}, +D{l:12,t:11,i:501}, +D{l:13,t:11,i:362}, +D{l:14,t:11,i:151}, +D{l:15,t:11,i:40}, +D{l:15,t:11,i:59}, +D{l:16,t:11,i:46}, +D{l:17,t:11,i:25}, +D{l:18,t:11,i:14}, +D{l:18,t:11,i:134}, +D{l:19,t:11,i:25}, +D{l:19,t:11,i:69}, +D{l:20,t:11,i:16}, +D{l:20,t:11,i:19}, +D{l:20,t:11,i:66}, +D{l:21,t:11,i:23}, +D{l:21,t:11,i:25}, +D{l:150,t:11,i:42}, +D{l:11,t:10,i:919}, +D{l:141,t:10,i:409}, +D{l:134,t:0,i:219}, +D{l:5,t:0,i:582}, +D{l:6,t:0,i:1646}, +D{l:7,t:0,i:99}, +D{l:7,t:0,i:1962}, +D{l:7,t:0,i:1986}, +D{l:8,t:0,i:515}, +D{l:8,t:0,i:773}, +D{l:9,t:0,i:23}, +D{l:9,t:0,i:491}, +D{l:12,t:0,i:620}, +D{l:142,t:0,i:93}, +D{l:133,t:0,i:851}, +D{l:5,t:11,i:33}, +D{l:134,t:11,i:470}, +D{l:135,t:11,i:1291}, +D{l:134,t:0,i:1278}, +D{l:135,t:11,i:1882}, +D{l:135,t:10,i:1489}, +D{l:132,t:0,i:1000}, +D{l:138,t:0,i:982}, +D{l:8,t:0,i:762}, +D{l:8,t:0,i:812}, +D{l:137,t:0,i:910}, +D{l:6,t:11,i:47}, +D{l:7,t:11,i:90}, +D{l:7,t:11,i:664}, +D{l:7,t:11,i:830}, +D{l:7,t:11,i:1380}, +D{l:7,t:11,i:2025}, +D{l:8,t:11,i:448}, +D{l:136,t:11,i:828}, +D{l:4,t:0,i:98}, +D{l:4,t:0,i:940}, +D{l:6,t:0,i:1819}, +D{l:6,t:0,i:1834}, +D{l:6,t:0,i:1841}, +D{l:7,t:0,i:1365}, +D{l:8,t:0,i:859}, +D{l:8,t:0,i:897}, +D{l:8,t:0,i:918}, +D{l:9,t:0,i:422}, +D{l:9,t:0,i:670}, +D{l:10,t:0,i:775}, +D{l:10,t:0,i:894}, +D{l:10,t:0,i:909}, +D{l:10,t:0,i:910}, +D{l:10,t:0,i:935}, +D{l:11,t:0,i:210}, +D{l:12,t:0,i:750}, +D{l:12,t:0,i:755}, +D{l:13,t:0,i:26}, +D{l:13,t:0,i:457}, +D{l:13,t:0,i:476}, +D{l:16,t:0,i:100}, +D{l:16,t:0,i:109}, +D{l:18,t:0,i:173}, +D{l:18,t:0,i:175}, +D{l:8,t:10,i:398}, +D{l:9,t:10,i:681}, +D{l:139,t:10,i:632}, +D{l:9,t:11,i:417}, +D{l:137,t:11,i:493}, +D{l:136,t:10,i:645}, +D{l:138,t:0,i:906}, +D{l:134,t:0,i:1730}, +D{l:134,t:10,i:20}, +D{l:133,t:11,i:1019}, +D{l:134,t:0,i:1185}, +D{l:10,t:0,i:40}, +D{l:136,t:10,i:769}, +D{l:9,t:0,i:147}, +D{l:134,t:11,i:208}, +D{l:140,t:0,i:650}, +D{l:5,t:0,i:209}, +D{l:6,t:0,i:30}, +D{l:11,t:0,i:56}, +D{l:139,t:0,i:305}, +D{l:132,t:0,i:553}, +D{l:138,t:11,i:344}, +D{l:6,t:11,i:68}, +D{l:7,t:11,i:398}, +D{l:7,t:11,i:448}, +D{l:7,t:11,i:1629}, +D{l:7,t:11,i:1813}, +D{l:8,t:11,i:387}, +D{l:8,t:11,i:442}, +D{l:9,t:11,i:710}, +D{l:10,t:11,i:282}, +D{l:138,t:11,i:722}, +D{l:5,t:0,i:597}, +D{l:14,t:0,i:20}, +D{l:142,t:11,i:20}, +D{l:135,t:0,i:1614}, +D{l:135,t:10,i:1757}, +D{l:4,t:0,i:150}, +D{l:5,t:0,i:303}, +D{l:6,t:0,i:327}, +D{l:135,t:10,i:937}, +D{l:16,t:0,i:49}, +D{l:7,t:10,i:1652}, +D{l:144,t:11,i:49}, +D{l:8,t:0,i:192}, +D{l:10,t:0,i:78}, +D{l:141,t:0,i:359}, +D{l:135,t:0,i:786}, +D{l:143,t:0,i:134}, +D{l:6,t:0,i:1638}, +D{l:7,t:0,i:79}, +D{l:7,t:0,i:496}, +D{l:9,t:0,i:138}, +D{l:10,t:0,i:336}, +D{l:11,t:0,i:12}, +D{l:12,t:0,i:412}, +D{l:12,t:0,i:440}, +D{l:142,t:0,i:305}, +D{l:136,t:11,i:491}, +D{l:4,t:10,i:579}, +D{l:5,t:10,i:226}, +D{l:5,t:10,i:323}, +D{l:135,t:10,i:960}, +D{l:7,t:0,i:204}, +D{l:7,t:0,i:415}, +D{l:8,t:0,i:42}, +D{l:10,t:0,i:85}, +D{l:139,t:0,i:564}, +D{l:132,t:0,i:614}, +D{l:4,t:11,i:403}, +D{l:5,t:11,i:441}, +D{l:7,t:11,i:450}, +D{l:11,t:11,i:101}, +D{l:12,t:11,i:193}, +D{l:141,t:11,i:430}, +D{l:135,t:11,i:1927}, +D{l:135,t:11,i:1330}, +D{l:4,t:0,i:3}, +D{l:5,t:0,i:247}, +D{l:5,t:0,i:644}, +D{l:7,t:0,i:744}, +D{l:7,t:0,i:1207}, +D{l:7,t:0,i:1225}, +D{l:7,t:0,i:1909}, +D{l:146,t:0,i:147}, +D{l:136,t:0,i:942}, +D{l:4,t:0,i:1019}, +D{l:134,t:0,i:2023}, +D{l:5,t:11,i:679}, +D{l:133,t:10,i:973}, +D{l:5,t:0,i:285}, +D{l:9,t:0,i:67}, +D{l:13,t:0,i:473}, +D{l:143,t:0,i:82}, +D{l:7,t:11,i:328}, +D{l:137,t:11,i:326}, +D{l:151,t:0,i:8}, +D{l:6,t:10,i:135}, +D{l:135,t:10,i:1176}, +D{l:135,t:11,i:1128}, +D{l:134,t:0,i:1309}, +D{l:135,t:11,i:1796}, +D{l:135,t:10,i:314}, +D{l:4,t:11,i:574}, +D{l:7,t:11,i:350}, +D{l:7,t:11,i:1024}, +D{l:8,t:11,i:338}, +D{l:9,t:11,i:677}, +D{l:10,t:11,i:808}, +D{l:139,t:11,i:508}, +D{l:7,t:11,i:818}, +D{l:17,t:11,i:14}, +D{l:17,t:11,i:45}, +D{l:18,t:11,i:75}, +D{l:148,t:11,i:18}, +D{l:146,t:10,i:4}, +D{l:135,t:11,i:1081}, +D{l:4,t:0,i:29}, +D{l:6,t:0,i:532}, +D{l:7,t:0,i:1628}, +D{l:7,t:0,i:1648}, +D{l:9,t:0,i:350}, +D{l:10,t:0,i:433}, +D{l:11,t:0,i:97}, +D{l:11,t:0,i:557}, +D{l:11,t:0,i:745}, +D{l:12,t:0,i:289}, +D{l:12,t:0,i:335}, +D{l:12,t:0,i:348}, +D{l:12,t:0,i:606}, +D{l:13,t:0,i:116}, +D{l:13,t:0,i:233}, +D{l:13,t:0,i:466}, +D{l:14,t:0,i:181}, +D{l:14,t:0,i:209}, +D{l:14,t:0,i:232}, +D{l:14,t:0,i:236}, +D{l:14,t:0,i:300}, +D{l:16,t:0,i:41}, +D{l:148,t:0,i:97}, +D{l:7,t:0,i:318}, +D{l:6,t:10,i:281}, +D{l:8,t:10,i:282}, +D{l:8,t:10,i:480}, +D{l:8,t:10,i:499}, +D{l:9,t:10,i:198}, +D{l:10,t:10,i:143}, +D{l:10,t:10,i:169}, +D{l:10,t:10,i:211}, +D{l:10,t:10,i:417}, +D{l:10,t:10,i:574}, +D{l:11,t:10,i:147}, +D{l:11,t:10,i:395}, +D{l:12,t:10,i:75}, +D{l:12,t:10,i:407}, +D{l:12,t:10,i:608}, +D{l:13,t:10,i:500}, +D{l:142,t:10,i:251}, +D{l:135,t:11,i:1676}, +D{l:135,t:11,i:2037}, +D{l:135,t:0,i:1692}, +D{l:5,t:0,i:501}, +D{l:7,t:0,i:1704}, +D{l:9,t:0,i:553}, +D{l:11,t:0,i:520}, +D{l:12,t:0,i:557}, +D{l:141,t:0,i:249}, +D{l:6,t:0,i:1527}, +D{l:14,t:0,i:324}, +D{l:15,t:0,i:55}, +D{l:15,t:0,i:80}, +D{l:14,t:11,i:324}, +D{l:15,t:11,i:55}, +D{l:143,t:11,i:80}, +D{l:135,t:10,i:1776}, +D{l:8,t:0,i:988}, +D{l:137,t:11,i:297}, +D{l:132,t:10,i:419}, +D{l:142,t:0,i:223}, +D{l:139,t:11,i:234}, +D{l:7,t:0,i:1123}, +D{l:12,t:0,i:508}, +D{l:14,t:0,i:102}, +D{l:14,t:0,i:226}, +D{l:144,t:0,i:57}, +D{l:4,t:10,i:138}, +D{l:7,t:10,i:1012}, +D{l:7,t:10,i:1280}, +D{l:137,t:10,i:76}, +D{l:7,t:0,i:1764}, +D{l:5,t:10,i:29}, +D{l:140,t:10,i:638}, +D{l:134,t:0,i:2015}, +D{l:134,t:0,i:1599}, +D{l:138,t:11,i:56}, +D{l:6,t:11,i:306}, +D{l:7,t:11,i:1140}, +D{l:7,t:11,i:1340}, +D{l:8,t:11,i:133}, +D{l:138,t:11,i:449}, +D{l:139,t:11,i:1011}, +D{l:6,t:10,i:1710}, +D{l:135,t:10,i:2038}, +D{l:7,t:11,i:1763}, +D{l:140,t:11,i:310}, +D{l:6,t:0,i:129}, +D{l:4,t:10,i:17}, +D{l:5,t:10,i:23}, +D{l:7,t:10,i:995}, +D{l:11,t:10,i:383}, +D{l:11,t:10,i:437}, +D{l:12,t:10,i:460}, +D{l:140,t:10,i:532}, +D{l:5,t:11,i:329}, +D{l:136,t:11,i:260}, +D{l:133,t:10,i:862}, +D{l:132,t:0,i:534}, +D{l:6,t:0,i:811}, +D{l:135,t:0,i:626}, +D{l:132,t:11,i:657}, +D{l:4,t:0,i:25}, +D{l:5,t:0,i:60}, +D{l:6,t:0,i:504}, +D{l:7,t:0,i:614}, +D{l:7,t:0,i:1155}, +D{l:12,t:0,i:0}, +D{l:152,t:11,i:7}, +D{l:7,t:0,i:1248}, +D{l:11,t:0,i:621}, +D{l:139,t:0,i:702}, +D{l:137,t:0,i:321}, +D{l:8,t:10,i:70}, +D{l:12,t:10,i:171}, +D{l:141,t:10,i:272}, +D{l:10,t:10,i:233}, +D{l:139,t:10,i:76}, +D{l:4,t:0,i:379}, +D{l:7,t:0,i:1397}, +D{l:134,t:10,i:442}, +D{l:5,t:11,i:66}, +D{l:7,t:11,i:1896}, +D{l:136,t:11,i:288}, +D{l:134,t:11,i:1643}, +D{l:134,t:10,i:1709}, +D{l:4,t:11,i:21}, +D{l:5,t:11,i:91}, +D{l:5,t:11,i:570}, +D{l:5,t:11,i:648}, +D{l:5,t:11,i:750}, +D{l:5,t:11,i:781}, +D{l:6,t:11,i:54}, +D{l:6,t:11,i:112}, +D{l:6,t:11,i:402}, +D{l:6,t:11,i:1732}, +D{l:7,t:11,i:315}, +D{l:7,t:11,i:749}, +D{l:7,t:11,i:1347}, +D{l:7,t:11,i:1900}, +D{l:9,t:11,i:78}, +D{l:9,t:11,i:508}, +D{l:10,t:11,i:611}, +D{l:11,t:11,i:510}, +D{l:11,t:11,i:728}, +D{l:13,t:11,i:36}, +D{l:14,t:11,i:39}, +D{l:16,t:11,i:83}, +D{l:17,t:11,i:124}, +D{l:148,t:11,i:30}, +D{l:4,t:0,i:118}, +D{l:6,t:0,i:274}, +D{l:6,t:0,i:361}, +D{l:7,t:0,i:75}, +D{l:141,t:0,i:441}, +D{l:10,t:11,i:322}, +D{l:10,t:11,i:719}, +D{l:139,t:11,i:407}, +D{l:147,t:10,i:119}, +D{l:12,t:11,i:549}, +D{l:14,t:11,i:67}, +D{l:147,t:11,i:60}, +D{l:11,t:10,i:69}, +D{l:12,t:10,i:105}, +D{l:12,t:10,i:117}, +D{l:13,t:10,i:213}, +D{l:14,t:10,i:13}, +D{l:14,t:10,i:62}, +D{l:14,t:10,i:177}, +D{l:14,t:10,i:421}, +D{l:15,t:10,i:19}, +D{l:146,t:10,i:141}, +D{l:9,t:0,i:841}, +D{l:137,t:10,i:309}, +D{l:7,t:10,i:608}, +D{l:7,t:10,i:976}, +D{l:8,t:11,i:125}, +D{l:8,t:11,i:369}, +D{l:8,t:11,i:524}, +D{l:9,t:10,i:146}, +D{l:10,t:10,i:206}, +D{l:10,t:11,i:486}, +D{l:10,t:10,i:596}, +D{l:11,t:11,i:13}, +D{l:11,t:11,i:381}, +D{l:11,t:11,i:736}, +D{l:11,t:11,i:766}, +D{l:11,t:11,i:845}, +D{l:13,t:11,i:114}, +D{l:13,t:10,i:218}, +D{l:13,t:11,i:292}, +D{l:14,t:11,i:47}, +D{l:142,t:10,i:153}, +D{l:12,t:0,i:693}, +D{l:135,t:11,i:759}, +D{l:5,t:0,i:314}, +D{l:6,t:0,i:221}, +D{l:7,t:0,i:419}, +D{l:10,t:0,i:650}, +D{l:11,t:0,i:396}, +D{l:12,t:0,i:156}, +D{l:13,t:0,i:369}, +D{l:14,t:0,i:333}, +D{l:145,t:0,i:47}, +D{l:6,t:11,i:1684}, +D{l:6,t:11,i:1731}, +D{l:7,t:11,i:356}, +D{l:7,t:11,i:1932}, +D{l:8,t:11,i:54}, +D{l:8,t:11,i:221}, +D{l:9,t:11,i:225}, +D{l:9,t:11,i:356}, +D{l:10,t:11,i:77}, +D{l:10,t:11,i:446}, +D{l:10,t:11,i:731}, +D{l:12,t:11,i:404}, +D{l:141,t:11,i:491}, +D{l:132,t:11,i:375}, +D{l:4,t:10,i:518}, +D{l:135,t:10,i:1136}, +D{l:4,t:0,i:913}, +D{l:4,t:11,i:411}, +D{l:11,t:11,i:643}, +D{l:140,t:11,i:115}, +D{l:4,t:11,i:80}, +D{l:133,t:11,i:44}, +D{l:8,t:10,i:689}, +D{l:137,t:10,i:863}, +D{l:138,t:0,i:880}, +D{l:4,t:10,i:18}, +D{l:7,t:10,i:145}, +D{l:7,t:10,i:444}, +D{l:7,t:10,i:1278}, +D{l:8,t:10,i:49}, +D{l:8,t:10,i:400}, +D{l:9,t:10,i:71}, +D{l:9,t:10,i:250}, +D{l:10,t:10,i:459}, +D{l:12,t:10,i:160}, +D{l:144,t:10,i:24}, +D{l:136,t:0,i:475}, +D{l:5,t:0,i:1016}, +D{l:5,t:11,i:299}, +D{l:135,t:11,i:1083}, +D{l:7,t:0,i:602}, +D{l:8,t:0,i:179}, +D{l:10,t:0,i:781}, +D{l:140,t:0,i:126}, +D{l:6,t:0,i:329}, +D{l:138,t:0,i:111}, +D{l:135,t:0,i:1864}, +D{l:4,t:11,i:219}, +D{l:7,t:11,i:1761}, +D{l:137,t:11,i:86}, +D{l:6,t:0,i:1888}, +D{l:6,t:0,i:1892}, +D{l:6,t:0,i:1901}, +D{l:6,t:0,i:1904}, +D{l:9,t:0,i:953}, +D{l:9,t:0,i:985}, +D{l:9,t:0,i:991}, +D{l:9,t:0,i:1001}, +D{l:12,t:0,i:818}, +D{l:12,t:0,i:846}, +D{l:12,t:0,i:847}, +D{l:12,t:0,i:861}, +D{l:12,t:0,i:862}, +D{l:12,t:0,i:873}, +D{l:12,t:0,i:875}, +D{l:12,t:0,i:877}, +D{l:12,t:0,i:879}, +D{l:12,t:0,i:881}, +D{l:12,t:0,i:884}, +D{l:12,t:0,i:903}, +D{l:12,t:0,i:915}, +D{l:12,t:0,i:926}, +D{l:12,t:0,i:939}, +D{l:15,t:0,i:182}, +D{l:15,t:0,i:219}, +D{l:15,t:0,i:255}, +D{l:18,t:0,i:191}, +D{l:18,t:0,i:209}, +D{l:18,t:0,i:211}, +D{l:149,t:0,i:41}, +D{l:5,t:11,i:328}, +D{l:135,t:11,i:918}, +D{l:137,t:0,i:780}, +D{l:12,t:0,i:82}, +D{l:143,t:0,i:36}, +D{l:133,t:10,i:1010}, +D{l:5,t:0,i:821}, +D{l:134,t:0,i:1687}, +D{l:133,t:11,i:514}, +D{l:132,t:0,i:956}, +D{l:134,t:0,i:1180}, +D{l:10,t:0,i:112}, +D{l:5,t:10,i:87}, +D{l:7,t:10,i:313}, +D{l:7,t:10,i:1103}, +D{l:10,t:10,i:582}, +D{l:11,t:10,i:389}, +D{l:11,t:10,i:813}, +D{l:12,t:10,i:385}, +D{l:13,t:10,i:286}, +D{l:14,t:10,i:124}, +D{l:146,t:10,i:108}, +D{l:5,t:0,i:71}, +D{l:7,t:0,i:1407}, +D{l:9,t:0,i:704}, +D{l:10,t:0,i:261}, +D{l:10,t:0,i:619}, +D{l:11,t:0,i:547}, +D{l:11,t:0,i:619}, +D{l:143,t:0,i:157}, +D{l:4,t:0,i:531}, +D{l:5,t:0,i:455}, +D{l:5,t:11,i:301}, +D{l:6,t:11,i:571}, +D{l:14,t:11,i:49}, +D{l:146,t:11,i:102}, +D{l:132,t:10,i:267}, +D{l:6,t:0,i:385}, +D{l:7,t:0,i:2008}, +D{l:9,t:0,i:337}, +D{l:138,t:0,i:517}, +D{l:133,t:11,i:726}, +D{l:133,t:11,i:364}, +D{l:4,t:11,i:76}, +D{l:7,t:11,i:1550}, +D{l:9,t:11,i:306}, +D{l:9,t:11,i:430}, +D{l:9,t:11,i:663}, +D{l:10,t:11,i:683}, +D{l:11,t:11,i:427}, +D{l:11,t:11,i:753}, +D{l:12,t:11,i:334}, +D{l:12,t:11,i:442}, +D{l:14,t:11,i:258}, +D{l:14,t:11,i:366}, +D{l:143,t:11,i:131}, +D{l:6,t:0,i:1865}, +D{l:6,t:0,i:1879}, +D{l:6,t:0,i:1881}, +D{l:6,t:0,i:1894}, +D{l:6,t:0,i:1908}, +D{l:9,t:0,i:915}, +D{l:9,t:0,i:926}, +D{l:9,t:0,i:940}, +D{l:9,t:0,i:943}, +D{l:9,t:0,i:966}, +D{l:9,t:0,i:980}, +D{l:9,t:0,i:989}, +D{l:9,t:0,i:1005}, +D{l:9,t:0,i:1010}, +D{l:12,t:0,i:813}, +D{l:12,t:0,i:817}, +D{l:12,t:0,i:840}, +D{l:12,t:0,i:843}, +D{l:12,t:0,i:855}, +D{l:12,t:0,i:864}, +D{l:12,t:0,i:871}, +D{l:12,t:0,i:872}, +D{l:12,t:0,i:899}, +D{l:12,t:0,i:905}, +D{l:12,t:0,i:924}, +D{l:15,t:0,i:171}, +D{l:15,t:0,i:181}, +D{l:15,t:0,i:224}, +D{l:15,t:0,i:235}, +D{l:15,t:0,i:251}, +D{l:146,t:0,i:184}, +D{l:137,t:11,i:52}, +D{l:5,t:0,i:16}, +D{l:6,t:0,i:86}, +D{l:6,t:0,i:603}, +D{l:7,t:0,i:292}, +D{l:7,t:0,i:561}, +D{l:8,t:0,i:257}, +D{l:8,t:0,i:382}, +D{l:9,t:0,i:721}, +D{l:9,t:0,i:778}, +D{l:11,t:0,i:581}, +D{l:140,t:0,i:466}, +D{l:4,t:0,i:486}, +D{l:5,t:0,i:491}, +D{l:135,t:10,i:1121}, +D{l:4,t:0,i:72}, +D{l:6,t:0,i:265}, +D{l:135,t:0,i:1300}, +D{l:135,t:11,i:1183}, +D{l:10,t:10,i:249}, +D{l:139,t:10,i:209}, +D{l:132,t:10,i:561}, +D{l:137,t:11,i:519}, +D{l:4,t:11,i:656}, +D{l:4,t:10,i:760}, +D{l:135,t:11,i:779}, +D{l:9,t:10,i:154}, +D{l:140,t:10,i:485}, +D{l:135,t:11,i:1793}, +D{l:135,t:11,i:144}, +D{l:136,t:10,i:255}, +D{l:133,t:0,i:621}, +D{l:4,t:10,i:368}, +D{l:135,t:10,i:641}, +D{l:135,t:11,i:1373}, +D{l:7,t:11,i:554}, +D{l:7,t:11,i:605}, +D{l:141,t:11,i:10}, +D{l:137,t:0,i:234}, +D{l:5,t:0,i:815}, +D{l:6,t:0,i:1688}, +D{l:134,t:0,i:1755}, +D{l:5,t:11,i:838}, +D{l:5,t:11,i:841}, +D{l:134,t:11,i:1649}, +D{l:7,t:0,i:1987}, +D{l:7,t:0,i:2040}, +D{l:136,t:0,i:743}, +D{l:133,t:11,i:1012}, +D{l:6,t:0,i:197}, +D{l:136,t:0,i:205}, +D{l:6,t:0,i:314}, +D{l:134,t:11,i:314}, +D{l:144,t:11,i:53}, +D{l:6,t:11,i:251}, +D{l:7,t:11,i:365}, +D{l:7,t:11,i:1357}, +D{l:7,t:11,i:1497}, +D{l:8,t:11,i:154}, +D{l:141,t:11,i:281}, +D{l:133,t:11,i:340}, +D{l:6,t:0,i:452}, +D{l:7,t:0,i:312}, +D{l:138,t:0,i:219}, +D{l:138,t:0,i:589}, +D{l:4,t:0,i:333}, +D{l:9,t:0,i:176}, +D{l:12,t:0,i:353}, +D{l:141,t:0,i:187}, +D{l:9,t:10,i:92}, +D{l:147,t:10,i:91}, +D{l:134,t:0,i:1110}, +D{l:11,t:0,i:47}, +D{l:139,t:11,i:495}, +D{l:6,t:10,i:525}, +D{l:8,t:10,i:806}, +D{l:9,t:10,i:876}, +D{l:140,t:10,i:284}, +D{l:8,t:11,i:261}, +D{l:9,t:11,i:144}, +D{l:9,t:11,i:466}, +D{l:10,t:11,i:370}, +D{l:12,t:11,i:470}, +D{l:13,t:11,i:144}, +D{l:142,t:11,i:348}, +D{l:137,t:11,i:897}, +D{l:8,t:0,i:863}, +D{l:8,t:0,i:864}, +D{l:8,t:0,i:868}, +D{l:8,t:0,i:884}, +D{l:10,t:0,i:866}, +D{l:10,t:0,i:868}, +D{l:10,t:0,i:873}, +D{l:10,t:0,i:911}, +D{l:10,t:0,i:912}, +D{l:10,t:0,i:944}, +D{l:12,t:0,i:727}, +D{l:6,t:11,i:248}, +D{l:9,t:11,i:546}, +D{l:10,t:11,i:535}, +D{l:11,t:11,i:681}, +D{l:141,t:11,i:135}, +D{l:6,t:0,i:300}, +D{l:135,t:0,i:1515}, +D{l:134,t:0,i:1237}, +D{l:139,t:10,i:958}, +D{l:133,t:10,i:594}, +D{l:140,t:11,i:250}, +D{l:134,t:0,i:1685}, +D{l:134,t:11,i:567}, +D{l:7,t:0,i:135}, +D{l:8,t:0,i:7}, +D{l:8,t:0,i:62}, +D{l:9,t:0,i:243}, +D{l:10,t:0,i:658}, +D{l:10,t:0,i:697}, +D{l:11,t:0,i:456}, +D{l:139,t:0,i:756}, +D{l:9,t:0,i:395}, +D{l:138,t:0,i:79}, +D{l:6,t:10,i:1641}, +D{l:136,t:10,i:820}, +D{l:4,t:10,i:302}, +D{l:135,t:10,i:1766}, +D{l:134,t:11,i:174}, +D{l:135,t:10,i:1313}, +D{l:135,t:0,i:631}, +D{l:134,t:10,i:1674}, +D{l:134,t:11,i:395}, +D{l:138,t:0,i:835}, +D{l:7,t:0,i:406}, +D{l:7,t:0,i:459}, +D{l:8,t:0,i:606}, +D{l:139,t:0,i:726}, +D{l:134,t:11,i:617}, +D{l:134,t:0,i:979}, +D{l:6,t:10,i:389}, +D{l:7,t:10,i:149}, +D{l:9,t:10,i:142}, +D{l:138,t:10,i:94}, +D{l:5,t:11,i:878}, +D{l:133,t:11,i:972}, +D{l:6,t:10,i:8}, +D{l:7,t:10,i:1881}, +D{l:8,t:10,i:91}, +D{l:136,t:11,i:511}, +D{l:133,t:0,i:612}, +D{l:132,t:11,i:351}, +D{l:4,t:0,i:372}, +D{l:7,t:0,i:482}, +D{l:8,t:0,i:158}, +D{l:9,t:0,i:602}, +D{l:9,t:0,i:615}, +D{l:10,t:0,i:245}, +D{l:10,t:0,i:678}, +D{l:10,t:0,i:744}, +D{l:11,t:0,i:248}, +D{l:139,t:0,i:806}, +D{l:5,t:0,i:854}, +D{l:135,t:0,i:1991}, +D{l:132,t:11,i:286}, +D{l:135,t:11,i:344}, +D{l:7,t:11,i:438}, +D{l:7,t:11,i:627}, +D{l:7,t:11,i:1516}, +D{l:8,t:11,i:40}, +D{l:9,t:11,i:56}, +D{l:9,t:11,i:294}, +D{l:10,t:11,i:30}, +D{l:10,t:11,i:259}, +D{l:11,t:11,i:969}, +D{l:146,t:11,i:148}, +D{l:135,t:0,i:1492}, +D{l:5,t:11,i:259}, +D{l:7,t:11,i:414}, +D{l:7,t:11,i:854}, +D{l:142,t:11,i:107}, +D{l:135,t:10,i:1746}, +D{l:6,t:0,i:833}, +D{l:134,t:0,i:998}, +D{l:135,t:10,i:24}, +D{l:6,t:0,i:750}, +D{l:135,t:0,i:1739}, +D{l:4,t:10,i:503}, +D{l:135,t:10,i:1661}, +D{l:5,t:10,i:130}, +D{l:7,t:10,i:1314}, +D{l:9,t:10,i:610}, +D{l:10,t:10,i:718}, +D{l:11,t:10,i:601}, +D{l:11,t:10,i:819}, +D{l:11,t:10,i:946}, +D{l:140,t:10,i:536}, +D{l:10,t:10,i:149}, +D{l:11,t:10,i:280}, +D{l:142,t:10,i:336}, +D{l:132,t:11,i:738}, +D{l:135,t:10,i:1946}, +D{l:5,t:0,i:195}, +D{l:135,t:0,i:1685}, +D{l:7,t:0,i:1997}, +D{l:8,t:0,i:730}, +D{l:139,t:0,i:1006}, +D{l:151,t:11,i:17}, +D{l:133,t:11,i:866}, +D{l:14,t:0,i:463}, +D{l:14,t:0,i:470}, +D{l:150,t:0,i:61}, +D{l:5,t:0,i:751}, +D{l:8,t:0,i:266}, +D{l:11,t:0,i:578}, +D{l:4,t:10,i:392}, +D{l:135,t:10,i:1597}, +D{l:5,t:10,i:433}, +D{l:9,t:10,i:633}, +D{l:139,t:10,i:629}, +D{l:135,t:0,i:821}, +D{l:6,t:0,i:715}, +D{l:134,t:0,i:1325}, +D{l:133,t:11,i:116}, +D{l:6,t:0,i:868}, +D{l:132,t:11,i:457}, +D{l:134,t:0,i:959}, +D{l:6,t:10,i:234}, +D{l:138,t:11,i:199}, +D{l:7,t:0,i:1053}, +D{l:7,t:10,i:1950}, +D{l:8,t:10,i:680}, +D{l:11,t:10,i:817}, +D{l:147,t:10,i:88}, +D{l:7,t:10,i:1222}, +D{l:138,t:10,i:386}, +D{l:5,t:0,i:950}, +D{l:5,t:0,i:994}, +D{l:6,t:0,i:351}, +D{l:134,t:0,i:1124}, +D{l:134,t:0,i:1081}, +D{l:7,t:0,i:1595}, +D{l:6,t:10,i:5}, +D{l:11,t:10,i:249}, +D{l:12,t:10,i:313}, +D{l:16,t:10,i:66}, +D{l:145,t:10,i:26}, +D{l:148,t:0,i:59}, +D{l:5,t:11,i:527}, +D{l:6,t:11,i:189}, +D{l:135,t:11,i:859}, +D{l:5,t:10,i:963}, +D{l:6,t:10,i:1773}, +D{l:11,t:11,i:104}, +D{l:11,t:11,i:554}, +D{l:15,t:11,i:60}, +D{l:143,t:11,i:125}, +D{l:135,t:0,i:47}, +D{l:137,t:0,i:684}, +D{l:134,t:11,i:116}, +D{l:134,t:0,i:1606}, +D{l:134,t:0,i:777}, +D{l:7,t:0,i:1020}, +D{l:8,t:10,i:509}, +D{l:136,t:10,i:792}, +D{l:135,t:0,i:1094}, +D{l:132,t:0,i:350}, +D{l:133,t:11,i:487}, +D{l:4,t:11,i:86}, +D{l:5,t:11,i:667}, +D{l:5,t:11,i:753}, +D{l:6,t:11,i:316}, +D{l:6,t:11,i:455}, +D{l:135,t:11,i:946}, +D{l:7,t:0,i:1812}, +D{l:13,t:0,i:259}, +D{l:13,t:0,i:356}, +D{l:14,t:0,i:242}, +D{l:147,t:0,i:114}, +D{l:132,t:10,i:931}, +D{l:133,t:0,i:967}, +D{l:4,t:0,i:473}, +D{l:7,t:0,i:623}, +D{l:8,t:0,i:808}, +D{l:9,t:0,i:871}, +D{l:9,t:0,i:893}, +D{l:11,t:0,i:38}, +D{l:11,t:0,i:431}, +D{l:12,t:0,i:112}, +D{l:12,t:0,i:217}, +D{l:12,t:0,i:243}, +D{l:12,t:0,i:562}, +D{l:12,t:0,i:663}, +D{l:12,t:0,i:683}, +D{l:13,t:0,i:141}, +D{l:13,t:0,i:197}, +D{l:13,t:0,i:227}, +D{l:13,t:0,i:406}, +D{l:13,t:0,i:487}, +D{l:14,t:0,i:156}, +D{l:14,t:0,i:203}, +D{l:14,t:0,i:224}, +D{l:14,t:0,i:256}, +D{l:18,t:0,i:58}, +D{l:150,t:0,i:0}, +D{l:138,t:0,i:286}, +D{l:7,t:10,i:943}, +D{l:139,t:10,i:614}, +D{l:135,t:10,i:1837}, +D{l:150,t:11,i:45}, +D{l:132,t:0,i:798}, +D{l:4,t:0,i:222}, +D{l:7,t:0,i:286}, +D{l:136,t:0,i:629}, +D{l:4,t:11,i:79}, +D{l:7,t:11,i:1773}, +D{l:10,t:11,i:450}, +D{l:11,t:11,i:589}, +D{l:13,t:11,i:332}, +D{l:13,t:11,i:493}, +D{l:14,t:11,i:183}, +D{l:14,t:11,i:334}, +D{l:14,t:11,i:362}, +D{l:14,t:11,i:368}, +D{l:14,t:11,i:376}, +D{l:14,t:11,i:379}, +D{l:19,t:11,i:90}, +D{l:19,t:11,i:103}, +D{l:19,t:11,i:127}, +D{l:148,t:11,i:90}, +D{l:5,t:0,i:337}, +D{l:11,t:0,i:513}, +D{l:11,t:0,i:889}, +D{l:11,t:0,i:961}, +D{l:12,t:0,i:461}, +D{l:13,t:0,i:79}, +D{l:15,t:0,i:121}, +D{l:4,t:10,i:90}, +D{l:5,t:10,i:545}, +D{l:7,t:10,i:754}, +D{l:9,t:10,i:186}, +D{l:10,t:10,i:72}, +D{l:10,t:10,i:782}, +D{l:11,t:10,i:577}, +D{l:11,t:10,i:610}, +D{l:12,t:10,i:354}, +D{l:12,t:10,i:362}, +D{l:140,t:10,i:595}, +D{l:141,t:0,i:306}, +D{l:136,t:0,i:146}, +D{l:7,t:0,i:1646}, +D{l:9,t:10,i:329}, +D{l:11,t:10,i:254}, +D{l:141,t:11,i:124}, +D{l:4,t:0,i:465}, +D{l:135,t:0,i:1663}, +D{l:132,t:0,i:525}, +D{l:133,t:11,i:663}, +D{l:10,t:0,i:299}, +D{l:18,t:0,i:74}, +D{l:9,t:10,i:187}, +D{l:11,t:10,i:1016}, +D{l:145,t:10,i:44}, +D{l:7,t:0,i:165}, +D{l:7,t:0,i:919}, +D{l:4,t:10,i:506}, +D{l:136,t:10,i:517}, +D{l:5,t:10,i:295}, +D{l:135,t:10,i:1680}, +D{l:133,t:11,i:846}, +D{l:134,t:0,i:1064}, +D{l:5,t:11,i:378}, +D{l:7,t:11,i:1402}, +D{l:7,t:11,i:1414}, +D{l:8,t:11,i:465}, +D{l:9,t:11,i:286}, +D{l:10,t:11,i:185}, +D{l:10,t:11,i:562}, +D{l:10,t:11,i:635}, +D{l:11,t:11,i:31}, +D{l:11,t:11,i:393}, +D{l:12,t:11,i:456}, +D{l:13,t:11,i:312}, +D{l:18,t:11,i:65}, +D{l:18,t:11,i:96}, +D{l:147,t:11,i:89}, +D{l:132,t:0,i:596}, +D{l:7,t:10,i:987}, +D{l:9,t:10,i:688}, +D{l:10,t:10,i:522}, +D{l:11,t:10,i:788}, +D{l:140,t:10,i:566}, +D{l:6,t:0,i:82}, +D{l:7,t:0,i:138}, +D{l:7,t:0,i:517}, +D{l:7,t:0,i:1741}, +D{l:11,t:0,i:238}, +D{l:4,t:11,i:648}, +D{l:134,t:10,i:1775}, +D{l:7,t:0,i:1233}, +D{l:7,t:10,i:700}, +D{l:7,t:10,i:940}, +D{l:8,t:10,i:514}, +D{l:9,t:10,i:116}, +D{l:9,t:10,i:535}, +D{l:10,t:10,i:118}, +D{l:11,t:10,i:107}, +D{l:11,t:10,i:148}, +D{l:11,t:10,i:922}, +D{l:12,t:10,i:254}, +D{l:12,t:10,i:421}, +D{l:142,t:10,i:238}, +D{l:4,t:0,i:962}, +D{l:6,t:0,i:1824}, +D{l:8,t:0,i:894}, +D{l:12,t:0,i:708}, +D{l:12,t:0,i:725}, +D{l:14,t:0,i:451}, +D{l:20,t:0,i:94}, +D{l:22,t:0,i:59}, +D{l:150,t:0,i:62}, +D{l:5,t:11,i:945}, +D{l:6,t:11,i:1656}, +D{l:6,t:11,i:1787}, +D{l:7,t:11,i:167}, +D{l:8,t:11,i:824}, +D{l:9,t:11,i:391}, +D{l:10,t:11,i:375}, +D{l:139,t:11,i:185}, +D{l:5,t:0,i:495}, +D{l:7,t:0,i:834}, +D{l:9,t:0,i:733}, +D{l:139,t:0,i:378}, +D{l:4,t:10,i:743}, +D{l:135,t:11,i:1273}, +D{l:6,t:0,i:1204}, +D{l:7,t:11,i:1645}, +D{l:8,t:11,i:352}, +D{l:137,t:11,i:249}, +D{l:139,t:10,i:292}, +D{l:133,t:0,i:559}, +D{l:132,t:11,i:152}, +D{l:9,t:0,i:499}, +D{l:10,t:0,i:341}, +D{l:15,t:0,i:144}, +D{l:19,t:0,i:49}, +D{l:7,t:10,i:1283}, +D{l:9,t:10,i:227}, +D{l:11,t:10,i:325}, +D{l:11,t:10,i:408}, +D{l:14,t:10,i:180}, +D{l:146,t:10,i:47}, +D{l:6,t:0,i:21}, +D{l:6,t:0,i:1737}, +D{l:7,t:0,i:1444}, +D{l:136,t:0,i:224}, +D{l:133,t:11,i:1006}, +D{l:7,t:0,i:1446}, +D{l:9,t:0,i:97}, +D{l:17,t:0,i:15}, +D{l:5,t:10,i:81}, +D{l:7,t:10,i:146}, +D{l:7,t:10,i:1342}, +D{l:8,t:10,i:53}, +D{l:8,t:10,i:561}, +D{l:8,t:10,i:694}, +D{l:8,t:10,i:754}, +D{l:9,t:10,i:115}, +D{l:9,t:10,i:894}, +D{l:10,t:10,i:462}, +D{l:10,t:10,i:813}, +D{l:11,t:10,i:230}, +D{l:11,t:10,i:657}, +D{l:11,t:10,i:699}, +D{l:11,t:10,i:748}, +D{l:12,t:10,i:119}, +D{l:12,t:10,i:200}, +D{l:12,t:10,i:283}, +D{l:142,t:10,i:273}, +D{l:5,t:10,i:408}, +D{l:137,t:10,i:747}, +D{l:135,t:11,i:431}, +D{l:135,t:11,i:832}, +D{l:6,t:0,i:729}, +D{l:134,t:0,i:953}, +D{l:4,t:0,i:727}, +D{l:8,t:0,i:565}, +D{l:5,t:11,i:351}, +D{l:7,t:11,i:264}, +D{l:136,t:11,i:565}, +D{l:134,t:0,i:1948}, +D{l:5,t:0,i:519}, +D{l:5,t:11,i:40}, +D{l:7,t:11,i:598}, +D{l:7,t:11,i:1638}, +D{l:8,t:11,i:78}, +D{l:9,t:11,i:166}, +D{l:9,t:11,i:640}, +D{l:9,t:11,i:685}, +D{l:9,t:11,i:773}, +D{l:11,t:11,i:215}, +D{l:13,t:11,i:65}, +D{l:14,t:11,i:172}, +D{l:14,t:11,i:317}, +D{l:145,t:11,i:6}, +D{l:8,t:11,i:60}, +D{l:9,t:11,i:343}, +D{l:139,t:11,i:769}, +D{l:137,t:11,i:455}, +D{l:134,t:0,i:1193}, +D{l:140,t:0,i:790}, +D{l:7,t:11,i:1951}, +D{l:8,t:11,i:765}, +D{l:8,t:11,i:772}, +D{l:140,t:11,i:671}, +D{l:7,t:11,i:108}, +D{l:8,t:11,i:219}, +D{l:8,t:11,i:388}, +D{l:9,t:11,i:639}, +D{l:9,t:11,i:775}, +D{l:11,t:11,i:275}, +D{l:140,t:11,i:464}, +D{l:132,t:11,i:468}, +D{l:7,t:10,i:30}, +D{l:8,t:10,i:86}, +D{l:8,t:10,i:315}, +D{l:8,t:10,i:700}, +D{l:9,t:10,i:576}, +D{l:9,t:10,i:858}, +D{l:11,t:10,i:310}, +D{l:11,t:10,i:888}, +D{l:11,t:10,i:904}, +D{l:12,t:10,i:361}, +D{l:141,t:10,i:248}, +D{l:5,t:11,i:15}, +D{l:6,t:11,i:56}, +D{l:7,t:11,i:1758}, +D{l:8,t:11,i:500}, +D{l:9,t:11,i:730}, +D{l:11,t:11,i:331}, +D{l:13,t:11,i:150}, +D{l:142,t:11,i:282}, +D{l:4,t:0,i:402}, +D{l:7,t:0,i:2}, +D{l:8,t:0,i:323}, +D{l:136,t:0,i:479}, +D{l:138,t:10,i:839}, +D{l:11,t:0,i:580}, +D{l:142,t:0,i:201}, +D{l:5,t:0,i:59}, +D{l:135,t:0,i:672}, +D{l:137,t:10,i:617}, +D{l:146,t:0,i:34}, +D{l:134,t:11,i:1886}, +D{l:4,t:0,i:961}, +D{l:136,t:0,i:896}, +D{l:6,t:0,i:1285}, +D{l:5,t:11,i:205}, +D{l:6,t:11,i:438}, +D{l:137,t:11,i:711}, +D{l:134,t:10,i:428}, +D{l:7,t:10,i:524}, +D{l:8,t:10,i:169}, +D{l:8,t:10,i:234}, +D{l:9,t:10,i:480}, +D{l:138,t:10,i:646}, +D{l:148,t:0,i:46}, +D{l:141,t:0,i:479}, +D{l:133,t:11,i:534}, +D{l:6,t:0,i:2019}, +D{l:134,t:10,i:1648}, +D{l:4,t:0,i:85}, +D{l:7,t:0,i:549}, +D{l:7,t:10,i:1205}, +D{l:138,t:10,i:637}, +D{l:4,t:0,i:663}, +D{l:5,t:0,i:94}, +D{l:7,t:11,i:235}, +D{l:7,t:11,i:1475}, +D{l:15,t:11,i:68}, +D{l:146,t:11,i:120}, +D{l:6,t:11,i:443}, +D{l:9,t:11,i:237}, +D{l:9,t:11,i:571}, +D{l:9,t:11,i:695}, +D{l:10,t:11,i:139}, +D{l:11,t:11,i:715}, +D{l:12,t:11,i:417}, +D{l:141,t:11,i:421}, +D{l:132,t:0,i:783}, +D{l:4,t:0,i:682}, +D{l:8,t:0,i:65}, +D{l:9,t:10,i:39}, +D{l:10,t:10,i:166}, +D{l:11,t:10,i:918}, +D{l:12,t:10,i:635}, +D{l:20,t:10,i:10}, +D{l:22,t:10,i:27}, +D{l:22,t:10,i:43}, +D{l:150,t:10,i:52}, +D{l:6,t:0,i:11}, +D{l:135,t:0,i:187}, +D{l:132,t:0,i:522}, +D{l:4,t:0,i:52}, +D{l:135,t:0,i:661}, +D{l:4,t:0,i:383}, +D{l:133,t:0,i:520}, +D{l:135,t:11,i:546}, +D{l:11,t:0,i:343}, +D{l:142,t:0,i:127}, +D{l:4,t:11,i:578}, +D{l:7,t:10,i:157}, +D{l:7,t:11,i:624}, +D{l:7,t:11,i:916}, +D{l:8,t:10,i:279}, +D{l:10,t:11,i:256}, +D{l:11,t:11,i:87}, +D{l:139,t:11,i:703}, +D{l:134,t:10,i:604}, +D{l:4,t:0,i:281}, +D{l:5,t:0,i:38}, +D{l:7,t:0,i:194}, +D{l:7,t:0,i:668}, +D{l:7,t:0,i:1893}, +D{l:137,t:0,i:397}, +D{l:7,t:10,i:945}, +D{l:11,t:10,i:713}, +D{l:139,t:10,i:744}, +D{l:139,t:10,i:1022}, +D{l:9,t:0,i:635}, +D{l:139,t:0,i:559}, +D{l:5,t:11,i:923}, +D{l:7,t:11,i:490}, +D{l:12,t:11,i:553}, +D{l:13,t:11,i:100}, +D{l:14,t:11,i:118}, +D{l:143,t:11,i:75}, +D{l:132,t:0,i:975}, +D{l:132,t:10,i:567}, +D{l:137,t:10,i:859}, +D{l:7,t:10,i:1846}, +D{l:7,t:11,i:1846}, +D{l:8,t:10,i:628}, +D{l:136,t:11,i:628}, +D{l:148,t:0,i:116}, +D{l:138,t:11,i:750}, +D{l:14,t:0,i:51}, +D{l:14,t:11,i:51}, +D{l:15,t:11,i:7}, +D{l:148,t:11,i:20}, +D{l:132,t:0,i:858}, +D{l:134,t:0,i:1075}, +D{l:4,t:11,i:924}, +D{l:133,t:10,i:762}, +D{l:136,t:0,i:535}, +D{l:133,t:0,i:448}, +D{l:10,t:10,i:784}, +D{l:141,t:10,i:191}, +D{l:133,t:10,i:298}, +D{l:7,t:0,i:610}, +D{l:135,t:0,i:1501}, +D{l:7,t:10,i:633}, +D{l:7,t:10,i:905}, +D{l:7,t:10,i:909}, +D{l:7,t:10,i:1538}, +D{l:9,t:10,i:767}, +D{l:140,t:10,i:636}, +D{l:4,t:11,i:265}, +D{l:7,t:11,i:807}, +D{l:135,t:11,i:950}, +D{l:5,t:11,i:93}, +D{l:12,t:11,i:267}, +D{l:144,t:11,i:26}, +D{l:136,t:0,i:191}, +D{l:139,t:10,i:301}, +D{l:135,t:10,i:1970}, +D{l:135,t:0,i:267}, +D{l:4,t:0,i:319}, +D{l:5,t:0,i:699}, +D{l:138,t:0,i:673}, +D{l:6,t:0,i:336}, +D{l:7,t:0,i:92}, +D{l:7,t:0,i:182}, +D{l:8,t:0,i:453}, +D{l:8,t:0,i:552}, +D{l:9,t:0,i:204}, +D{l:9,t:0,i:285}, +D{l:10,t:0,i:99}, +D{l:11,t:0,i:568}, +D{l:11,t:0,i:950}, +D{l:12,t:0,i:94}, +D{l:16,t:0,i:20}, +D{l:16,t:0,i:70}, +D{l:19,t:0,i:55}, +D{l:12,t:10,i:644}, +D{l:144,t:10,i:90}, +D{l:6,t:0,i:551}, +D{l:7,t:0,i:1308}, +D{l:7,t:10,i:845}, +D{l:7,t:11,i:994}, +D{l:8,t:10,i:160}, +D{l:137,t:10,i:318}, +D{l:19,t:11,i:1}, +D{l:19,t:11,i:26}, +D{l:150,t:11,i:9}, +D{l:7,t:0,i:1406}, +D{l:9,t:0,i:218}, +D{l:141,t:0,i:222}, +D{l:5,t:0,i:256}, +D{l:138,t:0,i:69}, +D{l:5,t:11,i:233}, +D{l:5,t:11,i:320}, +D{l:6,t:11,i:140}, +D{l:7,t:11,i:330}, +D{l:136,t:11,i:295}, +D{l:6,t:0,i:1980}, +D{l:136,t:0,i:952}, +D{l:4,t:0,i:833}, +D{l:137,t:11,i:678}, +D{l:133,t:11,i:978}, +D{l:4,t:11,i:905}, +D{l:6,t:11,i:1701}, +D{l:137,t:11,i:843}, +D{l:138,t:10,i:735}, +D{l:136,t:10,i:76}, +D{l:17,t:0,i:39}, +D{l:148,t:0,i:36}, +D{l:18,t:0,i:81}, +D{l:146,t:11,i:81}, +D{l:14,t:0,i:352}, +D{l:17,t:0,i:53}, +D{l:18,t:0,i:146}, +D{l:18,t:0,i:152}, +D{l:19,t:0,i:11}, +D{l:150,t:0,i:54}, +D{l:135,t:0,i:634}, +D{l:138,t:10,i:841}, +D{l:132,t:0,i:618}, +D{l:4,t:0,i:339}, +D{l:7,t:0,i:259}, +D{l:17,t:0,i:73}, +D{l:4,t:11,i:275}, +D{l:140,t:11,i:376}, +D{l:132,t:11,i:509}, +D{l:7,t:11,i:273}, +D{l:139,t:11,i:377}, +D{l:4,t:0,i:759}, +D{l:13,t:0,i:169}, +D{l:137,t:10,i:804}, +D{l:6,t:10,i:96}, +D{l:135,t:10,i:1426}, +D{l:4,t:10,i:651}, +D{l:133,t:10,i:289}, +D{l:7,t:0,i:1075}, +D{l:8,t:10,i:35}, +D{l:9,t:10,i:511}, +D{l:10,t:10,i:767}, +D{l:147,t:10,i:118}, +D{l:6,t:0,i:649}, +D{l:6,t:0,i:670}, +D{l:136,t:0,i:482}, +D{l:5,t:0,i:336}, +D{l:6,t:0,i:341}, +D{l:6,t:0,i:478}, +D{l:6,t:0,i:1763}, +D{l:136,t:0,i:386}, +D{l:5,t:11,i:802}, +D{l:7,t:11,i:2021}, +D{l:8,t:11,i:805}, +D{l:14,t:11,i:94}, +D{l:15,t:11,i:65}, +D{l:16,t:11,i:4}, +D{l:16,t:11,i:77}, +D{l:16,t:11,i:80}, +D{l:145,t:11,i:5}, +D{l:6,t:0,i:1035}, +D{l:5,t:11,i:167}, +D{l:5,t:11,i:899}, +D{l:6,t:11,i:410}, +D{l:137,t:11,i:777}, +D{l:134,t:11,i:1705}, +D{l:5,t:0,i:924}, +D{l:133,t:0,i:969}, +D{l:132,t:10,i:704}, +D{l:135,t:0,i:73}, +D{l:135,t:11,i:10}, +D{l:135,t:10,i:1078}, +D{l:5,t:11,i:11}, +D{l:6,t:11,i:117}, +D{l:6,t:11,i:485}, +D{l:7,t:11,i:1133}, +D{l:9,t:11,i:582}, +D{l:9,t:11,i:594}, +D{l:11,t:11,i:21}, +D{l:11,t:11,i:818}, +D{l:12,t:11,i:535}, +D{l:141,t:11,i:86}, +D{l:135,t:0,i:1971}, +D{l:4,t:11,i:264}, +D{l:7,t:11,i:1067}, +D{l:8,t:11,i:204}, +D{l:8,t:11,i:385}, +D{l:139,t:11,i:953}, +D{l:6,t:0,i:1458}, +D{l:135,t:0,i:1344}, +D{l:5,t:0,i:396}, +D{l:134,t:0,i:501}, +D{l:4,t:10,i:720}, +D{l:133,t:10,i:306}, +D{l:4,t:0,i:929}, +D{l:5,t:0,i:799}, +D{l:8,t:0,i:46}, +D{l:8,t:0,i:740}, +D{l:133,t:10,i:431}, +D{l:7,t:11,i:646}, +D{l:7,t:11,i:1730}, +D{l:11,t:11,i:446}, +D{l:141,t:11,i:178}, +D{l:7,t:0,i:276}, +D{l:5,t:10,i:464}, +D{l:6,t:10,i:236}, +D{l:7,t:10,i:696}, +D{l:7,t:10,i:914}, +D{l:7,t:10,i:1108}, +D{l:7,t:10,i:1448}, +D{l:9,t:10,i:15}, +D{l:9,t:10,i:564}, +D{l:10,t:10,i:14}, +D{l:12,t:10,i:565}, +D{l:13,t:10,i:449}, +D{l:14,t:10,i:53}, +D{l:15,t:10,i:13}, +D{l:16,t:10,i:64}, +D{l:145,t:10,i:41}, +D{l:4,t:0,i:892}, +D{l:133,t:0,i:770}, +D{l:6,t:10,i:1767}, +D{l:12,t:10,i:194}, +D{l:145,t:10,i:107}, +D{l:135,t:0,i:158}, +D{l:5,t:10,i:840}, +D{l:138,t:11,i:608}, +D{l:134,t:0,i:1432}, +D{l:138,t:11,i:250}, +D{l:8,t:11,i:794}, +D{l:9,t:11,i:400}, +D{l:10,t:11,i:298}, +D{l:142,t:11,i:228}, +D{l:151,t:0,i:25}, +D{l:7,t:11,i:1131}, +D{l:135,t:11,i:1468}, +D{l:135,t:0,i:2001}, +D{l:9,t:10,i:642}, +D{l:11,t:10,i:236}, +D{l:142,t:10,i:193}, +D{l:4,t:10,i:68}, +D{l:5,t:10,i:634}, +D{l:6,t:10,i:386}, +D{l:7,t:10,i:794}, +D{l:8,t:10,i:273}, +D{l:9,t:10,i:563}, +D{l:10,t:10,i:105}, +D{l:10,t:10,i:171}, +D{l:11,t:10,i:94}, +D{l:139,t:10,i:354}, +D{l:136,t:11,i:724}, +D{l:132,t:0,i:478}, +D{l:11,t:11,i:512}, +D{l:13,t:11,i:205}, +D{l:19,t:11,i:30}, +D{l:22,t:11,i:36}, +D{l:151,t:11,i:19}, +D{l:7,t:0,i:1461}, +D{l:140,t:0,i:91}, +D{l:6,t:11,i:190}, +D{l:7,t:11,i:768}, +D{l:135,t:11,i:1170}, +D{l:4,t:0,i:602}, +D{l:8,t:0,i:211}, +D{l:4,t:10,i:95}, +D{l:7,t:10,i:416}, +D{l:139,t:10,i:830}, +D{l:7,t:10,i:731}, +D{l:13,t:10,i:20}, +D{l:143,t:10,i:11}, +D{l:6,t:0,i:1068}, +D{l:135,t:0,i:1872}, +D{l:4,t:0,i:13}, +D{l:5,t:0,i:567}, +D{l:7,t:0,i:1498}, +D{l:9,t:0,i:124}, +D{l:11,t:0,i:521}, +D{l:12,t:0,i:405}, +D{l:135,t:11,i:1023}, +D{l:135,t:0,i:1006}, +D{l:132,t:0,i:735}, +D{l:138,t:0,i:812}, +D{l:4,t:0,i:170}, +D{l:135,t:0,i:323}, +D{l:6,t:11,i:137}, +D{l:9,t:11,i:75}, +D{l:9,t:11,i:253}, +D{l:10,t:11,i:194}, +D{l:138,t:11,i:444}, +D{l:5,t:0,i:304}, +D{l:7,t:0,i:1403}, +D{l:5,t:10,i:864}, +D{l:10,t:10,i:648}, +D{l:11,t:10,i:671}, +D{l:143,t:10,i:46}, +D{l:135,t:11,i:1180}, +D{l:133,t:10,i:928}, +D{l:4,t:0,i:148}, +D{l:133,t:0,i:742}, +D{l:11,t:10,i:986}, +D{l:140,t:10,i:682}, +D{l:133,t:0,i:523}, +D{l:135,t:11,i:1743}, +D{l:7,t:0,i:730}, +D{l:18,t:0,i:144}, +D{l:19,t:0,i:61}, +D{l:8,t:10,i:44}, +D{l:9,t:10,i:884}, +D{l:10,t:10,i:580}, +D{l:11,t:10,i:399}, +D{l:11,t:10,i:894}, +D{l:143,t:10,i:122}, +D{l:5,t:11,i:760}, +D{l:7,t:11,i:542}, +D{l:8,t:11,i:135}, +D{l:136,t:11,i:496}, +D{l:136,t:0,i:981}, +D{l:133,t:0,i:111}, +D{l:10,t:0,i:132}, +D{l:11,t:0,i:191}, +D{l:11,t:0,i:358}, +D{l:139,t:0,i:460}, +D{l:7,t:11,i:319}, +D{l:7,t:11,i:355}, +D{l:7,t:11,i:763}, +D{l:10,t:11,i:389}, +D{l:145,t:11,i:43}, +D{l:134,t:0,i:890}, +D{l:134,t:0,i:1420}, +D{l:136,t:11,i:557}, +D{l:133,t:10,i:518}, +D{l:133,t:0,i:444}, +D{l:135,t:0,i:1787}, +D{l:135,t:10,i:1852}, +D{l:8,t:0,i:123}, +D{l:15,t:0,i:6}, +D{l:144,t:0,i:7}, +D{l:6,t:0,i:2041}, +D{l:10,t:11,i:38}, +D{l:139,t:11,i:784}, +D{l:136,t:0,i:932}, +D{l:5,t:0,i:937}, +D{l:135,t:0,i:100}, +D{l:6,t:0,i:995}, +D{l:4,t:11,i:58}, +D{l:5,t:11,i:286}, +D{l:6,t:11,i:319}, +D{l:7,t:11,i:402}, +D{l:7,t:11,i:1254}, +D{l:7,t:11,i:1903}, +D{l:8,t:11,i:356}, +D{l:140,t:11,i:408}, +D{l:4,t:11,i:389}, +D{l:9,t:11,i:181}, +D{l:9,t:11,i:255}, +D{l:10,t:11,i:8}, +D{l:10,t:11,i:29}, +D{l:10,t:11,i:816}, +D{l:11,t:11,i:311}, +D{l:11,t:11,i:561}, +D{l:12,t:11,i:67}, +D{l:141,t:11,i:181}, +D{l:138,t:0,i:255}, +D{l:5,t:0,i:138}, +D{l:4,t:10,i:934}, +D{l:136,t:10,i:610}, +D{l:4,t:0,i:965}, +D{l:10,t:0,i:863}, +D{l:138,t:0,i:898}, +D{l:10,t:10,i:804}, +D{l:138,t:10,i:832}, +D{l:12,t:0,i:631}, +D{l:8,t:10,i:96}, +D{l:9,t:10,i:36}, +D{l:10,t:10,i:607}, +D{l:11,t:10,i:423}, +D{l:11,t:10,i:442}, +D{l:12,t:10,i:309}, +D{l:14,t:10,i:199}, +D{l:15,t:10,i:90}, +D{l:145,t:10,i:110}, +D{l:134,t:0,i:1394}, +D{l:4,t:0,i:652}, +D{l:8,t:0,i:320}, +D{l:22,t:0,i:6}, +D{l:22,t:0,i:16}, +D{l:9,t:10,i:13}, +D{l:9,t:10,i:398}, +D{l:9,t:10,i:727}, +D{l:10,t:10,i:75}, +D{l:10,t:10,i:184}, +D{l:10,t:10,i:230}, +D{l:10,t:10,i:564}, +D{l:10,t:10,i:569}, +D{l:11,t:10,i:973}, +D{l:12,t:10,i:70}, +D{l:12,t:10,i:189}, +D{l:13,t:10,i:57}, +D{l:141,t:10,i:257}, +D{l:6,t:0,i:897}, +D{l:134,t:0,i:1333}, +D{l:4,t:0,i:692}, +D{l:133,t:0,i:321}, +D{l:133,t:11,i:373}, +D{l:135,t:0,i:922}, +D{l:5,t:0,i:619}, +D{l:133,t:0,i:698}, +D{l:137,t:10,i:631}, +D{l:5,t:10,i:345}, +D{l:135,t:10,i:1016}, +D{l:9,t:0,i:957}, +D{l:9,t:0,i:1018}, +D{l:12,t:0,i:828}, +D{l:12,t:0,i:844}, +D{l:12,t:0,i:897}, +D{l:12,t:0,i:901}, +D{l:12,t:0,i:943}, +D{l:15,t:0,i:180}, +D{l:18,t:0,i:197}, +D{l:18,t:0,i:200}, +D{l:18,t:0,i:213}, +D{l:18,t:0,i:214}, +D{l:146,t:0,i:226}, +D{l:5,t:0,i:917}, +D{l:134,t:0,i:1659}, +D{l:135,t:0,i:1100}, +D{l:134,t:0,i:1173}, +D{l:134,t:0,i:1930}, +D{l:5,t:0,i:251}, +D{l:5,t:0,i:956}, +D{l:8,t:0,i:268}, +D{l:9,t:0,i:214}, +D{l:146,t:0,i:142}, +D{l:133,t:10,i:673}, +D{l:137,t:10,i:850}, +D{l:4,t:10,i:287}, +D{l:133,t:10,i:1018}, +D{l:132,t:11,i:672}, +D{l:5,t:0,i:346}, +D{l:5,t:0,i:711}, +D{l:8,t:0,i:390}, +D{l:11,t:11,i:752}, +D{l:139,t:11,i:885}, +D{l:5,t:10,i:34}, +D{l:10,t:10,i:724}, +D{l:12,t:10,i:444}, +D{l:13,t:10,i:354}, +D{l:18,t:10,i:32}, +D{l:23,t:10,i:24}, +D{l:23,t:10,i:31}, +D{l:152,t:10,i:5}, +D{l:4,t:11,i:710}, +D{l:134,t:11,i:606}, +D{l:134,t:0,i:744}, +D{l:134,t:10,i:382}, +D{l:133,t:11,i:145}, +D{l:4,t:10,i:329}, +D{l:7,t:11,i:884}, +D{l:140,t:11,i:124}, +D{l:4,t:11,i:467}, +D{l:5,t:11,i:405}, +D{l:134,t:11,i:544}, +D{l:9,t:10,i:846}, +D{l:138,t:10,i:827}, +D{l:133,t:0,i:624}, +D{l:9,t:11,i:372}, +D{l:15,t:11,i:2}, +D{l:19,t:11,i:10}, +D{l:147,t:11,i:18}, +D{l:4,t:11,i:387}, +D{l:135,t:11,i:1288}, +D{l:5,t:0,i:783}, +D{l:7,t:0,i:1998}, +D{l:135,t:0,i:2047}, +D{l:132,t:10,i:906}, +D{l:136,t:10,i:366}, +D{l:135,t:11,i:550}, +D{l:4,t:10,i:123}, +D{l:4,t:10,i:649}, +D{l:5,t:10,i:605}, +D{l:7,t:10,i:1509}, +D{l:136,t:10,i:36}, +D{l:134,t:0,i:1125}, +D{l:132,t:0,i:594}, +D{l:133,t:10,i:767}, +D{l:135,t:11,i:1227}, +D{l:136,t:11,i:467}, +D{l:4,t:11,i:576}, +D{l:135,t:11,i:1263}, +D{l:4,t:0,i:268}, +D{l:7,t:0,i:1534}, +D{l:135,t:11,i:1534}, +D{l:4,t:10,i:273}, +D{l:5,t:10,i:658}, +D{l:5,t:11,i:919}, +D{l:5,t:10,i:995}, +D{l:134,t:11,i:1673}, +D{l:133,t:0,i:563}, +D{l:134,t:10,i:72}, +D{l:135,t:10,i:1345}, +D{l:4,t:11,i:82}, +D{l:5,t:11,i:333}, +D{l:5,t:11,i:904}, +D{l:6,t:11,i:207}, +D{l:7,t:11,i:325}, +D{l:7,t:11,i:1726}, +D{l:8,t:11,i:101}, +D{l:10,t:11,i:778}, +D{l:139,t:11,i:220}, +D{l:5,t:0,i:37}, +D{l:6,t:0,i:39}, +D{l:6,t:0,i:451}, +D{l:7,t:0,i:218}, +D{l:7,t:0,i:667}, +D{l:7,t:0,i:1166}, +D{l:7,t:0,i:1687}, +D{l:8,t:0,i:662}, +D{l:16,t:0,i:2}, +D{l:133,t:10,i:589}, +D{l:134,t:0,i:1332}, +D{l:133,t:11,i:903}, +D{l:134,t:0,i:508}, +D{l:5,t:10,i:117}, +D{l:6,t:10,i:514}, +D{l:6,t:10,i:541}, +D{l:7,t:10,i:1164}, +D{l:7,t:10,i:1436}, +D{l:8,t:10,i:220}, +D{l:8,t:10,i:648}, +D{l:10,t:10,i:688}, +D{l:11,t:10,i:560}, +D{l:140,t:11,i:147}, +D{l:6,t:11,i:555}, +D{l:135,t:11,i:485}, +D{l:133,t:10,i:686}, +D{l:7,t:0,i:453}, +D{l:7,t:0,i:635}, +D{l:7,t:0,i:796}, +D{l:8,t:0,i:331}, +D{l:9,t:0,i:330}, +D{l:9,t:0,i:865}, +D{l:10,t:0,i:119}, +D{l:10,t:0,i:235}, +D{l:11,t:0,i:111}, +D{l:11,t:0,i:129}, +D{l:11,t:0,i:240}, +D{l:12,t:0,i:31}, +D{l:12,t:0,i:66}, +D{l:12,t:0,i:222}, +D{l:12,t:0,i:269}, +D{l:12,t:0,i:599}, +D{l:12,t:0,i:684}, +D{l:12,t:0,i:689}, +D{l:12,t:0,i:691}, +D{l:142,t:0,i:345}, +D{l:135,t:0,i:1834}, +D{l:4,t:11,i:705}, +D{l:7,t:11,i:615}, +D{l:138,t:11,i:251}, +D{l:136,t:11,i:345}, +D{l:137,t:0,i:527}, +D{l:6,t:0,i:98}, +D{l:7,t:0,i:702}, +D{l:135,t:0,i:991}, +D{l:11,t:0,i:576}, +D{l:14,t:0,i:74}, +D{l:7,t:10,i:196}, +D{l:10,t:10,i:765}, +D{l:11,t:10,i:347}, +D{l:11,t:10,i:552}, +D{l:11,t:10,i:790}, +D{l:12,t:10,i:263}, +D{l:13,t:10,i:246}, +D{l:13,t:10,i:270}, +D{l:13,t:10,i:395}, +D{l:14,t:10,i:176}, +D{l:14,t:10,i:190}, +D{l:14,t:10,i:398}, +D{l:14,t:10,i:412}, +D{l:15,t:10,i:32}, +D{l:15,t:10,i:63}, +D{l:16,t:10,i:88}, +D{l:147,t:10,i:105}, +D{l:134,t:11,i:90}, +D{l:13,t:0,i:84}, +D{l:141,t:0,i:122}, +D{l:6,t:0,i:37}, +D{l:7,t:0,i:299}, +D{l:7,t:0,i:1666}, +D{l:8,t:0,i:195}, +D{l:8,t:0,i:316}, +D{l:9,t:0,i:178}, +D{l:9,t:0,i:276}, +D{l:9,t:0,i:339}, +D{l:9,t:0,i:536}, +D{l:10,t:0,i:102}, +D{l:10,t:0,i:362}, +D{l:10,t:0,i:785}, +D{l:11,t:0,i:55}, +D{l:11,t:0,i:149}, +D{l:11,t:0,i:773}, +D{l:13,t:0,i:416}, +D{l:13,t:0,i:419}, +D{l:14,t:0,i:38}, +D{l:14,t:0,i:41}, +D{l:142,t:0,i:210}, +D{l:5,t:10,i:381}, +D{l:135,t:10,i:1792}, +D{l:7,t:11,i:813}, +D{l:12,t:11,i:497}, +D{l:141,t:11,i:56}, +D{l:7,t:10,i:616}, +D{l:138,t:10,i:413}, +D{l:133,t:0,i:645}, +D{l:6,t:11,i:125}, +D{l:135,t:11,i:1277}, +D{l:132,t:0,i:290}, +D{l:6,t:0,i:70}, +D{l:7,t:0,i:1292}, +D{l:10,t:0,i:762}, +D{l:139,t:0,i:288}, +D{l:6,t:10,i:120}, +D{l:7,t:10,i:1188}, +D{l:7,t:10,i:1710}, +D{l:8,t:10,i:286}, +D{l:9,t:10,i:667}, +D{l:11,t:10,i:592}, +D{l:139,t:10,i:730}, +D{l:135,t:11,i:1784}, +D{l:7,t:0,i:1315}, +D{l:135,t:11,i:1315}, +D{l:134,t:0,i:1955}, +D{l:135,t:10,i:1146}, +D{l:7,t:0,i:131}, +D{l:7,t:0,i:422}, +D{l:8,t:0,i:210}, +D{l:140,t:0,i:573}, +D{l:4,t:10,i:352}, +D{l:135,t:10,i:687}, +D{l:139,t:0,i:797}, +D{l:143,t:0,i:38}, +D{l:14,t:0,i:179}, +D{l:15,t:0,i:151}, +D{l:150,t:0,i:11}, +D{l:7,t:0,i:488}, +D{l:4,t:10,i:192}, +D{l:5,t:10,i:49}, +D{l:6,t:10,i:200}, +D{l:6,t:10,i:293}, +D{l:134,t:10,i:1696}, +D{l:132,t:0,i:936}, +D{l:135,t:11,i:703}, +D{l:6,t:11,i:160}, +D{l:7,t:11,i:1106}, +D{l:9,t:11,i:770}, +D{l:10,t:11,i:618}, +D{l:11,t:11,i:112}, +D{l:140,t:11,i:413}, +D{l:5,t:0,i:453}, +D{l:134,t:0,i:441}, +D{l:135,t:0,i:595}, +D{l:132,t:10,i:650}, +D{l:132,t:10,i:147}, +D{l:6,t:0,i:991}, +D{l:6,t:0,i:1182}, +D{l:12,t:11,i:271}, +D{l:145,t:11,i:109}, +D{l:133,t:10,i:934}, +D{l:140,t:11,i:221}, +D{l:132,t:0,i:653}, +D{l:7,t:0,i:505}, +D{l:135,t:0,i:523}, +D{l:134,t:0,i:903}, +D{l:135,t:11,i:479}, +D{l:7,t:11,i:304}, +D{l:9,t:11,i:646}, +D{l:9,t:11,i:862}, +D{l:10,t:11,i:262}, +D{l:11,t:11,i:696}, +D{l:12,t:11,i:208}, +D{l:15,t:11,i:79}, +D{l:147,t:11,i:108}, +D{l:146,t:0,i:80}, +D{l:135,t:11,i:981}, +D{l:142,t:0,i:432}, +D{l:132,t:0,i:314}, +D{l:137,t:11,i:152}, +D{l:7,t:0,i:1368}, +D{l:8,t:0,i:232}, +D{l:8,t:0,i:361}, +D{l:10,t:0,i:682}, +D{l:138,t:0,i:742}, +D{l:135,t:11,i:1586}, +D{l:9,t:0,i:534}, +D{l:4,t:11,i:434}, +D{l:11,t:11,i:663}, +D{l:12,t:11,i:210}, +D{l:13,t:11,i:166}, +D{l:13,t:11,i:310}, +D{l:14,t:11,i:373}, +D{l:147,t:11,i:43}, +D{l:7,t:11,i:1091}, +D{l:135,t:11,i:1765}, +D{l:6,t:11,i:550}, +D{l:135,t:11,i:652}, +D{l:137,t:0,i:27}, +D{l:142,t:0,i:12}, +D{l:4,t:10,i:637}, +D{l:5,t:11,i:553}, +D{l:7,t:11,i:766}, +D{l:138,t:11,i:824}, +D{l:7,t:11,i:737}, +D{l:8,t:11,i:298}, +D{l:136,t:11,i:452}, +D{l:7,t:0,i:736}, +D{l:139,t:0,i:264}, +D{l:134,t:0,i:1657}, +D{l:133,t:11,i:292}, +D{l:138,t:11,i:135}, +D{l:6,t:0,i:844}, +D{l:134,t:0,i:1117}, +D{l:135,t:0,i:127}, +D{l:9,t:10,i:867}, +D{l:138,t:10,i:837}, +D{l:6,t:0,i:1184}, +D{l:134,t:0,i:1208}, +D{l:134,t:0,i:1294}, +D{l:136,t:0,i:364}, +D{l:6,t:0,i:1415}, +D{l:7,t:0,i:1334}, +D{l:11,t:0,i:125}, +D{l:6,t:10,i:170}, +D{l:7,t:11,i:393}, +D{l:8,t:10,i:395}, +D{l:8,t:10,i:487}, +D{l:10,t:11,i:603}, +D{l:11,t:11,i:206}, +D{l:141,t:10,i:147}, +D{l:137,t:11,i:748}, +D{l:4,t:11,i:912}, +D{l:137,t:11,i:232}, +D{l:4,t:10,i:535}, +D{l:136,t:10,i:618}, +D{l:137,t:0,i:792}, +D{l:7,t:11,i:1973}, +D{l:136,t:11,i:716}, +D{l:135,t:11,i:98}, +D{l:5,t:0,i:909}, +D{l:9,t:0,i:849}, +D{l:138,t:0,i:805}, +D{l:4,t:0,i:630}, +D{l:132,t:0,i:699}, +D{l:5,t:11,i:733}, +D{l:14,t:11,i:103}, +D{l:150,t:10,i:23}, +D{l:12,t:11,i:158}, +D{l:18,t:11,i:8}, +D{l:19,t:11,i:62}, +D{l:20,t:11,i:6}, +D{l:22,t:11,i:4}, +D{l:23,t:11,i:2}, +D{l:151,t:11,i:9}, +D{l:132,t:0,i:968}, +D{l:132,t:10,i:778}, +D{l:132,t:10,i:46}, +D{l:5,t:10,i:811}, +D{l:6,t:10,i:1679}, +D{l:6,t:10,i:1714}, +D{l:135,t:10,i:2032}, +D{l:6,t:0,i:1446}, +D{l:7,t:10,i:1458}, +D{l:9,t:10,i:407}, +D{l:139,t:10,i:15}, +D{l:7,t:0,i:206}, +D{l:7,t:0,i:397}, +D{l:7,t:0,i:621}, +D{l:7,t:0,i:640}, +D{l:8,t:0,i:124}, +D{l:8,t:0,i:619}, +D{l:9,t:0,i:305}, +D{l:9,t:0,i:643}, +D{l:10,t:0,i:264}, +D{l:10,t:0,i:628}, +D{l:11,t:0,i:40}, +D{l:12,t:0,i:349}, +D{l:13,t:0,i:134}, +D{l:13,t:0,i:295}, +D{l:14,t:0,i:155}, +D{l:15,t:0,i:120}, +D{l:18,t:0,i:105}, +D{l:6,t:10,i:34}, +D{l:7,t:10,i:1089}, +D{l:8,t:10,i:708}, +D{l:8,t:10,i:721}, +D{l:9,t:10,i:363}, +D{l:148,t:10,i:98}, +D{l:4,t:0,i:262}, +D{l:5,t:0,i:641}, +D{l:135,t:0,i:342}, +D{l:137,t:11,i:72}, +D{l:4,t:0,i:99}, +D{l:6,t:0,i:250}, +D{l:6,t:0,i:346}, +D{l:8,t:0,i:127}, +D{l:138,t:0,i:81}, +D{l:132,t:0,i:915}, +D{l:5,t:0,i:75}, +D{l:9,t:0,i:517}, +D{l:10,t:0,i:470}, +D{l:12,t:0,i:155}, +D{l:141,t:0,i:224}, +D{l:132,t:10,i:462}, +D{l:11,t:11,i:600}, +D{l:11,t:11,i:670}, +D{l:141,t:11,i:245}, +D{l:142,t:0,i:83}, +D{l:5,t:10,i:73}, +D{l:6,t:10,i:23}, +D{l:134,t:10,i:338}, +D{l:6,t:0,i:1031}, +D{l:139,t:11,i:923}, +D{l:7,t:11,i:164}, +D{l:7,t:11,i:1571}, +D{l:9,t:11,i:107}, +D{l:140,t:11,i:225}, +D{l:134,t:0,i:1470}, +D{l:133,t:0,i:954}, +D{l:6,t:0,i:304}, +D{l:8,t:0,i:418}, +D{l:10,t:0,i:345}, +D{l:11,t:0,i:341}, +D{l:139,t:0,i:675}, +D{l:9,t:0,i:410}, +D{l:139,t:0,i:425}, +D{l:4,t:11,i:27}, +D{l:5,t:11,i:484}, +D{l:5,t:11,i:510}, +D{l:6,t:11,i:434}, +D{l:7,t:11,i:1000}, +D{l:7,t:11,i:1098}, +D{l:8,t:11,i:2}, +D{l:136,t:11,i:200}, +D{l:134,t:0,i:734}, +D{l:140,t:11,i:257}, +D{l:7,t:10,i:725}, +D{l:8,t:10,i:498}, +D{l:139,t:10,i:268}, +D{l:134,t:0,i:1822}, +D{l:135,t:0,i:1798}, +D{l:135,t:10,i:773}, +D{l:132,t:11,i:460}, +D{l:4,t:11,i:932}, +D{l:133,t:11,i:891}, +D{l:134,t:0,i:14}, +D{l:132,t:10,i:583}, +D{l:7,t:10,i:1462}, +D{l:8,t:11,i:625}, +D{l:139,t:10,i:659}, +D{l:5,t:0,i:113}, +D{l:6,t:0,i:243}, +D{l:6,t:0,i:1708}, +D{l:7,t:0,i:1865}, +D{l:11,t:0,i:161}, +D{l:16,t:0,i:37}, +D{l:17,t:0,i:99}, +D{l:133,t:10,i:220}, +D{l:134,t:11,i:76}, +D{l:5,t:11,i:461}, +D{l:135,t:11,i:1925}, +D{l:140,t:0,i:69}, +D{l:8,t:11,i:92}, +D{l:137,t:11,i:221}, +D{l:139,t:10,i:803}, +D{l:132,t:10,i:544}, +D{l:4,t:0,i:274}, +D{l:134,t:0,i:922}, +D{l:132,t:0,i:541}, +D{l:5,t:0,i:627}, +D{l:6,t:10,i:437}, +D{l:6,t:10,i:564}, +D{l:11,t:10,i:181}, +D{l:141,t:10,i:183}, +D{l:135,t:10,i:1192}, +D{l:7,t:0,i:166}, +D{l:132,t:11,i:763}, +D{l:133,t:11,i:253}, +D{l:134,t:0,i:849}, +D{l:9,t:11,i:73}, +D{l:10,t:11,i:110}, +D{l:14,t:11,i:185}, +D{l:145,t:11,i:119}, +D{l:5,t:11,i:212}, +D{l:12,t:11,i:35}, +D{l:141,t:11,i:382}, +D{l:133,t:0,i:717}, +D{l:137,t:0,i:304}, +D{l:136,t:0,i:600}, +D{l:133,t:0,i:654}, +D{l:6,t:0,i:273}, +D{l:10,t:0,i:188}, +D{l:13,t:0,i:377}, +D{l:146,t:0,i:77}, +D{l:4,t:10,i:790}, +D{l:5,t:10,i:273}, +D{l:134,t:10,i:394}, +D{l:132,t:0,i:543}, +D{l:135,t:0,i:410}, +D{l:11,t:0,i:98}, +D{l:11,t:0,i:524}, +D{l:141,t:0,i:87}, +D{l:132,t:0,i:941}, +D{l:135,t:11,i:1175}, +D{l:4,t:0,i:250}, +D{l:7,t:0,i:1612}, +D{l:11,t:0,i:186}, +D{l:12,t:0,i:133}, +D{l:6,t:10,i:127}, +D{l:7,t:10,i:1511}, +D{l:8,t:10,i:613}, +D{l:12,t:10,i:495}, +D{l:12,t:10,i:586}, +D{l:12,t:10,i:660}, +D{l:12,t:10,i:668}, +D{l:14,t:10,i:385}, +D{l:15,t:10,i:118}, +D{l:17,t:10,i:20}, +D{l:146,t:10,i:98}, +D{l:6,t:0,i:1785}, +D{l:133,t:11,i:816}, +D{l:134,t:0,i:1339}, +D{l:7,t:0,i:961}, +D{l:7,t:0,i:1085}, +D{l:7,t:0,i:1727}, +D{l:8,t:0,i:462}, +D{l:6,t:10,i:230}, +D{l:135,t:11,i:1727}, +D{l:9,t:0,i:636}, +D{l:135,t:10,i:1954}, +D{l:132,t:0,i:780}, +D{l:5,t:11,i:869}, +D{l:5,t:11,i:968}, +D{l:6,t:11,i:1626}, +D{l:8,t:11,i:734}, +D{l:136,t:11,i:784}, +D{l:4,t:11,i:542}, +D{l:6,t:11,i:1716}, +D{l:6,t:11,i:1727}, +D{l:7,t:11,i:1082}, +D{l:7,t:11,i:1545}, +D{l:8,t:11,i:56}, +D{l:8,t:11,i:118}, +D{l:8,t:11,i:412}, +D{l:8,t:11,i:564}, +D{l:9,t:11,i:888}, +D{l:9,t:11,i:908}, +D{l:10,t:11,i:50}, +D{l:10,t:11,i:423}, +D{l:11,t:11,i:685}, +D{l:11,t:11,i:697}, +D{l:11,t:11,i:933}, +D{l:12,t:11,i:299}, +D{l:13,t:11,i:126}, +D{l:13,t:11,i:136}, +D{l:13,t:11,i:170}, +D{l:141,t:11,i:190}, +D{l:134,t:11,i:226}, +D{l:4,t:11,i:232}, +D{l:9,t:11,i:202}, +D{l:10,t:11,i:474}, +D{l:140,t:11,i:433}, +D{l:137,t:11,i:500}, +D{l:5,t:0,i:529}, +D{l:136,t:10,i:68}, +D{l:132,t:10,i:654}, +D{l:4,t:10,i:156}, +D{l:7,t:10,i:998}, +D{l:7,t:10,i:1045}, +D{l:7,t:10,i:1860}, +D{l:9,t:10,i:48}, +D{l:9,t:10,i:692}, +D{l:11,t:10,i:419}, +D{l:139,t:10,i:602}, +D{l:7,t:0,i:1276}, +D{l:8,t:0,i:474}, +D{l:9,t:0,i:652}, +D{l:6,t:11,i:108}, +D{l:7,t:11,i:1003}, +D{l:7,t:11,i:1181}, +D{l:136,t:11,i:343}, +D{l:7,t:11,i:1264}, +D{l:7,t:11,i:1678}, +D{l:11,t:11,i:945}, +D{l:12,t:11,i:341}, +D{l:12,t:11,i:471}, +D{l:140,t:11,i:569}, +D{l:134,t:11,i:1712}, +D{l:5,t:0,i:948}, +D{l:12,t:0,i:468}, +D{l:19,t:0,i:96}, +D{l:148,t:0,i:24}, +D{l:4,t:11,i:133}, +D{l:7,t:11,i:711}, +D{l:7,t:11,i:1298}, +D{l:7,t:11,i:1585}, +D{l:135,t:11,i:1929}, +D{l:6,t:0,i:753}, +D{l:140,t:0,i:657}, +D{l:139,t:0,i:941}, +D{l:6,t:11,i:99}, +D{l:7,t:11,i:1808}, +D{l:145,t:11,i:57}, +D{l:6,t:11,i:574}, +D{l:7,t:11,i:428}, +D{l:7,t:11,i:1250}, +D{l:10,t:11,i:669}, +D{l:11,t:11,i:485}, +D{l:11,t:11,i:840}, +D{l:12,t:11,i:300}, +D{l:142,t:11,i:250}, +D{l:4,t:0,i:532}, +D{l:5,t:0,i:706}, +D{l:135,t:0,i:662}, +D{l:5,t:0,i:837}, +D{l:6,t:0,i:1651}, +D{l:139,t:0,i:985}, +D{l:7,t:0,i:1861}, +D{l:9,t:10,i:197}, +D{l:10,t:10,i:300}, +D{l:12,t:10,i:473}, +D{l:13,t:10,i:90}, +D{l:141,t:10,i:405}, +D{l:137,t:11,i:252}, +D{l:6,t:11,i:323}, +D{l:135,t:11,i:1564}, +D{l:4,t:0,i:330}, +D{l:4,t:0,i:863}, +D{l:7,t:0,i:933}, +D{l:7,t:0,i:2012}, +D{l:8,t:0,i:292}, +D{l:7,t:11,i:461}, +D{l:8,t:11,i:775}, +D{l:138,t:11,i:435}, +D{l:132,t:10,i:606}, +D{l:4,t:11,i:655}, +D{l:7,t:11,i:850}, +D{l:17,t:11,i:75}, +D{l:146,t:11,i:137}, +D{l:135,t:0,i:767}, +D{l:7,t:10,i:1978}, +D{l:136,t:10,i:676}, +D{l:132,t:0,i:641}, +D{l:135,t:11,i:1559}, +D{l:134,t:0,i:1233}, +D{l:137,t:0,i:242}, +D{l:17,t:0,i:114}, +D{l:4,t:10,i:361}, +D{l:133,t:10,i:315}, +D{l:137,t:0,i:883}, +D{l:132,t:10,i:461}, +D{l:138,t:0,i:274}, +D{l:134,t:0,i:2008}, +D{l:134,t:0,i:1794}, +D{l:4,t:0,i:703}, +D{l:135,t:0,i:207}, +D{l:12,t:0,i:285}, +D{l:132,t:10,i:472}, +D{l:132,t:0,i:571}, +D{l:5,t:0,i:873}, +D{l:5,t:0,i:960}, +D{l:8,t:0,i:823}, +D{l:9,t:0,i:881}, +D{l:136,t:11,i:577}, +D{l:7,t:0,i:617}, +D{l:10,t:0,i:498}, +D{l:11,t:0,i:501}, +D{l:12,t:0,i:16}, +D{l:140,t:0,i:150}, +D{l:138,t:10,i:747}, +D{l:132,t:0,i:431}, +D{l:133,t:10,i:155}, +D{l:11,t:0,i:283}, +D{l:11,t:0,i:567}, +D{l:7,t:10,i:163}, +D{l:8,t:10,i:319}, +D{l:9,t:10,i:402}, +D{l:10,t:10,i:24}, +D{l:10,t:10,i:681}, +D{l:11,t:10,i:200}, +D{l:12,t:10,i:253}, +D{l:12,t:10,i:410}, +D{l:142,t:10,i:219}, +D{l:4,t:11,i:413}, +D{l:5,t:11,i:677}, +D{l:8,t:11,i:432}, +D{l:140,t:11,i:280}, +D{l:9,t:0,i:401}, +D{l:5,t:10,i:475}, +D{l:7,t:10,i:1780}, +D{l:11,t:10,i:297}, +D{l:11,t:10,i:558}, +D{l:14,t:10,i:322}, +D{l:147,t:10,i:76}, +D{l:6,t:0,i:781}, +D{l:9,t:0,i:134}, +D{l:10,t:0,i:2}, +D{l:10,t:0,i:27}, +D{l:10,t:0,i:333}, +D{l:11,t:0,i:722}, +D{l:143,t:0,i:1}, +D{l:5,t:0,i:33}, +D{l:6,t:0,i:470}, +D{l:139,t:0,i:424}, +D{l:135,t:0,i:2006}, +D{l:12,t:0,i:783}, +D{l:135,t:10,i:1956}, +D{l:136,t:0,i:274}, +D{l:135,t:0,i:1882}, +D{l:132,t:0,i:794}, +D{l:135,t:0,i:1848}, +D{l:5,t:10,i:944}, +D{l:134,t:10,i:1769}, +D{l:6,t:0,i:47}, +D{l:7,t:0,i:90}, +D{l:7,t:0,i:664}, +D{l:7,t:0,i:830}, +D{l:7,t:0,i:1380}, +D{l:7,t:0,i:2025}, +D{l:8,t:0,i:448}, +D{l:136,t:0,i:828}, +D{l:132,t:10,i:144}, +D{l:134,t:0,i:1199}, +D{l:4,t:11,i:395}, +D{l:139,t:11,i:762}, +D{l:135,t:11,i:1504}, +D{l:9,t:0,i:417}, +D{l:137,t:0,i:493}, +D{l:9,t:11,i:174}, +D{l:10,t:11,i:164}, +D{l:11,t:11,i:440}, +D{l:11,t:11,i:841}, +D{l:143,t:11,i:98}, +D{l:134,t:11,i:426}, +D{l:139,t:11,i:1002}, +D{l:134,t:0,i:295}, +D{l:134,t:0,i:816}, +D{l:6,t:10,i:247}, +D{l:137,t:10,i:555}, +D{l:133,t:0,i:1019}, +D{l:4,t:0,i:620}, +D{l:5,t:11,i:476}, +D{l:10,t:10,i:280}, +D{l:138,t:10,i:797}, +D{l:139,t:0,i:464}, +D{l:5,t:11,i:76}, +D{l:6,t:11,i:458}, +D{l:6,t:11,i:497}, +D{l:7,t:11,i:764}, +D{l:7,t:11,i:868}, +D{l:9,t:11,i:658}, +D{l:10,t:11,i:594}, +D{l:11,t:11,i:173}, +D{l:11,t:11,i:566}, +D{l:12,t:11,i:20}, +D{l:12,t:11,i:338}, +D{l:141,t:11,i:200}, +D{l:134,t:0,i:208}, +D{l:4,t:11,i:526}, +D{l:7,t:11,i:1029}, +D{l:135,t:11,i:1054}, +D{l:132,t:11,i:636}, +D{l:6,t:11,i:233}, +D{l:7,t:11,i:660}, +D{l:7,t:11,i:1124}, +D{l:17,t:11,i:31}, +D{l:19,t:11,i:22}, +D{l:151,t:11,i:14}, +D{l:10,t:0,i:442}, +D{l:133,t:10,i:428}, +D{l:10,t:0,i:930}, +D{l:140,t:0,i:778}, +D{l:6,t:0,i:68}, +D{l:7,t:0,i:448}, +D{l:7,t:0,i:1629}, +D{l:7,t:0,i:1769}, +D{l:7,t:0,i:1813}, +D{l:8,t:0,i:442}, +D{l:8,t:0,i:516}, +D{l:9,t:0,i:710}, +D{l:10,t:0,i:282}, +D{l:10,t:0,i:722}, +D{l:7,t:10,i:1717}, +D{l:138,t:10,i:546}, +D{l:134,t:0,i:1128}, +D{l:11,t:0,i:844}, +D{l:12,t:0,i:104}, +D{l:140,t:0,i:625}, +D{l:4,t:11,i:432}, +D{l:135,t:11,i:824}, +D{l:138,t:10,i:189}, +D{l:133,t:0,i:787}, +D{l:133,t:10,i:99}, +D{l:4,t:11,i:279}, +D{l:7,t:11,i:301}, +D{l:137,t:11,i:362}, +D{l:8,t:0,i:491}, +D{l:4,t:10,i:397}, +D{l:136,t:10,i:555}, +D{l:4,t:11,i:178}, +D{l:133,t:11,i:399}, +D{l:134,t:0,i:711}, +D{l:144,t:0,i:9}, +D{l:4,t:0,i:403}, +D{l:5,t:0,i:441}, +D{l:7,t:0,i:450}, +D{l:10,t:0,i:840}, +D{l:11,t:0,i:101}, +D{l:12,t:0,i:193}, +D{l:141,t:0,i:430}, +D{l:135,t:11,i:1246}, +D{l:12,t:10,i:398}, +D{l:20,t:10,i:39}, +D{l:21,t:10,i:11}, +D{l:150,t:10,i:41}, +D{l:4,t:10,i:485}, +D{l:7,t:10,i:353}, +D{l:135,t:10,i:1523}, +D{l:6,t:10,i:366}, +D{l:7,t:10,i:1384}, +D{l:7,t:10,i:1601}, +D{l:135,t:11,i:1912}, +D{l:7,t:0,i:396}, +D{l:10,t:0,i:160}, +D{l:135,t:11,i:396}, +D{l:137,t:10,i:282}, +D{l:134,t:11,i:1692}, +D{l:4,t:10,i:157}, +D{l:5,t:10,i:471}, +D{l:6,t:11,i:202}, +D{l:10,t:11,i:448}, +D{l:11,t:11,i:208}, +D{l:12,t:11,i:360}, +D{l:17,t:11,i:117}, +D{l:17,t:11,i:118}, +D{l:18,t:11,i:27}, +D{l:148,t:11,i:67}, +D{l:133,t:0,i:679}, +D{l:137,t:0,i:326}, +D{l:136,t:10,i:116}, +D{l:7,t:11,i:872}, +D{l:10,t:11,i:516}, +D{l:139,t:11,i:167}, +D{l:132,t:11,i:224}, +D{l:5,t:11,i:546}, +D{l:7,t:11,i:35}, +D{l:8,t:11,i:11}, +D{l:8,t:11,i:12}, +D{l:9,t:11,i:315}, +D{l:9,t:11,i:533}, +D{l:10,t:11,i:802}, +D{l:11,t:11,i:166}, +D{l:12,t:11,i:525}, +D{l:142,t:11,i:243}, +D{l:7,t:0,i:1128}, +D{l:135,t:11,i:1920}, +D{l:5,t:11,i:241}, +D{l:8,t:11,i:242}, +D{l:9,t:11,i:451}, +D{l:10,t:11,i:667}, +D{l:11,t:11,i:598}, +D{l:140,t:11,i:429}, +D{l:6,t:0,i:737}, +D{l:5,t:10,i:160}, +D{l:7,t:10,i:363}, +D{l:7,t:10,i:589}, +D{l:10,t:10,i:170}, +D{l:141,t:10,i:55}, +D{l:135,t:0,i:1796}, +D{l:142,t:11,i:254}, +D{l:4,t:0,i:574}, +D{l:7,t:0,i:350}, +D{l:7,t:0,i:1024}, +D{l:8,t:0,i:338}, +D{l:9,t:0,i:677}, +D{l:138,t:0,i:808}, +D{l:134,t:0,i:1096}, +D{l:137,t:11,i:516}, +D{l:7,t:0,i:405}, +D{l:10,t:0,i:491}, +D{l:4,t:10,i:108}, +D{l:4,t:11,i:366}, +D{l:139,t:10,i:498}, +D{l:11,t:11,i:337}, +D{l:142,t:11,i:303}, +D{l:134,t:11,i:1736}, +D{l:7,t:0,i:1081}, +D{l:140,t:11,i:364}, +D{l:7,t:10,i:1005}, +D{l:140,t:10,i:609}, +D{l:7,t:0,i:1676}, +D{l:4,t:10,i:895}, +D{l:133,t:10,i:772}, +D{l:135,t:0,i:2037}, +D{l:6,t:0,i:1207}, +D{l:11,t:11,i:916}, +D{l:142,t:11,i:419}, +D{l:14,t:11,i:140}, +D{l:148,t:11,i:41}, +D{l:6,t:11,i:331}, +D{l:136,t:11,i:623}, +D{l:9,t:0,i:944}, +D{l:9,t:0,i:969}, +D{l:9,t:0,i:1022}, +D{l:12,t:0,i:913}, +D{l:12,t:0,i:936}, +D{l:15,t:0,i:177}, +D{l:15,t:0,i:193}, +D{l:4,t:10,i:926}, +D{l:133,t:10,i:983}, +D{l:5,t:0,i:354}, +D{l:135,t:11,i:506}, +D{l:8,t:0,i:598}, +D{l:9,t:0,i:664}, +D{l:138,t:0,i:441}, +D{l:4,t:11,i:640}, +D{l:133,t:11,i:513}, +D{l:137,t:0,i:297}, +D{l:132,t:10,i:538}, +D{l:6,t:10,i:294}, +D{l:7,t:10,i:1267}, +D{l:136,t:10,i:624}, +D{l:7,t:0,i:1772}, +D{l:7,t:11,i:1888}, +D{l:8,t:11,i:289}, +D{l:11,t:11,i:45}, +D{l:12,t:11,i:278}, +D{l:140,t:11,i:537}, +D{l:135,t:10,i:1325}, +D{l:138,t:0,i:751}, +D{l:141,t:0,i:37}, +D{l:134,t:0,i:1828}, +D{l:132,t:10,i:757}, +D{l:132,t:11,i:394}, +D{l:6,t:0,i:257}, +D{l:135,t:0,i:1522}, +D{l:4,t:0,i:582}, +D{l:9,t:0,i:191}, +D{l:135,t:11,i:1931}, +D{l:7,t:11,i:574}, +D{l:7,t:11,i:1719}, +D{l:137,t:11,i:145}, +D{l:132,t:11,i:658}, +D{l:10,t:0,i:790}, +D{l:132,t:11,i:369}, +D{l:9,t:11,i:781}, +D{l:10,t:11,i:144}, +D{l:11,t:11,i:385}, +D{l:13,t:11,i:161}, +D{l:13,t:11,i:228}, +D{l:13,t:11,i:268}, +D{l:148,t:11,i:107}, +D{l:8,t:0,i:469}, +D{l:10,t:0,i:47}, +D{l:136,t:11,i:374}, +D{l:6,t:0,i:306}, +D{l:7,t:0,i:1140}, +D{l:7,t:0,i:1340}, +D{l:8,t:0,i:133}, +D{l:138,t:0,i:449}, +D{l:139,t:0,i:1011}, +D{l:7,t:10,i:1875}, +D{l:139,t:10,i:124}, +D{l:4,t:11,i:344}, +D{l:6,t:11,i:498}, +D{l:139,t:11,i:323}, +D{l:137,t:0,i:299}, +D{l:132,t:0,i:837}, +D{l:133,t:11,i:906}, +D{l:5,t:0,i:329}, +D{l:8,t:0,i:260}, +D{l:138,t:0,i:10}, +D{l:134,t:0,i:1320}, +D{l:4,t:0,i:657}, +D{l:146,t:0,i:158}, +D{l:135,t:0,i:1191}, +D{l:152,t:0,i:7}, +D{l:6,t:0,i:1939}, +D{l:8,t:0,i:974}, +D{l:138,t:0,i:996}, +D{l:135,t:0,i:1665}, +D{l:11,t:11,i:126}, +D{l:139,t:11,i:287}, +D{l:143,t:0,i:8}, +D{l:14,t:11,i:149}, +D{l:14,t:11,i:399}, +D{l:143,t:11,i:57}, +D{l:5,t:0,i:66}, +D{l:7,t:0,i:1896}, +D{l:136,t:0,i:288}, +D{l:7,t:0,i:175}, +D{l:10,t:0,i:494}, +D{l:5,t:10,i:150}, +D{l:8,t:10,i:603}, +D{l:9,t:10,i:593}, +D{l:9,t:10,i:634}, +D{l:10,t:10,i:173}, +D{l:11,t:10,i:462}, +D{l:11,t:10,i:515}, +D{l:13,t:10,i:216}, +D{l:13,t:10,i:288}, +D{l:142,t:10,i:400}, +D{l:134,t:0,i:1643}, +D{l:136,t:11,i:21}, +D{l:4,t:0,i:21}, +D{l:5,t:0,i:91}, +D{l:5,t:0,i:648}, +D{l:5,t:0,i:750}, +D{l:5,t:0,i:781}, +D{l:6,t:0,i:54}, +D{l:6,t:0,i:112}, +D{l:6,t:0,i:402}, +D{l:6,t:0,i:1732}, +D{l:7,t:0,i:315}, +D{l:7,t:0,i:749}, +D{l:7,t:0,i:1427}, +D{l:7,t:0,i:1900}, +D{l:9,t:0,i:78}, +D{l:9,t:0,i:508}, +D{l:10,t:0,i:611}, +D{l:10,t:0,i:811}, +D{l:11,t:0,i:510}, +D{l:11,t:0,i:728}, +D{l:13,t:0,i:36}, +D{l:14,t:0,i:39}, +D{l:16,t:0,i:83}, +D{l:17,t:0,i:124}, +D{l:148,t:0,i:30}, +D{l:4,t:0,i:668}, +D{l:136,t:0,i:570}, +D{l:10,t:0,i:322}, +D{l:10,t:0,i:719}, +D{l:139,t:0,i:407}, +D{l:135,t:11,i:1381}, +D{l:136,t:11,i:193}, +D{l:12,t:10,i:108}, +D{l:141,t:10,i:291}, +D{l:132,t:11,i:616}, +D{l:136,t:11,i:692}, +D{l:8,t:0,i:125}, +D{l:8,t:0,i:369}, +D{l:8,t:0,i:524}, +D{l:10,t:0,i:486}, +D{l:11,t:0,i:13}, +D{l:11,t:0,i:381}, +D{l:11,t:0,i:736}, +D{l:11,t:0,i:766}, +D{l:11,t:0,i:845}, +D{l:13,t:0,i:114}, +D{l:13,t:0,i:292}, +D{l:142,t:0,i:47}, +D{l:134,t:0,i:1247}, +D{l:6,t:0,i:1684}, +D{l:6,t:0,i:1731}, +D{l:7,t:0,i:356}, +D{l:8,t:0,i:54}, +D{l:8,t:0,i:221}, +D{l:9,t:0,i:225}, +D{l:9,t:0,i:356}, +D{l:10,t:0,i:77}, +D{l:10,t:0,i:446}, +D{l:10,t:0,i:731}, +D{l:12,t:0,i:404}, +D{l:141,t:0,i:491}, +D{l:135,t:10,i:1777}, +D{l:4,t:11,i:305}, +D{l:4,t:10,i:493}, +D{l:144,t:10,i:55}, +D{l:4,t:0,i:951}, +D{l:6,t:0,i:1809}, +D{l:6,t:0,i:1849}, +D{l:8,t:0,i:846}, +D{l:8,t:0,i:866}, +D{l:8,t:0,i:899}, +D{l:10,t:0,i:896}, +D{l:12,t:0,i:694}, +D{l:142,t:0,i:468}, +D{l:5,t:11,i:214}, +D{l:7,t:11,i:603}, +D{l:8,t:11,i:611}, +D{l:9,t:11,i:686}, +D{l:10,t:11,i:88}, +D{l:11,t:11,i:459}, +D{l:11,t:11,i:496}, +D{l:12,t:11,i:463}, +D{l:12,t:11,i:590}, +D{l:13,t:11,i:0}, +D{l:142,t:11,i:214}, +D{l:132,t:0,i:411}, +D{l:4,t:0,i:80}, +D{l:133,t:0,i:44}, +D{l:140,t:11,i:74}, +D{l:143,t:0,i:31}, +D{l:7,t:0,i:669}, +D{l:6,t:10,i:568}, +D{l:7,t:10,i:1804}, +D{l:8,t:10,i:362}, +D{l:8,t:10,i:410}, +D{l:8,t:10,i:830}, +D{l:9,t:10,i:514}, +D{l:11,t:10,i:649}, +D{l:142,t:10,i:157}, +D{l:7,t:0,i:673}, +D{l:134,t:11,i:1703}, +D{l:132,t:10,i:625}, +D{l:134,t:0,i:1303}, +D{l:5,t:0,i:299}, +D{l:135,t:0,i:1083}, +D{l:138,t:0,i:704}, +D{l:6,t:0,i:275}, +D{l:7,t:0,i:408}, +D{l:6,t:10,i:158}, +D{l:7,t:10,i:129}, +D{l:7,t:10,i:181}, +D{l:8,t:10,i:276}, +D{l:8,t:10,i:377}, +D{l:10,t:10,i:523}, +D{l:11,t:10,i:816}, +D{l:12,t:10,i:455}, +D{l:13,t:10,i:303}, +D{l:142,t:10,i:135}, +D{l:4,t:0,i:219}, +D{l:7,t:0,i:367}, +D{l:7,t:0,i:1713}, +D{l:7,t:0,i:1761}, +D{l:9,t:0,i:86}, +D{l:9,t:0,i:537}, +D{l:10,t:0,i:165}, +D{l:12,t:0,i:219}, +D{l:140,t:0,i:561}, +D{l:8,t:0,i:216}, +D{l:4,t:10,i:1}, +D{l:4,t:11,i:737}, +D{l:6,t:11,i:317}, +D{l:7,t:10,i:1143}, +D{l:7,t:10,i:1463}, +D{l:9,t:10,i:207}, +D{l:9,t:10,i:390}, +D{l:9,t:10,i:467}, +D{l:10,t:11,i:98}, +D{l:11,t:11,i:294}, +D{l:11,t:10,i:836}, +D{l:12,t:11,i:60}, +D{l:12,t:11,i:437}, +D{l:13,t:11,i:64}, +D{l:13,t:11,i:380}, +D{l:142,t:11,i:430}, +D{l:6,t:11,i:1758}, +D{l:8,t:11,i:520}, +D{l:9,t:11,i:345}, +D{l:9,t:11,i:403}, +D{l:142,t:11,i:350}, +D{l:5,t:11,i:47}, +D{l:10,t:11,i:242}, +D{l:138,t:11,i:579}, +D{l:5,t:11,i:139}, +D{l:7,t:11,i:1168}, +D{l:138,t:11,i:539}, +D{l:135,t:0,i:1319}, +D{l:4,t:10,i:295}, +D{l:4,t:10,i:723}, +D{l:5,t:10,i:895}, +D{l:7,t:10,i:1031}, +D{l:8,t:10,i:199}, +D{l:8,t:10,i:340}, +D{l:9,t:10,i:153}, +D{l:9,t:10,i:215}, +D{l:10,t:10,i:21}, +D{l:10,t:10,i:59}, +D{l:10,t:10,i:80}, +D{l:10,t:10,i:224}, +D{l:10,t:10,i:838}, +D{l:11,t:10,i:229}, +D{l:11,t:10,i:652}, +D{l:12,t:10,i:192}, +D{l:13,t:10,i:146}, +D{l:142,t:10,i:91}, +D{l:140,t:0,i:428}, +D{l:137,t:10,i:51}, +D{l:133,t:0,i:514}, +D{l:5,t:10,i:309}, +D{l:140,t:10,i:211}, +D{l:6,t:0,i:1010}, +D{l:5,t:10,i:125}, +D{l:8,t:10,i:77}, +D{l:138,t:10,i:15}, +D{l:4,t:0,i:55}, +D{l:5,t:0,i:301}, +D{l:6,t:0,i:571}, +D{l:142,t:0,i:49}, +D{l:146,t:0,i:102}, +D{l:136,t:11,i:370}, +D{l:4,t:11,i:107}, +D{l:7,t:11,i:613}, +D{l:8,t:11,i:358}, +D{l:8,t:11,i:439}, +D{l:8,t:11,i:504}, +D{l:9,t:11,i:501}, +D{l:10,t:11,i:383}, +D{l:139,t:11,i:477}, +D{l:132,t:11,i:229}, +D{l:133,t:0,i:364}, +D{l:133,t:10,i:439}, +D{l:4,t:11,i:903}, +D{l:135,t:11,i:1816}, +D{l:11,t:0,i:379}, +D{l:140,t:10,i:76}, +D{l:4,t:0,i:76}, +D{l:4,t:0,i:971}, +D{l:7,t:0,i:1550}, +D{l:9,t:0,i:306}, +D{l:9,t:0,i:430}, +D{l:9,t:0,i:663}, +D{l:10,t:0,i:683}, +D{l:10,t:0,i:921}, +D{l:11,t:0,i:427}, +D{l:11,t:0,i:753}, +D{l:12,t:0,i:334}, +D{l:12,t:0,i:442}, +D{l:14,t:0,i:258}, +D{l:14,t:0,i:366}, +D{l:143,t:0,i:131}, +D{l:137,t:0,i:52}, +D{l:4,t:11,i:47}, +D{l:6,t:11,i:373}, +D{l:7,t:11,i:452}, +D{l:7,t:11,i:543}, +D{l:7,t:11,i:1714}, +D{l:7,t:11,i:1856}, +D{l:9,t:11,i:6}, +D{l:11,t:11,i:257}, +D{l:139,t:11,i:391}, +D{l:4,t:10,i:8}, +D{l:7,t:10,i:1152}, +D{l:7,t:10,i:1153}, +D{l:7,t:10,i:1715}, +D{l:9,t:10,i:374}, +D{l:10,t:10,i:478}, +D{l:139,t:10,i:648}, +D{l:4,t:11,i:785}, +D{l:133,t:11,i:368}, +D{l:135,t:10,i:1099}, +D{l:135,t:11,i:860}, +D{l:5,t:11,i:980}, +D{l:134,t:11,i:1754}, +D{l:134,t:0,i:1258}, +D{l:6,t:0,i:1058}, +D{l:6,t:0,i:1359}, +D{l:7,t:11,i:536}, +D{l:7,t:11,i:1331}, +D{l:136,t:11,i:143}, +D{l:4,t:0,i:656}, +D{l:135,t:0,i:779}, +D{l:136,t:10,i:87}, +D{l:5,t:11,i:19}, +D{l:6,t:11,i:533}, +D{l:146,t:11,i:126}, +D{l:7,t:0,i:144}, +D{l:138,t:10,i:438}, +D{l:5,t:11,i:395}, +D{l:5,t:11,i:951}, +D{l:134,t:11,i:1776}, +D{l:135,t:0,i:1373}, +D{l:7,t:0,i:554}, +D{l:7,t:0,i:605}, +D{l:141,t:0,i:10}, +D{l:4,t:10,i:69}, +D{l:5,t:10,i:122}, +D{l:9,t:10,i:656}, +D{l:138,t:10,i:464}, +D{l:5,t:10,i:849}, +D{l:134,t:10,i:1633}, +D{l:5,t:0,i:838}, +D{l:5,t:0,i:841}, +D{l:134,t:0,i:1649}, +D{l:133,t:0,i:1012}, +D{l:139,t:10,i:499}, +D{l:7,t:10,i:476}, +D{l:7,t:10,i:1592}, +D{l:138,t:10,i:87}, +D{l:6,t:0,i:251}, +D{l:7,t:0,i:365}, +D{l:7,t:0,i:1357}, +D{l:7,t:0,i:1497}, +D{l:8,t:0,i:154}, +D{l:141,t:0,i:281}, +D{l:132,t:11,i:441}, +D{l:132,t:11,i:695}, +D{l:7,t:11,i:497}, +D{l:9,t:11,i:387}, +D{l:147,t:11,i:81}, +D{l:133,t:0,i:340}, +D{l:14,t:10,i:283}, +D{l:142,t:11,i:283}, +D{l:134,t:0,i:810}, +D{l:135,t:11,i:1894}, +D{l:139,t:0,i:495}, +D{l:5,t:11,i:284}, +D{l:6,t:11,i:49}, +D{l:6,t:11,i:350}, +D{l:7,t:11,i:1}, +D{l:7,t:11,i:377}, +D{l:7,t:11,i:1693}, +D{l:8,t:11,i:18}, +D{l:8,t:11,i:678}, +D{l:9,t:11,i:161}, +D{l:9,t:11,i:585}, +D{l:9,t:11,i:671}, +D{l:9,t:11,i:839}, +D{l:11,t:11,i:912}, +D{l:141,t:11,i:427}, +D{l:5,t:10,i:859}, +D{l:7,t:10,i:1160}, +D{l:8,t:10,i:107}, +D{l:9,t:10,i:291}, +D{l:9,t:10,i:439}, +D{l:10,t:10,i:663}, +D{l:11,t:10,i:609}, +D{l:140,t:10,i:197}, +D{l:8,t:0,i:261}, +D{l:9,t:0,i:144}, +D{l:9,t:0,i:466}, +D{l:10,t:0,i:370}, +D{l:12,t:0,i:470}, +D{l:13,t:0,i:144}, +D{l:142,t:0,i:348}, +D{l:137,t:0,i:897}, +D{l:6,t:0,i:248}, +D{l:9,t:0,i:546}, +D{l:10,t:0,i:535}, +D{l:11,t:0,i:681}, +D{l:141,t:0,i:135}, +D{l:4,t:0,i:358}, +D{l:135,t:0,i:1496}, +D{l:134,t:0,i:567}, +D{l:136,t:0,i:445}, +D{l:4,t:10,i:117}, +D{l:6,t:10,i:372}, +D{l:7,t:10,i:1905}, +D{l:142,t:10,i:323}, +D{l:4,t:10,i:722}, +D{l:139,t:10,i:471}, +D{l:6,t:0,i:697}, +D{l:134,t:0,i:996}, +D{l:7,t:11,i:2007}, +D{l:9,t:11,i:101}, +D{l:9,t:11,i:450}, +D{l:10,t:11,i:66}, +D{l:10,t:11,i:842}, +D{l:11,t:11,i:536}, +D{l:140,t:11,i:587}, +D{l:132,t:0,i:577}, +D{l:134,t:0,i:1336}, +D{l:9,t:10,i:5}, +D{l:12,t:10,i:216}, +D{l:12,t:10,i:294}, +D{l:12,t:10,i:298}, +D{l:12,t:10,i:400}, +D{l:12,t:10,i:518}, +D{l:13,t:10,i:229}, +D{l:143,t:10,i:139}, +D{l:6,t:0,i:174}, +D{l:138,t:0,i:917}, +D{l:134,t:10,i:1774}, +D{l:5,t:10,i:12}, +D{l:7,t:10,i:375}, +D{l:9,t:10,i:88}, +D{l:9,t:10,i:438}, +D{l:11,t:11,i:62}, +D{l:139,t:10,i:270}, +D{l:134,t:11,i:1766}, +D{l:6,t:11,i:0}, +D{l:7,t:11,i:84}, +D{l:7,t:10,i:816}, +D{l:7,t:10,i:1241}, +D{l:9,t:10,i:283}, +D{l:9,t:10,i:520}, +D{l:10,t:10,i:213}, +D{l:10,t:10,i:307}, +D{l:10,t:10,i:463}, +D{l:10,t:10,i:671}, +D{l:10,t:10,i:746}, +D{l:11,t:10,i:401}, +D{l:11,t:10,i:794}, +D{l:11,t:11,i:895}, +D{l:12,t:10,i:517}, +D{l:17,t:11,i:11}, +D{l:18,t:10,i:107}, +D{l:147,t:10,i:115}, +D{l:5,t:0,i:878}, +D{l:133,t:0,i:972}, +D{l:6,t:11,i:1665}, +D{l:7,t:11,i:256}, +D{l:7,t:11,i:1388}, +D{l:138,t:11,i:499}, +D{l:4,t:10,i:258}, +D{l:136,t:10,i:639}, +D{l:4,t:11,i:22}, +D{l:5,t:11,i:10}, +D{l:6,t:10,i:22}, +D{l:7,t:11,i:848}, +D{l:7,t:10,i:903}, +D{l:7,t:10,i:1963}, +D{l:8,t:11,i:97}, +D{l:138,t:10,i:577}, +D{l:5,t:10,i:681}, +D{l:136,t:10,i:782}, +D{l:133,t:11,i:481}, +D{l:132,t:0,i:351}, +D{l:4,t:10,i:664}, +D{l:5,t:10,i:804}, +D{l:139,t:10,i:1013}, +D{l:6,t:11,i:134}, +D{l:7,t:11,i:437}, +D{l:7,t:11,i:959}, +D{l:9,t:11,i:37}, +D{l:14,t:11,i:285}, +D{l:14,t:11,i:371}, +D{l:144,t:11,i:60}, +D{l:7,t:11,i:486}, +D{l:8,t:11,i:155}, +D{l:11,t:11,i:93}, +D{l:140,t:11,i:164}, +D{l:132,t:0,i:286}, +D{l:7,t:0,i:438}, +D{l:7,t:0,i:627}, +D{l:7,t:0,i:1516}, +D{l:8,t:0,i:40}, +D{l:9,t:0,i:56}, +D{l:9,t:0,i:294}, +D{l:10,t:0,i:30}, +D{l:11,t:0,i:969}, +D{l:11,t:0,i:995}, +D{l:146,t:0,i:148}, +D{l:5,t:11,i:591}, +D{l:135,t:11,i:337}, +D{l:134,t:0,i:1950}, +D{l:133,t:10,i:32}, +D{l:138,t:11,i:500}, +D{l:5,t:11,i:380}, +D{l:5,t:11,i:650}, +D{l:136,t:11,i:310}, +D{l:4,t:11,i:364}, +D{l:7,t:11,i:1156}, +D{l:7,t:11,i:1187}, +D{l:137,t:11,i:409}, +D{l:4,t:0,i:738}, +D{l:134,t:11,i:482}, +D{l:4,t:11,i:781}, +D{l:6,t:11,i:487}, +D{l:7,t:11,i:926}, +D{l:8,t:11,i:263}, +D{l:139,t:11,i:500}, +D{l:135,t:11,i:418}, +D{l:6,t:0,i:2047}, +D{l:10,t:0,i:969}, +D{l:4,t:10,i:289}, +D{l:7,t:10,i:629}, +D{l:7,t:10,i:1698}, +D{l:7,t:10,i:1711}, +D{l:140,t:10,i:215}, +D{l:6,t:10,i:450}, +D{l:136,t:10,i:109}, +D{l:134,t:0,i:818}, +D{l:136,t:10,i:705}, +D{l:133,t:0,i:866}, +D{l:4,t:11,i:94}, +D{l:135,t:11,i:1265}, +D{l:132,t:11,i:417}, +D{l:134,t:0,i:1467}, +D{l:135,t:10,i:1238}, +D{l:4,t:0,i:972}, +D{l:6,t:0,i:1851}, +D{l:134,t:0,i:1857}, +D{l:134,t:0,i:355}, +D{l:133,t:0,i:116}, +D{l:132,t:0,i:457}, +D{l:135,t:11,i:1411}, +D{l:4,t:11,i:408}, +D{l:4,t:11,i:741}, +D{l:135,t:11,i:500}, +D{l:134,t:10,i:26}, +D{l:142,t:11,i:137}, +D{l:5,t:0,i:527}, +D{l:6,t:0,i:189}, +D{l:7,t:0,i:859}, +D{l:136,t:0,i:267}, +D{l:11,t:0,i:104}, +D{l:11,t:0,i:554}, +D{l:15,t:0,i:60}, +D{l:143,t:0,i:125}, +D{l:134,t:0,i:1613}, +D{l:4,t:10,i:414}, +D{l:5,t:10,i:467}, +D{l:9,t:10,i:654}, +D{l:10,t:10,i:451}, +D{l:12,t:10,i:59}, +D{l:141,t:10,i:375}, +D{l:135,t:10,i:17}, +D{l:134,t:0,i:116}, +D{l:135,t:11,i:541}, +D{l:135,t:10,i:955}, +D{l:6,t:11,i:73}, +D{l:135,t:11,i:177}, +D{l:133,t:11,i:576}, +D{l:134,t:0,i:886}, +D{l:133,t:0,i:487}, +D{l:4,t:0,i:86}, +D{l:5,t:0,i:667}, +D{l:5,t:0,i:753}, +D{l:6,t:0,i:316}, +D{l:6,t:0,i:455}, +D{l:135,t:0,i:946}, +D{l:142,t:11,i:231}, +D{l:150,t:0,i:45}, +D{l:134,t:0,i:863}, +D{l:134,t:0,i:1953}, +D{l:6,t:10,i:280}, +D{l:10,t:10,i:502}, +D{l:11,t:10,i:344}, +D{l:140,t:10,i:38}, +D{l:4,t:0,i:79}, +D{l:7,t:0,i:1773}, +D{l:10,t:0,i:450}, +D{l:11,t:0,i:589}, +D{l:13,t:0,i:332}, +D{l:13,t:0,i:493}, +D{l:14,t:0,i:183}, +D{l:14,t:0,i:334}, +D{l:14,t:0,i:362}, +D{l:14,t:0,i:368}, +D{l:14,t:0,i:376}, +D{l:14,t:0,i:379}, +D{l:19,t:0,i:90}, +D{l:19,t:0,i:103}, +D{l:19,t:0,i:127}, +D{l:148,t:0,i:90}, +D{l:5,t:10,i:45}, +D{l:7,t:10,i:1161}, +D{l:11,t:10,i:448}, +D{l:11,t:10,i:880}, +D{l:13,t:10,i:139}, +D{l:13,t:10,i:407}, +D{l:15,t:10,i:16}, +D{l:17,t:10,i:95}, +D{l:18,t:10,i:66}, +D{l:18,t:10,i:88}, +D{l:18,t:10,i:123}, +D{l:149,t:10,i:7}, +D{l:136,t:10,i:777}, +D{l:4,t:10,i:410}, +D{l:135,t:10,i:521}, +D{l:135,t:10,i:1778}, +D{l:135,t:11,i:538}, +D{l:142,t:0,i:381}, +D{l:133,t:11,i:413}, +D{l:134,t:0,i:1142}, +D{l:6,t:0,i:1189}, +D{l:136,t:11,i:495}, +D{l:5,t:0,i:663}, +D{l:6,t:0,i:1962}, +D{l:134,t:0,i:2003}, +D{l:7,t:11,i:54}, +D{l:8,t:11,i:312}, +D{l:10,t:11,i:191}, +D{l:10,t:11,i:614}, +D{l:140,t:11,i:567}, +D{l:132,t:10,i:436}, +D{l:133,t:0,i:846}, +D{l:10,t:0,i:528}, +D{l:11,t:0,i:504}, +D{l:7,t:10,i:1587}, +D{l:135,t:10,i:1707}, +D{l:5,t:0,i:378}, +D{l:8,t:0,i:465}, +D{l:9,t:0,i:286}, +D{l:10,t:0,i:185}, +D{l:10,t:0,i:562}, +D{l:10,t:0,i:635}, +D{l:11,t:0,i:31}, +D{l:11,t:0,i:393}, +D{l:13,t:0,i:312}, +D{l:18,t:0,i:65}, +D{l:18,t:0,i:96}, +D{l:147,t:0,i:89}, +D{l:7,t:0,i:899}, +D{l:14,t:0,i:325}, +D{l:6,t:11,i:468}, +D{l:7,t:11,i:567}, +D{l:7,t:11,i:1478}, +D{l:8,t:11,i:530}, +D{l:142,t:11,i:290}, +D{l:7,t:0,i:1880}, +D{l:9,t:0,i:680}, +D{l:139,t:0,i:798}, +D{l:134,t:0,i:1770}, +D{l:132,t:0,i:648}, +D{l:150,t:11,i:35}, +D{l:5,t:0,i:945}, +D{l:6,t:0,i:1656}, +D{l:6,t:0,i:1787}, +D{l:7,t:0,i:167}, +D{l:8,t:0,i:824}, +D{l:9,t:0,i:391}, +D{l:10,t:0,i:375}, +D{l:139,t:0,i:185}, +D{l:6,t:11,i:484}, +D{l:135,t:11,i:822}, +D{l:134,t:0,i:2046}, +D{l:7,t:0,i:1645}, +D{l:8,t:0,i:352}, +D{l:137,t:0,i:249}, +D{l:132,t:0,i:152}, +D{l:6,t:0,i:611}, +D{l:135,t:0,i:1733}, +D{l:6,t:11,i:1724}, +D{l:135,t:11,i:2022}, +D{l:133,t:0,i:1006}, +D{l:141,t:11,i:96}, +D{l:5,t:0,i:420}, +D{l:135,t:0,i:1449}, +D{l:146,t:11,i:149}, +D{l:135,t:0,i:832}, +D{l:135,t:10,i:663}, +D{l:133,t:0,i:351}, +D{l:5,t:0,i:40}, +D{l:7,t:0,i:598}, +D{l:7,t:0,i:1638}, +D{l:8,t:0,i:78}, +D{l:9,t:0,i:166}, +D{l:9,t:0,i:640}, +D{l:9,t:0,i:685}, +D{l:9,t:0,i:773}, +D{l:11,t:0,i:215}, +D{l:13,t:0,i:65}, +D{l:14,t:0,i:172}, +D{l:14,t:0,i:317}, +D{l:145,t:0,i:6}, +D{l:8,t:0,i:60}, +D{l:9,t:0,i:343}, +D{l:139,t:0,i:769}, +D{l:134,t:0,i:1354}, +D{l:132,t:0,i:724}, +D{l:137,t:0,i:745}, +D{l:132,t:11,i:474}, +D{l:7,t:0,i:1951}, +D{l:8,t:0,i:765}, +D{l:8,t:0,i:772}, +D{l:140,t:0,i:671}, +D{l:7,t:0,i:108}, +D{l:8,t:0,i:219}, +D{l:8,t:0,i:388}, +D{l:9,t:0,i:775}, +D{l:11,t:0,i:275}, +D{l:140,t:0,i:464}, +D{l:137,t:0,i:639}, +D{l:135,t:10,i:503}, +D{l:133,t:11,i:366}, +D{l:5,t:0,i:15}, +D{l:6,t:0,i:56}, +D{l:7,t:0,i:1758}, +D{l:8,t:0,i:500}, +D{l:9,t:0,i:730}, +D{l:11,t:0,i:331}, +D{l:13,t:0,i:150}, +D{l:14,t:0,i:282}, +D{l:5,t:11,i:305}, +D{l:9,t:11,i:560}, +D{l:141,t:11,i:208}, +D{l:4,t:10,i:113}, +D{l:5,t:10,i:163}, +D{l:5,t:10,i:735}, +D{l:7,t:10,i:1009}, +D{l:9,t:10,i:9}, +D{l:9,t:10,i:771}, +D{l:12,t:10,i:90}, +D{l:13,t:10,i:138}, +D{l:13,t:10,i:410}, +D{l:143,t:10,i:128}, +D{l:4,t:10,i:324}, +D{l:138,t:10,i:104}, +D{l:135,t:11,i:466}, +D{l:142,t:11,i:27}, +D{l:134,t:0,i:1886}, +D{l:5,t:0,i:205}, +D{l:6,t:0,i:438}, +D{l:9,t:0,i:711}, +D{l:4,t:11,i:480}, +D{l:6,t:11,i:167}, +D{l:6,t:11,i:302}, +D{l:6,t:11,i:1642}, +D{l:7,t:11,i:130}, +D{l:7,t:11,i:656}, +D{l:7,t:11,i:837}, +D{l:7,t:11,i:1547}, +D{l:7,t:11,i:1657}, +D{l:8,t:11,i:429}, +D{l:9,t:11,i:228}, +D{l:10,t:11,i:643}, +D{l:13,t:11,i:289}, +D{l:13,t:11,i:343}, +D{l:147,t:11,i:101}, +D{l:134,t:0,i:865}, +D{l:6,t:0,i:2025}, +D{l:136,t:0,i:965}, +D{l:7,t:11,i:278}, +D{l:10,t:11,i:739}, +D{l:11,t:11,i:708}, +D{l:141,t:11,i:348}, +D{l:133,t:0,i:534}, +D{l:135,t:11,i:1922}, +D{l:137,t:0,i:691}, +D{l:4,t:10,i:935}, +D{l:133,t:10,i:823}, +D{l:6,t:0,i:443}, +D{l:9,t:0,i:237}, +D{l:9,t:0,i:571}, +D{l:9,t:0,i:695}, +D{l:10,t:0,i:139}, +D{l:11,t:0,i:715}, +D{l:12,t:0,i:417}, +D{l:141,t:0,i:421}, +D{l:5,t:10,i:269}, +D{l:7,t:10,i:434}, +D{l:7,t:10,i:891}, +D{l:8,t:10,i:339}, +D{l:9,t:10,i:702}, +D{l:11,t:10,i:594}, +D{l:11,t:10,i:718}, +D{l:145,t:10,i:100}, +D{l:6,t:0,i:1555}, +D{l:7,t:0,i:878}, +D{l:9,t:10,i:485}, +D{l:141,t:10,i:264}, +D{l:134,t:10,i:1713}, +D{l:7,t:10,i:1810}, +D{l:11,t:10,i:866}, +D{l:12,t:10,i:103}, +D{l:141,t:10,i:495}, +D{l:135,t:10,i:900}, +D{l:6,t:0,i:1410}, +D{l:9,t:11,i:316}, +D{l:139,t:11,i:256}, +D{l:4,t:0,i:995}, +D{l:135,t:0,i:1033}, +D{l:132,t:0,i:578}, +D{l:10,t:0,i:881}, +D{l:12,t:0,i:740}, +D{l:12,t:0,i:743}, +D{l:140,t:0,i:759}, +D{l:132,t:0,i:822}, +D{l:133,t:0,i:923}, +D{l:142,t:10,i:143}, +D{l:135,t:11,i:1696}, +D{l:6,t:11,i:363}, +D{l:7,t:11,i:1955}, +D{l:136,t:11,i:725}, +D{l:132,t:0,i:924}, +D{l:133,t:0,i:665}, +D{l:135,t:10,i:2029}, +D{l:135,t:0,i:1901}, +D{l:4,t:0,i:265}, +D{l:6,t:0,i:1092}, +D{l:6,t:0,i:1417}, +D{l:7,t:0,i:807}, +D{l:135,t:0,i:950}, +D{l:5,t:0,i:93}, +D{l:12,t:0,i:267}, +D{l:141,t:0,i:498}, +D{l:135,t:0,i:1451}, +D{l:5,t:11,i:813}, +D{l:135,t:11,i:2046}, +D{l:5,t:10,i:625}, +D{l:135,t:10,i:1617}, +D{l:135,t:0,i:747}, +D{l:6,t:0,i:788}, +D{l:137,t:0,i:828}, +D{l:7,t:0,i:184}, +D{l:11,t:0,i:307}, +D{l:11,t:0,i:400}, +D{l:15,t:0,i:130}, +D{l:5,t:11,i:712}, +D{l:7,t:11,i:1855}, +D{l:8,t:10,i:425}, +D{l:8,t:10,i:693}, +D{l:9,t:10,i:720}, +D{l:10,t:10,i:380}, +D{l:10,t:10,i:638}, +D{l:11,t:11,i:17}, +D{l:11,t:10,i:473}, +D{l:12,t:10,i:61}, +D{l:13,t:11,i:321}, +D{l:144,t:11,i:67}, +D{l:135,t:0,i:198}, +D{l:6,t:11,i:320}, +D{l:7,t:11,i:781}, +D{l:7,t:11,i:1921}, +D{l:9,t:11,i:55}, +D{l:10,t:11,i:186}, +D{l:10,t:11,i:273}, +D{l:10,t:11,i:664}, +D{l:10,t:11,i:801}, +D{l:11,t:11,i:996}, +D{l:11,t:11,i:997}, +D{l:13,t:11,i:157}, +D{l:142,t:11,i:170}, +D{l:136,t:11,i:271}, +D{l:135,t:0,i:994}, +D{l:7,t:11,i:103}, +D{l:7,t:11,i:863}, +D{l:11,t:11,i:184}, +D{l:14,t:11,i:299}, +D{l:145,t:11,i:62}, +D{l:11,t:10,i:551}, +D{l:142,t:10,i:159}, +D{l:5,t:0,i:233}, +D{l:5,t:0,i:320}, +D{l:6,t:0,i:140}, +D{l:8,t:0,i:295}, +D{l:8,t:0,i:615}, +D{l:136,t:11,i:615}, +D{l:133,t:0,i:978}, +D{l:4,t:0,i:905}, +D{l:6,t:0,i:1701}, +D{l:137,t:0,i:843}, +D{l:132,t:10,i:168}, +D{l:4,t:0,i:974}, +D{l:8,t:0,i:850}, +D{l:12,t:0,i:709}, +D{l:12,t:0,i:768}, +D{l:140,t:0,i:786}, +D{l:135,t:10,i:91}, +D{l:152,t:0,i:6}, +D{l:138,t:10,i:532}, +D{l:135,t:10,i:1884}, +D{l:132,t:0,i:509}, +D{l:6,t:0,i:1307}, +D{l:135,t:0,i:273}, +D{l:5,t:11,i:77}, +D{l:7,t:11,i:1455}, +D{l:10,t:11,i:843}, +D{l:19,t:11,i:73}, +D{l:150,t:11,i:5}, +D{l:132,t:11,i:458}, +D{l:135,t:11,i:1420}, +D{l:6,t:11,i:109}, +D{l:138,t:11,i:382}, +D{l:6,t:0,i:201}, +D{l:6,t:11,i:330}, +D{l:7,t:10,i:70}, +D{l:7,t:11,i:1084}, +D{l:10,t:10,i:240}, +D{l:11,t:11,i:142}, +D{l:147,t:10,i:93}, +D{l:7,t:0,i:1041}, +D{l:140,t:11,i:328}, +D{l:133,t:11,i:354}, +D{l:134,t:0,i:1040}, +D{l:133,t:0,i:693}, +D{l:134,t:0,i:774}, +D{l:139,t:0,i:234}, +D{l:132,t:0,i:336}, +D{l:7,t:0,i:1399}, +D{l:139,t:10,i:392}, +D{l:20,t:0,i:22}, +D{l:148,t:11,i:22}, +D{l:5,t:0,i:802}, +D{l:7,t:0,i:2021}, +D{l:136,t:0,i:805}, +D{l:5,t:0,i:167}, +D{l:5,t:0,i:899}, +D{l:6,t:0,i:410}, +D{l:137,t:0,i:777}, +D{l:137,t:0,i:789}, +D{l:134,t:0,i:1705}, +D{l:7,t:10,i:655}, +D{l:135,t:10,i:1844}, +D{l:4,t:10,i:145}, +D{l:6,t:10,i:176}, +D{l:7,t:10,i:395}, +D{l:137,t:10,i:562}, +D{l:132,t:10,i:501}, +D{l:135,t:0,i:10}, +D{l:5,t:0,i:11}, +D{l:6,t:0,i:117}, +D{l:6,t:0,i:485}, +D{l:7,t:0,i:1133}, +D{l:9,t:0,i:582}, +D{l:9,t:0,i:594}, +D{l:10,t:0,i:82}, +D{l:11,t:0,i:21}, +D{l:11,t:0,i:818}, +D{l:12,t:0,i:535}, +D{l:13,t:0,i:86}, +D{l:20,t:0,i:91}, +D{l:23,t:0,i:13}, +D{l:134,t:10,i:509}, +D{l:4,t:0,i:264}, +D{l:7,t:0,i:1067}, +D{l:8,t:0,i:204}, +D{l:8,t:0,i:385}, +D{l:139,t:0,i:953}, +D{l:139,t:11,i:737}, +D{l:138,t:0,i:56}, +D{l:134,t:0,i:1917}, +D{l:133,t:0,i:470}, +D{l:10,t:11,i:657}, +D{l:14,t:11,i:297}, +D{l:142,t:11,i:361}, +D{l:135,t:11,i:412}, +D{l:7,t:0,i:1198}, +D{l:7,t:11,i:1198}, +D{l:8,t:11,i:556}, +D{l:14,t:11,i:123}, +D{l:14,t:11,i:192}, +D{l:143,t:11,i:27}, +D{l:7,t:11,i:1985}, +D{l:14,t:11,i:146}, +D{l:15,t:11,i:42}, +D{l:16,t:11,i:23}, +D{l:17,t:11,i:86}, +D{l:146,t:11,i:17}, +D{l:11,t:0,i:1015}, +D{l:136,t:11,i:122}, +D{l:4,t:10,i:114}, +D{l:9,t:10,i:492}, +D{l:13,t:10,i:462}, +D{l:142,t:10,i:215}, +D{l:4,t:10,i:77}, +D{l:5,t:10,i:361}, +D{l:6,t:10,i:139}, +D{l:6,t:10,i:401}, +D{l:6,t:10,i:404}, +D{l:7,t:10,i:413}, +D{l:7,t:10,i:715}, +D{l:7,t:10,i:1716}, +D{l:11,t:10,i:279}, +D{l:12,t:10,i:179}, +D{l:12,t:10,i:258}, +D{l:13,t:10,i:244}, +D{l:142,t:10,i:358}, +D{l:134,t:10,i:1717}, +D{l:7,t:10,i:1061}, +D{l:8,t:10,i:82}, +D{l:11,t:10,i:250}, +D{l:12,t:10,i:420}, +D{l:141,t:10,i:184}, +D{l:133,t:0,i:715}, +D{l:135,t:10,i:724}, +D{l:9,t:0,i:919}, +D{l:9,t:0,i:922}, +D{l:9,t:0,i:927}, +D{l:9,t:0,i:933}, +D{l:9,t:0,i:962}, +D{l:9,t:0,i:1000}, +D{l:9,t:0,i:1002}, +D{l:9,t:0,i:1021}, +D{l:12,t:0,i:890}, +D{l:12,t:0,i:907}, +D{l:12,t:0,i:930}, +D{l:15,t:0,i:207}, +D{l:15,t:0,i:228}, +D{l:15,t:0,i:238}, +D{l:149,t:0,i:61}, +D{l:8,t:0,i:794}, +D{l:9,t:0,i:400}, +D{l:10,t:0,i:298}, +D{l:142,t:0,i:228}, +D{l:5,t:11,i:430}, +D{l:5,t:11,i:932}, +D{l:6,t:11,i:131}, +D{l:7,t:11,i:417}, +D{l:9,t:11,i:522}, +D{l:11,t:11,i:314}, +D{l:141,t:11,i:390}, +D{l:132,t:0,i:867}, +D{l:8,t:0,i:724}, +D{l:132,t:11,i:507}, +D{l:137,t:11,i:261}, +D{l:4,t:11,i:343}, +D{l:133,t:11,i:511}, +D{l:6,t:0,i:190}, +D{l:7,t:0,i:768}, +D{l:135,t:0,i:1170}, +D{l:6,t:10,i:513}, +D{l:135,t:10,i:1052}, +D{l:7,t:11,i:455}, +D{l:138,t:11,i:591}, +D{l:134,t:0,i:1066}, +D{l:137,t:10,i:899}, +D{l:14,t:0,i:67}, +D{l:147,t:0,i:60}, +D{l:4,t:0,i:948}, +D{l:18,t:0,i:174}, +D{l:146,t:0,i:176}, +D{l:135,t:0,i:1023}, +D{l:7,t:10,i:1417}, +D{l:12,t:10,i:382}, +D{l:17,t:10,i:48}, +D{l:152,t:10,i:12}, +D{l:134,t:11,i:575}, +D{l:132,t:0,i:764}, +D{l:6,t:10,i:545}, +D{l:7,t:10,i:565}, +D{l:7,t:10,i:1669}, +D{l:10,t:10,i:114}, +D{l:11,t:10,i:642}, +D{l:140,t:10,i:618}, +D{l:6,t:0,i:137}, +D{l:9,t:0,i:75}, +D{l:9,t:0,i:253}, +D{l:10,t:0,i:194}, +D{l:138,t:0,i:444}, +D{l:4,t:0,i:756}, +D{l:133,t:10,i:5}, +D{l:8,t:0,i:1008}, +D{l:135,t:10,i:192}, +D{l:132,t:0,i:842}, +D{l:11,t:0,i:643}, +D{l:12,t:0,i:115}, +D{l:136,t:10,i:763}, +D{l:139,t:0,i:67}, +D{l:133,t:10,i:759}, +D{l:4,t:0,i:821}, +D{l:5,t:0,i:760}, +D{l:7,t:0,i:542}, +D{l:8,t:0,i:135}, +D{l:8,t:0,i:496}, +D{l:135,t:11,i:580}, +D{l:7,t:10,i:370}, +D{l:7,t:10,i:1007}, +D{l:7,t:10,i:1177}, +D{l:135,t:10,i:1565}, +D{l:135,t:10,i:1237}, +D{l:140,t:0,i:736}, +D{l:7,t:0,i:319}, +D{l:7,t:0,i:355}, +D{l:7,t:0,i:763}, +D{l:10,t:0,i:389}, +D{l:145,t:0,i:43}, +D{l:8,t:11,i:333}, +D{l:138,t:11,i:182}, +D{l:4,t:10,i:87}, +D{l:5,t:10,i:250}, +D{l:141,t:10,i:298}, +D{l:138,t:0,i:786}, +D{l:134,t:0,i:2044}, +D{l:8,t:11,i:330}, +D{l:140,t:11,i:477}, +D{l:135,t:11,i:1338}, +D{l:132,t:11,i:125}, +D{l:134,t:0,i:1030}, +D{l:134,t:0,i:1083}, +D{l:132,t:11,i:721}, +D{l:135,t:10,i:814}, +D{l:7,t:11,i:776}, +D{l:8,t:11,i:145}, +D{l:147,t:11,i:56}, +D{l:134,t:0,i:1226}, +D{l:4,t:10,i:57}, +D{l:7,t:10,i:1195}, +D{l:7,t:10,i:1438}, +D{l:7,t:10,i:1548}, +D{l:7,t:10,i:1835}, +D{l:7,t:10,i:1904}, +D{l:9,t:10,i:757}, +D{l:10,t:10,i:604}, +D{l:139,t:10,i:519}, +D{l:7,t:11,i:792}, +D{l:8,t:11,i:147}, +D{l:10,t:11,i:821}, +D{l:139,t:11,i:1021}, +D{l:137,t:11,i:797}, +D{l:4,t:0,i:58}, +D{l:5,t:0,i:286}, +D{l:6,t:0,i:319}, +D{l:7,t:0,i:402}, +D{l:7,t:0,i:1254}, +D{l:7,t:0,i:1903}, +D{l:8,t:0,i:356}, +D{l:140,t:0,i:408}, +D{l:4,t:0,i:389}, +D{l:4,t:0,i:815}, +D{l:9,t:0,i:181}, +D{l:9,t:0,i:255}, +D{l:10,t:0,i:8}, +D{l:10,t:0,i:29}, +D{l:10,t:0,i:816}, +D{l:11,t:0,i:311}, +D{l:11,t:0,i:561}, +D{l:12,t:0,i:67}, +D{l:141,t:0,i:181}, +D{l:7,t:11,i:1472}, +D{l:135,t:11,i:1554}, +D{l:7,t:11,i:1071}, +D{l:7,t:11,i:1541}, +D{l:7,t:11,i:1767}, +D{l:7,t:11,i:1806}, +D{l:7,t:11,i:1999}, +D{l:9,t:11,i:248}, +D{l:10,t:11,i:400}, +D{l:11,t:11,i:162}, +D{l:11,t:11,i:178}, +D{l:11,t:11,i:242}, +D{l:12,t:11,i:605}, +D{l:15,t:11,i:26}, +D{l:144,t:11,i:44}, +D{l:5,t:11,i:168}, +D{l:5,t:11,i:930}, +D{l:8,t:11,i:74}, +D{l:9,t:11,i:623}, +D{l:12,t:11,i:500}, +D{l:12,t:11,i:579}, +D{l:13,t:11,i:41}, +D{l:143,t:11,i:93}, +D{l:6,t:11,i:220}, +D{l:7,t:11,i:1101}, +D{l:141,t:11,i:105}, +D{l:5,t:0,i:474}, +D{l:7,t:0,i:507}, +D{l:4,t:10,i:209}, +D{l:7,t:11,i:507}, +D{l:135,t:10,i:902}, +D{l:132,t:0,i:427}, +D{l:6,t:0,i:413}, +D{l:7,t:10,i:335}, +D{l:7,t:10,i:1437}, +D{l:7,t:10,i:1668}, +D{l:8,t:10,i:553}, +D{l:8,t:10,i:652}, +D{l:8,t:10,i:656}, +D{l:9,t:10,i:558}, +D{l:11,t:10,i:743}, +D{l:149,t:10,i:18}, +D{l:132,t:0,i:730}, +D{l:6,t:11,i:19}, +D{l:7,t:11,i:1413}, +D{l:139,t:11,i:428}, +D{l:133,t:0,i:373}, +D{l:132,t:10,i:559}, +D{l:7,t:11,i:96}, +D{l:8,t:11,i:401}, +D{l:137,t:11,i:896}, +D{l:7,t:0,i:799}, +D{l:7,t:0,i:1972}, +D{l:5,t:10,i:1017}, +D{l:138,t:10,i:511}, +D{l:135,t:0,i:1793}, +D{l:7,t:11,i:1961}, +D{l:7,t:11,i:1965}, +D{l:8,t:11,i:702}, +D{l:136,t:11,i:750}, +D{l:8,t:11,i:150}, +D{l:8,t:11,i:737}, +D{l:140,t:11,i:366}, +D{l:132,t:0,i:322}, +D{l:133,t:10,i:709}, +D{l:8,t:11,i:800}, +D{l:9,t:11,i:148}, +D{l:9,t:11,i:872}, +D{l:9,t:11,i:890}, +D{l:11,t:11,i:309}, +D{l:11,t:11,i:1001}, +D{l:13,t:11,i:267}, +D{l:141,t:11,i:323}, +D{l:134,t:10,i:1745}, +D{l:7,t:0,i:290}, +D{l:136,t:10,i:206}, +D{l:7,t:0,i:1651}, +D{l:145,t:0,i:89}, +D{l:139,t:0,i:2}, +D{l:132,t:0,i:672}, +D{l:6,t:0,i:1860}, +D{l:8,t:0,i:905}, +D{l:10,t:0,i:844}, +D{l:10,t:0,i:846}, +D{l:10,t:0,i:858}, +D{l:12,t:0,i:699}, +D{l:12,t:0,i:746}, +D{l:140,t:0,i:772}, +D{l:135,t:11,i:424}, +D{l:133,t:11,i:547}, +D{l:133,t:0,i:737}, +D{l:5,t:11,i:490}, +D{l:6,t:11,i:615}, +D{l:6,t:11,i:620}, +D{l:135,t:11,i:683}, +D{l:6,t:0,i:746}, +D{l:134,t:0,i:1612}, +D{l:132,t:10,i:776}, +D{l:9,t:11,i:385}, +D{l:149,t:11,i:17}, +D{l:133,t:0,i:145}, +D{l:135,t:10,i:1272}, +D{l:7,t:0,i:884}, +D{l:140,t:0,i:124}, +D{l:4,t:0,i:387}, +D{l:135,t:0,i:1288}, +D{l:5,t:11,i:133}, +D{l:136,t:10,i:406}, +D{l:136,t:11,i:187}, +D{l:6,t:0,i:679}, +D{l:8,t:11,i:8}, +D{l:138,t:11,i:0}, +D{l:135,t:0,i:550}, +D{l:135,t:11,i:798}, +D{l:136,t:11,i:685}, +D{l:7,t:11,i:1086}, +D{l:145,t:11,i:46}, +D{l:8,t:10,i:175}, +D{l:10,t:10,i:168}, +D{l:138,t:10,i:573}, +D{l:135,t:0,i:1305}, +D{l:4,t:0,i:576}, +D{l:135,t:0,i:1263}, +D{l:6,t:0,i:686}, +D{l:134,t:0,i:1563}, +D{l:134,t:0,i:607}, +D{l:5,t:0,i:919}, +D{l:134,t:0,i:1673}, +D{l:148,t:0,i:37}, +D{l:8,t:11,i:774}, +D{l:10,t:11,i:670}, +D{l:140,t:11,i:51}, +D{l:133,t:10,i:784}, +D{l:139,t:10,i:882}, +D{l:4,t:0,i:82}, +D{l:5,t:0,i:333}, +D{l:5,t:0,i:904}, +D{l:6,t:0,i:207}, +D{l:7,t:0,i:325}, +D{l:7,t:0,i:1726}, +D{l:8,t:0,i:101}, +D{l:10,t:0,i:778}, +D{l:139,t:0,i:220}, +D{l:135,t:11,i:371}, +D{l:132,t:0,i:958}, +D{l:133,t:0,i:903}, +D{l:4,t:11,i:127}, +D{l:5,t:11,i:350}, +D{l:6,t:11,i:356}, +D{l:8,t:11,i:426}, +D{l:9,t:11,i:572}, +D{l:10,t:11,i:247}, +D{l:139,t:11,i:312}, +D{l:140,t:0,i:147}, +D{l:6,t:11,i:59}, +D{l:7,t:11,i:885}, +D{l:9,t:11,i:603}, +D{l:141,t:11,i:397}, +D{l:10,t:0,i:367}, +D{l:9,t:10,i:14}, +D{l:9,t:10,i:441}, +D{l:139,t:10,i:9}, +D{l:11,t:10,i:966}, +D{l:12,t:10,i:287}, +D{l:13,t:10,i:342}, +D{l:13,t:10,i:402}, +D{l:15,t:10,i:110}, +D{l:143,t:10,i:163}, +D{l:134,t:0,i:690}, +D{l:132,t:0,i:705}, +D{l:9,t:0,i:651}, +D{l:11,t:0,i:971}, +D{l:13,t:0,i:273}, +D{l:7,t:10,i:1428}, +D{l:7,t:10,i:1640}, +D{l:7,t:10,i:1867}, +D{l:9,t:10,i:169}, +D{l:9,t:10,i:182}, +D{l:9,t:10,i:367}, +D{l:9,t:10,i:478}, +D{l:9,t:10,i:506}, +D{l:9,t:10,i:551}, +D{l:9,t:10,i:557}, +D{l:9,t:10,i:648}, +D{l:9,t:10,i:697}, +D{l:9,t:10,i:705}, +D{l:9,t:10,i:725}, +D{l:9,t:10,i:787}, +D{l:9,t:10,i:794}, +D{l:10,t:10,i:198}, +D{l:10,t:10,i:214}, +D{l:10,t:10,i:267}, +D{l:10,t:10,i:275}, +D{l:10,t:10,i:456}, +D{l:10,t:10,i:551}, +D{l:10,t:10,i:561}, +D{l:10,t:10,i:613}, +D{l:10,t:10,i:627}, +D{l:10,t:10,i:668}, +D{l:10,t:10,i:675}, +D{l:10,t:10,i:691}, +D{l:10,t:10,i:695}, +D{l:10,t:10,i:707}, +D{l:10,t:10,i:715}, +D{l:11,t:10,i:183}, +D{l:11,t:10,i:201}, +D{l:11,t:10,i:262}, +D{l:11,t:10,i:352}, +D{l:11,t:10,i:439}, +D{l:11,t:10,i:493}, +D{l:11,t:10,i:572}, +D{l:11,t:10,i:591}, +D{l:11,t:10,i:608}, +D{l:11,t:10,i:611}, +D{l:11,t:10,i:646}, +D{l:11,t:10,i:674}, +D{l:11,t:10,i:711}, +D{l:11,t:10,i:751}, +D{l:11,t:10,i:761}, +D{l:11,t:10,i:776}, +D{l:11,t:10,i:785}, +D{l:11,t:10,i:850}, +D{l:11,t:10,i:853}, +D{l:11,t:10,i:862}, +D{l:11,t:10,i:865}, +D{l:11,t:10,i:868}, +D{l:11,t:10,i:875}, +D{l:11,t:10,i:898}, +D{l:11,t:10,i:902}, +D{l:11,t:10,i:903}, +D{l:11,t:10,i:910}, +D{l:11,t:10,i:932}, +D{l:11,t:10,i:942}, +D{l:11,t:10,i:957}, +D{l:11,t:10,i:967}, +D{l:11,t:10,i:972}, +D{l:12,t:10,i:148}, +D{l:12,t:10,i:195}, +D{l:12,t:10,i:220}, +D{l:12,t:10,i:237}, +D{l:12,t:10,i:318}, +D{l:12,t:10,i:339}, +D{l:12,t:10,i:393}, +D{l:12,t:10,i:445}, +D{l:12,t:10,i:450}, +D{l:12,t:10,i:474}, +D{l:12,t:10,i:505}, +D{l:12,t:10,i:509}, +D{l:12,t:10,i:533}, +D{l:12,t:10,i:591}, +D{l:12,t:10,i:594}, +D{l:12,t:10,i:597}, +D{l:12,t:10,i:621}, +D{l:12,t:10,i:633}, +D{l:12,t:10,i:642}, +D{l:13,t:10,i:59}, +D{l:13,t:10,i:60}, +D{l:13,t:10,i:145}, +D{l:13,t:10,i:239}, +D{l:13,t:10,i:250}, +D{l:13,t:10,i:329}, +D{l:13,t:10,i:344}, +D{l:13,t:10,i:365}, +D{l:13,t:10,i:372}, +D{l:13,t:10,i:387}, +D{l:13,t:10,i:403}, +D{l:13,t:10,i:414}, +D{l:13,t:10,i:456}, +D{l:13,t:10,i:470}, +D{l:13,t:10,i:478}, +D{l:13,t:10,i:483}, +D{l:13,t:10,i:489}, +D{l:14,t:10,i:55}, +D{l:14,t:10,i:57}, +D{l:14,t:10,i:81}, +D{l:14,t:10,i:90}, +D{l:14,t:10,i:148}, +D{l:14,t:10,i:239}, +D{l:14,t:10,i:266}, +D{l:14,t:10,i:321}, +D{l:14,t:10,i:326}, +D{l:14,t:10,i:327}, +D{l:14,t:10,i:330}, +D{l:14,t:10,i:347}, +D{l:14,t:10,i:355}, +D{l:14,t:10,i:401}, +D{l:14,t:10,i:404}, +D{l:14,t:10,i:411}, +D{l:14,t:10,i:414}, +D{l:14,t:10,i:416}, +D{l:14,t:10,i:420}, +D{l:15,t:10,i:61}, +D{l:15,t:10,i:74}, +D{l:15,t:10,i:87}, +D{l:15,t:10,i:88}, +D{l:15,t:10,i:94}, +D{l:15,t:10,i:96}, +D{l:15,t:10,i:116}, +D{l:15,t:10,i:149}, +D{l:15,t:10,i:154}, +D{l:16,t:10,i:50}, +D{l:16,t:10,i:63}, +D{l:16,t:10,i:73}, +D{l:17,t:10,i:2}, +D{l:17,t:10,i:66}, +D{l:17,t:10,i:92}, +D{l:17,t:10,i:103}, +D{l:17,t:10,i:112}, +D{l:17,t:10,i:120}, +D{l:18,t:10,i:50}, +D{l:18,t:10,i:54}, +D{l:18,t:10,i:82}, +D{l:18,t:10,i:86}, +D{l:18,t:10,i:90}, +D{l:18,t:10,i:111}, +D{l:18,t:10,i:115}, +D{l:18,t:10,i:156}, +D{l:19,t:10,i:40}, +D{l:19,t:10,i:79}, +D{l:20,t:10,i:78}, +D{l:149,t:10,i:22}, +D{l:7,t:0,i:887}, +D{l:5,t:10,i:161}, +D{l:135,t:10,i:839}, +D{l:142,t:11,i:98}, +D{l:134,t:0,i:90}, +D{l:138,t:11,i:356}, +D{l:135,t:11,i:441}, +D{l:6,t:11,i:111}, +D{l:7,t:11,i:4}, +D{l:8,t:11,i:163}, +D{l:8,t:11,i:776}, +D{l:138,t:11,i:566}, +D{l:134,t:0,i:908}, +D{l:134,t:0,i:1261}, +D{l:7,t:0,i:813}, +D{l:12,t:0,i:497}, +D{l:141,t:0,i:56}, +D{l:134,t:0,i:1235}, +D{l:135,t:0,i:429}, +D{l:135,t:11,i:1994}, +D{l:138,t:0,i:904}, +D{l:6,t:0,i:125}, +D{l:7,t:0,i:1277}, +D{l:137,t:0,i:772}, +D{l:151,t:0,i:12}, +D{l:4,t:0,i:841}, +D{l:5,t:0,i:386}, +D{l:133,t:11,i:386}, +D{l:5,t:11,i:297}, +D{l:135,t:11,i:1038}, +D{l:6,t:0,i:860}, +D{l:6,t:0,i:1069}, +D{l:135,t:11,i:309}, +D{l:136,t:0,i:946}, +D{l:135,t:10,i:1814}, +D{l:141,t:11,i:418}, +D{l:136,t:11,i:363}, +D{l:10,t:0,i:768}, +D{l:139,t:0,i:787}, +D{l:22,t:11,i:30}, +D{l:150,t:11,i:33}, +D{l:6,t:0,i:160}, +D{l:7,t:0,i:1106}, +D{l:9,t:0,i:770}, +D{l:11,t:0,i:112}, +D{l:140,t:0,i:413}, +D{l:11,t:11,i:216}, +D{l:139,t:11,i:340}, +D{l:136,t:10,i:139}, +D{l:135,t:11,i:1390}, +D{l:135,t:11,i:808}, +D{l:132,t:11,i:280}, +D{l:12,t:0,i:271}, +D{l:17,t:0,i:109}, +D{l:7,t:10,i:643}, +D{l:136,t:10,i:236}, +D{l:140,t:11,i:54}, +D{l:4,t:11,i:421}, +D{l:133,t:11,i:548}, +D{l:11,t:0,i:719}, +D{l:12,t:0,i:36}, +D{l:141,t:0,i:337}, +D{l:7,t:0,i:581}, +D{l:9,t:0,i:644}, +D{l:137,t:0,i:699}, +D{l:11,t:11,i:511}, +D{l:13,t:11,i:394}, +D{l:14,t:11,i:298}, +D{l:14,t:11,i:318}, +D{l:146,t:11,i:103}, +D{l:7,t:0,i:304}, +D{l:9,t:0,i:646}, +D{l:9,t:0,i:862}, +D{l:11,t:0,i:696}, +D{l:12,t:0,i:208}, +D{l:15,t:0,i:79}, +D{l:147,t:0,i:108}, +D{l:4,t:0,i:631}, +D{l:7,t:0,i:1126}, +D{l:135,t:0,i:1536}, +D{l:135,t:11,i:1527}, +D{l:8,t:0,i:880}, +D{l:10,t:0,i:869}, +D{l:138,t:0,i:913}, +D{l:7,t:0,i:1513}, +D{l:5,t:10,i:54}, +D{l:6,t:11,i:254}, +D{l:9,t:11,i:109}, +D{l:138,t:11,i:103}, +D{l:135,t:0,i:981}, +D{l:133,t:11,i:729}, +D{l:132,t:10,i:744}, +D{l:132,t:0,i:434}, +D{l:134,t:0,i:550}, +D{l:7,t:0,i:930}, +D{l:10,t:0,i:476}, +D{l:13,t:0,i:452}, +D{l:19,t:0,i:104}, +D{l:6,t:11,i:1630}, +D{l:10,t:10,i:402}, +D{l:146,t:10,i:55}, +D{l:5,t:0,i:553}, +D{l:138,t:0,i:824}, +D{l:136,t:0,i:452}, +D{l:8,t:0,i:151}, +D{l:137,t:10,i:624}, +D{l:132,t:10,i:572}, +D{l:132,t:0,i:772}, +D{l:133,t:11,i:671}, +D{l:133,t:0,i:292}, +D{l:138,t:0,i:135}, +D{l:132,t:11,i:889}, +D{l:140,t:11,i:207}, +D{l:9,t:0,i:504}, +D{l:6,t:10,i:43}, +D{l:7,t:10,i:38}, +D{l:8,t:10,i:248}, +D{l:138,t:10,i:513}, +D{l:6,t:0,i:1089}, +D{l:135,t:11,i:1910}, +D{l:4,t:11,i:627}, +D{l:133,t:11,i:775}, +D{l:135,t:0,i:783}, +D{l:133,t:10,i:766}, +D{l:133,t:10,i:363}, +D{l:7,t:0,i:387}, +D{l:135,t:11,i:387}, +D{l:7,t:0,i:393}, +D{l:10,t:0,i:603}, +D{l:11,t:0,i:206}, +D{l:7,t:11,i:202}, +D{l:11,t:11,i:362}, +D{l:11,t:11,i:948}, +D{l:140,t:11,i:388}, +D{l:6,t:11,i:507}, +D{l:7,t:11,i:451}, +D{l:8,t:11,i:389}, +D{l:12,t:11,i:490}, +D{l:13,t:11,i:16}, +D{l:13,t:11,i:215}, +D{l:13,t:11,i:351}, +D{l:18,t:11,i:132}, +D{l:147,t:11,i:125}, +D{l:4,t:0,i:912}, +D{l:9,t:0,i:232}, +D{l:135,t:11,i:841}, +D{l:6,t:10,i:258}, +D{l:140,t:10,i:409}, +D{l:5,t:10,i:249}, +D{l:148,t:10,i:82}, +D{l:136,t:11,i:566}, +D{l:6,t:0,i:977}, +D{l:135,t:11,i:1214}, +D{l:7,t:0,i:1973}, +D{l:136,t:0,i:716}, +D{l:135,t:0,i:98}, +D{l:133,t:0,i:733}, +D{l:5,t:11,i:912}, +D{l:134,t:11,i:1695}, +D{l:5,t:10,i:393}, +D{l:6,t:10,i:378}, +D{l:7,t:10,i:1981}, +D{l:9,t:10,i:32}, +D{l:9,t:10,i:591}, +D{l:10,t:10,i:685}, +D{l:10,t:10,i:741}, +D{l:142,t:10,i:382}, +D{l:133,t:10,i:788}, +D{l:10,t:0,i:19}, +D{l:11,t:0,i:911}, +D{l:7,t:10,i:1968}, +D{l:141,t:10,i:509}, +D{l:5,t:0,i:668}, +D{l:5,t:11,i:236}, +D{l:6,t:11,i:572}, +D{l:8,t:11,i:492}, +D{l:11,t:11,i:618}, +D{l:144,t:11,i:56}, +D{l:135,t:11,i:1789}, +D{l:4,t:0,i:360}, +D{l:5,t:0,i:635}, +D{l:5,t:0,i:700}, +D{l:5,t:10,i:58}, +D{l:5,t:10,i:171}, +D{l:5,t:10,i:683}, +D{l:6,t:10,i:291}, +D{l:6,t:10,i:566}, +D{l:7,t:10,i:1650}, +D{l:11,t:10,i:523}, +D{l:12,t:10,i:273}, +D{l:12,t:10,i:303}, +D{l:15,t:10,i:39}, +D{l:143,t:10,i:111}, +D{l:133,t:0,i:901}, +D{l:134,t:10,i:589}, +D{l:5,t:11,i:190}, +D{l:136,t:11,i:318}, +D{l:140,t:0,i:656}, +D{l:7,t:0,i:726}, +D{l:152,t:0,i:9}, +D{l:4,t:10,i:917}, +D{l:133,t:10,i:1005}, +D{l:135,t:10,i:1598}, +D{l:134,t:11,i:491}, +D{l:4,t:10,i:919}, +D{l:133,t:11,i:434}, +D{l:137,t:0,i:72}, +D{l:6,t:0,i:1269}, +D{l:6,t:0,i:1566}, +D{l:134,t:0,i:1621}, +D{l:9,t:0,i:463}, +D{l:10,t:0,i:595}, +D{l:4,t:10,i:255}, +D{l:5,t:10,i:302}, +D{l:6,t:10,i:132}, +D{l:7,t:10,i:128}, +D{l:7,t:10,i:283}, +D{l:7,t:10,i:1299}, +D{l:10,t:10,i:52}, +D{l:10,t:10,i:514}, +D{l:11,t:10,i:925}, +D{l:13,t:10,i:92}, +D{l:142,t:10,i:309}, +D{l:135,t:0,i:1454}, +D{l:134,t:0,i:1287}, +D{l:11,t:0,i:600}, +D{l:13,t:0,i:245}, +D{l:137,t:10,i:173}, +D{l:136,t:0,i:989}, +D{l:7,t:0,i:164}, +D{l:7,t:0,i:1571}, +D{l:9,t:0,i:107}, +D{l:140,t:0,i:225}, +D{l:6,t:0,i:1061}, +D{l:141,t:10,i:442}, +D{l:4,t:0,i:27}, +D{l:5,t:0,i:484}, +D{l:5,t:0,i:510}, +D{l:6,t:0,i:434}, +D{l:7,t:0,i:1000}, +D{l:7,t:0,i:1098}, +D{l:136,t:0,i:2}, +D{l:7,t:11,i:85}, +D{l:7,t:11,i:247}, +D{l:8,t:11,i:585}, +D{l:10,t:11,i:163}, +D{l:138,t:11,i:316}, +D{l:11,t:11,i:103}, +D{l:142,t:11,i:0}, +D{l:134,t:0,i:1127}, +D{l:4,t:0,i:460}, +D{l:134,t:0,i:852}, +D{l:134,t:10,i:210}, +D{l:4,t:0,i:932}, +D{l:133,t:0,i:891}, +D{l:6,t:0,i:588}, +D{l:147,t:11,i:83}, +D{l:8,t:0,i:625}, +D{l:4,t:10,i:284}, +D{l:134,t:10,i:223}, +D{l:134,t:0,i:76}, +D{l:8,t:0,i:92}, +D{l:137,t:0,i:221}, +D{l:4,t:11,i:124}, +D{l:10,t:11,i:457}, +D{l:11,t:11,i:121}, +D{l:11,t:11,i:169}, +D{l:11,t:11,i:422}, +D{l:11,t:11,i:870}, +D{l:12,t:11,i:214}, +D{l:13,t:11,i:389}, +D{l:14,t:11,i:187}, +D{l:143,t:11,i:77}, +D{l:9,t:11,i:618}, +D{l:138,t:11,i:482}, +D{l:4,t:10,i:218}, +D{l:7,t:10,i:526}, +D{l:143,t:10,i:137}, +D{l:13,t:0,i:9}, +D{l:14,t:0,i:104}, +D{l:14,t:0,i:311}, +D{l:4,t:10,i:270}, +D{l:5,t:10,i:192}, +D{l:6,t:10,i:332}, +D{l:135,t:10,i:1322}, +D{l:140,t:10,i:661}, +D{l:135,t:11,i:1193}, +D{l:6,t:11,i:107}, +D{l:7,t:11,i:638}, +D{l:7,t:11,i:1632}, +D{l:137,t:11,i:396}, +D{l:132,t:0,i:763}, +D{l:4,t:0,i:622}, +D{l:5,t:11,i:370}, +D{l:134,t:11,i:1756}, +D{l:133,t:0,i:253}, +D{l:135,t:0,i:546}, +D{l:9,t:0,i:73}, +D{l:10,t:0,i:110}, +D{l:14,t:0,i:185}, +D{l:17,t:0,i:119}, +D{l:133,t:11,i:204}, +D{l:7,t:0,i:624}, +D{l:7,t:0,i:916}, +D{l:10,t:0,i:256}, +D{l:139,t:0,i:87}, +D{l:7,t:10,i:379}, +D{l:8,t:10,i:481}, +D{l:137,t:10,i:377}, +D{l:5,t:0,i:212}, +D{l:12,t:0,i:35}, +D{l:13,t:0,i:382}, +D{l:5,t:11,i:970}, +D{l:134,t:11,i:1706}, +D{l:9,t:0,i:746}, +D{l:5,t:10,i:1003}, +D{l:134,t:10,i:149}, +D{l:10,t:0,i:150}, +D{l:11,t:0,i:849}, +D{l:13,t:0,i:330}, +D{l:8,t:10,i:262}, +D{l:9,t:10,i:627}, +D{l:11,t:10,i:214}, +D{l:11,t:10,i:404}, +D{l:11,t:10,i:457}, +D{l:11,t:10,i:780}, +D{l:11,t:10,i:913}, +D{l:13,t:10,i:401}, +D{l:142,t:10,i:200}, +D{l:134,t:0,i:1466}, +D{l:135,t:11,i:3}, +D{l:6,t:0,i:1299}, +D{l:4,t:11,i:35}, +D{l:5,t:11,i:121}, +D{l:5,t:11,i:483}, +D{l:5,t:11,i:685}, +D{l:6,t:11,i:489}, +D{l:7,t:11,i:1204}, +D{l:136,t:11,i:394}, +D{l:135,t:10,i:742}, +D{l:4,t:10,i:142}, +D{l:136,t:10,i:304}, +D{l:4,t:11,i:921}, +D{l:133,t:11,i:1007}, +D{l:134,t:0,i:1518}, +D{l:6,t:0,i:1229}, +D{l:135,t:0,i:1175}, +D{l:133,t:0,i:816}, +D{l:12,t:0,i:159}, +D{l:4,t:10,i:471}, +D{l:4,t:11,i:712}, +D{l:5,t:10,i:51}, +D{l:6,t:10,i:602}, +D{l:7,t:10,i:925}, +D{l:8,t:10,i:484}, +D{l:138,t:10,i:195}, +D{l:134,t:11,i:1629}, +D{l:5,t:0,i:869}, +D{l:5,t:0,i:968}, +D{l:6,t:0,i:1626}, +D{l:8,t:0,i:734}, +D{l:136,t:0,i:784}, +D{l:4,t:0,i:542}, +D{l:6,t:0,i:1716}, +D{l:6,t:0,i:1727}, +D{l:7,t:0,i:1082}, +D{l:7,t:0,i:1545}, +D{l:8,t:0,i:56}, +D{l:8,t:0,i:118}, +D{l:8,t:0,i:412}, +D{l:8,t:0,i:564}, +D{l:9,t:0,i:888}, +D{l:9,t:0,i:908}, +D{l:10,t:0,i:50}, +D{l:10,t:0,i:423}, +D{l:11,t:0,i:685}, +D{l:11,t:0,i:697}, +D{l:11,t:0,i:933}, +D{l:12,t:0,i:299}, +D{l:13,t:0,i:126}, +D{l:13,t:0,i:136}, +D{l:13,t:0,i:170}, +D{l:13,t:0,i:190}, +D{l:136,t:10,i:688}, +D{l:132,t:10,i:697}, +D{l:4,t:0,i:232}, +D{l:9,t:0,i:202}, +D{l:10,t:0,i:474}, +D{l:140,t:0,i:433}, +D{l:136,t:0,i:212}, +D{l:6,t:0,i:108}, +D{l:7,t:0,i:1003}, +D{l:7,t:0,i:1181}, +D{l:8,t:0,i:111}, +D{l:136,t:0,i:343}, +D{l:5,t:10,i:221}, +D{l:135,t:11,i:1255}, +D{l:133,t:11,i:485}, +D{l:134,t:0,i:1712}, +D{l:142,t:0,i:216}, +D{l:5,t:0,i:643}, +D{l:6,t:0,i:516}, +D{l:4,t:11,i:285}, +D{l:5,t:11,i:317}, +D{l:6,t:11,i:301}, +D{l:7,t:11,i:7}, +D{l:8,t:11,i:153}, +D{l:10,t:11,i:766}, +D{l:11,t:11,i:468}, +D{l:12,t:11,i:467}, +D{l:141,t:11,i:143}, +D{l:4,t:0,i:133}, +D{l:7,t:0,i:711}, +D{l:7,t:0,i:1298}, +D{l:135,t:0,i:1585}, +D{l:134,t:0,i:650}, +D{l:135,t:11,i:512}, +D{l:6,t:0,i:99}, +D{l:7,t:0,i:1808}, +D{l:145,t:0,i:57}, +D{l:6,t:0,i:246}, +D{l:6,t:0,i:574}, +D{l:7,t:0,i:428}, +D{l:9,t:0,i:793}, +D{l:10,t:0,i:669}, +D{l:11,t:0,i:485}, +D{l:11,t:0,i:840}, +D{l:12,t:0,i:300}, +D{l:14,t:0,i:250}, +D{l:145,t:0,i:55}, +D{l:4,t:10,i:132}, +D{l:5,t:10,i:69}, +D{l:135,t:10,i:1242}, +D{l:136,t:0,i:1023}, +D{l:7,t:0,i:302}, +D{l:132,t:10,i:111}, +D{l:135,t:0,i:1871}, +D{l:132,t:0,i:728}, +D{l:9,t:0,i:252}, +D{l:132,t:10,i:767}, +D{l:6,t:0,i:461}, +D{l:7,t:0,i:1590}, +D{l:7,t:10,i:1416}, +D{l:7,t:10,i:2005}, +D{l:8,t:10,i:131}, +D{l:8,t:10,i:466}, +D{l:9,t:10,i:672}, +D{l:13,t:10,i:252}, +D{l:148,t:10,i:103}, +D{l:6,t:0,i:323}, +D{l:135,t:0,i:1564}, +D{l:7,t:0,i:461}, +D{l:136,t:0,i:775}, +D{l:6,t:10,i:44}, +D{l:136,t:10,i:368}, +D{l:139,t:0,i:172}, +D{l:132,t:0,i:464}, +D{l:4,t:10,i:570}, +D{l:133,t:10,i:120}, +D{l:137,t:11,i:269}, +D{l:6,t:10,i:227}, +D{l:135,t:10,i:1589}, +D{l:6,t:11,i:1719}, +D{l:6,t:11,i:1735}, +D{l:7,t:11,i:2016}, +D{l:7,t:11,i:2020}, +D{l:8,t:11,i:837}, +D{l:137,t:11,i:852}, +D{l:7,t:0,i:727}, +D{l:146,t:0,i:73}, +D{l:132,t:0,i:1023}, +D{l:135,t:11,i:852}, +D{l:135,t:10,i:1529}, +D{l:136,t:0,i:577}, +D{l:138,t:11,i:568}, +D{l:134,t:0,i:1037}, +D{l:8,t:11,i:67}, +D{l:138,t:11,i:419}, +D{l:4,t:0,i:413}, +D{l:5,t:0,i:677}, +D{l:8,t:0,i:432}, +D{l:140,t:0,i:280}, +D{l:10,t:0,i:600}, +D{l:6,t:10,i:1667}, +D{l:7,t:11,i:967}, +D{l:7,t:10,i:2036}, +D{l:141,t:11,i:11}, +D{l:6,t:10,i:511}, +D{l:140,t:10,i:132}, +D{l:6,t:0,i:799}, +D{l:5,t:10,i:568}, +D{l:6,t:10,i:138}, +D{l:135,t:10,i:1293}, +D{l:8,t:0,i:159}, +D{l:4,t:10,i:565}, +D{l:136,t:10,i:827}, +D{l:7,t:0,i:646}, +D{l:7,t:0,i:1730}, +D{l:11,t:0,i:446}, +D{l:141,t:0,i:178}, +D{l:4,t:10,i:922}, +D{l:133,t:10,i:1023}, +D{l:135,t:11,i:11}, +D{l:132,t:0,i:395}, +D{l:11,t:0,i:145}, +D{l:135,t:10,i:1002}, +D{l:9,t:0,i:174}, +D{l:10,t:0,i:164}, +D{l:11,t:0,i:440}, +D{l:11,t:0,i:514}, +D{l:11,t:0,i:841}, +D{l:15,t:0,i:98}, +D{l:149,t:0,i:20}, +D{l:134,t:0,i:426}, +D{l:10,t:0,i:608}, +D{l:139,t:0,i:1002}, +D{l:7,t:11,i:320}, +D{l:8,t:11,i:51}, +D{l:12,t:11,i:481}, +D{l:12,t:11,i:570}, +D{l:148,t:11,i:106}, +D{l:9,t:0,i:977}, +D{l:9,t:0,i:983}, +D{l:132,t:11,i:445}, +D{l:138,t:0,i:250}, +D{l:139,t:0,i:100}, +D{l:6,t:0,i:1982}, +D{l:136,t:10,i:402}, +D{l:133,t:11,i:239}, +D{l:4,t:10,i:716}, +D{l:141,t:10,i:31}, +D{l:5,t:0,i:476}, +D{l:7,t:11,i:83}, +D{l:7,t:11,i:1990}, +D{l:8,t:11,i:130}, +D{l:139,t:11,i:720}, +D{l:8,t:10,i:691}, +D{l:136,t:10,i:731}, +D{l:5,t:11,i:123}, +D{l:6,t:11,i:530}, +D{l:7,t:11,i:348}, +D{l:135,t:11,i:1419}, +D{l:5,t:0,i:76}, +D{l:6,t:0,i:458}, +D{l:6,t:0,i:497}, +D{l:7,t:0,i:868}, +D{l:9,t:0,i:658}, +D{l:10,t:0,i:594}, +D{l:11,t:0,i:173}, +D{l:11,t:0,i:566}, +D{l:12,t:0,i:20}, +D{l:12,t:0,i:338}, +D{l:141,t:0,i:200}, +D{l:9,t:11,i:139}, +D{l:10,t:11,i:399}, +D{l:11,t:11,i:469}, +D{l:12,t:11,i:634}, +D{l:141,t:11,i:223}, +D{l:9,t:10,i:840}, +D{l:138,t:10,i:803}, +D{l:133,t:10,i:847}, +D{l:11,t:11,i:223}, +D{l:140,t:11,i:168}, +D{l:132,t:11,i:210}, +D{l:8,t:0,i:447}, +D{l:9,t:10,i:53}, +D{l:9,t:10,i:268}, +D{l:9,t:10,i:901}, +D{l:10,t:10,i:518}, +D{l:10,t:10,i:829}, +D{l:11,t:10,i:188}, +D{l:13,t:10,i:74}, +D{l:14,t:10,i:46}, +D{l:15,t:10,i:17}, +D{l:15,t:10,i:33}, +D{l:17,t:10,i:40}, +D{l:18,t:10,i:36}, +D{l:19,t:10,i:20}, +D{l:22,t:10,i:1}, +D{l:152,t:10,i:2}, +D{l:4,t:0,i:526}, +D{l:7,t:0,i:1029}, +D{l:135,t:0,i:1054}, +D{l:19,t:11,i:59}, +D{l:150,t:11,i:2}, +D{l:4,t:0,i:636}, +D{l:6,t:0,i:1875}, +D{l:6,t:0,i:1920}, +D{l:9,t:0,i:999}, +D{l:12,t:0,i:807}, +D{l:12,t:0,i:825}, +D{l:15,t:0,i:179}, +D{l:15,t:0,i:190}, +D{l:18,t:0,i:182}, +D{l:136,t:10,i:532}, +D{l:6,t:0,i:1699}, +D{l:7,t:0,i:660}, +D{l:7,t:0,i:1124}, +D{l:17,t:0,i:31}, +D{l:19,t:0,i:22}, +D{l:151,t:0,i:14}, +D{l:135,t:10,i:681}, +D{l:132,t:11,i:430}, +D{l:140,t:10,i:677}, +D{l:4,t:10,i:684}, +D{l:136,t:10,i:384}, +D{l:132,t:11,i:756}, +D{l:133,t:11,i:213}, +D{l:7,t:0,i:188}, +D{l:7,t:10,i:110}, +D{l:8,t:10,i:290}, +D{l:8,t:10,i:591}, +D{l:9,t:10,i:382}, +D{l:9,t:10,i:649}, +D{l:11,t:10,i:71}, +D{l:11,t:10,i:155}, +D{l:11,t:10,i:313}, +D{l:12,t:10,i:5}, +D{l:13,t:10,i:325}, +D{l:142,t:10,i:287}, +D{l:7,t:10,i:360}, +D{l:7,t:10,i:425}, +D{l:9,t:10,i:66}, +D{l:9,t:10,i:278}, +D{l:138,t:10,i:644}, +D{l:142,t:11,i:164}, +D{l:4,t:0,i:279}, +D{l:7,t:0,i:301}, +D{l:137,t:0,i:362}, +D{l:134,t:11,i:586}, +D{l:135,t:0,i:1743}, +D{l:4,t:0,i:178}, +D{l:133,t:0,i:399}, +D{l:4,t:10,i:900}, +D{l:133,t:10,i:861}, +D{l:5,t:10,i:254}, +D{l:7,t:10,i:985}, +D{l:136,t:10,i:73}, +D{l:133,t:11,i:108}, +D{l:7,t:10,i:1959}, +D{l:136,t:10,i:683}, +D{l:133,t:11,i:219}, +D{l:4,t:11,i:193}, +D{l:5,t:11,i:916}, +D{l:7,t:11,i:364}, +D{l:10,t:11,i:398}, +D{l:10,t:11,i:726}, +D{l:11,t:11,i:317}, +D{l:11,t:11,i:626}, +D{l:12,t:11,i:142}, +D{l:12,t:11,i:288}, +D{l:12,t:11,i:678}, +D{l:13,t:11,i:313}, +D{l:15,t:11,i:113}, +D{l:18,t:11,i:114}, +D{l:21,t:11,i:30}, +D{l:150,t:11,i:53}, +D{l:6,t:11,i:241}, +D{l:7,t:11,i:907}, +D{l:8,t:11,i:832}, +D{l:9,t:11,i:342}, +D{l:10,t:11,i:729}, +D{l:11,t:11,i:284}, +D{l:11,t:11,i:445}, +D{l:11,t:11,i:651}, +D{l:11,t:11,i:863}, +D{l:13,t:11,i:398}, +D{l:146,t:11,i:99}, +D{l:132,t:0,i:872}, +D{l:134,t:0,i:831}, +D{l:134,t:0,i:1692}, +D{l:6,t:0,i:202}, +D{l:6,t:0,i:1006}, +D{l:9,t:0,i:832}, +D{l:10,t:0,i:636}, +D{l:11,t:0,i:208}, +D{l:12,t:0,i:360}, +D{l:17,t:0,i:118}, +D{l:18,t:0,i:27}, +D{l:20,t:0,i:67}, +D{l:137,t:11,i:734}, +D{l:132,t:10,i:725}, +D{l:7,t:11,i:993}, +D{l:138,t:11,i:666}, +D{l:134,t:0,i:1954}, +D{l:134,t:10,i:196}, +D{l:7,t:0,i:872}, +D{l:10,t:0,i:516}, +D{l:139,t:0,i:167}, +D{l:133,t:10,i:831}, +D{l:4,t:11,i:562}, +D{l:9,t:11,i:254}, +D{l:139,t:11,i:879}, +D{l:137,t:0,i:313}, +D{l:4,t:0,i:224}, +D{l:132,t:11,i:786}, +D{l:11,t:0,i:24}, +D{l:12,t:0,i:170}, +D{l:136,t:10,i:723}, +D{l:5,t:0,i:546}, +D{l:7,t:0,i:35}, +D{l:8,t:0,i:11}, +D{l:8,t:0,i:12}, +D{l:9,t:0,i:315}, +D{l:9,t:0,i:533}, +D{l:10,t:0,i:802}, +D{l:11,t:0,i:166}, +D{l:12,t:0,i:525}, +D{l:142,t:0,i:243}, +D{l:7,t:0,i:1937}, +D{l:13,t:10,i:80}, +D{l:13,t:10,i:437}, +D{l:145,t:10,i:74}, +D{l:5,t:0,i:241}, +D{l:8,t:0,i:242}, +D{l:9,t:0,i:451}, +D{l:10,t:0,i:667}, +D{l:11,t:0,i:598}, +D{l:140,t:0,i:429}, +D{l:150,t:0,i:46}, +D{l:6,t:0,i:1273}, +D{l:137,t:0,i:830}, +D{l:5,t:10,i:848}, +D{l:6,t:10,i:66}, +D{l:136,t:10,i:764}, +D{l:6,t:0,i:825}, +D{l:134,t:0,i:993}, +D{l:4,t:0,i:1006}, +D{l:10,t:0,i:327}, +D{l:13,t:0,i:271}, +D{l:4,t:10,i:36}, +D{l:7,t:10,i:1387}, +D{l:139,t:10,i:755}, +D{l:134,t:0,i:1023}, +D{l:135,t:0,i:1580}, +D{l:4,t:0,i:366}, +D{l:137,t:0,i:516}, +D{l:132,t:10,i:887}, +D{l:6,t:0,i:1736}, +D{l:135,t:0,i:1891}, +D{l:6,t:11,i:216}, +D{l:7,t:11,i:901}, +D{l:7,t:11,i:1343}, +D{l:136,t:11,i:493}, +D{l:6,t:10,i:165}, +D{l:138,t:10,i:388}, +D{l:7,t:11,i:341}, +D{l:139,t:11,i:219}, +D{l:4,t:10,i:719}, +D{l:135,t:10,i:155}, +D{l:134,t:0,i:1935}, +D{l:132,t:0,i:826}, +D{l:6,t:0,i:331}, +D{l:6,t:0,i:1605}, +D{l:8,t:0,i:623}, +D{l:11,t:0,i:139}, +D{l:139,t:0,i:171}, +D{l:135,t:11,i:1734}, +D{l:10,t:11,i:115}, +D{l:11,t:11,i:420}, +D{l:12,t:11,i:154}, +D{l:13,t:11,i:404}, +D{l:14,t:11,i:346}, +D{l:15,t:11,i:54}, +D{l:143,t:11,i:112}, +D{l:7,t:0,i:288}, +D{l:4,t:10,i:353}, +D{l:6,t:10,i:146}, +D{l:6,t:10,i:1789}, +D{l:7,t:10,i:990}, +D{l:7,t:10,i:1348}, +D{l:9,t:10,i:665}, +D{l:9,t:10,i:898}, +D{l:11,t:10,i:893}, +D{l:142,t:10,i:212}, +D{l:6,t:0,i:916}, +D{l:134,t:0,i:1592}, +D{l:7,t:0,i:1888}, +D{l:4,t:10,i:45}, +D{l:135,t:10,i:1257}, +D{l:5,t:11,i:1011}, +D{l:136,t:11,i:701}, +D{l:139,t:11,i:596}, +D{l:4,t:11,i:54}, +D{l:5,t:11,i:666}, +D{l:7,t:11,i:1039}, +D{l:7,t:11,i:1130}, +D{l:9,t:11,i:195}, +D{l:138,t:11,i:302}, +D{l:134,t:0,i:1471}, +D{l:134,t:0,i:1570}, +D{l:132,t:0,i:394}, +D{l:140,t:10,i:65}, +D{l:136,t:10,i:816}, +D{l:135,t:0,i:1931}, +D{l:7,t:0,i:574}, +D{l:135,t:0,i:1719}, +D{l:134,t:11,i:467}, +D{l:132,t:0,i:658}, +D{l:9,t:0,i:781}, +D{l:10,t:0,i:144}, +D{l:11,t:0,i:385}, +D{l:13,t:0,i:161}, +D{l:13,t:0,i:228}, +D{l:13,t:0,i:268}, +D{l:20,t:0,i:107}, +D{l:134,t:11,i:1669}, +D{l:136,t:0,i:374}, +D{l:135,t:0,i:735}, +D{l:4,t:0,i:344}, +D{l:6,t:0,i:498}, +D{l:139,t:0,i:323}, +D{l:7,t:0,i:586}, +D{l:7,t:0,i:1063}, +D{l:6,t:10,i:559}, +D{l:134,t:10,i:1691}, +D{l:137,t:0,i:155}, +D{l:133,t:0,i:906}, +D{l:7,t:11,i:122}, +D{l:9,t:11,i:259}, +D{l:10,t:11,i:84}, +D{l:11,t:11,i:470}, +D{l:12,t:11,i:541}, +D{l:141,t:11,i:379}, +D{l:134,t:0,i:1139}, +D{l:10,t:0,i:108}, +D{l:139,t:0,i:116}, +D{l:134,t:10,i:456}, +D{l:133,t:10,i:925}, +D{l:5,t:11,i:82}, +D{l:5,t:11,i:131}, +D{l:7,t:11,i:1755}, +D{l:8,t:11,i:31}, +D{l:9,t:11,i:168}, +D{l:9,t:11,i:764}, +D{l:139,t:11,i:869}, +D{l:134,t:11,i:605}, +D{l:5,t:11,i:278}, +D{l:137,t:11,i:68}, +D{l:4,t:11,i:163}, +D{l:5,t:11,i:201}, +D{l:5,t:11,i:307}, +D{l:5,t:11,i:310}, +D{l:6,t:11,i:335}, +D{l:7,t:11,i:284}, +D{l:136,t:11,i:165}, +D{l:135,t:11,i:1660}, +D{l:6,t:11,i:33}, +D{l:135,t:11,i:1244}, +D{l:4,t:0,i:616}, +D{l:136,t:11,i:483}, +D{l:8,t:0,i:857}, +D{l:8,t:0,i:902}, +D{l:8,t:0,i:910}, +D{l:10,t:0,i:879}, +D{l:12,t:0,i:726}, +D{l:4,t:11,i:199}, +D{l:139,t:11,i:34}, +D{l:136,t:0,i:692}, +D{l:6,t:10,i:193}, +D{l:7,t:10,i:240}, +D{l:7,t:10,i:1682}, +D{l:10,t:10,i:51}, +D{l:10,t:10,i:640}, +D{l:11,t:10,i:410}, +D{l:13,t:10,i:82}, +D{l:14,t:10,i:247}, +D{l:14,t:10,i:331}, +D{l:142,t:10,i:377}, +D{l:6,t:0,i:823}, +D{l:134,t:0,i:983}, +D{l:139,t:10,i:411}, +D{l:132,t:0,i:305}, +D{l:136,t:10,i:633}, +D{l:138,t:11,i:203}, +D{l:134,t:0,i:681}, +D{l:6,t:11,i:326}, +D{l:7,t:11,i:677}, +D{l:137,t:11,i:425}, +D{l:5,t:0,i:214}, +D{l:7,t:0,i:603}, +D{l:8,t:0,i:611}, +D{l:9,t:0,i:686}, +D{l:10,t:0,i:88}, +D{l:11,t:0,i:459}, +D{l:11,t:0,i:496}, +D{l:12,t:0,i:463}, +D{l:12,t:0,i:590}, +D{l:141,t:0,i:0}, +D{l:136,t:0,i:1004}, +D{l:142,t:0,i:23}, +D{l:134,t:0,i:1703}, +D{l:147,t:11,i:8}, +D{l:145,t:11,i:56}, +D{l:135,t:0,i:1443}, +D{l:4,t:10,i:237}, +D{l:135,t:10,i:514}, +D{l:6,t:0,i:714}, +D{l:145,t:0,i:19}, +D{l:5,t:11,i:358}, +D{l:7,t:11,i:473}, +D{l:7,t:11,i:1184}, +D{l:10,t:11,i:662}, +D{l:13,t:11,i:212}, +D{l:13,t:11,i:304}, +D{l:13,t:11,i:333}, +D{l:145,t:11,i:98}, +D{l:4,t:0,i:737}, +D{l:10,t:0,i:98}, +D{l:11,t:0,i:294}, +D{l:12,t:0,i:60}, +D{l:12,t:0,i:437}, +D{l:13,t:0,i:64}, +D{l:13,t:0,i:380}, +D{l:142,t:0,i:430}, +D{l:6,t:10,i:392}, +D{l:7,t:10,i:65}, +D{l:135,t:10,i:2019}, +D{l:6,t:0,i:1758}, +D{l:8,t:0,i:520}, +D{l:9,t:0,i:345}, +D{l:9,t:0,i:403}, +D{l:142,t:0,i:350}, +D{l:5,t:0,i:47}, +D{l:10,t:0,i:242}, +D{l:138,t:0,i:579}, +D{l:5,t:0,i:139}, +D{l:7,t:0,i:1168}, +D{l:138,t:0,i:539}, +D{l:134,t:0,i:1459}, +D{l:13,t:0,i:388}, +D{l:141,t:11,i:388}, +D{l:134,t:0,i:253}, +D{l:7,t:10,i:1260}, +D{l:135,t:10,i:1790}, +D{l:10,t:0,i:252}, +D{l:9,t:10,i:222}, +D{l:139,t:10,i:900}, +D{l:140,t:0,i:745}, +D{l:133,t:11,i:946}, +D{l:4,t:0,i:107}, +D{l:7,t:0,i:613}, +D{l:8,t:0,i:439}, +D{l:8,t:0,i:504}, +D{l:9,t:0,i:501}, +D{l:10,t:0,i:383}, +D{l:139,t:0,i:477}, +D{l:135,t:11,i:1485}, +D{l:132,t:0,i:871}, +D{l:7,t:11,i:411}, +D{l:7,t:11,i:590}, +D{l:8,t:11,i:631}, +D{l:9,t:11,i:323}, +D{l:10,t:11,i:355}, +D{l:11,t:11,i:491}, +D{l:12,t:11,i:143}, +D{l:12,t:11,i:402}, +D{l:13,t:11,i:73}, +D{l:14,t:11,i:408}, +D{l:15,t:11,i:107}, +D{l:146,t:11,i:71}, +D{l:132,t:0,i:229}, +D{l:132,t:0,i:903}, +D{l:140,t:0,i:71}, +D{l:133,t:0,i:549}, +D{l:4,t:0,i:47}, +D{l:6,t:0,i:373}, +D{l:7,t:0,i:452}, +D{l:7,t:0,i:543}, +D{l:7,t:0,i:1828}, +D{l:7,t:0,i:1856}, +D{l:9,t:0,i:6}, +D{l:11,t:0,i:257}, +D{l:139,t:0,i:391}, +D{l:7,t:11,i:1467}, +D{l:8,t:11,i:328}, +D{l:10,t:11,i:544}, +D{l:11,t:11,i:955}, +D{l:13,t:11,i:320}, +D{l:145,t:11,i:83}, +D{l:5,t:0,i:980}, +D{l:134,t:0,i:1754}, +D{l:136,t:0,i:865}, +D{l:5,t:0,i:705}, +D{l:137,t:0,i:606}, +D{l:7,t:0,i:161}, +D{l:8,t:10,i:201}, +D{l:136,t:10,i:605}, +D{l:143,t:11,i:35}, +D{l:5,t:11,i:835}, +D{l:6,t:11,i:483}, +D{l:140,t:10,i:224}, +D{l:7,t:0,i:536}, +D{l:7,t:0,i:1331}, +D{l:136,t:0,i:143}, +D{l:134,t:0,i:1388}, +D{l:5,t:0,i:724}, +D{l:10,t:0,i:305}, +D{l:11,t:0,i:151}, +D{l:12,t:0,i:33}, +D{l:12,t:0,i:121}, +D{l:12,t:0,i:381}, +D{l:17,t:0,i:3}, +D{l:17,t:0,i:27}, +D{l:17,t:0,i:78}, +D{l:18,t:0,i:18}, +D{l:19,t:0,i:54}, +D{l:149,t:0,i:5}, +D{l:4,t:10,i:523}, +D{l:133,t:10,i:638}, +D{l:5,t:0,i:19}, +D{l:134,t:0,i:533}, +D{l:5,t:0,i:395}, +D{l:5,t:0,i:951}, +D{l:134,t:0,i:1776}, +D{l:135,t:0,i:1908}, +D{l:132,t:0,i:846}, +D{l:10,t:0,i:74}, +D{l:11,t:0,i:663}, +D{l:12,t:0,i:210}, +D{l:13,t:0,i:166}, +D{l:13,t:0,i:310}, +D{l:14,t:0,i:373}, +D{l:18,t:0,i:95}, +D{l:19,t:0,i:43}, +D{l:6,t:10,i:242}, +D{l:7,t:10,i:227}, +D{l:7,t:10,i:1581}, +D{l:8,t:10,i:104}, +D{l:9,t:10,i:113}, +D{l:9,t:10,i:220}, +D{l:9,t:10,i:427}, +D{l:10,t:10,i:239}, +D{l:11,t:10,i:579}, +D{l:11,t:10,i:1023}, +D{l:13,t:10,i:4}, +D{l:13,t:10,i:204}, +D{l:13,t:10,i:316}, +D{l:148,t:10,i:86}, +D{l:9,t:11,i:716}, +D{l:11,t:11,i:108}, +D{l:13,t:11,i:123}, +D{l:14,t:11,i:252}, +D{l:19,t:11,i:38}, +D{l:21,t:11,i:3}, +D{l:151,t:11,i:11}, +D{l:8,t:0,i:372}, +D{l:9,t:0,i:122}, +D{l:138,t:0,i:175}, +D{l:132,t:11,i:677}, +D{l:7,t:11,i:1374}, +D{l:136,t:11,i:540}, +D{l:135,t:10,i:861}, +D{l:132,t:0,i:695}, +D{l:7,t:0,i:497}, +D{l:9,t:0,i:387}, +D{l:147,t:0,i:81}, +D{l:136,t:0,i:937}, +D{l:134,t:0,i:718}, +D{l:7,t:0,i:1328}, +D{l:136,t:10,i:494}, +D{l:132,t:11,i:331}, +D{l:6,t:0,i:1581}, +D{l:133,t:11,i:747}, +D{l:5,t:0,i:284}, +D{l:6,t:0,i:49}, +D{l:6,t:0,i:350}, +D{l:7,t:0,i:1}, +D{l:7,t:0,i:377}, +D{l:7,t:0,i:1693}, +D{l:8,t:0,i:18}, +D{l:8,t:0,i:678}, +D{l:9,t:0,i:161}, +D{l:9,t:0,i:585}, +D{l:9,t:0,i:671}, +D{l:9,t:0,i:839}, +D{l:11,t:0,i:912}, +D{l:141,t:0,i:427}, +D{l:7,t:10,i:1306}, +D{l:8,t:10,i:505}, +D{l:9,t:10,i:482}, +D{l:10,t:10,i:126}, +D{l:11,t:10,i:225}, +D{l:12,t:10,i:347}, +D{l:12,t:10,i:449}, +D{l:13,t:10,i:19}, +D{l:14,t:10,i:218}, +D{l:142,t:10,i:435}, +D{l:10,t:10,i:764}, +D{l:12,t:10,i:120}, +D{l:13,t:10,i:39}, +D{l:145,t:10,i:127}, +D{l:4,t:0,i:597}, +D{l:133,t:10,i:268}, +D{l:134,t:0,i:1094}, +D{l:4,t:0,i:1008}, +D{l:134,t:0,i:1973}, +D{l:132,t:0,i:811}, +D{l:139,t:0,i:908}, +D{l:135,t:0,i:1471}, +D{l:133,t:11,i:326}, +D{l:4,t:10,i:384}, +D{l:135,t:10,i:1022}, +D{l:7,t:0,i:1935}, +D{l:8,t:0,i:324}, +D{l:12,t:0,i:42}, +D{l:4,t:11,i:691}, +D{l:7,t:11,i:1935}, +D{l:8,t:11,i:324}, +D{l:9,t:11,i:35}, +D{l:10,t:11,i:680}, +D{l:11,t:11,i:364}, +D{l:12,t:11,i:42}, +D{l:13,t:11,i:357}, +D{l:146,t:11,i:16}, +D{l:135,t:0,i:2014}, +D{l:7,t:0,i:2007}, +D{l:9,t:0,i:101}, +D{l:9,t:0,i:450}, +D{l:10,t:0,i:66}, +D{l:10,t:0,i:842}, +D{l:11,t:0,i:536}, +D{l:12,t:0,i:587}, +D{l:6,t:11,i:32}, +D{l:7,t:11,i:385}, +D{l:7,t:11,i:757}, +D{l:7,t:11,i:1916}, +D{l:8,t:11,i:37}, +D{l:8,t:11,i:94}, +D{l:8,t:11,i:711}, +D{l:9,t:11,i:541}, +D{l:10,t:11,i:162}, +D{l:10,t:11,i:795}, +D{l:11,t:11,i:989}, +D{l:11,t:11,i:1010}, +D{l:12,t:11,i:14}, +D{l:142,t:11,i:308}, +D{l:139,t:0,i:586}, +D{l:135,t:10,i:1703}, +D{l:7,t:0,i:1077}, +D{l:11,t:0,i:28}, +D{l:9,t:10,i:159}, +D{l:140,t:10,i:603}, +D{l:6,t:0,i:1221}, +D{l:136,t:10,i:583}, +D{l:6,t:11,i:152}, +D{l:6,t:11,i:349}, +D{l:6,t:11,i:1682}, +D{l:7,t:11,i:1252}, +D{l:8,t:11,i:112}, +D{l:9,t:11,i:435}, +D{l:9,t:11,i:668}, +D{l:10,t:11,i:290}, +D{l:10,t:11,i:319}, +D{l:10,t:11,i:815}, +D{l:11,t:11,i:180}, +D{l:11,t:11,i:837}, +D{l:12,t:11,i:240}, +D{l:13,t:11,i:152}, +D{l:13,t:11,i:219}, +D{l:142,t:11,i:158}, +D{l:139,t:0,i:62}, +D{l:132,t:10,i:515}, +D{l:8,t:10,i:632}, +D{l:8,t:10,i:697}, +D{l:137,t:10,i:854}, +D{l:134,t:0,i:1766}, +D{l:132,t:11,i:581}, +D{l:6,t:11,i:126}, +D{l:7,t:11,i:573}, +D{l:8,t:11,i:397}, +D{l:142,t:11,i:44}, +D{l:150,t:0,i:28}, +D{l:11,t:0,i:670}, +D{l:22,t:0,i:25}, +D{l:4,t:10,i:136}, +D{l:133,t:10,i:551}, +D{l:6,t:0,i:1665}, +D{l:7,t:0,i:256}, +D{l:7,t:0,i:1388}, +D{l:138,t:0,i:499}, +D{l:4,t:0,i:22}, +D{l:5,t:0,i:10}, +D{l:7,t:0,i:1576}, +D{l:136,t:0,i:97}, +D{l:134,t:10,i:1782}, +D{l:5,t:0,i:481}, +D{l:7,t:10,i:1287}, +D{l:9,t:10,i:44}, +D{l:10,t:10,i:552}, +D{l:10,t:10,i:642}, +D{l:11,t:10,i:839}, +D{l:12,t:10,i:274}, +D{l:12,t:10,i:275}, +D{l:12,t:10,i:372}, +D{l:13,t:10,i:91}, +D{l:142,t:10,i:125}, +D{l:133,t:11,i:926}, +D{l:7,t:11,i:1232}, +D{l:137,t:11,i:531}, +D{l:6,t:0,i:134}, +D{l:7,t:0,i:437}, +D{l:7,t:0,i:1824}, +D{l:9,t:0,i:37}, +D{l:14,t:0,i:285}, +D{l:142,t:0,i:371}, +D{l:7,t:0,i:486}, +D{l:8,t:0,i:155}, +D{l:11,t:0,i:93}, +D{l:140,t:0,i:164}, +D{l:6,t:0,i:1391}, +D{l:134,t:0,i:1442}, +D{l:133,t:11,i:670}, +D{l:133,t:0,i:591}, +D{l:6,t:10,i:147}, +D{l:7,t:10,i:886}, +D{l:7,t:11,i:1957}, +D{l:9,t:10,i:753}, +D{l:138,t:10,i:268}, +D{l:5,t:0,i:380}, +D{l:5,t:0,i:650}, +D{l:7,t:0,i:1173}, +D{l:136,t:0,i:310}, +D{l:4,t:0,i:364}, +D{l:7,t:0,i:1156}, +D{l:7,t:0,i:1187}, +D{l:137,t:0,i:409}, +D{l:135,t:11,i:1621}, +D{l:134,t:0,i:482}, +D{l:133,t:11,i:506}, +D{l:4,t:0,i:781}, +D{l:6,t:0,i:487}, +D{l:7,t:0,i:926}, +D{l:8,t:0,i:263}, +D{l:139,t:0,i:500}, +D{l:138,t:10,i:137}, +D{l:135,t:11,i:242}, +D{l:139,t:11,i:96}, +D{l:133,t:10,i:414}, +D{l:135,t:10,i:1762}, +D{l:134,t:0,i:804}, +D{l:5,t:11,i:834}, +D{l:7,t:11,i:1202}, +D{l:8,t:11,i:14}, +D{l:9,t:11,i:481}, +D{l:137,t:11,i:880}, +D{l:134,t:10,i:599}, +D{l:4,t:0,i:94}, +D{l:135,t:0,i:1265}, +D{l:4,t:0,i:415}, +D{l:132,t:0,i:417}, +D{l:5,t:0,i:348}, +D{l:6,t:0,i:522}, +D{l:6,t:10,i:1749}, +D{l:7,t:11,i:1526}, +D{l:138,t:11,i:465}, +D{l:134,t:10,i:1627}, +D{l:132,t:0,i:1012}, +D{l:132,t:10,i:488}, +D{l:4,t:11,i:357}, +D{l:6,t:11,i:172}, +D{l:7,t:11,i:143}, +D{l:137,t:11,i:413}, +D{l:4,t:10,i:83}, +D{l:4,t:11,i:590}, +D{l:146,t:11,i:76}, +D{l:140,t:10,i:676}, +D{l:7,t:11,i:287}, +D{l:8,t:11,i:355}, +D{l:9,t:11,i:293}, +D{l:137,t:11,i:743}, +D{l:134,t:10,i:278}, +D{l:6,t:0,i:1803}, +D{l:18,t:0,i:165}, +D{l:24,t:0,i:21}, +D{l:5,t:11,i:169}, +D{l:7,t:11,i:333}, +D{l:136,t:11,i:45}, +D{l:12,t:10,i:97}, +D{l:140,t:11,i:97}, +D{l:4,t:0,i:408}, +D{l:4,t:0,i:741}, +D{l:135,t:0,i:500}, +D{l:132,t:11,i:198}, +D{l:7,t:10,i:388}, +D{l:7,t:10,i:644}, +D{l:139,t:10,i:781}, +D{l:4,t:11,i:24}, +D{l:5,t:11,i:140}, +D{l:5,t:11,i:185}, +D{l:7,t:11,i:1500}, +D{l:11,t:11,i:565}, +D{l:139,t:11,i:838}, +D{l:6,t:0,i:1321}, +D{l:9,t:0,i:257}, +D{l:7,t:10,i:229}, +D{l:8,t:10,i:59}, +D{l:9,t:10,i:190}, +D{l:10,t:10,i:378}, +D{l:140,t:10,i:191}, +D{l:4,t:11,i:334}, +D{l:133,t:11,i:593}, +D{l:135,t:11,i:1885}, +D{l:134,t:0,i:1138}, +D{l:4,t:0,i:249}, +D{l:6,t:0,i:73}, +D{l:135,t:0,i:177}, +D{l:133,t:0,i:576}, +D{l:142,t:0,i:231}, +D{l:137,t:0,i:288}, +D{l:132,t:10,i:660}, +D{l:7,t:10,i:1035}, +D{l:138,t:10,i:737}, +D{l:135,t:0,i:1487}, +D{l:6,t:0,i:989}, +D{l:9,t:0,i:433}, +D{l:7,t:10,i:690}, +D{l:9,t:10,i:587}, +D{l:140,t:10,i:521}, +D{l:7,t:0,i:1264}, +D{l:7,t:0,i:1678}, +D{l:11,t:0,i:945}, +D{l:12,t:0,i:341}, +D{l:12,t:0,i:471}, +D{l:140,t:0,i:569}, +D{l:132,t:11,i:709}, +D{l:133,t:11,i:897}, +D{l:5,t:11,i:224}, +D{l:13,t:11,i:174}, +D{l:146,t:11,i:52}, +D{l:135,t:11,i:1840}, +D{l:134,t:10,i:1744}, +D{l:12,t:0,i:87}, +D{l:16,t:0,i:74}, +D{l:4,t:10,i:733}, +D{l:9,t:10,i:194}, +D{l:10,t:10,i:92}, +D{l:11,t:10,i:198}, +D{l:12,t:10,i:84}, +D{l:141,t:10,i:128}, +D{l:140,t:0,i:779}, +D{l:135,t:0,i:538}, +D{l:4,t:11,i:608}, +D{l:133,t:11,i:497}, +D{l:133,t:0,i:413}, +D{l:7,t:11,i:1375}, +D{l:7,t:11,i:1466}, +D{l:138,t:11,i:331}, +D{l:136,t:0,i:495}, +D{l:6,t:11,i:540}, +D{l:136,t:11,i:136}, +D{l:7,t:0,i:54}, +D{l:8,t:0,i:312}, +D{l:10,t:0,i:191}, +D{l:10,t:0,i:614}, +D{l:140,t:0,i:567}, +D{l:6,t:0,i:468}, +D{l:7,t:0,i:567}, +D{l:7,t:0,i:1478}, +D{l:8,t:0,i:530}, +D{l:14,t:0,i:290}, +D{l:133,t:11,i:999}, +D{l:4,t:11,i:299}, +D{l:7,t:10,i:306}, +D{l:135,t:11,i:1004}, +D{l:142,t:11,i:296}, +D{l:134,t:0,i:1484}, +D{l:133,t:10,i:979}, +D{l:6,t:0,i:609}, +D{l:9,t:0,i:815}, +D{l:12,t:11,i:137}, +D{l:14,t:11,i:9}, +D{l:14,t:11,i:24}, +D{l:142,t:11,i:64}, +D{l:133,t:11,i:456}, +D{l:6,t:0,i:484}, +D{l:135,t:0,i:822}, +D{l:133,t:10,i:178}, +D{l:136,t:11,i:180}, +D{l:132,t:11,i:755}, +D{l:137,t:0,i:900}, +D{l:135,t:0,i:1335}, +D{l:6,t:0,i:1724}, +D{l:135,t:0,i:2022}, +D{l:135,t:11,i:1139}, +D{l:5,t:0,i:640}, +D{l:132,t:10,i:390}, +D{l:6,t:0,i:1831}, +D{l:138,t:11,i:633}, +D{l:135,t:11,i:566}, +D{l:4,t:11,i:890}, +D{l:5,t:11,i:805}, +D{l:5,t:11,i:819}, +D{l:5,t:11,i:961}, +D{l:6,t:11,i:396}, +D{l:6,t:11,i:1631}, +D{l:6,t:11,i:1678}, +D{l:7,t:11,i:1967}, +D{l:7,t:11,i:2041}, +D{l:9,t:11,i:630}, +D{l:11,t:11,i:8}, +D{l:11,t:11,i:1019}, +D{l:12,t:11,i:176}, +D{l:13,t:11,i:225}, +D{l:14,t:11,i:292}, +D{l:149,t:11,i:24}, +D{l:132,t:0,i:474}, +D{l:134,t:0,i:1103}, +D{l:135,t:0,i:1504}, +D{l:134,t:0,i:1576}, +D{l:6,t:0,i:961}, +D{l:6,t:0,i:1034}, +D{l:140,t:0,i:655}, +D{l:11,t:11,i:514}, +D{l:149,t:11,i:20}, +D{l:5,t:0,i:305}, +D{l:135,t:11,i:1815}, +D{l:7,t:11,i:1505}, +D{l:10,t:11,i:190}, +D{l:10,t:11,i:634}, +D{l:11,t:11,i:792}, +D{l:12,t:11,i:358}, +D{l:140,t:11,i:447}, +D{l:5,t:11,i:0}, +D{l:6,t:11,i:536}, +D{l:7,t:11,i:604}, +D{l:13,t:11,i:445}, +D{l:145,t:11,i:126}, +D{l:7,t:0,i:1236}, +D{l:133,t:10,i:105}, +D{l:4,t:0,i:480}, +D{l:6,t:0,i:217}, +D{l:6,t:0,i:302}, +D{l:6,t:0,i:1642}, +D{l:7,t:0,i:130}, +D{l:7,t:0,i:837}, +D{l:7,t:0,i:1321}, +D{l:7,t:0,i:1547}, +D{l:7,t:0,i:1657}, +D{l:8,t:0,i:429}, +D{l:9,t:0,i:228}, +D{l:13,t:0,i:289}, +D{l:13,t:0,i:343}, +D{l:19,t:0,i:101}, +D{l:6,t:11,i:232}, +D{l:6,t:11,i:412}, +D{l:7,t:11,i:1074}, +D{l:8,t:11,i:9}, +D{l:8,t:11,i:157}, +D{l:8,t:11,i:786}, +D{l:9,t:11,i:196}, +D{l:9,t:11,i:352}, +D{l:9,t:11,i:457}, +D{l:10,t:11,i:337}, +D{l:11,t:11,i:232}, +D{l:11,t:11,i:877}, +D{l:12,t:11,i:480}, +D{l:140,t:11,i:546}, +D{l:5,t:10,i:438}, +D{l:7,t:11,i:958}, +D{l:9,t:10,i:694}, +D{l:12,t:10,i:627}, +D{l:13,t:11,i:38}, +D{l:141,t:10,i:210}, +D{l:4,t:11,i:382}, +D{l:136,t:11,i:579}, +D{l:7,t:0,i:278}, +D{l:10,t:0,i:739}, +D{l:11,t:0,i:708}, +D{l:141,t:0,i:348}, +D{l:4,t:11,i:212}, +D{l:135,t:11,i:1206}, +D{l:135,t:11,i:1898}, +D{l:6,t:0,i:708}, +D{l:6,t:0,i:1344}, +D{l:152,t:10,i:11}, +D{l:137,t:11,i:768}, +D{l:134,t:0,i:1840}, +D{l:140,t:0,i:233}, +D{l:8,t:10,i:25}, +D{l:138,t:10,i:826}, +D{l:6,t:0,i:2017}, +D{l:133,t:11,i:655}, +D{l:6,t:0,i:1488}, +D{l:139,t:11,i:290}, +D{l:132,t:10,i:308}, +D{l:134,t:0,i:1590}, +D{l:134,t:0,i:1800}, +D{l:134,t:0,i:1259}, +D{l:16,t:0,i:28}, +D{l:6,t:11,i:231}, +D{l:7,t:11,i:95}, +D{l:136,t:11,i:423}, +D{l:133,t:11,i:300}, +D{l:135,t:10,i:150}, +D{l:136,t:10,i:649}, +D{l:7,t:11,i:1874}, +D{l:137,t:11,i:641}, +D{l:6,t:11,i:237}, +D{l:7,t:11,i:611}, +D{l:8,t:11,i:100}, +D{l:9,t:11,i:416}, +D{l:11,t:11,i:335}, +D{l:12,t:11,i:173}, +D{l:146,t:11,i:101}, +D{l:137,t:0,i:45}, +D{l:134,t:10,i:521}, +D{l:17,t:0,i:36}, +D{l:14,t:11,i:26}, +D{l:146,t:11,i:150}, +D{l:7,t:0,i:1442}, +D{l:14,t:0,i:22}, +D{l:5,t:10,i:339}, +D{l:15,t:10,i:41}, +D{l:15,t:10,i:166}, +D{l:147,t:10,i:66}, +D{l:8,t:0,i:378}, +D{l:6,t:11,i:581}, +D{l:135,t:11,i:1119}, +D{l:134,t:0,i:1507}, +D{l:147,t:11,i:117}, +D{l:139,t:0,i:39}, +D{l:134,t:0,i:1054}, +D{l:6,t:0,i:363}, +D{l:7,t:0,i:1955}, +D{l:136,t:0,i:725}, +D{l:134,t:0,i:2036}, +D{l:133,t:11,i:199}, +D{l:6,t:0,i:1871}, +D{l:9,t:0,i:935}, +D{l:9,t:0,i:961}, +D{l:9,t:0,i:1004}, +D{l:9,t:0,i:1016}, +D{l:12,t:0,i:805}, +D{l:12,t:0,i:852}, +D{l:12,t:0,i:853}, +D{l:12,t:0,i:869}, +D{l:12,t:0,i:882}, +D{l:12,t:0,i:896}, +D{l:12,t:0,i:906}, +D{l:12,t:0,i:917}, +D{l:12,t:0,i:940}, +D{l:15,t:0,i:170}, +D{l:15,t:0,i:176}, +D{l:15,t:0,i:188}, +D{l:15,t:0,i:201}, +D{l:15,t:0,i:205}, +D{l:15,t:0,i:212}, +D{l:15,t:0,i:234}, +D{l:15,t:0,i:244}, +D{l:18,t:0,i:181}, +D{l:18,t:0,i:193}, +D{l:18,t:0,i:196}, +D{l:18,t:0,i:201}, +D{l:18,t:0,i:202}, +D{l:18,t:0,i:210}, +D{l:18,t:0,i:217}, +D{l:18,t:0,i:235}, +D{l:18,t:0,i:236}, +D{l:18,t:0,i:237}, +D{l:21,t:0,i:54}, +D{l:21,t:0,i:55}, +D{l:21,t:0,i:58}, +D{l:21,t:0,i:59}, +D{l:152,t:0,i:22}, +D{l:134,t:10,i:1628}, +D{l:137,t:0,i:805}, +D{l:5,t:0,i:813}, +D{l:135,t:0,i:2046}, +D{l:142,t:11,i:42}, +D{l:5,t:0,i:712}, +D{l:6,t:0,i:1240}, +D{l:11,t:0,i:17}, +D{l:13,t:0,i:321}, +D{l:144,t:0,i:67}, +D{l:132,t:0,i:617}, +D{l:135,t:10,i:829}, +D{l:6,t:0,i:320}, +D{l:7,t:0,i:781}, +D{l:7,t:0,i:1921}, +D{l:9,t:0,i:55}, +D{l:10,t:0,i:186}, +D{l:10,t:0,i:273}, +D{l:10,t:0,i:664}, +D{l:10,t:0,i:801}, +D{l:11,t:0,i:996}, +D{l:11,t:0,i:997}, +D{l:13,t:0,i:157}, +D{l:142,t:0,i:170}, +D{l:136,t:0,i:271}, +D{l:5,t:10,i:486}, +D{l:135,t:10,i:1349}, +D{l:18,t:11,i:91}, +D{l:147,t:11,i:70}, +D{l:10,t:0,i:445}, +D{l:7,t:10,i:1635}, +D{l:8,t:10,i:17}, +D{l:138,t:10,i:295}, +D{l:136,t:11,i:404}, +D{l:7,t:0,i:103}, +D{l:7,t:0,i:863}, +D{l:11,t:0,i:184}, +D{l:145,t:0,i:62}, +D{l:138,t:10,i:558}, +D{l:137,t:0,i:659}, +D{l:6,t:11,i:312}, +D{l:6,t:11,i:1715}, +D{l:10,t:11,i:584}, +D{l:11,t:11,i:546}, +D{l:11,t:11,i:692}, +D{l:12,t:11,i:259}, +D{l:12,t:11,i:295}, +D{l:13,t:11,i:46}, +D{l:141,t:11,i:154}, +D{l:134,t:0,i:676}, +D{l:132,t:11,i:588}, +D{l:4,t:11,i:231}, +D{l:5,t:11,i:61}, +D{l:6,t:11,i:104}, +D{l:7,t:11,i:729}, +D{l:7,t:11,i:964}, +D{l:7,t:11,i:1658}, +D{l:140,t:11,i:414}, +D{l:6,t:11,i:263}, +D{l:138,t:11,i:757}, +D{l:11,t:0,i:337}, +D{l:142,t:0,i:303}, +D{l:135,t:11,i:1363}, +D{l:132,t:11,i:320}, +D{l:140,t:0,i:506}, +D{l:134,t:10,i:447}, +D{l:5,t:0,i:77}, +D{l:7,t:0,i:1455}, +D{l:10,t:0,i:843}, +D{l:147,t:0,i:73}, +D{l:7,t:10,i:577}, +D{l:7,t:10,i:1432}, +D{l:9,t:10,i:475}, +D{l:9,t:10,i:505}, +D{l:9,t:10,i:526}, +D{l:9,t:10,i:609}, +D{l:9,t:10,i:689}, +D{l:9,t:10,i:726}, +D{l:9,t:10,i:735}, +D{l:9,t:10,i:738}, +D{l:10,t:10,i:556}, +D{l:10,t:10,i:674}, +D{l:10,t:10,i:684}, +D{l:11,t:10,i:89}, +D{l:11,t:10,i:202}, +D{l:11,t:10,i:272}, +D{l:11,t:10,i:380}, +D{l:11,t:10,i:415}, +D{l:11,t:10,i:505}, +D{l:11,t:10,i:537}, +D{l:11,t:10,i:550}, +D{l:11,t:10,i:562}, +D{l:11,t:10,i:640}, +D{l:11,t:10,i:667}, +D{l:11,t:10,i:688}, +D{l:11,t:10,i:847}, +D{l:11,t:10,i:927}, +D{l:11,t:10,i:930}, +D{l:11,t:10,i:940}, +D{l:12,t:10,i:144}, +D{l:12,t:10,i:325}, +D{l:12,t:10,i:329}, +D{l:12,t:10,i:389}, +D{l:12,t:10,i:403}, +D{l:12,t:10,i:451}, +D{l:12,t:10,i:515}, +D{l:12,t:10,i:604}, +D{l:12,t:10,i:616}, +D{l:12,t:10,i:626}, +D{l:13,t:10,i:66}, +D{l:13,t:10,i:131}, +D{l:13,t:10,i:167}, +D{l:13,t:10,i:236}, +D{l:13,t:10,i:368}, +D{l:13,t:10,i:411}, +D{l:13,t:10,i:434}, +D{l:13,t:10,i:453}, +D{l:13,t:10,i:461}, +D{l:13,t:10,i:474}, +D{l:14,t:10,i:59}, +D{l:14,t:10,i:60}, +D{l:14,t:10,i:139}, +D{l:14,t:10,i:152}, +D{l:14,t:10,i:276}, +D{l:14,t:10,i:353}, +D{l:14,t:10,i:402}, +D{l:15,t:10,i:28}, +D{l:15,t:10,i:81}, +D{l:15,t:10,i:123}, +D{l:15,t:10,i:152}, +D{l:18,t:10,i:136}, +D{l:148,t:10,i:88}, +D{l:132,t:0,i:458}, +D{l:135,t:0,i:1420}, +D{l:6,t:0,i:109}, +D{l:10,t:0,i:382}, +D{l:4,t:11,i:405}, +D{l:4,t:10,i:609}, +D{l:7,t:10,i:756}, +D{l:7,t:11,i:817}, +D{l:9,t:10,i:544}, +D{l:11,t:10,i:413}, +D{l:14,t:11,i:58}, +D{l:14,t:10,i:307}, +D{l:16,t:10,i:25}, +D{l:17,t:11,i:37}, +D{l:146,t:11,i:124}, +D{l:6,t:0,i:330}, +D{l:7,t:0,i:1084}, +D{l:11,t:0,i:142}, +D{l:133,t:11,i:974}, +D{l:4,t:10,i:930}, +D{l:133,t:10,i:947}, +D{l:5,t:10,i:939}, +D{l:142,t:11,i:394}, +D{l:16,t:0,i:91}, +D{l:145,t:0,i:87}, +D{l:5,t:11,i:235}, +D{l:5,t:10,i:962}, +D{l:7,t:11,i:1239}, +D{l:11,t:11,i:131}, +D{l:140,t:11,i:370}, +D{l:11,t:0,i:492}, +D{l:5,t:10,i:651}, +D{l:8,t:10,i:170}, +D{l:9,t:10,i:61}, +D{l:9,t:10,i:63}, +D{l:10,t:10,i:23}, +D{l:10,t:10,i:37}, +D{l:10,t:10,i:834}, +D{l:11,t:10,i:4}, +D{l:11,t:10,i:281}, +D{l:11,t:10,i:503}, +D{l:11,t:10,i:677}, +D{l:12,t:10,i:96}, +D{l:12,t:10,i:130}, +D{l:12,t:10,i:244}, +D{l:14,t:10,i:5}, +D{l:14,t:10,i:40}, +D{l:14,t:10,i:162}, +D{l:14,t:10,i:202}, +D{l:146,t:10,i:133}, +D{l:4,t:10,i:406}, +D{l:5,t:10,i:579}, +D{l:12,t:10,i:492}, +D{l:150,t:10,i:15}, +D{l:9,t:11,i:137}, +D{l:138,t:11,i:221}, +D{l:134,t:0,i:1239}, +D{l:11,t:0,i:211}, +D{l:140,t:0,i:145}, +D{l:7,t:11,i:390}, +D{l:138,t:11,i:140}, +D{l:135,t:11,i:1418}, +D{l:135,t:11,i:1144}, +D{l:134,t:0,i:1049}, +D{l:7,t:0,i:321}, +D{l:6,t:10,i:17}, +D{l:7,t:10,i:1001}, +D{l:7,t:10,i:1982}, +D{l:9,t:10,i:886}, +D{l:10,t:10,i:489}, +D{l:10,t:10,i:800}, +D{l:11,t:10,i:782}, +D{l:12,t:10,i:320}, +D{l:13,t:10,i:467}, +D{l:14,t:10,i:145}, +D{l:14,t:10,i:387}, +D{l:143,t:10,i:119}, +D{l:145,t:10,i:17}, +D{l:5,t:11,i:407}, +D{l:11,t:11,i:489}, +D{l:19,t:11,i:37}, +D{l:20,t:11,i:73}, +D{l:150,t:11,i:38}, +D{l:133,t:10,i:458}, +D{l:135,t:0,i:1985}, +D{l:7,t:10,i:1983}, +D{l:8,t:10,i:0}, +D{l:8,t:10,i:171}, +D{l:9,t:10,i:120}, +D{l:9,t:10,i:732}, +D{l:10,t:10,i:473}, +D{l:11,t:10,i:656}, +D{l:11,t:10,i:998}, +D{l:18,t:10,i:0}, +D{l:18,t:10,i:2}, +D{l:147,t:10,i:21}, +D{l:5,t:11,i:325}, +D{l:7,t:11,i:1483}, +D{l:8,t:11,i:5}, +D{l:8,t:11,i:227}, +D{l:9,t:11,i:105}, +D{l:10,t:11,i:585}, +D{l:140,t:11,i:614}, +D{l:136,t:0,i:122}, +D{l:132,t:0,i:234}, +D{l:135,t:11,i:1196}, +D{l:6,t:0,i:976}, +D{l:6,t:0,i:1098}, +D{l:134,t:0,i:1441}, +D{l:7,t:0,i:253}, +D{l:136,t:0,i:549}, +D{l:6,t:11,i:621}, +D{l:13,t:11,i:504}, +D{l:144,t:11,i:19}, +D{l:132,t:10,i:519}, +D{l:5,t:0,i:430}, +D{l:5,t:0,i:932}, +D{l:6,t:0,i:131}, +D{l:7,t:0,i:417}, +D{l:9,t:0,i:522}, +D{l:11,t:0,i:314}, +D{l:141,t:0,i:390}, +D{l:14,t:0,i:149}, +D{l:14,t:0,i:399}, +D{l:143,t:0,i:57}, +D{l:5,t:10,i:907}, +D{l:6,t:10,i:31}, +D{l:6,t:11,i:218}, +D{l:7,t:10,i:491}, +D{l:7,t:10,i:530}, +D{l:8,t:10,i:592}, +D{l:11,t:10,i:53}, +D{l:11,t:10,i:779}, +D{l:12,t:10,i:167}, +D{l:12,t:10,i:411}, +D{l:14,t:10,i:14}, +D{l:14,t:10,i:136}, +D{l:15,t:10,i:72}, +D{l:16,t:10,i:17}, +D{l:144,t:10,i:72}, +D{l:140,t:11,i:330}, +D{l:7,t:11,i:454}, +D{l:7,t:11,i:782}, +D{l:136,t:11,i:768}, +D{l:132,t:0,i:507}, +D{l:10,t:11,i:676}, +D{l:140,t:11,i:462}, +D{l:6,t:0,i:630}, +D{l:9,t:0,i:811}, +D{l:4,t:10,i:208}, +D{l:5,t:10,i:106}, +D{l:6,t:10,i:531}, +D{l:8,t:10,i:408}, +D{l:9,t:10,i:188}, +D{l:138,t:10,i:572}, +D{l:4,t:0,i:343}, +D{l:5,t:0,i:511}, +D{l:134,t:10,i:1693}, +D{l:134,t:11,i:164}, +D{l:132,t:0,i:448}, +D{l:7,t:0,i:455}, +D{l:138,t:0,i:591}, +D{l:135,t:0,i:1381}, +D{l:12,t:10,i:441}, +D{l:150,t:11,i:50}, +D{l:9,t:10,i:449}, +D{l:10,t:10,i:192}, +D{l:138,t:10,i:740}, +D{l:6,t:0,i:575}, +D{l:132,t:10,i:241}, +D{l:134,t:0,i:1175}, +D{l:134,t:0,i:653}, +D{l:134,t:0,i:1761}, +D{l:134,t:0,i:1198}, +D{l:132,t:10,i:259}, +D{l:6,t:11,i:343}, +D{l:7,t:11,i:195}, +D{l:9,t:11,i:226}, +D{l:10,t:11,i:197}, +D{l:10,t:11,i:575}, +D{l:11,t:11,i:502}, +D{l:139,t:11,i:899}, +D{l:7,t:0,i:1127}, +D{l:7,t:0,i:1572}, +D{l:10,t:0,i:297}, +D{l:10,t:0,i:422}, +D{l:11,t:0,i:764}, +D{l:11,t:0,i:810}, +D{l:12,t:0,i:264}, +D{l:13,t:0,i:102}, +D{l:13,t:0,i:300}, +D{l:13,t:0,i:484}, +D{l:14,t:0,i:147}, +D{l:14,t:0,i:229}, +D{l:17,t:0,i:71}, +D{l:18,t:0,i:118}, +D{l:147,t:0,i:120}, +D{l:135,t:11,i:666}, +D{l:132,t:0,i:678}, +D{l:4,t:10,i:173}, +D{l:5,t:10,i:312}, +D{l:5,t:10,i:512}, +D{l:135,t:10,i:1285}, +D{l:7,t:10,i:1603}, +D{l:7,t:10,i:1691}, +D{l:9,t:10,i:464}, +D{l:11,t:10,i:195}, +D{l:12,t:10,i:279}, +D{l:12,t:10,i:448}, +D{l:14,t:10,i:11}, +D{l:147,t:10,i:102}, +D{l:16,t:0,i:99}, +D{l:146,t:0,i:164}, +D{l:7,t:11,i:1125}, +D{l:9,t:11,i:143}, +D{l:11,t:11,i:61}, +D{l:14,t:11,i:405}, +D{l:150,t:11,i:21}, +D{l:137,t:11,i:260}, +D{l:4,t:10,i:452}, +D{l:5,t:10,i:583}, +D{l:5,t:10,i:817}, +D{l:6,t:10,i:433}, +D{l:7,t:10,i:593}, +D{l:7,t:10,i:720}, +D{l:7,t:10,i:1378}, +D{l:8,t:10,i:161}, +D{l:9,t:10,i:284}, +D{l:10,t:10,i:313}, +D{l:139,t:10,i:886}, +D{l:132,t:10,i:547}, +D{l:136,t:10,i:722}, +D{l:14,t:0,i:35}, +D{l:142,t:0,i:191}, +D{l:141,t:0,i:45}, +D{l:138,t:0,i:121}, +D{l:132,t:0,i:125}, +D{l:134,t:0,i:1622}, +D{l:133,t:11,i:959}, +D{l:8,t:10,i:420}, +D{l:139,t:10,i:193}, +D{l:132,t:0,i:721}, +D{l:135,t:10,i:409}, +D{l:136,t:0,i:145}, +D{l:7,t:0,i:792}, +D{l:8,t:0,i:147}, +D{l:10,t:0,i:821}, +D{l:11,t:0,i:970}, +D{l:11,t:0,i:1021}, +D{l:136,t:11,i:173}, +D{l:134,t:11,i:266}, +D{l:132,t:0,i:715}, +D{l:7,t:0,i:1999}, +D{l:138,t:10,i:308}, +D{l:133,t:0,i:531}, +D{l:5,t:0,i:168}, +D{l:5,t:0,i:930}, +D{l:8,t:0,i:74}, +D{l:9,t:0,i:623}, +D{l:12,t:0,i:500}, +D{l:140,t:0,i:579}, +D{l:144,t:0,i:65}, +D{l:138,t:11,i:246}, +D{l:6,t:0,i:220}, +D{l:7,t:0,i:1101}, +D{l:13,t:0,i:105}, +D{l:142,t:11,i:314}, +D{l:5,t:10,i:1002}, +D{l:136,t:10,i:745}, +D{l:134,t:0,i:960}, +D{l:20,t:0,i:0}, +D{l:148,t:11,i:0}, +D{l:4,t:0,i:1005}, +D{l:4,t:10,i:239}, +D{l:6,t:10,i:477}, +D{l:7,t:10,i:1607}, +D{l:11,t:10,i:68}, +D{l:139,t:10,i:617}, +D{l:6,t:0,i:19}, +D{l:7,t:0,i:1413}, +D{l:139,t:0,i:428}, +D{l:149,t:10,i:13}, +D{l:7,t:0,i:96}, +D{l:8,t:0,i:401}, +D{l:8,t:0,i:703}, +D{l:9,t:0,i:896}, +D{l:136,t:11,i:300}, +D{l:134,t:0,i:1595}, +D{l:145,t:0,i:116}, +D{l:136,t:0,i:1021}, +D{l:7,t:0,i:1961}, +D{l:7,t:0,i:1965}, +D{l:7,t:0,i:2030}, +D{l:8,t:0,i:150}, +D{l:8,t:0,i:702}, +D{l:8,t:0,i:737}, +D{l:8,t:0,i:750}, +D{l:140,t:0,i:366}, +D{l:11,t:11,i:75}, +D{l:142,t:11,i:267}, +D{l:132,t:10,i:367}, +D{l:8,t:0,i:800}, +D{l:9,t:0,i:148}, +D{l:9,t:0,i:872}, +D{l:9,t:0,i:890}, +D{l:11,t:0,i:309}, +D{l:11,t:0,i:1001}, +D{l:13,t:0,i:267}, +D{l:13,t:0,i:323}, +D{l:5,t:11,i:427}, +D{l:5,t:11,i:734}, +D{l:7,t:11,i:478}, +D{l:136,t:11,i:52}, +D{l:7,t:11,i:239}, +D{l:11,t:11,i:217}, +D{l:142,t:11,i:165}, +D{l:132,t:11,i:323}, +D{l:140,t:11,i:419}, +D{l:13,t:0,i:299}, +D{l:142,t:0,i:75}, +D{l:6,t:11,i:87}, +D{l:6,t:11,i:1734}, +D{l:7,t:11,i:20}, +D{l:7,t:11,i:1056}, +D{l:8,t:11,i:732}, +D{l:9,t:11,i:406}, +D{l:9,t:11,i:911}, +D{l:138,t:11,i:694}, +D{l:134,t:0,i:1383}, +D{l:132,t:10,i:694}, +D{l:133,t:11,i:613}, +D{l:137,t:0,i:779}, +D{l:4,t:0,i:598}, +D{l:140,t:10,i:687}, +D{l:6,t:0,i:970}, +D{l:135,t:0,i:424}, +D{l:133,t:0,i:547}, +D{l:7,t:11,i:32}, +D{l:7,t:11,i:984}, +D{l:8,t:11,i:85}, +D{l:8,t:11,i:709}, +D{l:9,t:11,i:579}, +D{l:9,t:11,i:847}, +D{l:9,t:11,i:856}, +D{l:10,t:11,i:799}, +D{l:11,t:11,i:258}, +D{l:11,t:11,i:1007}, +D{l:12,t:11,i:331}, +D{l:12,t:11,i:615}, +D{l:13,t:11,i:188}, +D{l:13,t:11,i:435}, +D{l:14,t:11,i:8}, +D{l:15,t:11,i:165}, +D{l:16,t:11,i:27}, +D{l:148,t:11,i:40}, +D{l:6,t:0,i:1222}, +D{l:134,t:0,i:1385}, +D{l:132,t:0,i:876}, +D{l:138,t:11,i:151}, +D{l:135,t:10,i:213}, +D{l:4,t:11,i:167}, +D{l:135,t:11,i:82}, +D{l:133,t:0,i:133}, +D{l:6,t:11,i:24}, +D{l:7,t:11,i:74}, +D{l:7,t:11,i:678}, +D{l:137,t:11,i:258}, +D{l:5,t:11,i:62}, +D{l:6,t:11,i:534}, +D{l:7,t:11,i:684}, +D{l:7,t:11,i:1043}, +D{l:7,t:11,i:1072}, +D{l:8,t:11,i:280}, +D{l:8,t:11,i:541}, +D{l:8,t:11,i:686}, +D{l:10,t:11,i:519}, +D{l:11,t:11,i:252}, +D{l:140,t:11,i:282}, +D{l:136,t:0,i:187}, +D{l:8,t:0,i:8}, +D{l:10,t:0,i:0}, +D{l:10,t:0,i:818}, +D{l:139,t:0,i:988}, +D{l:132,t:11,i:359}, +D{l:11,t:0,i:429}, +D{l:15,t:0,i:51}, +D{l:135,t:10,i:1672}, +D{l:136,t:0,i:685}, +D{l:5,t:11,i:211}, +D{l:7,t:11,i:88}, +D{l:136,t:11,i:627}, +D{l:134,t:0,i:472}, +D{l:136,t:0,i:132}, +D{l:6,t:11,i:145}, +D{l:141,t:11,i:336}, +D{l:4,t:10,i:751}, +D{l:11,t:10,i:390}, +D{l:140,t:10,i:32}, +D{l:6,t:0,i:938}, +D{l:6,t:0,i:1060}, +D{l:4,t:11,i:263}, +D{l:4,t:10,i:409}, +D{l:133,t:10,i:78}, +D{l:137,t:0,i:874}, +D{l:8,t:0,i:774}, +D{l:10,t:0,i:670}, +D{l:12,t:0,i:51}, +D{l:4,t:11,i:916}, +D{l:6,t:10,i:473}, +D{l:7,t:10,i:1602}, +D{l:10,t:10,i:698}, +D{l:12,t:10,i:212}, +D{l:13,t:10,i:307}, +D{l:145,t:10,i:105}, +D{l:146,t:0,i:92}, +D{l:143,t:10,i:156}, +D{l:132,t:0,i:830}, +D{l:137,t:0,i:701}, +D{l:4,t:11,i:599}, +D{l:6,t:11,i:1634}, +D{l:7,t:11,i:5}, +D{l:7,t:11,i:55}, +D{l:7,t:11,i:67}, +D{l:7,t:11,i:97}, +D{l:7,t:11,i:691}, +D{l:7,t:11,i:979}, +D{l:7,t:11,i:1697}, +D{l:8,t:11,i:207}, +D{l:8,t:11,i:214}, +D{l:8,t:11,i:231}, +D{l:8,t:11,i:294}, +D{l:8,t:11,i:336}, +D{l:8,t:11,i:428}, +D{l:8,t:11,i:451}, +D{l:8,t:11,i:460}, +D{l:8,t:11,i:471}, +D{l:8,t:11,i:622}, +D{l:8,t:11,i:626}, +D{l:8,t:11,i:679}, +D{l:8,t:11,i:759}, +D{l:8,t:11,i:829}, +D{l:9,t:11,i:11}, +D{l:9,t:11,i:246}, +D{l:9,t:11,i:484}, +D{l:9,t:11,i:573}, +D{l:9,t:11,i:706}, +D{l:9,t:11,i:762}, +D{l:9,t:11,i:798}, +D{l:9,t:11,i:855}, +D{l:9,t:11,i:870}, +D{l:9,t:11,i:912}, +D{l:10,t:11,i:303}, +D{l:10,t:11,i:335}, +D{l:10,t:11,i:424}, +D{l:10,t:11,i:461}, +D{l:10,t:11,i:543}, +D{l:10,t:11,i:759}, +D{l:10,t:11,i:814}, +D{l:11,t:11,i:59}, +D{l:11,t:11,i:199}, +D{l:11,t:11,i:235}, +D{l:11,t:11,i:475}, +D{l:11,t:11,i:590}, +D{l:11,t:11,i:929}, +D{l:11,t:11,i:963}, +D{l:12,t:11,i:114}, +D{l:12,t:11,i:182}, +D{l:12,t:11,i:226}, +D{l:12,t:11,i:332}, +D{l:12,t:11,i:439}, +D{l:12,t:11,i:575}, +D{l:12,t:11,i:598}, +D{l:13,t:11,i:8}, +D{l:13,t:11,i:125}, +D{l:13,t:11,i:194}, +D{l:13,t:11,i:287}, +D{l:14,t:11,i:197}, +D{l:14,t:11,i:383}, +D{l:15,t:11,i:53}, +D{l:17,t:11,i:63}, +D{l:19,t:11,i:46}, +D{l:19,t:11,i:98}, +D{l:19,t:11,i:106}, +D{l:148,t:11,i:85}, +D{l:4,t:0,i:127}, +D{l:5,t:0,i:350}, +D{l:6,t:0,i:356}, +D{l:8,t:0,i:426}, +D{l:9,t:0,i:572}, +D{l:10,t:0,i:247}, +D{l:139,t:0,i:312}, +D{l:134,t:0,i:1215}, +D{l:6,t:0,i:59}, +D{l:9,t:0,i:603}, +D{l:13,t:0,i:397}, +D{l:7,t:11,i:1853}, +D{l:138,t:11,i:437}, +D{l:134,t:0,i:1762}, +D{l:147,t:11,i:126}, +D{l:135,t:10,i:883}, +D{l:13,t:0,i:293}, +D{l:142,t:0,i:56}, +D{l:133,t:10,i:617}, +D{l:139,t:10,i:50}, +D{l:5,t:11,i:187}, +D{l:7,t:10,i:1518}, +D{l:139,t:10,i:694}, +D{l:135,t:0,i:441}, +D{l:6,t:0,i:111}, +D{l:7,t:0,i:4}, +D{l:8,t:0,i:163}, +D{l:8,t:0,i:776}, +D{l:138,t:0,i:566}, +D{l:132,t:0,i:806}, +D{l:4,t:11,i:215}, +D{l:9,t:11,i:38}, +D{l:10,t:11,i:3}, +D{l:11,t:11,i:23}, +D{l:11,t:11,i:127}, +D{l:139,t:11,i:796}, +D{l:14,t:0,i:233}, +D{l:4,t:10,i:546}, +D{l:135,t:10,i:2042}, +D{l:135,t:0,i:1994}, +D{l:134,t:0,i:1739}, +D{l:135,t:11,i:1530}, +D{l:136,t:0,i:393}, +D{l:5,t:0,i:297}, +D{l:7,t:0,i:1038}, +D{l:14,t:0,i:359}, +D{l:19,t:0,i:52}, +D{l:148,t:0,i:47}, +D{l:135,t:0,i:309}, +D{l:4,t:10,i:313}, +D{l:133,t:10,i:577}, +D{l:8,t:10,i:184}, +D{l:141,t:10,i:433}, +D{l:135,t:10,i:935}, +D{l:12,t:10,i:186}, +D{l:12,t:10,i:292}, +D{l:14,t:10,i:100}, +D{l:146,t:10,i:70}, +D{l:136,t:0,i:363}, +D{l:14,t:0,i:175}, +D{l:11,t:10,i:402}, +D{l:12,t:10,i:109}, +D{l:12,t:10,i:431}, +D{l:13,t:10,i:179}, +D{l:13,t:10,i:206}, +D{l:14,t:10,i:217}, +D{l:16,t:10,i:3}, +D{l:148,t:10,i:53}, +D{l:5,t:10,i:886}, +D{l:6,t:10,i:46}, +D{l:6,t:10,i:1790}, +D{l:7,t:10,i:14}, +D{l:7,t:10,i:732}, +D{l:7,t:10,i:1654}, +D{l:8,t:10,i:95}, +D{l:8,t:10,i:327}, +D{l:8,t:10,i:616}, +D{l:9,t:10,i:892}, +D{l:10,t:10,i:598}, +D{l:10,t:10,i:769}, +D{l:11,t:10,i:134}, +D{l:11,t:10,i:747}, +D{l:12,t:10,i:378}, +D{l:142,t:10,i:97}, +D{l:136,t:0,i:666}, +D{l:135,t:0,i:1675}, +D{l:6,t:0,i:655}, +D{l:134,t:0,i:1600}, +D{l:135,t:0,i:808}, +D{l:133,t:10,i:1021}, +D{l:4,t:11,i:28}, +D{l:5,t:11,i:440}, +D{l:7,t:11,i:248}, +D{l:11,t:11,i:833}, +D{l:140,t:11,i:344}, +D{l:134,t:11,i:1654}, +D{l:132,t:0,i:280}, +D{l:140,t:0,i:54}, +D{l:4,t:0,i:421}, +D{l:133,t:0,i:548}, +D{l:132,t:10,i:153}, +D{l:6,t:11,i:339}, +D{l:135,t:11,i:923}, +D{l:133,t:11,i:853}, +D{l:133,t:10,i:798}, +D{l:132,t:10,i:587}, +D{l:6,t:11,i:249}, +D{l:7,t:11,i:1234}, +D{l:139,t:11,i:573}, +D{l:6,t:10,i:598}, +D{l:7,t:10,i:42}, +D{l:8,t:10,i:695}, +D{l:10,t:10,i:212}, +D{l:11,t:10,i:158}, +D{l:14,t:10,i:196}, +D{l:145,t:10,i:85}, +D{l:7,t:0,i:249}, +D{l:5,t:10,i:957}, +D{l:133,t:10,i:1008}, +D{l:4,t:10,i:129}, +D{l:135,t:10,i:465}, +D{l:6,t:0,i:254}, +D{l:7,t:0,i:842}, +D{l:7,t:0,i:1659}, +D{l:9,t:0,i:109}, +D{l:10,t:0,i:103}, +D{l:7,t:10,i:908}, +D{l:7,t:10,i:1201}, +D{l:9,t:10,i:755}, +D{l:11,t:10,i:906}, +D{l:12,t:10,i:527}, +D{l:146,t:10,i:7}, +D{l:5,t:0,i:262}, +D{l:136,t:10,i:450}, +D{l:144,t:0,i:1}, +D{l:10,t:11,i:201}, +D{l:142,t:11,i:319}, +D{l:7,t:11,i:49}, +D{l:7,t:11,i:392}, +D{l:8,t:11,i:20}, +D{l:8,t:11,i:172}, +D{l:8,t:11,i:690}, +D{l:9,t:11,i:383}, +D{l:9,t:11,i:845}, +D{l:10,t:11,i:48}, +D{l:11,t:11,i:293}, +D{l:11,t:11,i:832}, +D{l:11,t:11,i:920}, +D{l:141,t:11,i:221}, +D{l:5,t:11,i:858}, +D{l:133,t:11,i:992}, +D{l:134,t:0,i:805}, +D{l:139,t:10,i:1003}, +D{l:6,t:0,i:1630}, +D{l:134,t:11,i:307}, +D{l:7,t:11,i:1512}, +D{l:135,t:11,i:1794}, +D{l:6,t:11,i:268}, +D{l:137,t:11,i:62}, +D{l:135,t:10,i:1868}, +D{l:133,t:0,i:671}, +D{l:4,t:0,i:989}, +D{l:8,t:0,i:972}, +D{l:136,t:0,i:998}, +D{l:132,t:11,i:423}, +D{l:132,t:0,i:889}, +D{l:135,t:0,i:1382}, +D{l:135,t:0,i:1910}, +D{l:7,t:10,i:965}, +D{l:7,t:10,i:1460}, +D{l:135,t:10,i:1604}, +D{l:4,t:0,i:627}, +D{l:5,t:0,i:775}, +D{l:138,t:11,i:106}, +D{l:134,t:11,i:348}, +D{l:7,t:0,i:202}, +D{l:11,t:0,i:362}, +D{l:11,t:0,i:948}, +D{l:140,t:0,i:388}, +D{l:138,t:11,i:771}, +D{l:6,t:11,i:613}, +D{l:136,t:11,i:223}, +D{l:6,t:0,i:560}, +D{l:7,t:0,i:451}, +D{l:8,t:0,i:389}, +D{l:12,t:0,i:490}, +D{l:13,t:0,i:16}, +D{l:13,t:0,i:215}, +D{l:13,t:0,i:351}, +D{l:18,t:0,i:132}, +D{l:147,t:0,i:125}, +D{l:135,t:0,i:841}, +D{l:136,t:0,i:566}, +D{l:136,t:0,i:938}, +D{l:132,t:11,i:670}, +D{l:5,t:0,i:912}, +D{l:6,t:0,i:1695}, +D{l:140,t:11,i:55}, +D{l:9,t:11,i:40}, +D{l:139,t:11,i:136}, +D{l:7,t:0,i:1361}, +D{l:7,t:10,i:982}, +D{l:10,t:10,i:32}, +D{l:143,t:10,i:56}, +D{l:11,t:11,i:259}, +D{l:140,t:11,i:270}, +D{l:5,t:0,i:236}, +D{l:6,t:0,i:572}, +D{l:8,t:0,i:492}, +D{l:11,t:0,i:618}, +D{l:144,t:0,i:56}, +D{l:8,t:11,i:572}, +D{l:9,t:11,i:310}, +D{l:9,t:11,i:682}, +D{l:137,t:11,i:698}, +D{l:134,t:0,i:1854}, +D{l:5,t:0,i:190}, +D{l:136,t:0,i:318}, +D{l:133,t:10,i:435}, +D{l:135,t:0,i:1376}, +D{l:4,t:11,i:296}, +D{l:6,t:11,i:352}, +D{l:7,t:11,i:401}, +D{l:7,t:11,i:1410}, +D{l:7,t:11,i:1594}, +D{l:7,t:11,i:1674}, +D{l:8,t:11,i:63}, +D{l:8,t:11,i:660}, +D{l:137,t:11,i:74}, +D{l:7,t:0,i:349}, +D{l:5,t:10,i:85}, +D{l:6,t:10,i:419}, +D{l:7,t:10,i:305}, +D{l:7,t:10,i:361}, +D{l:7,t:10,i:1337}, +D{l:8,t:10,i:71}, +D{l:140,t:10,i:519}, +D{l:4,t:11,i:139}, +D{l:4,t:11,i:388}, +D{l:140,t:11,i:188}, +D{l:6,t:0,i:1972}, +D{l:6,t:0,i:2013}, +D{l:8,t:0,i:951}, +D{l:10,t:0,i:947}, +D{l:10,t:0,i:974}, +D{l:10,t:0,i:1018}, +D{l:142,t:0,i:476}, +D{l:140,t:10,i:688}, +D{l:135,t:10,i:740}, +D{l:5,t:10,i:691}, +D{l:7,t:10,i:345}, +D{l:9,t:10,i:94}, +D{l:140,t:10,i:169}, +D{l:9,t:0,i:344}, +D{l:5,t:10,i:183}, +D{l:6,t:10,i:582}, +D{l:10,t:10,i:679}, +D{l:140,t:10,i:435}, +D{l:135,t:10,i:511}, +D{l:132,t:0,i:850}, +D{l:8,t:11,i:441}, +D{l:10,t:11,i:314}, +D{l:143,t:11,i:3}, +D{l:7,t:10,i:1993}, +D{l:136,t:10,i:684}, +D{l:4,t:11,i:747}, +D{l:6,t:11,i:290}, +D{l:6,t:10,i:583}, +D{l:7,t:11,i:649}, +D{l:7,t:11,i:1479}, +D{l:135,t:11,i:1583}, +D{l:133,t:11,i:232}, +D{l:133,t:10,i:704}, +D{l:134,t:0,i:910}, +D{l:4,t:10,i:179}, +D{l:5,t:10,i:198}, +D{l:133,t:10,i:697}, +D{l:7,t:10,i:347}, +D{l:7,t:10,i:971}, +D{l:8,t:10,i:181}, +D{l:138,t:10,i:711}, +D{l:136,t:11,i:525}, +D{l:14,t:0,i:19}, +D{l:14,t:0,i:28}, +D{l:144,t:0,i:29}, +D{l:7,t:0,i:85}, +D{l:7,t:0,i:247}, +D{l:8,t:0,i:585}, +D{l:138,t:0,i:163}, +D{l:4,t:0,i:487}, +D{l:7,t:11,i:472}, +D{l:7,t:11,i:1801}, +D{l:10,t:11,i:748}, +D{l:141,t:11,i:458}, +D{l:4,t:10,i:243}, +D{l:5,t:10,i:203}, +D{l:7,t:10,i:19}, +D{l:7,t:10,i:71}, +D{l:7,t:10,i:113}, +D{l:10,t:10,i:405}, +D{l:11,t:10,i:357}, +D{l:142,t:10,i:240}, +D{l:7,t:10,i:1450}, +D{l:139,t:10,i:99}, +D{l:132,t:11,i:425}, +D{l:138,t:0,i:145}, +D{l:147,t:0,i:83}, +D{l:6,t:10,i:492}, +D{l:137,t:11,i:247}, +D{l:4,t:0,i:1013}, +D{l:134,t:0,i:2033}, +D{l:5,t:10,i:134}, +D{l:6,t:10,i:408}, +D{l:6,t:10,i:495}, +D{l:135,t:10,i:1593}, +D{l:135,t:0,i:1922}, +D{l:134,t:11,i:1768}, +D{l:4,t:0,i:124}, +D{l:10,t:0,i:457}, +D{l:11,t:0,i:121}, +D{l:11,t:0,i:169}, +D{l:11,t:0,i:870}, +D{l:11,t:0,i:874}, +D{l:12,t:0,i:214}, +D{l:14,t:0,i:187}, +D{l:143,t:0,i:77}, +D{l:5,t:0,i:557}, +D{l:135,t:0,i:1457}, +D{l:139,t:0,i:66}, +D{l:5,t:11,i:943}, +D{l:6,t:11,i:1779}, +D{l:142,t:10,i:4}, +D{l:4,t:10,i:248}, +D{l:4,t:10,i:665}, +D{l:7,t:10,i:137}, +D{l:137,t:10,i:349}, +D{l:7,t:0,i:1193}, +D{l:5,t:11,i:245}, +D{l:6,t:11,i:576}, +D{l:7,t:11,i:582}, +D{l:136,t:11,i:225}, +D{l:144,t:0,i:82}, +D{l:7,t:10,i:1270}, +D{l:139,t:10,i:612}, +D{l:5,t:0,i:454}, +D{l:10,t:0,i:352}, +D{l:138,t:11,i:352}, +D{l:18,t:0,i:57}, +D{l:5,t:10,i:371}, +D{l:135,t:10,i:563}, +D{l:135,t:0,i:1333}, +D{l:6,t:0,i:107}, +D{l:7,t:0,i:638}, +D{l:7,t:0,i:1632}, +D{l:9,t:0,i:396}, +D{l:134,t:11,i:610}, +D{l:5,t:0,i:370}, +D{l:134,t:0,i:1756}, +D{l:4,t:10,i:374}, +D{l:7,t:10,i:547}, +D{l:7,t:10,i:1700}, +D{l:7,t:10,i:1833}, +D{l:139,t:10,i:858}, +D{l:133,t:0,i:204}, +D{l:6,t:0,i:1305}, +D{l:9,t:10,i:311}, +D{l:141,t:10,i:42}, +D{l:5,t:0,i:970}, +D{l:134,t:0,i:1706}, +D{l:6,t:10,i:1647}, +D{l:7,t:10,i:1552}, +D{l:7,t:10,i:2010}, +D{l:9,t:10,i:494}, +D{l:137,t:10,i:509}, +D{l:13,t:11,i:455}, +D{l:15,t:11,i:99}, +D{l:15,t:11,i:129}, +D{l:144,t:11,i:68}, +D{l:135,t:0,i:3}, +D{l:4,t:0,i:35}, +D{l:5,t:0,i:121}, +D{l:5,t:0,i:483}, +D{l:5,t:0,i:685}, +D{l:6,t:0,i:489}, +D{l:6,t:0,i:782}, +D{l:6,t:0,i:1032}, +D{l:7,t:0,i:1204}, +D{l:136,t:0,i:394}, +D{l:4,t:0,i:921}, +D{l:133,t:0,i:1007}, +D{l:8,t:11,i:360}, +D{l:138,t:11,i:63}, +D{l:135,t:0,i:1696}, +D{l:134,t:0,i:1519}, +D{l:132,t:11,i:443}, +D{l:135,t:11,i:944}, +D{l:6,t:10,i:123}, +D{l:7,t:10,i:214}, +D{l:9,t:10,i:728}, +D{l:10,t:10,i:157}, +D{l:11,t:10,i:346}, +D{l:11,t:10,i:662}, +D{l:143,t:10,i:106}, +D{l:137,t:0,i:981}, +D{l:135,t:10,i:1435}, +D{l:134,t:0,i:1072}, +D{l:132,t:0,i:712}, +D{l:134,t:0,i:1629}, +D{l:134,t:0,i:728}, +D{l:4,t:11,i:298}, +D{l:137,t:11,i:483}, +D{l:6,t:0,i:1177}, +D{l:6,t:0,i:1271}, +D{l:5,t:11,i:164}, +D{l:7,t:11,i:121}, +D{l:142,t:11,i:189}, +D{l:7,t:0,i:1608}, +D{l:4,t:10,i:707}, +D{l:5,t:10,i:588}, +D{l:6,t:10,i:393}, +D{l:13,t:10,i:106}, +D{l:18,t:10,i:49}, +D{l:147,t:10,i:41}, +D{l:23,t:0,i:16}, +D{l:151,t:11,i:16}, +D{l:6,t:10,i:211}, +D{l:7,t:10,i:1690}, +D{l:11,t:10,i:486}, +D{l:140,t:10,i:369}, +D{l:133,t:0,i:485}, +D{l:19,t:11,i:15}, +D{l:149,t:11,i:27}, +D{l:4,t:11,i:172}, +D{l:9,t:11,i:611}, +D{l:10,t:11,i:436}, +D{l:12,t:11,i:673}, +D{l:141,t:11,i:255}, +D{l:5,t:11,i:844}, +D{l:10,t:11,i:484}, +D{l:11,t:11,i:754}, +D{l:12,t:11,i:457}, +D{l:14,t:11,i:171}, +D{l:14,t:11,i:389}, +D{l:146,t:11,i:153}, +D{l:4,t:0,i:285}, +D{l:5,t:0,i:27}, +D{l:5,t:0,i:317}, +D{l:6,t:0,i:301}, +D{l:7,t:0,i:7}, +D{l:8,t:0,i:153}, +D{l:10,t:0,i:766}, +D{l:11,t:0,i:468}, +D{l:12,t:0,i:467}, +D{l:141,t:0,i:143}, +D{l:134,t:0,i:1462}, +D{l:9,t:11,i:263}, +D{l:10,t:11,i:147}, +D{l:138,t:11,i:492}, +D{l:133,t:11,i:537}, +D{l:6,t:0,i:1945}, +D{l:6,t:0,i:1986}, +D{l:6,t:0,i:1991}, +D{l:134,t:0,i:2038}, +D{l:134,t:10,i:219}, +D{l:137,t:11,i:842}, +D{l:14,t:0,i:52}, +D{l:17,t:0,i:50}, +D{l:5,t:10,i:582}, +D{l:6,t:10,i:1646}, +D{l:7,t:10,i:99}, +D{l:7,t:10,i:1962}, +D{l:7,t:10,i:1986}, +D{l:8,t:10,i:515}, +D{l:8,t:10,i:773}, +D{l:9,t:10,i:23}, +D{l:9,t:10,i:491}, +D{l:12,t:10,i:620}, +D{l:142,t:10,i:93}, +D{l:138,t:11,i:97}, +D{l:20,t:0,i:21}, +D{l:20,t:0,i:44}, +D{l:133,t:10,i:851}, +D{l:136,t:0,i:819}, +D{l:139,t:0,i:917}, +D{l:5,t:11,i:230}, +D{l:5,t:11,i:392}, +D{l:6,t:11,i:420}, +D{l:8,t:10,i:762}, +D{l:8,t:10,i:812}, +D{l:9,t:11,i:568}, +D{l:9,t:10,i:910}, +D{l:140,t:11,i:612}, +D{l:135,t:0,i:784}, +D{l:15,t:0,i:135}, +D{l:143,t:11,i:135}, +D{l:10,t:0,i:454}, +D{l:140,t:0,i:324}, +D{l:4,t:11,i:0}, +D{l:5,t:11,i:41}, +D{l:7,t:11,i:1459}, +D{l:7,t:11,i:1469}, +D{l:7,t:11,i:1618}, +D{l:7,t:11,i:1859}, +D{l:9,t:11,i:549}, +D{l:139,t:11,i:905}, +D{l:4,t:10,i:98}, +D{l:7,t:10,i:1365}, +D{l:9,t:10,i:422}, +D{l:9,t:10,i:670}, +D{l:10,t:10,i:775}, +D{l:11,t:10,i:210}, +D{l:13,t:10,i:26}, +D{l:13,t:10,i:457}, +D{l:141,t:10,i:476}, +D{l:6,t:0,i:1719}, +D{l:6,t:0,i:1735}, +D{l:7,t:0,i:2016}, +D{l:7,t:0,i:2020}, +D{l:8,t:0,i:837}, +D{l:137,t:0,i:852}, +D{l:133,t:11,i:696}, +D{l:135,t:0,i:852}, +D{l:132,t:0,i:952}, +D{l:134,t:10,i:1730}, +D{l:132,t:11,i:771}, +D{l:138,t:0,i:568}, +D{l:137,t:0,i:448}, +D{l:139,t:0,i:146}, +D{l:8,t:0,i:67}, +D{l:138,t:0,i:419}, +D{l:133,t:11,i:921}, +D{l:137,t:10,i:147}, +D{l:134,t:0,i:1826}, +D{l:10,t:0,i:657}, +D{l:14,t:0,i:297}, +D{l:142,t:0,i:361}, +D{l:6,t:0,i:666}, +D{l:6,t:0,i:767}, +D{l:134,t:0,i:1542}, +D{l:139,t:0,i:729}, +D{l:6,t:11,i:180}, +D{l:7,t:11,i:1137}, +D{l:8,t:11,i:751}, +D{l:139,t:11,i:805}, +D{l:4,t:11,i:183}, +D{l:7,t:11,i:271}, +D{l:11,t:11,i:824}, +D{l:11,t:11,i:952}, +D{l:13,t:11,i:278}, +D{l:13,t:11,i:339}, +D{l:13,t:11,i:482}, +D{l:14,t:11,i:424}, +D{l:148,t:11,i:99}, +D{l:4,t:0,i:669}, +D{l:5,t:11,i:477}, +D{l:5,t:11,i:596}, +D{l:6,t:11,i:505}, +D{l:7,t:11,i:1221}, +D{l:11,t:11,i:907}, +D{l:12,t:11,i:209}, +D{l:141,t:11,i:214}, +D{l:135,t:11,i:1215}, +D{l:5,t:0,i:402}, +D{l:6,t:10,i:30}, +D{l:11,t:10,i:56}, +D{l:139,t:10,i:305}, +D{l:7,t:11,i:564}, +D{l:142,t:11,i:168}, +D{l:139,t:0,i:152}, +D{l:7,t:0,i:912}, +D{l:135,t:10,i:1614}, +D{l:4,t:10,i:150}, +D{l:5,t:10,i:303}, +D{l:134,t:10,i:327}, +D{l:7,t:0,i:320}, +D{l:8,t:0,i:51}, +D{l:9,t:0,i:868}, +D{l:10,t:0,i:833}, +D{l:12,t:0,i:481}, +D{l:12,t:0,i:570}, +D{l:148,t:0,i:106}, +D{l:132,t:0,i:445}, +D{l:7,t:11,i:274}, +D{l:11,t:11,i:263}, +D{l:11,t:11,i:479}, +D{l:11,t:11,i:507}, +D{l:140,t:11,i:277}, +D{l:10,t:0,i:555}, +D{l:11,t:0,i:308}, +D{l:19,t:0,i:95}, +D{l:6,t:11,i:1645}, +D{l:8,t:10,i:192}, +D{l:10,t:10,i:78}, +D{l:141,t:10,i:359}, +D{l:135,t:10,i:786}, +D{l:6,t:11,i:92}, +D{l:6,t:11,i:188}, +D{l:7,t:11,i:1269}, +D{l:7,t:11,i:1524}, +D{l:7,t:11,i:1876}, +D{l:10,t:11,i:228}, +D{l:139,t:11,i:1020}, +D{l:4,t:11,i:459}, +D{l:133,t:11,i:966}, +D{l:11,t:0,i:386}, +D{l:6,t:10,i:1638}, +D{l:7,t:10,i:79}, +D{l:7,t:10,i:496}, +D{l:9,t:10,i:138}, +D{l:10,t:10,i:336}, +D{l:12,t:10,i:412}, +D{l:12,t:10,i:440}, +D{l:142,t:10,i:305}, +D{l:133,t:0,i:239}, +D{l:7,t:0,i:83}, +D{l:7,t:0,i:1990}, +D{l:8,t:0,i:130}, +D{l:139,t:0,i:720}, +D{l:138,t:11,i:709}, +D{l:4,t:0,i:143}, +D{l:5,t:0,i:550}, +D{l:133,t:0,i:752}, +D{l:5,t:0,i:123}, +D{l:6,t:0,i:530}, +D{l:7,t:0,i:348}, +D{l:135,t:0,i:1419}, +D{l:135,t:0,i:2024}, +D{l:6,t:11,i:18}, +D{l:7,t:11,i:179}, +D{l:7,t:11,i:721}, +D{l:7,t:11,i:932}, +D{l:8,t:11,i:548}, +D{l:8,t:11,i:757}, +D{l:9,t:11,i:54}, +D{l:9,t:11,i:65}, +D{l:9,t:11,i:532}, +D{l:9,t:11,i:844}, +D{l:10,t:11,i:113}, +D{l:10,t:11,i:117}, +D{l:10,t:11,i:236}, +D{l:10,t:11,i:315}, +D{l:10,t:11,i:430}, +D{l:10,t:11,i:798}, +D{l:11,t:11,i:153}, +D{l:11,t:11,i:351}, +D{l:11,t:11,i:375}, +D{l:12,t:11,i:78}, +D{l:12,t:11,i:151}, +D{l:12,t:11,i:392}, +D{l:14,t:11,i:248}, +D{l:143,t:11,i:23}, +D{l:7,t:10,i:204}, +D{l:7,t:10,i:415}, +D{l:8,t:10,i:42}, +D{l:10,t:10,i:85}, +D{l:139,t:10,i:564}, +D{l:134,t:0,i:958}, +D{l:133,t:11,i:965}, +D{l:132,t:0,i:210}, +D{l:135,t:11,i:1429}, +D{l:138,t:11,i:480}, +D{l:134,t:11,i:182}, +D{l:139,t:11,i:345}, +D{l:10,t:11,i:65}, +D{l:10,t:11,i:488}, +D{l:138,t:11,i:497}, +D{l:4,t:10,i:3}, +D{l:5,t:10,i:247}, +D{l:5,t:10,i:644}, +D{l:7,t:10,i:744}, +D{l:7,t:10,i:1207}, +D{l:7,t:10,i:1225}, +D{l:7,t:10,i:1909}, +D{l:146,t:10,i:147}, +D{l:132,t:0,i:430}, +D{l:5,t:10,i:285}, +D{l:9,t:10,i:67}, +D{l:13,t:10,i:473}, +D{l:143,t:10,i:82}, +D{l:144,t:11,i:16}, +D{l:7,t:11,i:1162}, +D{l:9,t:11,i:588}, +D{l:10,t:11,i:260}, +D{l:151,t:10,i:8}, +D{l:133,t:0,i:213}, +D{l:138,t:0,i:7}, +D{l:135,t:0,i:801}, +D{l:134,t:11,i:1786}, +D{l:135,t:11,i:308}, +D{l:6,t:0,i:936}, +D{l:134,t:0,i:1289}, +D{l:133,t:0,i:108}, +D{l:132,t:0,i:885}, +D{l:133,t:0,i:219}, +D{l:139,t:0,i:587}, +D{l:4,t:0,i:193}, +D{l:5,t:0,i:916}, +D{l:6,t:0,i:1041}, +D{l:7,t:0,i:364}, +D{l:10,t:0,i:398}, +D{l:10,t:0,i:726}, +D{l:11,t:0,i:317}, +D{l:11,t:0,i:626}, +D{l:12,t:0,i:142}, +D{l:12,t:0,i:288}, +D{l:12,t:0,i:678}, +D{l:13,t:0,i:313}, +D{l:15,t:0,i:113}, +D{l:146,t:0,i:114}, +D{l:135,t:0,i:1165}, +D{l:6,t:0,i:241}, +D{l:9,t:0,i:342}, +D{l:10,t:0,i:729}, +D{l:11,t:0,i:284}, +D{l:11,t:0,i:445}, +D{l:11,t:0,i:651}, +D{l:11,t:0,i:863}, +D{l:13,t:0,i:398}, +D{l:146,t:0,i:99}, +D{l:7,t:0,i:907}, +D{l:136,t:0,i:832}, +D{l:9,t:0,i:303}, +D{l:4,t:10,i:29}, +D{l:6,t:10,i:532}, +D{l:7,t:10,i:1628}, +D{l:7,t:10,i:1648}, +D{l:9,t:10,i:350}, +D{l:10,t:10,i:433}, +D{l:11,t:10,i:97}, +D{l:11,t:10,i:557}, +D{l:11,t:10,i:745}, +D{l:12,t:10,i:289}, +D{l:12,t:10,i:335}, +D{l:12,t:10,i:348}, +D{l:12,t:10,i:606}, +D{l:13,t:10,i:116}, +D{l:13,t:10,i:233}, +D{l:13,t:10,i:466}, +D{l:14,t:10,i:181}, +D{l:14,t:10,i:209}, +D{l:14,t:10,i:232}, +D{l:14,t:10,i:236}, +D{l:14,t:10,i:300}, +D{l:16,t:10,i:41}, +D{l:148,t:10,i:97}, +D{l:7,t:11,i:423}, +D{l:7,t:10,i:1692}, +D{l:136,t:11,i:588}, +D{l:6,t:0,i:931}, +D{l:134,t:0,i:1454}, +D{l:5,t:10,i:501}, +D{l:7,t:10,i:1704}, +D{l:9,t:10,i:553}, +D{l:11,t:10,i:520}, +D{l:12,t:10,i:557}, +D{l:141,t:10,i:249}, +D{l:136,t:11,i:287}, +D{l:4,t:0,i:562}, +D{l:9,t:0,i:254}, +D{l:139,t:0,i:879}, +D{l:132,t:0,i:786}, +D{l:14,t:11,i:32}, +D{l:18,t:11,i:85}, +D{l:20,t:11,i:2}, +D{l:152,t:11,i:16}, +D{l:135,t:0,i:1294}, +D{l:7,t:11,i:723}, +D{l:135,t:11,i:1135}, +D{l:6,t:0,i:216}, +D{l:7,t:0,i:901}, +D{l:7,t:0,i:1343}, +D{l:8,t:0,i:493}, +D{l:134,t:11,i:403}, +D{l:7,t:11,i:719}, +D{l:8,t:11,i:809}, +D{l:136,t:11,i:834}, +D{l:5,t:11,i:210}, +D{l:6,t:11,i:213}, +D{l:7,t:11,i:60}, +D{l:10,t:11,i:364}, +D{l:139,t:11,i:135}, +D{l:7,t:0,i:341}, +D{l:11,t:0,i:219}, +D{l:5,t:11,i:607}, +D{l:8,t:11,i:326}, +D{l:136,t:11,i:490}, +D{l:4,t:11,i:701}, +D{l:5,t:11,i:472}, +D{l:5,t:11,i:639}, +D{l:7,t:11,i:1249}, +D{l:9,t:11,i:758}, +D{l:139,t:11,i:896}, +D{l:135,t:11,i:380}, +D{l:135,t:11,i:1947}, +D{l:139,t:0,i:130}, +D{l:135,t:0,i:1734}, +D{l:10,t:0,i:115}, +D{l:11,t:0,i:420}, +D{l:12,t:0,i:154}, +D{l:13,t:0,i:404}, +D{l:14,t:0,i:346}, +D{l:143,t:0,i:54}, +D{l:134,t:10,i:129}, +D{l:4,t:11,i:386}, +D{l:7,t:11,i:41}, +D{l:8,t:11,i:405}, +D{l:9,t:11,i:497}, +D{l:11,t:11,i:110}, +D{l:11,t:11,i:360}, +D{l:15,t:11,i:37}, +D{l:144,t:11,i:84}, +D{l:141,t:11,i:282}, +D{l:5,t:11,i:46}, +D{l:7,t:11,i:1452}, +D{l:7,t:11,i:1480}, +D{l:8,t:11,i:634}, +D{l:140,t:11,i:472}, +D{l:4,t:11,i:524}, +D{l:136,t:11,i:810}, +D{l:10,t:11,i:238}, +D{l:141,t:11,i:33}, +D{l:133,t:0,i:604}, +D{l:5,t:0,i:1011}, +D{l:136,t:0,i:701}, +D{l:8,t:0,i:856}, +D{l:8,t:0,i:858}, +D{l:8,t:0,i:879}, +D{l:12,t:0,i:702}, +D{l:142,t:0,i:447}, +D{l:4,t:0,i:54}, +D{l:5,t:0,i:666}, +D{l:7,t:0,i:1039}, +D{l:7,t:0,i:1130}, +D{l:9,t:0,i:195}, +D{l:138,t:0,i:302}, +D{l:4,t:10,i:25}, +D{l:5,t:10,i:60}, +D{l:6,t:10,i:504}, +D{l:7,t:10,i:614}, +D{l:7,t:10,i:1155}, +D{l:140,t:10,i:0}, +D{l:7,t:10,i:1248}, +D{l:11,t:10,i:621}, +D{l:139,t:10,i:702}, +D{l:133,t:11,i:997}, +D{l:137,t:10,i:321}, +D{l:134,t:0,i:1669}, +D{l:134,t:0,i:1791}, +D{l:4,t:10,i:379}, +D{l:135,t:10,i:1397}, +D{l:138,t:11,i:372}, +D{l:5,t:11,i:782}, +D{l:5,t:11,i:829}, +D{l:134,t:11,i:1738}, +D{l:135,t:0,i:1228}, +D{l:4,t:10,i:118}, +D{l:6,t:10,i:274}, +D{l:6,t:10,i:361}, +D{l:7,t:10,i:75}, +D{l:141,t:10,i:441}, +D{l:132,t:0,i:623}, +D{l:9,t:11,i:279}, +D{l:10,t:11,i:407}, +D{l:14,t:11,i:84}, +D{l:150,t:11,i:18}, +D{l:137,t:10,i:841}, +D{l:135,t:0,i:798}, +D{l:140,t:10,i:693}, +D{l:5,t:10,i:314}, +D{l:6,t:10,i:221}, +D{l:7,t:10,i:419}, +D{l:10,t:10,i:650}, +D{l:11,t:10,i:396}, +D{l:12,t:10,i:156}, +D{l:13,t:10,i:369}, +D{l:14,t:10,i:333}, +D{l:145,t:10,i:47}, +D{l:135,t:11,i:1372}, +D{l:7,t:0,i:122}, +D{l:9,t:0,i:259}, +D{l:10,t:0,i:84}, +D{l:11,t:0,i:470}, +D{l:12,t:0,i:541}, +D{l:141,t:0,i:379}, +D{l:134,t:0,i:837}, +D{l:8,t:0,i:1013}, +D{l:4,t:11,i:78}, +D{l:5,t:11,i:96}, +D{l:5,t:11,i:182}, +D{l:7,t:11,i:1724}, +D{l:7,t:11,i:1825}, +D{l:10,t:11,i:394}, +D{l:10,t:11,i:471}, +D{l:11,t:11,i:532}, +D{l:14,t:11,i:340}, +D{l:145,t:11,i:88}, +D{l:134,t:0,i:577}, +D{l:135,t:11,i:1964}, +D{l:132,t:10,i:913}, +D{l:134,t:0,i:460}, +D{l:8,t:0,i:891}, +D{l:10,t:0,i:901}, +D{l:10,t:0,i:919}, +D{l:10,t:0,i:932}, +D{l:12,t:0,i:715}, +D{l:12,t:0,i:728}, +D{l:12,t:0,i:777}, +D{l:14,t:0,i:457}, +D{l:144,t:0,i:103}, +D{l:5,t:0,i:82}, +D{l:5,t:0,i:131}, +D{l:7,t:0,i:1755}, +D{l:8,t:0,i:31}, +D{l:9,t:0,i:168}, +D{l:9,t:0,i:764}, +D{l:139,t:0,i:869}, +D{l:136,t:10,i:475}, +D{l:6,t:0,i:605}, +D{l:5,t:10,i:1016}, +D{l:9,t:11,i:601}, +D{l:9,t:11,i:619}, +D{l:10,t:11,i:505}, +D{l:10,t:11,i:732}, +D{l:11,t:11,i:355}, +D{l:140,t:11,i:139}, +D{l:7,t:10,i:602}, +D{l:8,t:10,i:179}, +D{l:10,t:10,i:781}, +D{l:140,t:10,i:126}, +D{l:134,t:0,i:1246}, +D{l:6,t:10,i:329}, +D{l:138,t:10,i:111}, +D{l:6,t:11,i:215}, +D{l:7,t:11,i:1028}, +D{l:7,t:11,i:1473}, +D{l:7,t:11,i:1721}, +D{l:9,t:11,i:424}, +D{l:138,t:11,i:779}, +D{l:5,t:0,i:278}, +D{l:137,t:0,i:68}, +D{l:6,t:0,i:932}, +D{l:6,t:0,i:1084}, +D{l:144,t:0,i:86}, +D{l:4,t:0,i:163}, +D{l:5,t:0,i:201}, +D{l:5,t:0,i:307}, +D{l:5,t:0,i:310}, +D{l:6,t:0,i:335}, +D{l:7,t:0,i:284}, +D{l:7,t:0,i:1660}, +D{l:136,t:0,i:165}, +D{l:136,t:0,i:781}, +D{l:134,t:0,i:707}, +D{l:6,t:0,i:33}, +D{l:135,t:0,i:1244}, +D{l:5,t:10,i:821}, +D{l:6,t:11,i:67}, +D{l:6,t:10,i:1687}, +D{l:7,t:11,i:258}, +D{l:7,t:11,i:1630}, +D{l:9,t:11,i:354}, +D{l:9,t:11,i:675}, +D{l:10,t:11,i:830}, +D{l:14,t:11,i:80}, +D{l:145,t:11,i:80}, +D{l:6,t:11,i:141}, +D{l:7,t:11,i:225}, +D{l:9,t:11,i:59}, +D{l:9,t:11,i:607}, +D{l:10,t:11,i:312}, +D{l:11,t:11,i:687}, +D{l:12,t:11,i:555}, +D{l:13,t:11,i:373}, +D{l:13,t:11,i:494}, +D{l:148,t:11,i:58}, +D{l:134,t:0,i:1113}, +D{l:9,t:0,i:388}, +D{l:5,t:10,i:71}, +D{l:7,t:10,i:1407}, +D{l:9,t:10,i:704}, +D{l:10,t:10,i:261}, +D{l:10,t:10,i:619}, +D{l:11,t:10,i:547}, +D{l:11,t:10,i:619}, +D{l:143,t:10,i:157}, +D{l:7,t:0,i:1953}, +D{l:136,t:0,i:720}, +D{l:138,t:0,i:203}, +D{l:7,t:10,i:2008}, +D{l:9,t:10,i:337}, +D{l:138,t:10,i:517}, +D{l:6,t:0,i:326}, +D{l:7,t:0,i:677}, +D{l:137,t:0,i:425}, +D{l:139,t:11,i:81}, +D{l:7,t:0,i:1316}, +D{l:7,t:0,i:1412}, +D{l:7,t:0,i:1839}, +D{l:9,t:0,i:589}, +D{l:11,t:0,i:241}, +D{l:11,t:0,i:676}, +D{l:11,t:0,i:811}, +D{l:11,t:0,i:891}, +D{l:12,t:0,i:140}, +D{l:12,t:0,i:346}, +D{l:12,t:0,i:479}, +D{l:13,t:0,i:140}, +D{l:13,t:0,i:381}, +D{l:14,t:0,i:188}, +D{l:18,t:0,i:30}, +D{l:148,t:0,i:108}, +D{l:5,t:0,i:416}, +D{l:6,t:10,i:86}, +D{l:6,t:10,i:603}, +D{l:7,t:10,i:292}, +D{l:7,t:10,i:561}, +D{l:8,t:10,i:257}, +D{l:8,t:10,i:382}, +D{l:9,t:10,i:721}, +D{l:9,t:10,i:778}, +D{l:11,t:10,i:581}, +D{l:140,t:10,i:466}, +D{l:4,t:10,i:486}, +D{l:133,t:10,i:491}, +D{l:134,t:0,i:1300}, +D{l:132,t:10,i:72}, +D{l:7,t:0,i:847}, +D{l:6,t:10,i:265}, +D{l:7,t:11,i:430}, +D{l:139,t:11,i:46}, +D{l:5,t:11,i:602}, +D{l:6,t:11,i:106}, +D{l:7,t:11,i:1786}, +D{l:7,t:11,i:1821}, +D{l:7,t:11,i:2018}, +D{l:9,t:11,i:418}, +D{l:137,t:11,i:763}, +D{l:5,t:0,i:358}, +D{l:7,t:0,i:535}, +D{l:7,t:0,i:1184}, +D{l:10,t:0,i:662}, +D{l:13,t:0,i:212}, +D{l:13,t:0,i:304}, +D{l:13,t:0,i:333}, +D{l:145,t:0,i:98}, +D{l:5,t:11,i:65}, +D{l:6,t:11,i:416}, +D{l:7,t:11,i:1720}, +D{l:7,t:11,i:1924}, +D{l:8,t:11,i:677}, +D{l:10,t:11,i:109}, +D{l:11,t:11,i:14}, +D{l:11,t:11,i:70}, +D{l:11,t:11,i:569}, +D{l:11,t:11,i:735}, +D{l:15,t:11,i:153}, +D{l:148,t:11,i:80}, +D{l:6,t:0,i:1823}, +D{l:8,t:0,i:839}, +D{l:8,t:0,i:852}, +D{l:8,t:0,i:903}, +D{l:10,t:0,i:940}, +D{l:12,t:0,i:707}, +D{l:140,t:0,i:775}, +D{l:135,t:11,i:1229}, +D{l:6,t:0,i:1522}, +D{l:140,t:0,i:654}, +D{l:136,t:11,i:595}, +D{l:139,t:0,i:163}, +D{l:141,t:0,i:314}, +D{l:132,t:0,i:978}, +D{l:4,t:0,i:601}, +D{l:6,t:0,i:2035}, +D{l:137,t:10,i:234}, +D{l:5,t:10,i:815}, +D{l:6,t:10,i:1688}, +D{l:134,t:10,i:1755}, +D{l:133,t:0,i:946}, +D{l:136,t:0,i:434}, +D{l:6,t:10,i:197}, +D{l:136,t:10,i:205}, +D{l:7,t:0,i:411}, +D{l:7,t:0,i:590}, +D{l:8,t:0,i:631}, +D{l:9,t:0,i:323}, +D{l:10,t:0,i:355}, +D{l:11,t:0,i:491}, +D{l:12,t:0,i:143}, +D{l:12,t:0,i:402}, +D{l:13,t:0,i:73}, +D{l:14,t:0,i:408}, +D{l:15,t:0,i:107}, +D{l:146,t:0,i:71}, +D{l:7,t:0,i:1467}, +D{l:8,t:0,i:328}, +D{l:10,t:0,i:544}, +D{l:11,t:0,i:955}, +D{l:12,t:0,i:13}, +D{l:13,t:0,i:320}, +D{l:145,t:0,i:83}, +D{l:142,t:0,i:410}, +D{l:11,t:0,i:511}, +D{l:13,t:0,i:394}, +D{l:14,t:0,i:298}, +D{l:14,t:0,i:318}, +D{l:146,t:0,i:103}, +D{l:6,t:10,i:452}, +D{l:7,t:10,i:312}, +D{l:138,t:10,i:219}, +D{l:138,t:10,i:589}, +D{l:4,t:10,i:333}, +D{l:9,t:10,i:176}, +D{l:12,t:10,i:353}, +D{l:141,t:10,i:187}, +D{l:135,t:11,i:329}, +D{l:132,t:11,i:469}, +D{l:5,t:0,i:835}, +D{l:134,t:0,i:483}, +D{l:134,t:11,i:1743}, +D{l:5,t:11,i:929}, +D{l:6,t:11,i:340}, +D{l:8,t:11,i:376}, +D{l:136,t:11,i:807}, +D{l:134,t:10,i:1685}, +D{l:132,t:0,i:677}, +D{l:5,t:11,i:218}, +D{l:7,t:11,i:1610}, +D{l:138,t:11,i:83}, +D{l:5,t:11,i:571}, +D{l:135,t:11,i:1842}, +D{l:132,t:11,i:455}, +D{l:137,t:0,i:70}, +D{l:135,t:0,i:1405}, +D{l:7,t:10,i:135}, +D{l:8,t:10,i:7}, +D{l:8,t:10,i:62}, +D{l:9,t:10,i:243}, +D{l:10,t:10,i:658}, +D{l:10,t:10,i:697}, +D{l:11,t:10,i:456}, +D{l:139,t:10,i:756}, +D{l:9,t:10,i:395}, +D{l:138,t:10,i:79}, +D{l:137,t:0,i:108}, +D{l:6,t:11,i:161}, +D{l:7,t:11,i:372}, +D{l:137,t:11,i:597}, +D{l:132,t:11,i:349}, +D{l:132,t:0,i:777}, +D{l:132,t:0,i:331}, +D{l:135,t:10,i:631}, +D{l:133,t:0,i:747}, +D{l:6,t:11,i:432}, +D{l:6,t:11,i:608}, +D{l:139,t:11,i:322}, +D{l:138,t:10,i:835}, +D{l:5,t:11,i:468}, +D{l:7,t:11,i:1809}, +D{l:10,t:11,i:325}, +D{l:11,t:11,i:856}, +D{l:12,t:11,i:345}, +D{l:143,t:11,i:104}, +D{l:133,t:11,i:223}, +D{l:7,t:10,i:406}, +D{l:7,t:10,i:459}, +D{l:8,t:10,i:606}, +D{l:139,t:10,i:726}, +D{l:132,t:11,i:566}, +D{l:142,t:0,i:68}, +D{l:4,t:11,i:59}, +D{l:135,t:11,i:1394}, +D{l:6,t:11,i:436}, +D{l:139,t:11,i:481}, +D{l:4,t:11,i:48}, +D{l:5,t:11,i:271}, +D{l:135,t:11,i:953}, +D{l:139,t:11,i:170}, +D{l:5,t:11,i:610}, +D{l:136,t:11,i:457}, +D{l:133,t:11,i:755}, +D{l:135,t:11,i:1217}, +D{l:133,t:10,i:612}, +D{l:132,t:11,i:197}, +D{l:132,t:0,i:505}, +D{l:4,t:10,i:372}, +D{l:7,t:10,i:482}, +D{l:8,t:10,i:158}, +D{l:9,t:10,i:602}, +D{l:9,t:10,i:615}, +D{l:10,t:10,i:245}, +D{l:10,t:10,i:678}, +D{l:10,t:10,i:744}, +D{l:11,t:10,i:248}, +D{l:139,t:10,i:806}, +D{l:133,t:0,i:326}, +D{l:5,t:10,i:854}, +D{l:135,t:10,i:1991}, +D{l:4,t:0,i:691}, +D{l:146,t:0,i:16}, +D{l:6,t:0,i:628}, +D{l:9,t:0,i:35}, +D{l:10,t:0,i:680}, +D{l:10,t:0,i:793}, +D{l:11,t:0,i:364}, +D{l:13,t:0,i:357}, +D{l:143,t:0,i:164}, +D{l:138,t:0,i:654}, +D{l:6,t:0,i:32}, +D{l:7,t:0,i:385}, +D{l:7,t:0,i:757}, +D{l:7,t:0,i:1916}, +D{l:8,t:0,i:37}, +D{l:8,t:0,i:94}, +D{l:8,t:0,i:711}, +D{l:9,t:0,i:541}, +D{l:10,t:0,i:162}, +D{l:10,t:0,i:795}, +D{l:11,t:0,i:989}, +D{l:11,t:0,i:1010}, +D{l:12,t:0,i:14}, +D{l:142,t:0,i:308}, +D{l:133,t:11,i:217}, +D{l:6,t:0,i:152}, +D{l:6,t:0,i:349}, +D{l:6,t:0,i:1682}, +D{l:7,t:0,i:1252}, +D{l:8,t:0,i:112}, +D{l:9,t:0,i:435}, +D{l:9,t:0,i:668}, +D{l:10,t:0,i:290}, +D{l:10,t:0,i:319}, +D{l:10,t:0,i:815}, +D{l:11,t:0,i:180}, +D{l:11,t:0,i:837}, +D{l:12,t:0,i:240}, +D{l:13,t:0,i:152}, +D{l:13,t:0,i:219}, +D{l:142,t:0,i:158}, +D{l:4,t:0,i:581}, +D{l:134,t:0,i:726}, +D{l:5,t:10,i:195}, +D{l:135,t:10,i:1685}, +D{l:6,t:0,i:126}, +D{l:7,t:0,i:573}, +D{l:8,t:0,i:397}, +D{l:142,t:0,i:44}, +D{l:138,t:0,i:89}, +D{l:7,t:10,i:1997}, +D{l:8,t:10,i:730}, +D{l:139,t:10,i:1006}, +D{l:134,t:0,i:1531}, +D{l:134,t:0,i:1167}, +D{l:5,t:0,i:926}, +D{l:12,t:0,i:203}, +D{l:133,t:10,i:751}, +D{l:4,t:11,i:165}, +D{l:7,t:11,i:1398}, +D{l:135,t:11,i:1829}, +D{l:7,t:0,i:1232}, +D{l:137,t:0,i:531}, +D{l:135,t:10,i:821}, +D{l:134,t:0,i:943}, +D{l:133,t:0,i:670}, +D{l:4,t:0,i:880}, +D{l:139,t:0,i:231}, +D{l:134,t:0,i:1617}, +D{l:135,t:0,i:1957}, +D{l:5,t:11,i:9}, +D{l:7,t:11,i:297}, +D{l:7,t:11,i:966}, +D{l:140,t:11,i:306}, +D{l:6,t:0,i:975}, +D{l:134,t:0,i:985}, +D{l:5,t:10,i:950}, +D{l:5,t:10,i:994}, +D{l:134,t:10,i:351}, +D{l:12,t:11,i:21}, +D{l:151,t:11,i:7}, +D{l:5,t:11,i:146}, +D{l:6,t:11,i:411}, +D{l:138,t:11,i:721}, +D{l:7,t:0,i:242}, +D{l:135,t:0,i:1942}, +D{l:6,t:11,i:177}, +D{l:135,t:11,i:467}, +D{l:5,t:0,i:421}, +D{l:7,t:10,i:47}, +D{l:137,t:10,i:684}, +D{l:5,t:0,i:834}, +D{l:7,t:0,i:1202}, +D{l:8,t:0,i:14}, +D{l:9,t:0,i:481}, +D{l:137,t:0,i:880}, +D{l:138,t:0,i:465}, +D{l:6,t:0,i:688}, +D{l:9,t:0,i:834}, +D{l:132,t:10,i:350}, +D{l:132,t:0,i:855}, +D{l:4,t:0,i:357}, +D{l:6,t:0,i:172}, +D{l:7,t:0,i:143}, +D{l:137,t:0,i:413}, +D{l:133,t:11,i:200}, +D{l:132,t:0,i:590}, +D{l:7,t:10,i:1812}, +D{l:13,t:10,i:259}, +D{l:13,t:10,i:356}, +D{l:14,t:10,i:242}, +D{l:147,t:10,i:114}, +D{l:133,t:10,i:967}, +D{l:11,t:0,i:114}, +D{l:4,t:10,i:473}, +D{l:7,t:10,i:623}, +D{l:8,t:10,i:808}, +D{l:9,t:10,i:871}, +D{l:9,t:10,i:893}, +D{l:11,t:10,i:431}, +D{l:12,t:10,i:112}, +D{l:12,t:10,i:217}, +D{l:12,t:10,i:243}, +D{l:12,t:10,i:562}, +D{l:12,t:10,i:663}, +D{l:12,t:10,i:683}, +D{l:13,t:10,i:141}, +D{l:13,t:10,i:197}, +D{l:13,t:10,i:227}, +D{l:13,t:10,i:406}, +D{l:13,t:10,i:487}, +D{l:14,t:10,i:156}, +D{l:14,t:10,i:203}, +D{l:14,t:10,i:224}, +D{l:14,t:10,i:256}, +D{l:18,t:10,i:58}, +D{l:150,t:10,i:0}, +D{l:138,t:10,i:286}, +D{l:4,t:10,i:222}, +D{l:7,t:10,i:286}, +D{l:136,t:10,i:629}, +D{l:5,t:0,i:169}, +D{l:7,t:0,i:333}, +D{l:136,t:0,i:45}, +D{l:134,t:11,i:481}, +D{l:132,t:0,i:198}, +D{l:4,t:0,i:24}, +D{l:5,t:0,i:140}, +D{l:5,t:0,i:185}, +D{l:7,t:0,i:1500}, +D{l:11,t:0,i:565}, +D{l:11,t:0,i:838}, +D{l:4,t:11,i:84}, +D{l:7,t:11,i:1482}, +D{l:10,t:11,i:76}, +D{l:138,t:11,i:142}, +D{l:133,t:0,i:585}, +D{l:141,t:10,i:306}, +D{l:133,t:11,i:1015}, +D{l:4,t:11,i:315}, +D{l:5,t:11,i:507}, +D{l:135,t:11,i:1370}, +D{l:136,t:10,i:146}, +D{l:6,t:0,i:691}, +D{l:134,t:0,i:1503}, +D{l:4,t:0,i:334}, +D{l:133,t:0,i:593}, +D{l:4,t:10,i:465}, +D{l:135,t:10,i:1663}, +D{l:142,t:11,i:173}, +D{l:135,t:0,i:913}, +D{l:12,t:0,i:116}, +D{l:134,t:11,i:1722}, +D{l:134,t:0,i:1360}, +D{l:132,t:0,i:802}, +D{l:8,t:11,i:222}, +D{l:8,t:11,i:476}, +D{l:9,t:11,i:238}, +D{l:11,t:11,i:516}, +D{l:11,t:11,i:575}, +D{l:15,t:11,i:109}, +D{l:146,t:11,i:100}, +D{l:6,t:0,i:308}, +D{l:9,t:0,i:673}, +D{l:7,t:10,i:138}, +D{l:7,t:10,i:517}, +D{l:139,t:10,i:238}, +D{l:132,t:0,i:709}, +D{l:6,t:0,i:1876}, +D{l:6,t:0,i:1895}, +D{l:9,t:0,i:994}, +D{l:9,t:0,i:1006}, +D{l:12,t:0,i:829}, +D{l:12,t:0,i:888}, +D{l:12,t:0,i:891}, +D{l:146,t:0,i:185}, +D{l:148,t:10,i:94}, +D{l:4,t:0,i:228}, +D{l:133,t:0,i:897}, +D{l:7,t:0,i:1840}, +D{l:5,t:10,i:495}, +D{l:7,t:10,i:834}, +D{l:9,t:10,i:733}, +D{l:139,t:10,i:378}, +D{l:133,t:10,i:559}, +D{l:6,t:10,i:21}, +D{l:6,t:10,i:1737}, +D{l:7,t:10,i:1444}, +D{l:136,t:10,i:224}, +D{l:4,t:0,i:608}, +D{l:133,t:0,i:497}, +D{l:6,t:11,i:40}, +D{l:135,t:11,i:1781}, +D{l:134,t:0,i:1573}, +D{l:135,t:0,i:2039}, +D{l:6,t:0,i:540}, +D{l:136,t:0,i:136}, +D{l:4,t:0,i:897}, +D{l:5,t:0,i:786}, +D{l:133,t:10,i:519}, +D{l:6,t:0,i:1878}, +D{l:6,t:0,i:1884}, +D{l:9,t:0,i:938}, +D{l:9,t:0,i:948}, +D{l:9,t:0,i:955}, +D{l:9,t:0,i:973}, +D{l:9,t:0,i:1012}, +D{l:12,t:0,i:895}, +D{l:12,t:0,i:927}, +D{l:143,t:0,i:254}, +D{l:134,t:0,i:1469}, +D{l:133,t:0,i:999}, +D{l:4,t:0,i:299}, +D{l:135,t:0,i:1004}, +D{l:4,t:0,i:745}, +D{l:133,t:0,i:578}, +D{l:136,t:11,i:574}, +D{l:133,t:0,i:456}, +D{l:134,t:0,i:1457}, +D{l:7,t:0,i:1679}, +D{l:132,t:10,i:402}, +D{l:7,t:0,i:693}, +D{l:8,t:0,i:180}, +D{l:12,t:0,i:163}, +D{l:8,t:10,i:323}, +D{l:136,t:10,i:479}, +D{l:11,t:10,i:580}, +D{l:142,t:10,i:201}, +D{l:5,t:10,i:59}, +D{l:135,t:10,i:672}, +D{l:132,t:11,i:354}, +D{l:146,t:10,i:34}, +D{l:4,t:0,i:755}, +D{l:135,t:11,i:1558}, +D{l:7,t:0,i:1740}, +D{l:146,t:0,i:48}, +D{l:4,t:10,i:85}, +D{l:135,t:10,i:549}, +D{l:139,t:0,i:338}, +D{l:133,t:10,i:94}, +D{l:134,t:0,i:1091}, +D{l:135,t:11,i:469}, +D{l:12,t:0,i:695}, +D{l:12,t:0,i:704}, +D{l:20,t:0,i:113}, +D{l:5,t:11,i:830}, +D{l:14,t:11,i:338}, +D{l:148,t:11,i:81}, +D{l:135,t:0,i:1464}, +D{l:6,t:10,i:11}, +D{l:135,t:10,i:187}, +D{l:135,t:0,i:975}, +D{l:13,t:0,i:335}, +D{l:132,t:10,i:522}, +D{l:134,t:0,i:1979}, +D{l:5,t:11,i:496}, +D{l:135,t:11,i:203}, +D{l:4,t:10,i:52}, +D{l:135,t:10,i:661}, +D{l:7,t:0,i:1566}, +D{l:8,t:0,i:269}, +D{l:9,t:0,i:212}, +D{l:9,t:0,i:718}, +D{l:14,t:0,i:15}, +D{l:14,t:0,i:132}, +D{l:142,t:0,i:227}, +D{l:4,t:0,i:890}, +D{l:5,t:0,i:805}, +D{l:5,t:0,i:819}, +D{l:5,t:0,i:961}, +D{l:6,t:0,i:396}, +D{l:6,t:0,i:1631}, +D{l:6,t:0,i:1678}, +D{l:7,t:0,i:1967}, +D{l:7,t:0,i:2041}, +D{l:9,t:0,i:630}, +D{l:11,t:0,i:8}, +D{l:11,t:0,i:1019}, +D{l:12,t:0,i:176}, +D{l:13,t:0,i:225}, +D{l:14,t:0,i:292}, +D{l:21,t:0,i:24}, +D{l:4,t:10,i:383}, +D{l:133,t:10,i:520}, +D{l:134,t:11,i:547}, +D{l:135,t:11,i:1748}, +D{l:5,t:11,i:88}, +D{l:137,t:11,i:239}, +D{l:146,t:11,i:128}, +D{l:7,t:11,i:650}, +D{l:135,t:11,i:1310}, +D{l:4,t:10,i:281}, +D{l:5,t:10,i:38}, +D{l:7,t:10,i:194}, +D{l:7,t:10,i:668}, +D{l:7,t:10,i:1893}, +D{l:137,t:10,i:397}, +D{l:135,t:0,i:1815}, +D{l:9,t:10,i:635}, +D{l:139,t:10,i:559}, +D{l:7,t:0,i:1505}, +D{l:10,t:0,i:190}, +D{l:10,t:0,i:634}, +D{l:11,t:0,i:792}, +D{l:12,t:0,i:358}, +D{l:140,t:0,i:447}, +D{l:5,t:0,i:0}, +D{l:6,t:0,i:536}, +D{l:7,t:0,i:604}, +D{l:13,t:0,i:445}, +D{l:145,t:0,i:126}, +D{l:7,t:11,i:1076}, +D{l:9,t:11,i:80}, +D{l:11,t:11,i:78}, +D{l:11,t:11,i:421}, +D{l:11,t:11,i:534}, +D{l:140,t:11,i:545}, +D{l:8,t:0,i:966}, +D{l:10,t:0,i:1023}, +D{l:14,t:11,i:369}, +D{l:146,t:11,i:72}, +D{l:135,t:11,i:1641}, +D{l:6,t:0,i:232}, +D{l:6,t:0,i:412}, +D{l:7,t:0,i:1074}, +D{l:8,t:0,i:9}, +D{l:8,t:0,i:157}, +D{l:8,t:0,i:786}, +D{l:9,t:0,i:196}, +D{l:9,t:0,i:352}, +D{l:9,t:0,i:457}, +D{l:10,t:0,i:337}, +D{l:11,t:0,i:232}, +D{l:11,t:0,i:877}, +D{l:12,t:0,i:480}, +D{l:140,t:0,i:546}, +D{l:135,t:0,i:958}, +D{l:4,t:0,i:382}, +D{l:136,t:0,i:579}, +D{l:4,t:0,i:212}, +D{l:135,t:0,i:1206}, +D{l:4,t:11,i:497}, +D{l:5,t:11,i:657}, +D{l:135,t:11,i:1584}, +D{l:132,t:0,i:681}, +D{l:8,t:0,i:971}, +D{l:138,t:0,i:965}, +D{l:5,t:10,i:448}, +D{l:136,t:10,i:535}, +D{l:14,t:0,i:16}, +D{l:146,t:0,i:44}, +D{l:11,t:0,i:584}, +D{l:11,t:0,i:616}, +D{l:14,t:0,i:275}, +D{l:11,t:11,i:584}, +D{l:11,t:11,i:616}, +D{l:142,t:11,i:275}, +D{l:136,t:11,i:13}, +D{l:7,t:10,i:610}, +D{l:135,t:10,i:1501}, +D{l:7,t:11,i:642}, +D{l:8,t:11,i:250}, +D{l:11,t:11,i:123}, +D{l:11,t:11,i:137}, +D{l:13,t:11,i:48}, +D{l:142,t:11,i:95}, +D{l:133,t:0,i:655}, +D{l:17,t:0,i:67}, +D{l:147,t:0,i:74}, +D{l:134,t:0,i:751}, +D{l:134,t:0,i:1967}, +D{l:6,t:0,i:231}, +D{l:136,t:0,i:423}, +D{l:5,t:0,i:300}, +D{l:138,t:0,i:1016}, +D{l:4,t:10,i:319}, +D{l:5,t:10,i:699}, +D{l:138,t:10,i:673}, +D{l:6,t:0,i:237}, +D{l:7,t:0,i:611}, +D{l:8,t:0,i:100}, +D{l:9,t:0,i:416}, +D{l:11,t:0,i:335}, +D{l:12,t:0,i:173}, +D{l:18,t:0,i:101}, +D{l:6,t:10,i:336}, +D{l:8,t:10,i:552}, +D{l:9,t:10,i:285}, +D{l:10,t:10,i:99}, +D{l:139,t:10,i:568}, +D{l:134,t:0,i:1370}, +D{l:7,t:10,i:1406}, +D{l:9,t:10,i:218}, +D{l:141,t:10,i:222}, +D{l:133,t:10,i:256}, +D{l:135,t:0,i:1208}, +D{l:14,t:11,i:213}, +D{l:148,t:11,i:38}, +D{l:6,t:0,i:1219}, +D{l:135,t:11,i:1642}, +D{l:13,t:0,i:417}, +D{l:14,t:0,i:129}, +D{l:143,t:0,i:15}, +D{l:10,t:11,i:545}, +D{l:140,t:11,i:301}, +D{l:17,t:10,i:39}, +D{l:148,t:10,i:36}, +D{l:133,t:0,i:199}, +D{l:4,t:11,i:904}, +D{l:133,t:11,i:794}, +D{l:12,t:0,i:427}, +D{l:146,t:0,i:38}, +D{l:134,t:0,i:949}, +D{l:8,t:0,i:665}, +D{l:135,t:10,i:634}, +D{l:132,t:10,i:618}, +D{l:135,t:10,i:259}, +D{l:132,t:10,i:339}, +D{l:133,t:11,i:761}, +D{l:141,t:10,i:169}, +D{l:132,t:10,i:759}, +D{l:5,t:0,i:688}, +D{l:7,t:0,i:539}, +D{l:135,t:0,i:712}, +D{l:7,t:11,i:386}, +D{l:138,t:11,i:713}, +D{l:134,t:0,i:1186}, +D{l:6,t:11,i:7}, +D{l:6,t:11,i:35}, +D{l:7,t:11,i:147}, +D{l:7,t:11,i:1069}, +D{l:7,t:11,i:1568}, +D{l:7,t:11,i:1575}, +D{l:7,t:11,i:1917}, +D{l:8,t:11,i:43}, +D{l:8,t:11,i:208}, +D{l:9,t:11,i:128}, +D{l:9,t:11,i:866}, +D{l:10,t:11,i:20}, +D{l:11,t:11,i:981}, +D{l:147,t:11,i:33}, +D{l:7,t:11,i:893}, +D{l:8,t:10,i:482}, +D{l:141,t:11,i:424}, +D{l:6,t:0,i:312}, +D{l:6,t:0,i:1715}, +D{l:10,t:0,i:584}, +D{l:11,t:0,i:546}, +D{l:11,t:0,i:692}, +D{l:12,t:0,i:259}, +D{l:12,t:0,i:295}, +D{l:13,t:0,i:46}, +D{l:141,t:0,i:154}, +D{l:5,t:10,i:336}, +D{l:6,t:10,i:341}, +D{l:6,t:10,i:478}, +D{l:6,t:10,i:1763}, +D{l:136,t:10,i:386}, +D{l:137,t:0,i:151}, +D{l:132,t:0,i:588}, +D{l:152,t:0,i:4}, +D{l:6,t:11,i:322}, +D{l:9,t:11,i:552}, +D{l:11,t:11,i:274}, +D{l:13,t:11,i:209}, +D{l:13,t:11,i:499}, +D{l:14,t:11,i:85}, +D{l:15,t:11,i:126}, +D{l:145,t:11,i:70}, +D{l:135,t:10,i:73}, +D{l:4,t:0,i:231}, +D{l:5,t:0,i:61}, +D{l:6,t:0,i:104}, +D{l:7,t:0,i:729}, +D{l:7,t:0,i:964}, +D{l:7,t:0,i:1658}, +D{l:140,t:0,i:414}, +D{l:6,t:0,i:263}, +D{l:138,t:0,i:757}, +D{l:135,t:10,i:1971}, +D{l:4,t:0,i:612}, +D{l:133,t:0,i:561}, +D{l:132,t:0,i:320}, +D{l:135,t:10,i:1344}, +D{l:8,t:11,i:83}, +D{l:8,t:11,i:817}, +D{l:9,t:11,i:28}, +D{l:9,t:11,i:29}, +D{l:9,t:11,i:885}, +D{l:10,t:11,i:387}, +D{l:11,t:11,i:633}, +D{l:11,t:11,i:740}, +D{l:13,t:11,i:235}, +D{l:13,t:11,i:254}, +D{l:15,t:11,i:143}, +D{l:143,t:11,i:146}, +D{l:5,t:10,i:396}, +D{l:134,t:10,i:501}, +D{l:140,t:11,i:49}, +D{l:132,t:0,i:225}, +D{l:4,t:10,i:929}, +D{l:5,t:10,i:799}, +D{l:8,t:10,i:46}, +D{l:136,t:10,i:740}, +D{l:4,t:0,i:405}, +D{l:7,t:0,i:817}, +D{l:14,t:0,i:58}, +D{l:17,t:0,i:37}, +D{l:146,t:0,i:124}, +D{l:133,t:0,i:974}, +D{l:4,t:11,i:412}, +D{l:133,t:11,i:581}, +D{l:4,t:10,i:892}, +D{l:133,t:10,i:770}, +D{l:4,t:0,i:996}, +D{l:134,t:0,i:2026}, +D{l:4,t:0,i:527}, +D{l:5,t:0,i:235}, +D{l:7,t:0,i:1239}, +D{l:11,t:0,i:131}, +D{l:140,t:0,i:370}, +D{l:9,t:0,i:16}, +D{l:13,t:0,i:386}, +D{l:135,t:11,i:421}, +D{l:7,t:0,i:956}, +D{l:7,t:0,i:1157}, +D{l:7,t:0,i:1506}, +D{l:7,t:0,i:1606}, +D{l:7,t:0,i:1615}, +D{l:7,t:0,i:1619}, +D{l:7,t:0,i:1736}, +D{l:7,t:0,i:1775}, +D{l:8,t:0,i:590}, +D{l:9,t:0,i:324}, +D{l:9,t:0,i:736}, +D{l:9,t:0,i:774}, +D{l:9,t:0,i:776}, +D{l:9,t:0,i:784}, +D{l:10,t:0,i:567}, +D{l:10,t:0,i:708}, +D{l:11,t:0,i:518}, +D{l:11,t:0,i:613}, +D{l:11,t:0,i:695}, +D{l:11,t:0,i:716}, +D{l:11,t:0,i:739}, +D{l:11,t:0,i:770}, +D{l:11,t:0,i:771}, +D{l:11,t:0,i:848}, +D{l:11,t:0,i:857}, +D{l:11,t:0,i:931}, +D{l:11,t:0,i:947}, +D{l:12,t:0,i:326}, +D{l:12,t:0,i:387}, +D{l:12,t:0,i:484}, +D{l:12,t:0,i:528}, +D{l:12,t:0,i:552}, +D{l:12,t:0,i:613}, +D{l:13,t:0,i:189}, +D{l:13,t:0,i:256}, +D{l:13,t:0,i:340}, +D{l:13,t:0,i:432}, +D{l:13,t:0,i:436}, +D{l:13,t:0,i:440}, +D{l:13,t:0,i:454}, +D{l:14,t:0,i:174}, +D{l:14,t:0,i:220}, +D{l:14,t:0,i:284}, +D{l:14,t:0,i:390}, +D{l:145,t:0,i:121}, +D{l:135,t:10,i:158}, +D{l:9,t:0,i:137}, +D{l:138,t:0,i:221}, +D{l:4,t:11,i:110}, +D{l:10,t:11,i:415}, +D{l:10,t:11,i:597}, +D{l:142,t:11,i:206}, +D{l:141,t:11,i:496}, +D{l:135,t:11,i:205}, +D{l:151,t:10,i:25}, +D{l:135,t:11,i:778}, +D{l:7,t:11,i:1656}, +D{l:7,t:10,i:2001}, +D{l:9,t:11,i:369}, +D{l:10,t:11,i:338}, +D{l:10,t:11,i:490}, +D{l:11,t:11,i:154}, +D{l:11,t:11,i:545}, +D{l:11,t:11,i:775}, +D{l:13,t:11,i:77}, +D{l:141,t:11,i:274}, +D{l:4,t:11,i:444}, +D{l:10,t:11,i:146}, +D{l:140,t:11,i:9}, +D{l:7,t:0,i:390}, +D{l:138,t:0,i:140}, +D{l:135,t:0,i:1144}, +D{l:134,t:0,i:464}, +D{l:7,t:10,i:1461}, +D{l:140,t:10,i:91}, +D{l:132,t:10,i:602}, +D{l:4,t:11,i:283}, +D{l:135,t:11,i:1194}, +D{l:5,t:0,i:407}, +D{l:11,t:0,i:204}, +D{l:11,t:0,i:243}, +D{l:11,t:0,i:489}, +D{l:12,t:0,i:293}, +D{l:19,t:0,i:37}, +D{l:20,t:0,i:73}, +D{l:150,t:0,i:38}, +D{l:7,t:0,i:1218}, +D{l:136,t:0,i:303}, +D{l:5,t:0,i:325}, +D{l:8,t:0,i:5}, +D{l:8,t:0,i:227}, +D{l:9,t:0,i:105}, +D{l:10,t:0,i:585}, +D{l:12,t:0,i:614}, +D{l:4,t:10,i:13}, +D{l:5,t:10,i:567}, +D{l:7,t:10,i:1498}, +D{l:9,t:10,i:124}, +D{l:11,t:10,i:521}, +D{l:140,t:10,i:405}, +D{l:135,t:10,i:1006}, +D{l:7,t:0,i:800}, +D{l:10,t:0,i:12}, +D{l:134,t:11,i:1720}, +D{l:135,t:0,i:1783}, +D{l:132,t:10,i:735}, +D{l:138,t:10,i:812}, +D{l:4,t:10,i:170}, +D{l:135,t:10,i:323}, +D{l:6,t:0,i:621}, +D{l:13,t:0,i:504}, +D{l:144,t:0,i:89}, +D{l:5,t:10,i:304}, +D{l:135,t:10,i:1403}, +D{l:137,t:11,i:216}, +D{l:6,t:0,i:920}, +D{l:6,t:0,i:1104}, +D{l:9,t:11,i:183}, +D{l:139,t:11,i:286}, +D{l:4,t:0,i:376}, +D{l:133,t:10,i:742}, +D{l:134,t:0,i:218}, +D{l:8,t:0,i:641}, +D{l:11,t:0,i:388}, +D{l:140,t:0,i:580}, +D{l:7,t:0,i:454}, +D{l:7,t:0,i:782}, +D{l:8,t:0,i:768}, +D{l:140,t:0,i:686}, +D{l:137,t:11,i:33}, +D{l:133,t:10,i:111}, +D{l:144,t:0,i:0}, +D{l:10,t:0,i:676}, +D{l:140,t:0,i:462}, +D{l:6,t:0,i:164}, +D{l:136,t:11,i:735}, +D{l:133,t:10,i:444}, +D{l:150,t:0,i:50}, +D{l:7,t:11,i:1862}, +D{l:12,t:11,i:491}, +D{l:12,t:11,i:520}, +D{l:13,t:11,i:383}, +D{l:14,t:11,i:244}, +D{l:146,t:11,i:12}, +D{l:5,t:11,i:132}, +D{l:9,t:11,i:486}, +D{l:9,t:11,i:715}, +D{l:10,t:11,i:458}, +D{l:11,t:11,i:373}, +D{l:11,t:11,i:668}, +D{l:11,t:11,i:795}, +D{l:11,t:11,i:897}, +D{l:12,t:11,i:272}, +D{l:12,t:11,i:424}, +D{l:12,t:11,i:539}, +D{l:12,t:11,i:558}, +D{l:14,t:11,i:245}, +D{l:14,t:11,i:263}, +D{l:14,t:11,i:264}, +D{l:14,t:11,i:393}, +D{l:142,t:11,i:403}, +D{l:8,t:10,i:123}, +D{l:15,t:10,i:6}, +D{l:144,t:10,i:7}, +D{l:6,t:0,i:285}, +D{l:8,t:0,i:654}, +D{l:11,t:0,i:749}, +D{l:12,t:0,i:190}, +D{l:12,t:0,i:327}, +D{l:13,t:0,i:120}, +D{l:13,t:0,i:121}, +D{l:13,t:0,i:327}, +D{l:15,t:0,i:47}, +D{l:146,t:0,i:40}, +D{l:5,t:11,i:8}, +D{l:6,t:11,i:89}, +D{l:6,t:11,i:400}, +D{l:7,t:11,i:1569}, +D{l:7,t:11,i:1623}, +D{l:7,t:11,i:1850}, +D{l:8,t:11,i:218}, +D{l:8,t:11,i:422}, +D{l:9,t:11,i:570}, +D{l:138,t:11,i:626}, +D{l:6,t:11,i:387}, +D{l:7,t:11,i:882}, +D{l:141,t:11,i:111}, +D{l:6,t:0,i:343}, +D{l:7,t:0,i:195}, +D{l:9,t:0,i:226}, +D{l:10,t:0,i:197}, +D{l:10,t:0,i:575}, +D{l:11,t:0,i:502}, +D{l:11,t:0,i:899}, +D{l:6,t:11,i:224}, +D{l:7,t:11,i:877}, +D{l:137,t:11,i:647}, +D{l:5,t:10,i:937}, +D{l:135,t:10,i:100}, +D{l:135,t:11,i:790}, +D{l:150,t:0,i:29}, +D{l:147,t:0,i:8}, +D{l:134,t:0,i:1812}, +D{l:149,t:0,i:8}, +D{l:135,t:11,i:394}, +D{l:7,t:0,i:1125}, +D{l:9,t:0,i:143}, +D{l:11,t:0,i:61}, +D{l:14,t:0,i:405}, +D{l:150,t:0,i:21}, +D{l:10,t:11,i:755}, +D{l:147,t:11,i:29}, +D{l:9,t:11,i:378}, +D{l:141,t:11,i:162}, +D{l:135,t:10,i:922}, +D{l:5,t:10,i:619}, +D{l:133,t:10,i:698}, +D{l:134,t:0,i:1327}, +D{l:6,t:0,i:1598}, +D{l:137,t:0,i:575}, +D{l:9,t:11,i:569}, +D{l:12,t:11,i:12}, +D{l:12,t:11,i:81}, +D{l:12,t:11,i:319}, +D{l:13,t:11,i:69}, +D{l:14,t:11,i:259}, +D{l:16,t:11,i:87}, +D{l:17,t:11,i:1}, +D{l:17,t:11,i:21}, +D{l:17,t:11,i:24}, +D{l:18,t:11,i:15}, +D{l:18,t:11,i:56}, +D{l:18,t:11,i:59}, +D{l:18,t:11,i:127}, +D{l:18,t:11,i:154}, +D{l:19,t:11,i:19}, +D{l:148,t:11,i:31}, +D{l:6,t:0,i:895}, +D{l:135,t:11,i:1231}, +D{l:5,t:0,i:959}, +D{l:7,t:11,i:124}, +D{l:136,t:11,i:38}, +D{l:5,t:11,i:261}, +D{l:7,t:11,i:78}, +D{l:7,t:11,i:199}, +D{l:8,t:11,i:815}, +D{l:9,t:11,i:126}, +D{l:138,t:11,i:342}, +D{l:5,t:10,i:917}, +D{l:134,t:10,i:1659}, +D{l:7,t:0,i:1759}, +D{l:5,t:11,i:595}, +D{l:135,t:11,i:1863}, +D{l:136,t:0,i:173}, +D{l:134,t:0,i:266}, +D{l:142,t:0,i:261}, +D{l:132,t:11,i:628}, +D{l:5,t:10,i:251}, +D{l:5,t:10,i:956}, +D{l:8,t:10,i:268}, +D{l:9,t:10,i:214}, +D{l:146,t:10,i:142}, +D{l:7,t:11,i:266}, +D{l:136,t:11,i:804}, +D{l:135,t:11,i:208}, +D{l:6,t:11,i:79}, +D{l:7,t:11,i:1021}, +D{l:135,t:11,i:1519}, +D{l:11,t:11,i:704}, +D{l:141,t:11,i:396}, +D{l:5,t:10,i:346}, +D{l:5,t:10,i:711}, +D{l:136,t:10,i:390}, +D{l:136,t:11,i:741}, +D{l:134,t:11,i:376}, +D{l:134,t:0,i:1427}, +D{l:6,t:0,i:1033}, +D{l:6,t:0,i:1217}, +D{l:136,t:0,i:300}, +D{l:133,t:10,i:624}, +D{l:6,t:11,i:100}, +D{l:7,t:11,i:244}, +D{l:7,t:11,i:632}, +D{l:7,t:11,i:1609}, +D{l:8,t:11,i:178}, +D{l:8,t:11,i:638}, +D{l:141,t:11,i:58}, +D{l:6,t:0,i:584}, +D{l:5,t:10,i:783}, +D{l:7,t:10,i:1998}, +D{l:135,t:10,i:2047}, +D{l:5,t:0,i:427}, +D{l:5,t:0,i:734}, +D{l:7,t:0,i:478}, +D{l:136,t:0,i:52}, +D{l:7,t:0,i:239}, +D{l:11,t:0,i:217}, +D{l:142,t:0,i:165}, +D{l:134,t:0,i:1129}, +D{l:6,t:0,i:168}, +D{l:6,t:0,i:1734}, +D{l:7,t:0,i:20}, +D{l:7,t:0,i:1056}, +D{l:8,t:0,i:732}, +D{l:9,t:0,i:406}, +D{l:9,t:0,i:911}, +D{l:138,t:0,i:694}, +D{l:132,t:10,i:594}, +D{l:133,t:11,i:791}, +D{l:7,t:11,i:686}, +D{l:8,t:11,i:33}, +D{l:8,t:11,i:238}, +D{l:10,t:11,i:616}, +D{l:11,t:11,i:467}, +D{l:11,t:11,i:881}, +D{l:13,t:11,i:217}, +D{l:13,t:11,i:253}, +D{l:142,t:11,i:268}, +D{l:137,t:11,i:476}, +D{l:134,t:0,i:418}, +D{l:133,t:0,i:613}, +D{l:132,t:0,i:632}, +D{l:132,t:11,i:447}, +D{l:7,t:0,i:32}, +D{l:7,t:0,i:984}, +D{l:8,t:0,i:85}, +D{l:8,t:0,i:709}, +D{l:9,t:0,i:579}, +D{l:9,t:0,i:847}, +D{l:9,t:0,i:856}, +D{l:10,t:0,i:799}, +D{l:11,t:0,i:258}, +D{l:11,t:0,i:1007}, +D{l:12,t:0,i:331}, +D{l:12,t:0,i:615}, +D{l:13,t:0,i:188}, +D{l:13,t:0,i:435}, +D{l:14,t:0,i:8}, +D{l:15,t:0,i:165}, +D{l:16,t:0,i:27}, +D{l:20,t:0,i:40}, +D{l:144,t:11,i:35}, +D{l:4,t:11,i:128}, +D{l:5,t:11,i:415}, +D{l:6,t:11,i:462}, +D{l:7,t:11,i:294}, +D{l:7,t:11,i:578}, +D{l:10,t:11,i:710}, +D{l:139,t:11,i:86}, +D{l:5,t:0,i:694}, +D{l:136,t:0,i:909}, +D{l:7,t:0,i:1109}, +D{l:11,t:0,i:7}, +D{l:5,t:10,i:37}, +D{l:6,t:10,i:39}, +D{l:6,t:10,i:451}, +D{l:7,t:10,i:218}, +D{l:7,t:10,i:1166}, +D{l:7,t:10,i:1687}, +D{l:8,t:10,i:662}, +D{l:144,t:10,i:2}, +D{l:136,t:11,i:587}, +D{l:6,t:11,i:427}, +D{l:7,t:11,i:1018}, +D{l:138,t:11,i:692}, +D{l:4,t:11,i:195}, +D{l:6,t:10,i:508}, +D{l:135,t:11,i:802}, +D{l:4,t:0,i:167}, +D{l:135,t:0,i:82}, +D{l:5,t:0,i:62}, +D{l:6,t:0,i:24}, +D{l:6,t:0,i:534}, +D{l:7,t:0,i:74}, +D{l:7,t:0,i:678}, +D{l:7,t:0,i:684}, +D{l:7,t:0,i:1043}, +D{l:7,t:0,i:1072}, +D{l:8,t:0,i:280}, +D{l:8,t:0,i:541}, +D{l:8,t:0,i:686}, +D{l:9,t:0,i:258}, +D{l:10,t:0,i:519}, +D{l:11,t:0,i:252}, +D{l:140,t:0,i:282}, +D{l:138,t:0,i:33}, +D{l:4,t:0,i:359}, +D{l:133,t:11,i:738}, +D{l:7,t:0,i:980}, +D{l:9,t:0,i:328}, +D{l:13,t:0,i:186}, +D{l:13,t:0,i:364}, +D{l:7,t:10,i:635}, +D{l:7,t:10,i:796}, +D{l:8,t:10,i:331}, +D{l:9,t:10,i:330}, +D{l:9,t:10,i:865}, +D{l:10,t:10,i:119}, +D{l:10,t:10,i:235}, +D{l:11,t:10,i:111}, +D{l:11,t:10,i:129}, +D{l:11,t:10,i:240}, +D{l:12,t:10,i:31}, +D{l:12,t:10,i:66}, +D{l:12,t:10,i:222}, +D{l:12,t:10,i:269}, +D{l:12,t:10,i:599}, +D{l:12,t:10,i:684}, +D{l:12,t:10,i:689}, +D{l:12,t:10,i:691}, +D{l:142,t:10,i:345}, +D{l:137,t:10,i:527}, +D{l:6,t:0,i:596}, +D{l:7,t:0,i:585}, +D{l:135,t:10,i:702}, +D{l:134,t:11,i:1683}, +D{l:133,t:0,i:211}, +D{l:6,t:0,i:145}, +D{l:141,t:0,i:336}, +D{l:134,t:0,i:1130}, +D{l:7,t:0,i:873}, +D{l:6,t:10,i:37}, +D{l:7,t:10,i:1666}, +D{l:8,t:10,i:195}, +D{l:8,t:10,i:316}, +D{l:9,t:10,i:178}, +D{l:9,t:10,i:276}, +D{l:9,t:10,i:339}, +D{l:9,t:10,i:536}, +D{l:10,t:10,i:102}, +D{l:10,t:10,i:362}, +D{l:10,t:10,i:785}, +D{l:11,t:10,i:55}, +D{l:11,t:10,i:149}, +D{l:11,t:10,i:773}, +D{l:13,t:10,i:416}, +D{l:13,t:10,i:419}, +D{l:14,t:10,i:38}, +D{l:14,t:10,i:41}, +D{l:142,t:10,i:210}, +D{l:8,t:0,i:840}, +D{l:136,t:0,i:841}, +D{l:132,t:0,i:263}, +D{l:5,t:11,i:3}, +D{l:8,t:11,i:578}, +D{l:9,t:11,i:118}, +D{l:10,t:11,i:705}, +D{l:12,t:11,i:383}, +D{l:141,t:11,i:279}, +D{l:132,t:0,i:916}, +D{l:133,t:11,i:229}, +D{l:133,t:10,i:645}, +D{l:15,t:0,i:155}, +D{l:16,t:0,i:79}, +D{l:8,t:11,i:102}, +D{l:10,t:11,i:578}, +D{l:10,t:11,i:672}, +D{l:12,t:11,i:496}, +D{l:13,t:11,i:408}, +D{l:14,t:11,i:121}, +D{l:145,t:11,i:106}, +D{l:4,t:0,i:599}, +D{l:5,t:0,i:592}, +D{l:6,t:0,i:1634}, +D{l:7,t:0,i:5}, +D{l:7,t:0,i:55}, +D{l:7,t:0,i:67}, +D{l:7,t:0,i:97}, +D{l:7,t:0,i:691}, +D{l:7,t:0,i:979}, +D{l:7,t:0,i:1600}, +D{l:7,t:0,i:1697}, +D{l:8,t:0,i:207}, +D{l:8,t:0,i:214}, +D{l:8,t:0,i:231}, +D{l:8,t:0,i:294}, +D{l:8,t:0,i:336}, +D{l:8,t:0,i:428}, +D{l:8,t:0,i:471}, +D{l:8,t:0,i:622}, +D{l:8,t:0,i:626}, +D{l:8,t:0,i:679}, +D{l:8,t:0,i:759}, +D{l:8,t:0,i:829}, +D{l:9,t:0,i:11}, +D{l:9,t:0,i:246}, +D{l:9,t:0,i:484}, +D{l:9,t:0,i:573}, +D{l:9,t:0,i:706}, +D{l:9,t:0,i:762}, +D{l:9,t:0,i:798}, +D{l:9,t:0,i:855}, +D{l:9,t:0,i:870}, +D{l:9,t:0,i:912}, +D{l:10,t:0,i:303}, +D{l:10,t:0,i:335}, +D{l:10,t:0,i:424}, +D{l:10,t:0,i:461}, +D{l:10,t:0,i:543}, +D{l:10,t:0,i:759}, +D{l:10,t:0,i:814}, +D{l:11,t:0,i:59}, +D{l:11,t:0,i:199}, +D{l:11,t:0,i:235}, +D{l:11,t:0,i:590}, +D{l:11,t:0,i:631}, +D{l:11,t:0,i:929}, +D{l:11,t:0,i:963}, +D{l:11,t:0,i:987}, +D{l:12,t:0,i:114}, +D{l:12,t:0,i:182}, +D{l:12,t:0,i:226}, +D{l:12,t:0,i:332}, +D{l:12,t:0,i:439}, +D{l:12,t:0,i:575}, +D{l:12,t:0,i:598}, +D{l:12,t:0,i:675}, +D{l:13,t:0,i:8}, +D{l:13,t:0,i:125}, +D{l:13,t:0,i:194}, +D{l:13,t:0,i:287}, +D{l:14,t:0,i:197}, +D{l:14,t:0,i:383}, +D{l:15,t:0,i:53}, +D{l:17,t:0,i:63}, +D{l:19,t:0,i:46}, +D{l:19,t:0,i:98}, +D{l:19,t:0,i:106}, +D{l:148,t:0,i:85}, +D{l:7,t:0,i:1356}, +D{l:132,t:10,i:290}, +D{l:6,t:10,i:70}, +D{l:7,t:10,i:1292}, +D{l:10,t:10,i:762}, +D{l:139,t:10,i:288}, +D{l:150,t:11,i:55}, +D{l:4,t:0,i:593}, +D{l:8,t:11,i:115}, +D{l:8,t:11,i:350}, +D{l:9,t:11,i:489}, +D{l:10,t:11,i:128}, +D{l:11,t:11,i:306}, +D{l:12,t:11,i:373}, +D{l:14,t:11,i:30}, +D{l:17,t:11,i:79}, +D{l:147,t:11,i:80}, +D{l:135,t:11,i:1235}, +D{l:134,t:0,i:1392}, +D{l:4,t:11,i:230}, +D{l:133,t:11,i:702}, +D{l:147,t:0,i:126}, +D{l:7,t:10,i:131}, +D{l:7,t:10,i:422}, +D{l:8,t:10,i:210}, +D{l:140,t:10,i:573}, +D{l:134,t:0,i:1179}, +D{l:139,t:11,i:435}, +D{l:139,t:10,i:797}, +D{l:134,t:11,i:1728}, +D{l:4,t:0,i:162}, +D{l:18,t:11,i:26}, +D{l:19,t:11,i:42}, +D{l:20,t:11,i:43}, +D{l:21,t:11,i:0}, +D{l:23,t:11,i:27}, +D{l:152,t:11,i:14}, +D{l:132,t:10,i:936}, +D{l:6,t:0,i:765}, +D{l:5,t:10,i:453}, +D{l:134,t:10,i:441}, +D{l:133,t:0,i:187}, +D{l:135,t:0,i:1286}, +D{l:6,t:0,i:635}, +D{l:6,t:0,i:904}, +D{l:6,t:0,i:1210}, +D{l:134,t:0,i:1489}, +D{l:4,t:0,i:215}, +D{l:8,t:0,i:890}, +D{l:9,t:0,i:38}, +D{l:10,t:0,i:923}, +D{l:11,t:0,i:23}, +D{l:11,t:0,i:127}, +D{l:139,t:0,i:796}, +D{l:6,t:0,i:1165}, +D{l:134,t:0,i:1306}, +D{l:7,t:0,i:716}, +D{l:13,t:0,i:97}, +D{l:141,t:0,i:251}, +D{l:132,t:10,i:653}, +D{l:136,t:0,i:657}, +D{l:146,t:10,i:80}, +D{l:5,t:11,i:622}, +D{l:7,t:11,i:1032}, +D{l:11,t:11,i:26}, +D{l:11,t:11,i:213}, +D{l:11,t:11,i:707}, +D{l:12,t:11,i:380}, +D{l:13,t:11,i:226}, +D{l:141,t:11,i:355}, +D{l:6,t:0,i:299}, +D{l:5,t:11,i:70}, +D{l:6,t:11,i:334}, +D{l:9,t:11,i:171}, +D{l:11,t:11,i:637}, +D{l:12,t:11,i:202}, +D{l:14,t:11,i:222}, +D{l:145,t:11,i:42}, +D{l:142,t:0,i:134}, +D{l:4,t:11,i:23}, +D{l:5,t:11,i:313}, +D{l:5,t:11,i:1014}, +D{l:6,t:11,i:50}, +D{l:6,t:11,i:51}, +D{l:7,t:11,i:142}, +D{l:7,t:11,i:384}, +D{l:9,t:11,i:783}, +D{l:139,t:11,i:741}, +D{l:4,t:11,i:141}, +D{l:7,t:11,i:559}, +D{l:8,t:11,i:640}, +D{l:9,t:11,i:460}, +D{l:12,t:11,i:183}, +D{l:141,t:11,i:488}, +D{l:136,t:11,i:614}, +D{l:7,t:10,i:1368}, +D{l:8,t:10,i:232}, +D{l:8,t:10,i:361}, +D{l:10,t:10,i:682}, +D{l:138,t:10,i:742}, +D{l:137,t:10,i:534}, +D{l:6,t:0,i:1082}, +D{l:140,t:0,i:658}, +D{l:137,t:10,i:27}, +D{l:135,t:0,i:2002}, +D{l:142,t:10,i:12}, +D{l:4,t:0,i:28}, +D{l:5,t:0,i:440}, +D{l:7,t:0,i:248}, +D{l:11,t:0,i:833}, +D{l:140,t:0,i:344}, +D{l:7,t:10,i:736}, +D{l:139,t:10,i:264}, +D{l:134,t:10,i:1657}, +D{l:134,t:0,i:1654}, +D{l:138,t:0,i:531}, +D{l:5,t:11,i:222}, +D{l:9,t:11,i:140}, +D{l:138,t:11,i:534}, +D{l:6,t:0,i:634}, +D{l:6,t:0,i:798}, +D{l:134,t:0,i:840}, +D{l:138,t:11,i:503}, +D{l:135,t:10,i:127}, +D{l:133,t:0,i:853}, +D{l:5,t:11,i:154}, +D{l:7,t:11,i:1491}, +D{l:10,t:11,i:379}, +D{l:138,t:11,i:485}, +D{l:6,t:0,i:249}, +D{l:7,t:0,i:1234}, +D{l:139,t:0,i:573}, +D{l:133,t:11,i:716}, +D{l:7,t:11,i:1570}, +D{l:140,t:11,i:542}, +D{l:136,t:10,i:364}, +D{l:138,t:0,i:527}, +D{l:4,t:11,i:91}, +D{l:5,t:11,i:388}, +D{l:5,t:11,i:845}, +D{l:6,t:11,i:206}, +D{l:6,t:11,i:252}, +D{l:6,t:11,i:365}, +D{l:7,t:11,i:136}, +D{l:7,t:11,i:531}, +D{l:8,t:11,i:264}, +D{l:136,t:11,i:621}, +D{l:134,t:0,i:1419}, +D{l:135,t:11,i:1441}, +D{l:7,t:0,i:49}, +D{l:7,t:0,i:392}, +D{l:8,t:0,i:20}, +D{l:8,t:0,i:172}, +D{l:8,t:0,i:690}, +D{l:9,t:0,i:383}, +D{l:9,t:0,i:845}, +D{l:10,t:0,i:48}, +D{l:11,t:0,i:293}, +D{l:11,t:0,i:832}, +D{l:11,t:0,i:920}, +D{l:11,t:0,i:984}, +D{l:141,t:0,i:221}, +D{l:5,t:0,i:858}, +D{l:133,t:0,i:992}, +D{l:5,t:0,i:728}, +D{l:137,t:10,i:792}, +D{l:5,t:10,i:909}, +D{l:9,t:10,i:849}, +D{l:138,t:10,i:805}, +D{l:7,t:0,i:525}, +D{l:7,t:0,i:1579}, +D{l:8,t:0,i:497}, +D{l:136,t:0,i:573}, +D{l:6,t:0,i:268}, +D{l:137,t:0,i:62}, +D{l:135,t:11,i:576}, +D{l:134,t:0,i:1201}, +D{l:5,t:11,i:771}, +D{l:5,t:11,i:863}, +D{l:5,t:11,i:898}, +D{l:6,t:11,i:1632}, +D{l:6,t:11,i:1644}, +D{l:134,t:11,i:1780}, +D{l:133,t:11,i:331}, +D{l:7,t:0,i:193}, +D{l:7,t:0,i:1105}, +D{l:10,t:0,i:495}, +D{l:7,t:10,i:397}, +D{l:8,t:10,i:124}, +D{l:8,t:10,i:619}, +D{l:9,t:10,i:305}, +D{l:11,t:10,i:40}, +D{l:12,t:10,i:349}, +D{l:13,t:10,i:134}, +D{l:13,t:10,i:295}, +D{l:14,t:10,i:155}, +D{l:15,t:10,i:120}, +D{l:146,t:10,i:105}, +D{l:138,t:0,i:106}, +D{l:6,t:0,i:859}, +D{l:5,t:11,i:107}, +D{l:7,t:11,i:201}, +D{l:136,t:11,i:518}, +D{l:6,t:11,i:446}, +D{l:135,t:11,i:1817}, +D{l:13,t:0,i:23}, +D{l:4,t:10,i:262}, +D{l:135,t:10,i:342}, +D{l:133,t:10,i:641}, +D{l:137,t:11,i:851}, +D{l:6,t:0,i:925}, +D{l:137,t:0,i:813}, +D{l:132,t:11,i:504}, +D{l:6,t:0,i:613}, +D{l:136,t:0,i:223}, +D{l:4,t:10,i:99}, +D{l:6,t:10,i:250}, +D{l:6,t:10,i:346}, +D{l:8,t:10,i:127}, +D{l:138,t:10,i:81}, +D{l:136,t:0,i:953}, +D{l:132,t:10,i:915}, +D{l:139,t:11,i:892}, +D{l:5,t:10,i:75}, +D{l:9,t:10,i:517}, +D{l:10,t:10,i:470}, +D{l:12,t:10,i:155}, +D{l:141,t:10,i:224}, +D{l:4,t:0,i:666}, +D{l:7,t:0,i:1017}, +D{l:7,t:11,i:996}, +D{l:138,t:11,i:390}, +D{l:5,t:11,i:883}, +D{l:133,t:11,i:975}, +D{l:14,t:10,i:83}, +D{l:142,t:11,i:83}, +D{l:4,t:0,i:670}, +D{l:5,t:11,i:922}, +D{l:134,t:11,i:1707}, +D{l:135,t:0,i:216}, +D{l:9,t:0,i:40}, +D{l:11,t:0,i:136}, +D{l:135,t:11,i:787}, +D{l:5,t:10,i:954}, +D{l:5,t:11,i:993}, +D{l:7,t:11,i:515}, +D{l:137,t:11,i:91}, +D{l:139,t:0,i:259}, +D{l:7,t:0,i:1114}, +D{l:9,t:0,i:310}, +D{l:9,t:0,i:682}, +D{l:10,t:0,i:440}, +D{l:13,t:0,i:40}, +D{l:6,t:10,i:304}, +D{l:8,t:10,i:418}, +D{l:11,t:10,i:341}, +D{l:139,t:10,i:675}, +D{l:14,t:0,i:296}, +D{l:9,t:10,i:410}, +D{l:139,t:10,i:425}, +D{l:10,t:11,i:377}, +D{l:12,t:11,i:363}, +D{l:13,t:11,i:68}, +D{l:13,t:11,i:94}, +D{l:14,t:11,i:108}, +D{l:142,t:11,i:306}, +D{l:7,t:0,i:1401}, +D{l:135,t:0,i:1476}, +D{l:4,t:0,i:296}, +D{l:6,t:0,i:475}, +D{l:7,t:0,i:401}, +D{l:7,t:0,i:1410}, +D{l:7,t:0,i:1594}, +D{l:7,t:0,i:1674}, +D{l:8,t:0,i:63}, +D{l:8,t:0,i:660}, +D{l:137,t:0,i:74}, +D{l:4,t:0,i:139}, +D{l:4,t:0,i:388}, +D{l:140,t:0,i:188}, +D{l:132,t:0,i:797}, +D{l:132,t:11,i:766}, +D{l:5,t:11,i:103}, +D{l:7,t:11,i:921}, +D{l:8,t:11,i:580}, +D{l:8,t:11,i:593}, +D{l:8,t:11,i:630}, +D{l:138,t:11,i:28}, +D{l:4,t:11,i:911}, +D{l:5,t:11,i:867}, +D{l:133,t:11,i:1013}, +D{l:134,t:10,i:14}, +D{l:134,t:0,i:1572}, +D{l:134,t:10,i:1708}, +D{l:21,t:0,i:39}, +D{l:5,t:10,i:113}, +D{l:6,t:10,i:243}, +D{l:7,t:10,i:1865}, +D{l:11,t:10,i:161}, +D{l:16,t:10,i:37}, +D{l:145,t:10,i:99}, +D{l:7,t:11,i:1563}, +D{l:141,t:11,i:182}, +D{l:5,t:11,i:135}, +D{l:6,t:11,i:519}, +D{l:7,t:11,i:1722}, +D{l:10,t:11,i:271}, +D{l:11,t:11,i:261}, +D{l:145,t:11,i:54}, +D{l:132,t:10,i:274}, +D{l:134,t:0,i:1594}, +D{l:4,t:11,i:300}, +D{l:5,t:11,i:436}, +D{l:135,t:11,i:484}, +D{l:4,t:0,i:747}, +D{l:6,t:0,i:290}, +D{l:7,t:0,i:649}, +D{l:7,t:0,i:1479}, +D{l:135,t:0,i:1583}, +D{l:133,t:11,i:535}, +D{l:147,t:11,i:82}, +D{l:133,t:0,i:232}, +D{l:137,t:0,i:887}, +D{l:135,t:10,i:166}, +D{l:136,t:0,i:521}, +D{l:4,t:0,i:14}, +D{l:7,t:0,i:472}, +D{l:7,t:0,i:1801}, +D{l:10,t:0,i:748}, +D{l:141,t:0,i:458}, +D{l:134,t:0,i:741}, +D{l:134,t:0,i:992}, +D{l:16,t:0,i:111}, +D{l:137,t:10,i:304}, +D{l:4,t:0,i:425}, +D{l:5,t:11,i:387}, +D{l:7,t:11,i:557}, +D{l:12,t:11,i:547}, +D{l:142,t:11,i:86}, +D{l:135,t:11,i:1747}, +D{l:5,t:10,i:654}, +D{l:135,t:11,i:1489}, +D{l:7,t:0,i:789}, +D{l:4,t:11,i:6}, +D{l:5,t:11,i:708}, +D{l:136,t:11,i:75}, +D{l:6,t:10,i:273}, +D{l:10,t:10,i:188}, +D{l:13,t:10,i:377}, +D{l:146,t:10,i:77}, +D{l:6,t:0,i:1593}, +D{l:4,t:11,i:303}, +D{l:7,t:11,i:619}, +D{l:10,t:11,i:547}, +D{l:10,t:11,i:687}, +D{l:11,t:11,i:122}, +D{l:140,t:11,i:601}, +D{l:134,t:0,i:1768}, +D{l:135,t:10,i:410}, +D{l:138,t:11,i:772}, +D{l:11,t:0,i:233}, +D{l:139,t:10,i:524}, +D{l:5,t:0,i:943}, +D{l:134,t:0,i:1779}, +D{l:134,t:10,i:1785}, +D{l:136,t:11,i:529}, +D{l:132,t:0,i:955}, +D{l:5,t:0,i:245}, +D{l:6,t:0,i:576}, +D{l:7,t:0,i:582}, +D{l:136,t:0,i:225}, +D{l:132,t:10,i:780}, +D{l:142,t:0,i:241}, +D{l:134,t:0,i:1943}, +D{l:4,t:11,i:106}, +D{l:7,t:11,i:310}, +D{l:7,t:11,i:1785}, +D{l:10,t:11,i:690}, +D{l:139,t:11,i:717}, +D{l:134,t:0,i:1284}, +D{l:5,t:11,i:890}, +D{l:133,t:11,i:988}, +D{l:6,t:11,i:626}, +D{l:142,t:11,i:431}, +D{l:10,t:11,i:706}, +D{l:145,t:11,i:32}, +D{l:137,t:11,i:332}, +D{l:132,t:11,i:698}, +D{l:135,t:0,i:709}, +D{l:5,t:10,i:948}, +D{l:138,t:11,i:17}, +D{l:136,t:0,i:554}, +D{l:134,t:0,i:1564}, +D{l:139,t:10,i:941}, +D{l:132,t:0,i:443}, +D{l:134,t:0,i:909}, +D{l:134,t:11,i:84}, +D{l:142,t:0,i:280}, +D{l:4,t:10,i:532}, +D{l:5,t:10,i:706}, +D{l:135,t:10,i:662}, +D{l:132,t:0,i:729}, +D{l:5,t:10,i:837}, +D{l:6,t:10,i:1651}, +D{l:139,t:10,i:985}, +D{l:135,t:10,i:1861}, +D{l:4,t:0,i:348}, +D{l:152,t:11,i:3}, +D{l:5,t:11,i:986}, +D{l:6,t:11,i:130}, +D{l:7,t:11,i:1582}, +D{l:8,t:11,i:458}, +D{l:10,t:11,i:101}, +D{l:10,t:11,i:318}, +D{l:138,t:11,i:823}, +D{l:134,t:0,i:758}, +D{l:4,t:0,i:298}, +D{l:137,t:0,i:848}, +D{l:4,t:10,i:330}, +D{l:7,t:10,i:933}, +D{l:7,t:10,i:2012}, +D{l:136,t:10,i:292}, +D{l:7,t:11,i:1644}, +D{l:137,t:11,i:129}, +D{l:6,t:0,i:1422}, +D{l:9,t:0,i:829}, +D{l:135,t:10,i:767}, +D{l:5,t:0,i:164}, +D{l:7,t:0,i:121}, +D{l:142,t:0,i:189}, +D{l:7,t:0,i:812}, +D{l:7,t:0,i:1261}, +D{l:7,t:0,i:1360}, +D{l:9,t:0,i:632}, +D{l:140,t:0,i:352}, +D{l:135,t:11,i:1788}, +D{l:139,t:0,i:556}, +D{l:135,t:11,i:997}, +D{l:145,t:10,i:114}, +D{l:4,t:0,i:172}, +D{l:9,t:0,i:611}, +D{l:10,t:0,i:436}, +D{l:12,t:0,i:673}, +D{l:13,t:0,i:255}, +D{l:137,t:10,i:883}, +D{l:11,t:0,i:530}, +D{l:138,t:10,i:274}, +D{l:133,t:0,i:844}, +D{l:134,t:0,i:984}, +D{l:13,t:0,i:232}, +D{l:18,t:0,i:35}, +D{l:4,t:10,i:703}, +D{l:135,t:10,i:207}, +D{l:132,t:10,i:571}, +D{l:9,t:0,i:263}, +D{l:10,t:0,i:147}, +D{l:138,t:0,i:492}, +D{l:7,t:11,i:1756}, +D{l:137,t:11,i:98}, +D{l:5,t:10,i:873}, +D{l:5,t:10,i:960}, +D{l:8,t:10,i:823}, +D{l:137,t:10,i:881}, +D{l:133,t:0,i:537}, +D{l:132,t:0,i:859}, +D{l:7,t:11,i:1046}, +D{l:139,t:11,i:160}, +D{l:137,t:0,i:842}, +D{l:139,t:10,i:283}, +D{l:5,t:10,i:33}, +D{l:6,t:10,i:470}, +D{l:139,t:10,i:424}, +D{l:6,t:11,i:45}, +D{l:7,t:11,i:433}, +D{l:8,t:11,i:129}, +D{l:9,t:11,i:21}, +D{l:10,t:11,i:392}, +D{l:11,t:11,i:79}, +D{l:12,t:11,i:499}, +D{l:13,t:11,i:199}, +D{l:141,t:11,i:451}, +D{l:135,t:0,i:1291}, +D{l:135,t:10,i:1882}, +D{l:7,t:11,i:558}, +D{l:136,t:11,i:353}, +D{l:134,t:0,i:1482}, +D{l:5,t:0,i:230}, +D{l:5,t:0,i:392}, +D{l:6,t:0,i:420}, +D{l:9,t:0,i:568}, +D{l:140,t:0,i:612}, +D{l:6,t:0,i:262}, +D{l:7,t:10,i:90}, +D{l:7,t:10,i:664}, +D{l:7,t:10,i:830}, +D{l:7,t:10,i:1380}, +D{l:7,t:10,i:2025}, +D{l:8,t:11,i:81}, +D{l:8,t:10,i:448}, +D{l:8,t:10,i:828}, +D{l:9,t:11,i:189}, +D{l:9,t:11,i:201}, +D{l:11,t:11,i:478}, +D{l:11,t:11,i:712}, +D{l:141,t:11,i:338}, +D{l:142,t:0,i:31}, +D{l:5,t:11,i:353}, +D{l:151,t:11,i:26}, +D{l:132,t:0,i:753}, +D{l:4,t:0,i:0}, +D{l:5,t:0,i:41}, +D{l:7,t:0,i:1459}, +D{l:7,t:0,i:1469}, +D{l:7,t:0,i:1859}, +D{l:9,t:0,i:549}, +D{l:139,t:0,i:905}, +D{l:9,t:10,i:417}, +D{l:137,t:10,i:493}, +D{l:135,t:11,i:1113}, +D{l:133,t:0,i:696}, +D{l:141,t:11,i:448}, +D{l:134,t:10,i:295}, +D{l:132,t:0,i:834}, +D{l:4,t:0,i:771}, +D{l:5,t:10,i:1019}, +D{l:6,t:11,i:25}, +D{l:7,t:11,i:855}, +D{l:7,t:11,i:1258}, +D{l:144,t:11,i:32}, +D{l:134,t:0,i:1076}, +D{l:133,t:0,i:921}, +D{l:133,t:0,i:674}, +D{l:4,t:11,i:4}, +D{l:7,t:11,i:1118}, +D{l:7,t:11,i:1320}, +D{l:7,t:11,i:1706}, +D{l:8,t:11,i:277}, +D{l:9,t:11,i:622}, +D{l:10,t:11,i:9}, +D{l:11,t:11,i:724}, +D{l:12,t:11,i:350}, +D{l:12,t:11,i:397}, +D{l:13,t:11,i:28}, +D{l:13,t:11,i:159}, +D{l:15,t:11,i:89}, +D{l:18,t:11,i:5}, +D{l:19,t:11,i:9}, +D{l:20,t:11,i:34}, +D{l:150,t:11,i:47}, +D{l:134,t:10,i:208}, +D{l:6,t:0,i:444}, +D{l:136,t:0,i:308}, +D{l:6,t:0,i:180}, +D{l:7,t:0,i:1137}, +D{l:8,t:0,i:751}, +D{l:139,t:0,i:805}, +D{l:4,t:0,i:183}, +D{l:7,t:0,i:271}, +D{l:11,t:0,i:824}, +D{l:11,t:0,i:952}, +D{l:13,t:0,i:278}, +D{l:13,t:0,i:339}, +D{l:13,t:0,i:482}, +D{l:14,t:0,i:424}, +D{l:148,t:0,i:99}, +D{l:7,t:11,i:317}, +D{l:135,t:11,i:569}, +D{l:4,t:0,i:19}, +D{l:5,t:0,i:477}, +D{l:5,t:0,i:596}, +D{l:6,t:0,i:505}, +D{l:7,t:0,i:1221}, +D{l:11,t:0,i:907}, +D{l:12,t:0,i:209}, +D{l:141,t:0,i:214}, +D{l:135,t:0,i:1215}, +D{l:6,t:0,i:271}, +D{l:7,t:0,i:398}, +D{l:8,t:0,i:387}, +D{l:10,t:0,i:344}, +D{l:7,t:10,i:448}, +D{l:7,t:10,i:1629}, +D{l:7,t:10,i:1813}, +D{l:8,t:10,i:442}, +D{l:9,t:10,i:710}, +D{l:10,t:10,i:282}, +D{l:138,t:10,i:722}, +D{l:11,t:10,i:844}, +D{l:12,t:10,i:104}, +D{l:140,t:10,i:625}, +D{l:134,t:11,i:255}, +D{l:133,t:10,i:787}, +D{l:134,t:0,i:1645}, +D{l:11,t:11,i:956}, +D{l:151,t:11,i:3}, +D{l:6,t:0,i:92}, +D{l:6,t:0,i:188}, +D{l:7,t:0,i:209}, +D{l:7,t:0,i:1269}, +D{l:7,t:0,i:1524}, +D{l:7,t:0,i:1876}, +D{l:8,t:0,i:661}, +D{l:10,t:0,i:42}, +D{l:10,t:0,i:228}, +D{l:11,t:0,i:58}, +D{l:11,t:0,i:1020}, +D{l:12,t:0,i:58}, +D{l:12,t:0,i:118}, +D{l:141,t:0,i:32}, +D{l:4,t:0,i:459}, +D{l:133,t:0,i:966}, +D{l:4,t:11,i:536}, +D{l:7,t:11,i:1141}, +D{l:10,t:11,i:723}, +D{l:139,t:11,i:371}, +D{l:140,t:0,i:330}, +D{l:134,t:0,i:1557}, +D{l:7,t:11,i:285}, +D{l:135,t:11,i:876}, +D{l:136,t:10,i:491}, +D{l:135,t:11,i:560}, +D{l:6,t:0,i:18}, +D{l:7,t:0,i:179}, +D{l:7,t:0,i:932}, +D{l:8,t:0,i:548}, +D{l:8,t:0,i:757}, +D{l:9,t:0,i:54}, +D{l:9,t:0,i:65}, +D{l:9,t:0,i:532}, +D{l:9,t:0,i:844}, +D{l:10,t:0,i:113}, +D{l:10,t:0,i:117}, +D{l:10,t:0,i:315}, +D{l:10,t:0,i:560}, +D{l:10,t:0,i:622}, +D{l:10,t:0,i:798}, +D{l:11,t:0,i:153}, +D{l:11,t:0,i:351}, +D{l:11,t:0,i:375}, +D{l:12,t:0,i:78}, +D{l:12,t:0,i:151}, +D{l:12,t:0,i:392}, +D{l:12,t:0,i:666}, +D{l:14,t:0,i:248}, +D{l:143,t:0,i:23}, +D{l:6,t:0,i:1742}, +D{l:132,t:11,i:690}, +D{l:4,t:10,i:403}, +D{l:5,t:10,i:441}, +D{l:7,t:10,i:450}, +D{l:10,t:10,i:840}, +D{l:11,t:10,i:101}, +D{l:12,t:10,i:193}, +D{l:141,t:10,i:430}, +D{l:133,t:0,i:965}, +D{l:134,t:0,i:182}, +D{l:10,t:0,i:65}, +D{l:10,t:0,i:488}, +D{l:138,t:0,i:497}, +D{l:135,t:11,i:1346}, +D{l:6,t:0,i:973}, +D{l:6,t:0,i:1158}, +D{l:10,t:11,i:200}, +D{l:19,t:11,i:2}, +D{l:151,t:11,i:22}, +D{l:4,t:11,i:190}, +D{l:133,t:11,i:554}, +D{l:133,t:10,i:679}, +D{l:7,t:0,i:328}, +D{l:137,t:10,i:326}, +D{l:133,t:11,i:1001}, +D{l:9,t:0,i:588}, +D{l:138,t:0,i:260}, +D{l:133,t:11,i:446}, +D{l:135,t:10,i:1128}, +D{l:135,t:10,i:1796}, +D{l:147,t:11,i:119}, +D{l:134,t:0,i:1786}, +D{l:6,t:0,i:1328}, +D{l:6,t:0,i:1985}, +D{l:8,t:0,i:962}, +D{l:138,t:0,i:1017}, +D{l:135,t:0,i:308}, +D{l:11,t:0,i:508}, +D{l:4,t:10,i:574}, +D{l:7,t:10,i:350}, +D{l:7,t:10,i:1024}, +D{l:8,t:10,i:338}, +D{l:9,t:10,i:677}, +D{l:138,t:10,i:808}, +D{l:138,t:11,i:752}, +D{l:135,t:10,i:1081}, +D{l:137,t:11,i:96}, +D{l:7,t:10,i:1676}, +D{l:135,t:10,i:2037}, +D{l:136,t:0,i:588}, +D{l:132,t:11,i:304}, +D{l:133,t:0,i:614}, +D{l:140,t:0,i:793}, +D{l:136,t:0,i:287}, +D{l:137,t:10,i:297}, +D{l:141,t:10,i:37}, +D{l:6,t:11,i:53}, +D{l:6,t:11,i:199}, +D{l:7,t:11,i:1408}, +D{l:8,t:11,i:32}, +D{l:8,t:11,i:93}, +D{l:9,t:11,i:437}, +D{l:10,t:11,i:397}, +D{l:10,t:11,i:629}, +D{l:11,t:11,i:593}, +D{l:11,t:11,i:763}, +D{l:13,t:11,i:326}, +D{l:145,t:11,i:35}, +D{l:134,t:11,i:105}, +D{l:9,t:11,i:320}, +D{l:10,t:11,i:506}, +D{l:138,t:11,i:794}, +D{l:5,t:11,i:114}, +D{l:5,t:11,i:255}, +D{l:141,t:11,i:285}, +D{l:140,t:0,i:290}, +D{l:7,t:11,i:2035}, +D{l:8,t:11,i:19}, +D{l:9,t:11,i:89}, +D{l:138,t:11,i:831}, +D{l:134,t:0,i:1136}, +D{l:7,t:0,i:719}, +D{l:8,t:0,i:796}, +D{l:8,t:0,i:809}, +D{l:8,t:0,i:834}, +D{l:6,t:10,i:306}, +D{l:7,t:10,i:1140}, +D{l:7,t:10,i:1340}, +D{l:8,t:10,i:133}, +D{l:138,t:10,i:449}, +D{l:139,t:10,i:1011}, +D{l:5,t:0,i:210}, +D{l:6,t:0,i:213}, +D{l:7,t:0,i:60}, +D{l:10,t:0,i:364}, +D{l:139,t:0,i:135}, +D{l:5,t:0,i:607}, +D{l:8,t:0,i:326}, +D{l:136,t:0,i:490}, +D{l:138,t:11,i:176}, +D{l:132,t:0,i:701}, +D{l:5,t:0,i:472}, +D{l:7,t:0,i:380}, +D{l:137,t:0,i:758}, +D{l:135,t:0,i:1947}, +D{l:6,t:0,i:1079}, +D{l:138,t:0,i:278}, +D{l:138,t:11,i:391}, +D{l:5,t:10,i:329}, +D{l:8,t:10,i:260}, +D{l:139,t:11,i:156}, +D{l:4,t:0,i:386}, +D{l:7,t:0,i:41}, +D{l:8,t:0,i:405}, +D{l:8,t:0,i:728}, +D{l:9,t:0,i:497}, +D{l:11,t:0,i:110}, +D{l:11,t:0,i:360}, +D{l:15,t:0,i:37}, +D{l:144,t:0,i:84}, +D{l:5,t:0,i:46}, +D{l:7,t:0,i:1452}, +D{l:7,t:0,i:1480}, +D{l:8,t:0,i:634}, +D{l:140,t:0,i:472}, +D{l:136,t:0,i:961}, +D{l:4,t:0,i:524}, +D{l:136,t:0,i:810}, +D{l:10,t:0,i:238}, +D{l:141,t:0,i:33}, +D{l:132,t:10,i:657}, +D{l:152,t:10,i:7}, +D{l:133,t:0,i:532}, +D{l:5,t:0,i:997}, +D{l:135,t:10,i:1665}, +D{l:7,t:11,i:594}, +D{l:7,t:11,i:851}, +D{l:7,t:11,i:1858}, +D{l:9,t:11,i:411}, +D{l:9,t:11,i:574}, +D{l:9,t:11,i:666}, +D{l:9,t:11,i:737}, +D{l:10,t:11,i:346}, +D{l:10,t:11,i:712}, +D{l:11,t:11,i:246}, +D{l:11,t:11,i:432}, +D{l:11,t:11,i:517}, +D{l:11,t:11,i:647}, +D{l:11,t:11,i:679}, +D{l:11,t:11,i:727}, +D{l:12,t:11,i:304}, +D{l:12,t:11,i:305}, +D{l:12,t:11,i:323}, +D{l:12,t:11,i:483}, +D{l:12,t:11,i:572}, +D{l:12,t:11,i:593}, +D{l:12,t:11,i:602}, +D{l:13,t:11,i:95}, +D{l:13,t:11,i:101}, +D{l:13,t:11,i:171}, +D{l:13,t:11,i:315}, +D{l:13,t:11,i:378}, +D{l:13,t:11,i:425}, +D{l:13,t:11,i:475}, +D{l:14,t:11,i:63}, +D{l:14,t:11,i:380}, +D{l:14,t:11,i:384}, +D{l:15,t:11,i:133}, +D{l:18,t:11,i:112}, +D{l:148,t:11,i:72}, +D{l:5,t:11,i:955}, +D{l:136,t:11,i:814}, +D{l:134,t:0,i:1301}, +D{l:5,t:10,i:66}, +D{l:7,t:10,i:1896}, +D{l:136,t:10,i:288}, +D{l:133,t:11,i:56}, +D{l:134,t:10,i:1643}, +D{l:6,t:0,i:1298}, +D{l:148,t:11,i:100}, +D{l:5,t:0,i:782}, +D{l:5,t:0,i:829}, +D{l:6,t:0,i:671}, +D{l:6,t:0,i:1156}, +D{l:6,t:0,i:1738}, +D{l:137,t:11,i:621}, +D{l:4,t:0,i:306}, +D{l:5,t:0,i:570}, +D{l:7,t:0,i:1347}, +D{l:5,t:10,i:91}, +D{l:5,t:10,i:648}, +D{l:5,t:10,i:750}, +D{l:5,t:10,i:781}, +D{l:6,t:10,i:54}, +D{l:6,t:10,i:112}, +D{l:6,t:10,i:402}, +D{l:6,t:10,i:1732}, +D{l:7,t:10,i:315}, +D{l:7,t:10,i:749}, +D{l:7,t:10,i:1900}, +D{l:9,t:10,i:78}, +D{l:9,t:10,i:508}, +D{l:10,t:10,i:611}, +D{l:10,t:10,i:811}, +D{l:11,t:10,i:510}, +D{l:11,t:10,i:728}, +D{l:13,t:10,i:36}, +D{l:14,t:10,i:39}, +D{l:16,t:10,i:83}, +D{l:17,t:10,i:124}, +D{l:148,t:10,i:30}, +D{l:8,t:10,i:570}, +D{l:9,t:11,i:477}, +D{l:141,t:11,i:78}, +D{l:4,t:11,i:639}, +D{l:10,t:11,i:4}, +D{l:10,t:10,i:322}, +D{l:10,t:10,i:719}, +D{l:11,t:10,i:407}, +D{l:11,t:11,i:638}, +D{l:12,t:11,i:177}, +D{l:148,t:11,i:57}, +D{l:7,t:0,i:1823}, +D{l:139,t:0,i:693}, +D{l:7,t:0,i:759}, +D{l:5,t:11,i:758}, +D{l:8,t:10,i:125}, +D{l:8,t:10,i:369}, +D{l:8,t:10,i:524}, +D{l:10,t:10,i:486}, +D{l:11,t:10,i:13}, +D{l:11,t:10,i:381}, +D{l:11,t:10,i:736}, +D{l:11,t:10,i:766}, +D{l:11,t:10,i:845}, +D{l:13,t:10,i:114}, +D{l:13,t:10,i:292}, +D{l:142,t:10,i:47}, +D{l:7,t:0,i:1932}, +D{l:6,t:10,i:1684}, +D{l:6,t:10,i:1731}, +D{l:7,t:10,i:356}, +D{l:8,t:10,i:54}, +D{l:8,t:10,i:221}, +D{l:9,t:10,i:225}, +D{l:9,t:10,i:356}, +D{l:10,t:10,i:77}, +D{l:10,t:10,i:446}, +D{l:10,t:10,i:731}, +D{l:12,t:10,i:404}, +D{l:141,t:10,i:491}, +D{l:135,t:11,i:552}, +D{l:135,t:11,i:1112}, +D{l:4,t:0,i:78}, +D{l:5,t:0,i:96}, +D{l:5,t:0,i:182}, +D{l:6,t:0,i:1257}, +D{l:7,t:0,i:1724}, +D{l:7,t:0,i:1825}, +D{l:10,t:0,i:394}, +D{l:10,t:0,i:471}, +D{l:11,t:0,i:532}, +D{l:14,t:0,i:340}, +D{l:145,t:0,i:88}, +D{l:139,t:11,i:328}, +D{l:135,t:0,i:1964}, +D{l:132,t:10,i:411}, +D{l:4,t:10,i:80}, +D{l:5,t:10,i:44}, +D{l:137,t:11,i:133}, +D{l:5,t:11,i:110}, +D{l:6,t:11,i:169}, +D{l:6,t:11,i:1702}, +D{l:7,t:11,i:400}, +D{l:8,t:11,i:538}, +D{l:9,t:11,i:184}, +D{l:9,t:11,i:524}, +D{l:140,t:11,i:218}, +D{l:4,t:0,i:521}, +D{l:5,t:10,i:299}, +D{l:7,t:10,i:1083}, +D{l:140,t:11,i:554}, +D{l:6,t:11,i:133}, +D{l:9,t:11,i:353}, +D{l:12,t:11,i:628}, +D{l:146,t:11,i:79}, +D{l:6,t:0,i:215}, +D{l:7,t:0,i:584}, +D{l:7,t:0,i:1028}, +D{l:7,t:0,i:1473}, +D{l:7,t:0,i:1721}, +D{l:9,t:0,i:424}, +D{l:138,t:0,i:779}, +D{l:7,t:0,i:857}, +D{l:7,t:0,i:1209}, +D{l:7,t:10,i:1713}, +D{l:9,t:10,i:537}, +D{l:10,t:10,i:165}, +D{l:12,t:10,i:219}, +D{l:140,t:10,i:561}, +D{l:4,t:10,i:219}, +D{l:6,t:11,i:93}, +D{l:7,t:11,i:1422}, +D{l:7,t:10,i:1761}, +D{l:7,t:11,i:1851}, +D{l:8,t:11,i:673}, +D{l:9,t:10,i:86}, +D{l:9,t:11,i:529}, +D{l:140,t:11,i:43}, +D{l:137,t:11,i:371}, +D{l:136,t:0,i:671}, +D{l:5,t:0,i:328}, +D{l:135,t:0,i:918}, +D{l:132,t:0,i:529}, +D{l:9,t:11,i:25}, +D{l:10,t:11,i:467}, +D{l:138,t:11,i:559}, +D{l:4,t:11,i:335}, +D{l:135,t:11,i:942}, +D{l:134,t:0,i:716}, +D{l:134,t:0,i:1509}, +D{l:6,t:0,i:67}, +D{l:7,t:0,i:258}, +D{l:7,t:0,i:1630}, +D{l:9,t:0,i:354}, +D{l:9,t:0,i:675}, +D{l:10,t:0,i:830}, +D{l:14,t:0,i:80}, +D{l:17,t:0,i:80}, +D{l:140,t:10,i:428}, +D{l:134,t:0,i:1112}, +D{l:6,t:0,i:141}, +D{l:7,t:0,i:225}, +D{l:9,t:0,i:59}, +D{l:9,t:0,i:607}, +D{l:10,t:0,i:312}, +D{l:11,t:0,i:687}, +D{l:12,t:0,i:555}, +D{l:13,t:0,i:373}, +D{l:13,t:0,i:494}, +D{l:148,t:0,i:58}, +D{l:133,t:10,i:514}, +D{l:8,t:11,i:39}, +D{l:10,t:11,i:773}, +D{l:11,t:11,i:84}, +D{l:12,t:11,i:205}, +D{l:142,t:11,i:1}, +D{l:8,t:0,i:783}, +D{l:5,t:11,i:601}, +D{l:133,t:11,i:870}, +D{l:136,t:11,i:594}, +D{l:4,t:10,i:55}, +D{l:5,t:10,i:301}, +D{l:6,t:10,i:571}, +D{l:14,t:10,i:49}, +D{l:146,t:10,i:102}, +D{l:132,t:11,i:181}, +D{l:134,t:11,i:1652}, +D{l:133,t:10,i:364}, +D{l:4,t:11,i:97}, +D{l:5,t:11,i:147}, +D{l:6,t:11,i:286}, +D{l:7,t:11,i:1362}, +D{l:141,t:11,i:176}, +D{l:4,t:10,i:76}, +D{l:7,t:10,i:1550}, +D{l:9,t:10,i:306}, +D{l:9,t:10,i:430}, +D{l:9,t:10,i:663}, +D{l:10,t:10,i:683}, +D{l:11,t:10,i:427}, +D{l:11,t:10,i:753}, +D{l:12,t:10,i:334}, +D{l:12,t:10,i:442}, +D{l:14,t:10,i:258}, +D{l:14,t:10,i:366}, +D{l:143,t:10,i:131}, +D{l:137,t:10,i:52}, +D{l:6,t:0,i:955}, +D{l:134,t:0,i:1498}, +D{l:6,t:11,i:375}, +D{l:7,t:11,i:169}, +D{l:7,t:11,i:254}, +D{l:136,t:11,i:780}, +D{l:7,t:0,i:430}, +D{l:11,t:0,i:46}, +D{l:14,t:0,i:343}, +D{l:142,t:11,i:343}, +D{l:135,t:0,i:1183}, +D{l:5,t:0,i:602}, +D{l:7,t:0,i:2018}, +D{l:9,t:0,i:418}, +D{l:9,t:0,i:803}, +D{l:135,t:11,i:1447}, +D{l:8,t:0,i:677}, +D{l:135,t:11,i:1044}, +D{l:139,t:11,i:285}, +D{l:4,t:10,i:656}, +D{l:135,t:10,i:779}, +D{l:135,t:10,i:144}, +D{l:5,t:11,i:629}, +D{l:135,t:11,i:1549}, +D{l:135,t:10,i:1373}, +D{l:138,t:11,i:209}, +D{l:7,t:10,i:554}, +D{l:7,t:10,i:605}, +D{l:141,t:10,i:10}, +D{l:5,t:10,i:838}, +D{l:5,t:10,i:841}, +D{l:134,t:10,i:1649}, +D{l:133,t:10,i:1012}, +D{l:6,t:0,i:1357}, +D{l:134,t:0,i:1380}, +D{l:144,t:0,i:53}, +D{l:6,t:0,i:590}, +D{l:7,t:10,i:365}, +D{l:7,t:10,i:1357}, +D{l:7,t:10,i:1497}, +D{l:8,t:10,i:154}, +D{l:141,t:10,i:281}, +D{l:133,t:10,i:340}, +D{l:132,t:11,i:420}, +D{l:135,t:0,i:329}, +D{l:147,t:11,i:32}, +D{l:4,t:0,i:469}, +D{l:10,t:11,i:429}, +D{l:139,t:10,i:495}, +D{l:8,t:10,i:261}, +D{l:9,t:10,i:144}, +D{l:9,t:10,i:466}, +D{l:10,t:10,i:370}, +D{l:12,t:10,i:470}, +D{l:13,t:10,i:144}, +D{l:142,t:10,i:348}, +D{l:142,t:0,i:460}, +D{l:4,t:11,i:325}, +D{l:9,t:10,i:897}, +D{l:138,t:11,i:125}, +D{l:6,t:0,i:1743}, +D{l:6,t:10,i:248}, +D{l:9,t:10,i:546}, +D{l:10,t:10,i:535}, +D{l:11,t:10,i:681}, +D{l:141,t:10,i:135}, +D{l:4,t:0,i:990}, +D{l:5,t:0,i:929}, +D{l:6,t:0,i:340}, +D{l:8,t:0,i:376}, +D{l:8,t:0,i:807}, +D{l:8,t:0,i:963}, +D{l:8,t:0,i:980}, +D{l:138,t:0,i:1007}, +D{l:134,t:0,i:1603}, +D{l:140,t:0,i:250}, +D{l:4,t:11,i:714}, +D{l:133,t:11,i:469}, +D{l:134,t:10,i:567}, +D{l:136,t:10,i:445}, +D{l:5,t:0,i:218}, +D{l:7,t:0,i:1610}, +D{l:8,t:0,i:646}, +D{l:10,t:0,i:83}, +D{l:11,t:11,i:138}, +D{l:140,t:11,i:40}, +D{l:7,t:0,i:1512}, +D{l:135,t:0,i:1794}, +D{l:135,t:11,i:1216}, +D{l:11,t:0,i:0}, +D{l:16,t:0,i:78}, +D{l:132,t:11,i:718}, +D{l:133,t:0,i:571}, +D{l:132,t:0,i:455}, +D{l:134,t:0,i:1012}, +D{l:5,t:11,i:124}, +D{l:5,t:11,i:144}, +D{l:6,t:11,i:548}, +D{l:7,t:11,i:15}, +D{l:7,t:11,i:153}, +D{l:137,t:11,i:629}, +D{l:142,t:11,i:10}, +D{l:6,t:11,i:75}, +D{l:7,t:11,i:1531}, +D{l:8,t:11,i:416}, +D{l:9,t:11,i:240}, +D{l:9,t:11,i:275}, +D{l:10,t:11,i:100}, +D{l:11,t:11,i:658}, +D{l:11,t:11,i:979}, +D{l:12,t:11,i:86}, +D{l:13,t:11,i:468}, +D{l:14,t:11,i:66}, +D{l:14,t:11,i:207}, +D{l:15,t:11,i:20}, +D{l:15,t:11,i:25}, +D{l:144,t:11,i:58}, +D{l:132,t:10,i:577}, +D{l:5,t:11,i:141}, +D{l:5,t:11,i:915}, +D{l:6,t:11,i:1783}, +D{l:7,t:11,i:211}, +D{l:7,t:11,i:698}, +D{l:7,t:11,i:1353}, +D{l:9,t:11,i:83}, +D{l:9,t:11,i:281}, +D{l:10,t:11,i:376}, +D{l:10,t:11,i:431}, +D{l:11,t:11,i:543}, +D{l:12,t:11,i:664}, +D{l:13,t:11,i:280}, +D{l:13,t:11,i:428}, +D{l:14,t:11,i:61}, +D{l:14,t:11,i:128}, +D{l:17,t:11,i:52}, +D{l:145,t:11,i:81}, +D{l:6,t:0,i:161}, +D{l:7,t:0,i:372}, +D{l:137,t:0,i:597}, +D{l:132,t:0,i:349}, +D{l:10,t:11,i:702}, +D{l:139,t:11,i:245}, +D{l:134,t:0,i:524}, +D{l:134,t:10,i:174}, +D{l:6,t:0,i:432}, +D{l:9,t:0,i:751}, +D{l:139,t:0,i:322}, +D{l:147,t:11,i:94}, +D{l:4,t:11,i:338}, +D{l:133,t:11,i:400}, +D{l:5,t:0,i:468}, +D{l:10,t:0,i:325}, +D{l:11,t:0,i:856}, +D{l:12,t:0,i:345}, +D{l:143,t:0,i:104}, +D{l:133,t:0,i:223}, +D{l:132,t:0,i:566}, +D{l:4,t:11,i:221}, +D{l:5,t:11,i:659}, +D{l:5,t:11,i:989}, +D{l:7,t:11,i:697}, +D{l:7,t:11,i:1211}, +D{l:138,t:11,i:284}, +D{l:135,t:11,i:1070}, +D{l:4,t:0,i:59}, +D{l:135,t:0,i:1394}, +D{l:6,t:0,i:436}, +D{l:11,t:0,i:481}, +D{l:5,t:10,i:878}, +D{l:133,t:10,i:972}, +D{l:4,t:0,i:48}, +D{l:5,t:0,i:271}, +D{l:135,t:0,i:953}, +D{l:5,t:0,i:610}, +D{l:136,t:0,i:457}, +D{l:4,t:0,i:773}, +D{l:5,t:0,i:618}, +D{l:137,t:0,i:756}, +D{l:133,t:0,i:755}, +D{l:135,t:0,i:1217}, +D{l:138,t:11,i:507}, +D{l:132,t:10,i:351}, +D{l:132,t:0,i:197}, +D{l:143,t:11,i:78}, +D{l:4,t:11,i:188}, +D{l:7,t:11,i:805}, +D{l:11,t:11,i:276}, +D{l:142,t:11,i:293}, +D{l:5,t:11,i:884}, +D{l:139,t:11,i:991}, +D{l:132,t:10,i:286}, +D{l:10,t:0,i:259}, +D{l:10,t:0,i:428}, +D{l:7,t:10,i:438}, +D{l:7,t:10,i:627}, +D{l:7,t:10,i:1516}, +D{l:8,t:10,i:40}, +D{l:9,t:10,i:56}, +D{l:9,t:10,i:294}, +D{l:11,t:10,i:969}, +D{l:11,t:10,i:995}, +D{l:146,t:10,i:148}, +D{l:4,t:0,i:356}, +D{l:5,t:0,i:217}, +D{l:5,t:0,i:492}, +D{l:5,t:0,i:656}, +D{l:8,t:0,i:544}, +D{l:136,t:11,i:544}, +D{l:5,t:0,i:259}, +D{l:6,t:0,i:1230}, +D{l:7,t:0,i:414}, +D{l:7,t:0,i:854}, +D{l:142,t:0,i:107}, +D{l:132,t:0,i:1007}, +D{l:15,t:0,i:14}, +D{l:144,t:0,i:5}, +D{l:6,t:0,i:1580}, +D{l:132,t:10,i:738}, +D{l:132,t:11,i:596}, +D{l:132,t:0,i:673}, +D{l:133,t:10,i:866}, +D{l:6,t:0,i:1843}, +D{l:135,t:11,i:1847}, +D{l:4,t:0,i:165}, +D{l:7,t:0,i:1398}, +D{l:135,t:0,i:1829}, +D{l:135,t:11,i:1634}, +D{l:147,t:11,i:65}, +D{l:6,t:0,i:885}, +D{l:6,t:0,i:1009}, +D{l:137,t:0,i:809}, +D{l:133,t:10,i:116}, +D{l:132,t:10,i:457}, +D{l:136,t:11,i:770}, +D{l:9,t:0,i:498}, +D{l:12,t:0,i:181}, +D{l:10,t:11,i:361}, +D{l:142,t:11,i:316}, +D{l:134,t:11,i:595}, +D{l:5,t:0,i:9}, +D{l:7,t:0,i:297}, +D{l:7,t:0,i:966}, +D{l:140,t:0,i:306}, +D{l:4,t:11,i:89}, +D{l:5,t:11,i:489}, +D{l:6,t:11,i:315}, +D{l:7,t:11,i:553}, +D{l:7,t:11,i:1745}, +D{l:138,t:11,i:243}, +D{l:134,t:0,i:1487}, +D{l:132,t:0,i:437}, +D{l:5,t:0,i:146}, +D{l:6,t:0,i:411}, +D{l:138,t:0,i:721}, +D{l:5,t:10,i:527}, +D{l:6,t:10,i:189}, +D{l:135,t:10,i:859}, +D{l:11,t:10,i:104}, +D{l:11,t:10,i:554}, +D{l:15,t:10,i:60}, +D{l:143,t:10,i:125}, +D{l:6,t:11,i:1658}, +D{l:9,t:11,i:3}, +D{l:10,t:11,i:154}, +D{l:11,t:11,i:641}, +D{l:13,t:11,i:85}, +D{l:13,t:11,i:201}, +D{l:141,t:11,i:346}, +D{l:6,t:0,i:177}, +D{l:135,t:0,i:467}, +D{l:134,t:0,i:1377}, +D{l:134,t:10,i:116}, +D{l:136,t:11,i:645}, +D{l:4,t:11,i:166}, +D{l:5,t:11,i:505}, +D{l:6,t:11,i:1670}, +D{l:137,t:11,i:110}, +D{l:133,t:10,i:487}, +D{l:4,t:10,i:86}, +D{l:5,t:10,i:667}, +D{l:5,t:10,i:753}, +D{l:6,t:10,i:316}, +D{l:6,t:10,i:455}, +D{l:135,t:10,i:946}, +D{l:133,t:0,i:200}, +D{l:132,t:0,i:959}, +D{l:6,t:0,i:1928}, +D{l:134,t:0,i:1957}, +D{l:139,t:11,i:203}, +D{l:150,t:10,i:45}, +D{l:4,t:10,i:79}, +D{l:7,t:10,i:1773}, +D{l:10,t:10,i:450}, +D{l:11,t:10,i:589}, +D{l:13,t:10,i:332}, +D{l:13,t:10,i:493}, +D{l:14,t:10,i:183}, +D{l:14,t:10,i:334}, +D{l:14,t:10,i:362}, +D{l:14,t:10,i:368}, +D{l:14,t:10,i:376}, +D{l:14,t:10,i:379}, +D{l:19,t:10,i:90}, +D{l:19,t:10,i:103}, +D{l:19,t:10,i:127}, +D{l:148,t:10,i:90}, +D{l:6,t:0,i:1435}, +D{l:135,t:11,i:1275}, +D{l:134,t:0,i:481}, +D{l:7,t:11,i:445}, +D{l:8,t:11,i:307}, +D{l:8,t:11,i:704}, +D{l:10,t:11,i:41}, +D{l:10,t:11,i:439}, +D{l:11,t:11,i:237}, +D{l:11,t:11,i:622}, +D{l:140,t:11,i:201}, +D{l:135,t:11,i:869}, +D{l:4,t:0,i:84}, +D{l:7,t:0,i:1482}, +D{l:10,t:0,i:76}, +D{l:138,t:0,i:142}, +D{l:11,t:11,i:277}, +D{l:144,t:11,i:14}, +D{l:135,t:11,i:1977}, +D{l:4,t:11,i:189}, +D{l:5,t:11,i:713}, +D{l:136,t:11,i:57}, +D{l:133,t:0,i:1015}, +D{l:138,t:11,i:371}, +D{l:4,t:0,i:315}, +D{l:5,t:0,i:507}, +D{l:135,t:0,i:1370}, +D{l:4,t:11,i:552}, +D{l:142,t:10,i:381}, +D{l:9,t:0,i:759}, +D{l:16,t:0,i:31}, +D{l:16,t:0,i:39}, +D{l:16,t:0,i:75}, +D{l:18,t:0,i:24}, +D{l:20,t:0,i:42}, +D{l:152,t:0,i:1}, +D{l:134,t:0,i:712}, +D{l:134,t:0,i:1722}, +D{l:133,t:10,i:663}, +D{l:133,t:10,i:846}, +D{l:8,t:0,i:222}, +D{l:8,t:0,i:476}, +D{l:9,t:0,i:238}, +D{l:11,t:0,i:516}, +D{l:11,t:0,i:575}, +D{l:15,t:0,i:109}, +D{l:146,t:0,i:100}, +D{l:7,t:0,i:1402}, +D{l:7,t:0,i:1414}, +D{l:12,t:0,i:456}, +D{l:5,t:10,i:378}, +D{l:8,t:10,i:465}, +D{l:9,t:10,i:286}, +D{l:10,t:10,i:185}, +D{l:10,t:10,i:562}, +D{l:10,t:10,i:635}, +D{l:11,t:10,i:31}, +D{l:11,t:10,i:393}, +D{l:13,t:10,i:312}, +D{l:18,t:10,i:65}, +D{l:18,t:10,i:96}, +D{l:147,t:10,i:89}, +D{l:4,t:0,i:986}, +D{l:6,t:0,i:1958}, +D{l:6,t:0,i:2032}, +D{l:8,t:0,i:934}, +D{l:138,t:0,i:985}, +D{l:7,t:10,i:1880}, +D{l:9,t:10,i:680}, +D{l:139,t:10,i:798}, +D{l:134,t:10,i:1770}, +D{l:145,t:11,i:49}, +D{l:132,t:11,i:614}, +D{l:132,t:10,i:648}, +D{l:5,t:10,i:945}, +D{l:6,t:10,i:1656}, +D{l:6,t:10,i:1787}, +D{l:7,t:10,i:167}, +D{l:8,t:10,i:824}, +D{l:9,t:10,i:391}, +D{l:10,t:10,i:375}, +D{l:139,t:10,i:185}, +D{l:138,t:11,i:661}, +D{l:7,t:0,i:1273}, +D{l:135,t:11,i:1945}, +D{l:7,t:0,i:706}, +D{l:7,t:0,i:1058}, +D{l:138,t:0,i:538}, +D{l:7,t:10,i:1645}, +D{l:8,t:10,i:352}, +D{l:137,t:10,i:249}, +D{l:132,t:10,i:152}, +D{l:11,t:0,i:92}, +D{l:11,t:0,i:196}, +D{l:11,t:0,i:409}, +D{l:11,t:0,i:450}, +D{l:11,t:0,i:666}, +D{l:11,t:0,i:777}, +D{l:12,t:0,i:262}, +D{l:13,t:0,i:385}, +D{l:13,t:0,i:393}, +D{l:15,t:0,i:115}, +D{l:16,t:0,i:45}, +D{l:145,t:0,i:82}, +D{l:133,t:10,i:1006}, +D{l:6,t:0,i:40}, +D{l:135,t:0,i:1781}, +D{l:9,t:11,i:614}, +D{l:139,t:11,i:327}, +D{l:5,t:10,i:420}, +D{l:135,t:10,i:1449}, +D{l:135,t:0,i:431}, +D{l:10,t:0,i:97}, +D{l:135,t:10,i:832}, +D{l:6,t:0,i:423}, +D{l:7,t:0,i:665}, +D{l:135,t:0,i:1210}, +D{l:7,t:0,i:237}, +D{l:8,t:0,i:664}, +D{l:9,t:0,i:42}, +D{l:9,t:0,i:266}, +D{l:9,t:0,i:380}, +D{l:9,t:0,i:645}, +D{l:10,t:0,i:177}, +D{l:138,t:0,i:276}, +D{l:7,t:0,i:264}, +D{l:133,t:10,i:351}, +D{l:8,t:0,i:213}, +D{l:5,t:10,i:40}, +D{l:7,t:10,i:598}, +D{l:7,t:10,i:1638}, +D{l:9,t:10,i:166}, +D{l:9,t:10,i:640}, +D{l:9,t:10,i:685}, +D{l:9,t:10,i:773}, +D{l:11,t:10,i:215}, +D{l:13,t:10,i:65}, +D{l:14,t:10,i:172}, +D{l:14,t:10,i:317}, +D{l:145,t:10,i:6}, +D{l:5,t:11,i:84}, +D{l:134,t:11,i:163}, +D{l:8,t:10,i:60}, +D{l:9,t:10,i:343}, +D{l:139,t:10,i:769}, +D{l:137,t:0,i:455}, +D{l:133,t:11,i:410}, +D{l:8,t:0,i:906}, +D{l:12,t:0,i:700}, +D{l:12,t:0,i:706}, +D{l:140,t:0,i:729}, +D{l:21,t:11,i:33}, +D{l:150,t:11,i:40}, +D{l:7,t:10,i:1951}, +D{l:8,t:10,i:765}, +D{l:8,t:10,i:772}, +D{l:140,t:10,i:671}, +D{l:7,t:10,i:108}, +D{l:8,t:10,i:219}, +D{l:8,t:10,i:388}, +D{l:9,t:10,i:639}, +D{l:9,t:10,i:775}, +D{l:11,t:10,i:275}, +D{l:140,t:10,i:464}, +D{l:5,t:11,i:322}, +D{l:7,t:11,i:1941}, +D{l:8,t:11,i:186}, +D{l:9,t:11,i:262}, +D{l:10,t:11,i:187}, +D{l:14,t:11,i:208}, +D{l:146,t:11,i:130}, +D{l:139,t:0,i:624}, +D{l:8,t:0,i:574}, +D{l:5,t:11,i:227}, +D{l:140,t:11,i:29}, +D{l:7,t:11,i:1546}, +D{l:11,t:11,i:299}, +D{l:142,t:11,i:407}, +D{l:5,t:10,i:15}, +D{l:6,t:10,i:56}, +D{l:7,t:10,i:1758}, +D{l:8,t:10,i:500}, +D{l:9,t:10,i:730}, +D{l:11,t:10,i:331}, +D{l:13,t:10,i:150}, +D{l:142,t:10,i:282}, +D{l:7,t:11,i:1395}, +D{l:8,t:11,i:486}, +D{l:9,t:11,i:236}, +D{l:9,t:11,i:878}, +D{l:10,t:11,i:218}, +D{l:11,t:11,i:95}, +D{l:19,t:11,i:17}, +D{l:147,t:11,i:31}, +D{l:135,t:11,i:2043}, +D{l:4,t:0,i:354}, +D{l:146,t:11,i:4}, +D{l:140,t:11,i:80}, +D{l:135,t:0,i:1558}, +D{l:134,t:10,i:1886}, +D{l:5,t:10,i:205}, +D{l:6,t:10,i:438}, +D{l:137,t:10,i:711}, +D{l:133,t:11,i:522}, +D{l:133,t:10,i:534}, +D{l:7,t:0,i:235}, +D{l:7,t:0,i:1475}, +D{l:15,t:0,i:68}, +D{l:146,t:0,i:120}, +D{l:137,t:10,i:691}, +D{l:4,t:0,i:942}, +D{l:6,t:0,i:1813}, +D{l:8,t:0,i:917}, +D{l:10,t:0,i:884}, +D{l:12,t:0,i:696}, +D{l:12,t:0,i:717}, +D{l:12,t:0,i:723}, +D{l:12,t:0,i:738}, +D{l:12,t:0,i:749}, +D{l:12,t:0,i:780}, +D{l:16,t:0,i:97}, +D{l:146,t:0,i:169}, +D{l:6,t:10,i:443}, +D{l:8,t:11,i:562}, +D{l:9,t:10,i:237}, +D{l:9,t:10,i:571}, +D{l:9,t:10,i:695}, +D{l:10,t:10,i:139}, +D{l:11,t:10,i:715}, +D{l:12,t:10,i:417}, +D{l:141,t:10,i:421}, +D{l:135,t:0,i:957}, +D{l:133,t:0,i:830}, +D{l:134,t:11,i:1771}, +D{l:146,t:0,i:23}, +D{l:5,t:0,i:496}, +D{l:6,t:0,i:694}, +D{l:7,t:0,i:203}, +D{l:7,t:11,i:1190}, +D{l:137,t:11,i:620}, +D{l:137,t:11,i:132}, +D{l:6,t:0,i:547}, +D{l:134,t:0,i:1549}, +D{l:8,t:11,i:258}, +D{l:9,t:11,i:208}, +D{l:137,t:11,i:359}, +D{l:4,t:0,i:864}, +D{l:5,t:0,i:88}, +D{l:137,t:0,i:239}, +D{l:135,t:11,i:493}, +D{l:4,t:11,i:317}, +D{l:135,t:11,i:1279}, +D{l:132,t:11,i:477}, +D{l:4,t:10,i:578}, +D{l:5,t:11,i:63}, +D{l:133,t:11,i:509}, +D{l:7,t:0,i:650}, +D{l:135,t:0,i:1310}, +D{l:7,t:0,i:1076}, +D{l:9,t:0,i:80}, +D{l:11,t:0,i:78}, +D{l:11,t:0,i:421}, +D{l:11,t:0,i:534}, +D{l:140,t:0,i:545}, +D{l:132,t:11,i:288}, +D{l:12,t:0,i:553}, +D{l:14,t:0,i:118}, +D{l:133,t:10,i:923}, +D{l:7,t:0,i:274}, +D{l:11,t:0,i:479}, +D{l:139,t:0,i:507}, +D{l:8,t:11,i:89}, +D{l:8,t:11,i:620}, +D{l:9,t:11,i:49}, +D{l:10,t:11,i:774}, +D{l:11,t:11,i:628}, +D{l:12,t:11,i:322}, +D{l:143,t:11,i:124}, +D{l:4,t:0,i:497}, +D{l:135,t:0,i:1584}, +D{l:7,t:0,i:261}, +D{l:7,t:0,i:1115}, +D{l:7,t:0,i:1354}, +D{l:7,t:0,i:1404}, +D{l:7,t:0,i:1588}, +D{l:7,t:0,i:1705}, +D{l:7,t:0,i:1902}, +D{l:9,t:0,i:465}, +D{l:10,t:0,i:248}, +D{l:10,t:0,i:349}, +D{l:10,t:0,i:647}, +D{l:11,t:0,i:527}, +D{l:11,t:0,i:660}, +D{l:11,t:0,i:669}, +D{l:12,t:0,i:529}, +D{l:13,t:0,i:305}, +D{l:132,t:10,i:924}, +D{l:133,t:10,i:665}, +D{l:136,t:0,i:13}, +D{l:6,t:0,i:791}, +D{l:138,t:11,i:120}, +D{l:7,t:0,i:642}, +D{l:8,t:0,i:250}, +D{l:11,t:0,i:123}, +D{l:11,t:0,i:137}, +D{l:13,t:0,i:48}, +D{l:142,t:0,i:95}, +D{l:4,t:10,i:265}, +D{l:7,t:10,i:807}, +D{l:135,t:10,i:950}, +D{l:5,t:10,i:93}, +D{l:140,t:10,i:267}, +D{l:135,t:0,i:1429}, +D{l:4,t:0,i:949}, +D{l:10,t:0,i:885}, +D{l:10,t:0,i:891}, +D{l:10,t:0,i:900}, +D{l:10,t:0,i:939}, +D{l:12,t:0,i:760}, +D{l:142,t:0,i:449}, +D{l:139,t:11,i:366}, +D{l:132,t:0,i:818}, +D{l:134,t:11,i:85}, +D{l:135,t:10,i:994}, +D{l:7,t:0,i:330}, +D{l:5,t:10,i:233}, +D{l:5,t:10,i:320}, +D{l:6,t:10,i:140}, +D{l:136,t:10,i:295}, +D{l:4,t:0,i:1004}, +D{l:8,t:0,i:982}, +D{l:136,t:0,i:993}, +D{l:133,t:10,i:978}, +D{l:4,t:10,i:905}, +D{l:6,t:10,i:1701}, +D{l:137,t:10,i:843}, +D{l:10,t:0,i:545}, +D{l:140,t:0,i:301}, +D{l:6,t:0,i:947}, +D{l:134,t:0,i:1062}, +D{l:134,t:0,i:1188}, +D{l:4,t:0,i:904}, +D{l:5,t:0,i:794}, +D{l:152,t:10,i:6}, +D{l:134,t:0,i:1372}, +D{l:135,t:11,i:608}, +D{l:5,t:11,i:279}, +D{l:6,t:11,i:235}, +D{l:7,t:11,i:468}, +D{l:8,t:11,i:446}, +D{l:9,t:11,i:637}, +D{l:10,t:11,i:717}, +D{l:11,t:11,i:738}, +D{l:140,t:11,i:514}, +D{l:132,t:10,i:509}, +D{l:5,t:11,i:17}, +D{l:6,t:11,i:371}, +D{l:137,t:11,i:528}, +D{l:132,t:0,i:693}, +D{l:4,t:11,i:115}, +D{l:5,t:11,i:669}, +D{l:6,t:11,i:407}, +D{l:8,t:11,i:311}, +D{l:11,t:11,i:10}, +D{l:141,t:11,i:5}, +D{l:11,t:0,i:377}, +D{l:7,t:10,i:273}, +D{l:137,t:11,i:381}, +D{l:135,t:0,i:695}, +D{l:7,t:0,i:386}, +D{l:138,t:0,i:713}, +D{l:135,t:10,i:1041}, +D{l:134,t:0,i:1291}, +D{l:6,t:0,i:7}, +D{l:6,t:0,i:35}, +D{l:7,t:0,i:147}, +D{l:7,t:0,i:1069}, +D{l:7,t:0,i:1568}, +D{l:7,t:0,i:1575}, +D{l:7,t:0,i:1917}, +D{l:8,t:0,i:43}, +D{l:8,t:0,i:208}, +D{l:9,t:0,i:128}, +D{l:9,t:0,i:866}, +D{l:10,t:0,i:20}, +D{l:11,t:0,i:981}, +D{l:147,t:0,i:33}, +D{l:7,t:0,i:893}, +D{l:141,t:0,i:424}, +D{l:139,t:10,i:234}, +D{l:150,t:11,i:56}, +D{l:5,t:11,i:779}, +D{l:5,t:11,i:807}, +D{l:6,t:11,i:1655}, +D{l:134,t:11,i:1676}, +D{l:5,t:10,i:802}, +D{l:7,t:10,i:2021}, +D{l:136,t:10,i:805}, +D{l:4,t:11,i:196}, +D{l:5,t:10,i:167}, +D{l:5,t:11,i:558}, +D{l:5,t:10,i:899}, +D{l:5,t:11,i:949}, +D{l:6,t:10,i:410}, +D{l:137,t:10,i:777}, +D{l:137,t:10,i:789}, +D{l:134,t:10,i:1705}, +D{l:8,t:0,i:904}, +D{l:140,t:0,i:787}, +D{l:6,t:0,i:322}, +D{l:9,t:0,i:552}, +D{l:11,t:0,i:274}, +D{l:13,t:0,i:209}, +D{l:13,t:0,i:499}, +D{l:14,t:0,i:85}, +D{l:15,t:0,i:126}, +D{l:145,t:0,i:70}, +D{l:135,t:10,i:10}, +D{l:5,t:10,i:11}, +D{l:6,t:10,i:117}, +D{l:6,t:10,i:485}, +D{l:7,t:10,i:1133}, +D{l:9,t:10,i:582}, +D{l:9,t:10,i:594}, +D{l:11,t:10,i:21}, +D{l:11,t:10,i:818}, +D{l:12,t:10,i:535}, +D{l:141,t:10,i:86}, +D{l:4,t:10,i:264}, +D{l:7,t:10,i:1067}, +D{l:8,t:10,i:204}, +D{l:8,t:10,i:385}, +D{l:139,t:10,i:953}, +D{l:132,t:11,i:752}, +D{l:138,t:10,i:56}, +D{l:133,t:10,i:470}, +D{l:6,t:0,i:1808}, +D{l:8,t:0,i:83}, +D{l:8,t:0,i:742}, +D{l:8,t:0,i:817}, +D{l:9,t:0,i:28}, +D{l:9,t:0,i:29}, +D{l:9,t:0,i:885}, +D{l:10,t:0,i:387}, +D{l:11,t:0,i:633}, +D{l:11,t:0,i:740}, +D{l:13,t:0,i:235}, +D{l:13,t:0,i:254}, +D{l:15,t:0,i:143}, +D{l:143,t:0,i:146}, +D{l:140,t:0,i:49}, +D{l:134,t:0,i:1832}, +D{l:4,t:11,i:227}, +D{l:5,t:11,i:159}, +D{l:5,t:11,i:409}, +D{l:7,t:11,i:80}, +D{l:10,t:11,i:294}, +D{l:10,t:11,i:479}, +D{l:12,t:11,i:418}, +D{l:14,t:11,i:50}, +D{l:14,t:11,i:249}, +D{l:142,t:11,i:295}, +D{l:7,t:11,i:1470}, +D{l:8,t:11,i:66}, +D{l:8,t:11,i:137}, +D{l:8,t:11,i:761}, +D{l:9,t:11,i:638}, +D{l:11,t:11,i:80}, +D{l:11,t:11,i:212}, +D{l:11,t:11,i:368}, +D{l:11,t:11,i:418}, +D{l:12,t:11,i:8}, +D{l:13,t:11,i:15}, +D{l:16,t:11,i:61}, +D{l:17,t:11,i:59}, +D{l:19,t:11,i:28}, +D{l:148,t:11,i:84}, +D{l:139,t:10,i:1015}, +D{l:138,t:11,i:468}, +D{l:135,t:0,i:421}, +D{l:6,t:0,i:415}, +D{l:7,t:0,i:1049}, +D{l:137,t:0,i:442}, +D{l:6,t:11,i:38}, +D{l:7,t:11,i:1220}, +D{l:8,t:11,i:185}, +D{l:8,t:11,i:256}, +D{l:9,t:11,i:22}, +D{l:9,t:11,i:331}, +D{l:10,t:11,i:738}, +D{l:11,t:11,i:205}, +D{l:11,t:11,i:540}, +D{l:11,t:11,i:746}, +D{l:13,t:11,i:399}, +D{l:13,t:11,i:465}, +D{l:14,t:11,i:88}, +D{l:142,t:11,i:194}, +D{l:139,t:0,i:289}, +D{l:133,t:10,i:715}, +D{l:4,t:0,i:110}, +D{l:10,t:0,i:415}, +D{l:10,t:0,i:597}, +D{l:142,t:0,i:206}, +D{l:4,t:11,i:159}, +D{l:6,t:11,i:115}, +D{l:7,t:11,i:252}, +D{l:7,t:11,i:257}, +D{l:7,t:11,i:1928}, +D{l:8,t:11,i:69}, +D{l:9,t:11,i:384}, +D{l:10,t:11,i:91}, +D{l:10,t:11,i:615}, +D{l:12,t:11,i:375}, +D{l:14,t:11,i:235}, +D{l:18,t:11,i:117}, +D{l:147,t:11,i:123}, +D{l:5,t:11,i:911}, +D{l:136,t:11,i:278}, +D{l:7,t:0,i:205}, +D{l:7,t:0,i:2000}, +D{l:8,t:10,i:794}, +D{l:9,t:10,i:400}, +D{l:10,t:10,i:298}, +D{l:142,t:10,i:228}, +D{l:135,t:11,i:1774}, +D{l:4,t:11,i:151}, +D{l:7,t:11,i:1567}, +D{l:8,t:11,i:351}, +D{l:137,t:11,i:322}, +D{l:136,t:10,i:724}, +D{l:133,t:11,i:990}, +D{l:7,t:0,i:1539}, +D{l:11,t:0,i:512}, +D{l:13,t:0,i:205}, +D{l:19,t:0,i:30}, +D{l:22,t:0,i:36}, +D{l:23,t:0,i:19}, +D{l:135,t:11,i:1539}, +D{l:5,t:11,i:194}, +D{l:7,t:11,i:1662}, +D{l:9,t:11,i:90}, +D{l:140,t:11,i:180}, +D{l:6,t:10,i:190}, +D{l:7,t:10,i:768}, +D{l:135,t:10,i:1170}, +D{l:134,t:0,i:1340}, +D{l:4,t:0,i:283}, +D{l:135,t:0,i:1194}, +D{l:133,t:11,i:425}, +D{l:133,t:11,i:971}, +D{l:12,t:0,i:549}, +D{l:14,t:10,i:67}, +D{l:147,t:10,i:60}, +D{l:135,t:10,i:1023}, +D{l:134,t:0,i:1720}, +D{l:138,t:11,i:587}, +D{l:5,t:11,i:72}, +D{l:6,t:11,i:264}, +D{l:7,t:11,i:21}, +D{l:7,t:11,i:46}, +D{l:7,t:11,i:2013}, +D{l:8,t:11,i:215}, +D{l:8,t:11,i:513}, +D{l:10,t:11,i:266}, +D{l:139,t:11,i:22}, +D{l:5,t:0,i:319}, +D{l:135,t:0,i:534}, +D{l:6,t:10,i:137}, +D{l:9,t:10,i:75}, +D{l:9,t:10,i:253}, +D{l:10,t:10,i:194}, +D{l:138,t:10,i:444}, +D{l:7,t:0,i:1180}, +D{l:20,t:0,i:112}, +D{l:6,t:11,i:239}, +D{l:7,t:11,i:118}, +D{l:10,t:11,i:95}, +D{l:11,t:11,i:603}, +D{l:13,t:11,i:443}, +D{l:14,t:11,i:160}, +D{l:143,t:11,i:4}, +D{l:134,t:11,i:431}, +D{l:5,t:11,i:874}, +D{l:6,t:11,i:1677}, +D{l:11,t:10,i:643}, +D{l:12,t:10,i:115}, +D{l:143,t:11,i:0}, +D{l:134,t:0,i:967}, +D{l:6,t:11,i:65}, +D{l:7,t:11,i:939}, +D{l:7,t:11,i:1172}, +D{l:7,t:11,i:1671}, +D{l:9,t:11,i:540}, +D{l:10,t:11,i:696}, +D{l:11,t:11,i:265}, +D{l:11,t:11,i:732}, +D{l:11,t:11,i:928}, +D{l:11,t:11,i:937}, +D{l:12,t:11,i:399}, +D{l:13,t:11,i:438}, +D{l:149,t:11,i:19}, +D{l:137,t:11,i:200}, +D{l:135,t:0,i:1940}, +D{l:5,t:10,i:760}, +D{l:7,t:10,i:542}, +D{l:8,t:10,i:135}, +D{l:136,t:10,i:496}, +D{l:140,t:11,i:44}, +D{l:7,t:11,i:1655}, +D{l:136,t:11,i:305}, +D{l:7,t:10,i:319}, +D{l:7,t:10,i:355}, +D{l:7,t:10,i:763}, +D{l:10,t:10,i:389}, +D{l:145,t:10,i:43}, +D{l:136,t:0,i:735}, +D{l:138,t:10,i:786}, +D{l:137,t:11,i:19}, +D{l:132,t:11,i:696}, +D{l:5,t:0,i:132}, +D{l:9,t:0,i:486}, +D{l:9,t:0,i:715}, +D{l:10,t:0,i:458}, +D{l:11,t:0,i:373}, +D{l:11,t:0,i:668}, +D{l:11,t:0,i:795}, +D{l:11,t:0,i:897}, +D{l:12,t:0,i:272}, +D{l:12,t:0,i:424}, +D{l:12,t:0,i:539}, +D{l:12,t:0,i:558}, +D{l:14,t:0,i:245}, +D{l:14,t:0,i:263}, +D{l:14,t:0,i:264}, +D{l:14,t:0,i:393}, +D{l:142,t:0,i:403}, +D{l:10,t:0,i:38}, +D{l:139,t:0,i:784}, +D{l:132,t:0,i:838}, +D{l:4,t:11,i:302}, +D{l:135,t:11,i:1766}, +D{l:133,t:0,i:379}, +D{l:5,t:0,i:8}, +D{l:6,t:0,i:89}, +D{l:6,t:0,i:400}, +D{l:7,t:0,i:1569}, +D{l:7,t:0,i:1623}, +D{l:7,t:0,i:1850}, +D{l:8,t:0,i:218}, +D{l:8,t:0,i:422}, +D{l:9,t:0,i:570}, +D{l:10,t:0,i:626}, +D{l:4,t:11,i:726}, +D{l:133,t:11,i:630}, +D{l:4,t:0,i:1017}, +D{l:138,t:0,i:660}, +D{l:6,t:0,i:387}, +D{l:7,t:0,i:882}, +D{l:141,t:0,i:111}, +D{l:6,t:0,i:224}, +D{l:7,t:0,i:877}, +D{l:137,t:0,i:647}, +D{l:4,t:10,i:58}, +D{l:5,t:10,i:286}, +D{l:6,t:10,i:319}, +D{l:7,t:10,i:402}, +D{l:7,t:10,i:1254}, +D{l:7,t:10,i:1903}, +D{l:8,t:10,i:356}, +D{l:140,t:10,i:408}, +D{l:135,t:0,i:790}, +D{l:9,t:0,i:510}, +D{l:10,t:0,i:53}, +D{l:4,t:10,i:389}, +D{l:9,t:10,i:181}, +D{l:10,t:10,i:29}, +D{l:10,t:10,i:816}, +D{l:11,t:10,i:311}, +D{l:11,t:10,i:561}, +D{l:12,t:10,i:67}, +D{l:141,t:10,i:181}, +D{l:142,t:0,i:458}, +D{l:6,t:11,i:118}, +D{l:7,t:11,i:215}, +D{l:7,t:11,i:1521}, +D{l:140,t:11,i:11}, +D{l:134,t:0,i:954}, +D{l:135,t:0,i:394}, +D{l:134,t:0,i:1367}, +D{l:5,t:11,i:225}, +D{l:133,t:10,i:373}, +D{l:132,t:0,i:882}, +D{l:7,t:0,i:1409}, +D{l:135,t:10,i:1972}, +D{l:135,t:10,i:1793}, +D{l:4,t:11,i:370}, +D{l:5,t:11,i:756}, +D{l:135,t:11,i:1326}, +D{l:150,t:11,i:13}, +D{l:7,t:11,i:354}, +D{l:10,t:11,i:410}, +D{l:139,t:11,i:815}, +D{l:6,t:11,i:1662}, +D{l:7,t:11,i:48}, +D{l:8,t:11,i:771}, +D{l:10,t:11,i:116}, +D{l:13,t:11,i:104}, +D{l:14,t:11,i:105}, +D{l:14,t:11,i:184}, +D{l:15,t:11,i:168}, +D{l:19,t:11,i:92}, +D{l:148,t:11,i:68}, +D{l:7,t:0,i:124}, +D{l:136,t:0,i:38}, +D{l:5,t:0,i:261}, +D{l:7,t:0,i:78}, +D{l:7,t:0,i:199}, +D{l:8,t:0,i:815}, +D{l:9,t:0,i:126}, +D{l:10,t:0,i:342}, +D{l:140,t:0,i:647}, +D{l:4,t:0,i:628}, +D{l:140,t:0,i:724}, +D{l:7,t:0,i:266}, +D{l:8,t:0,i:804}, +D{l:7,t:10,i:1651}, +D{l:145,t:10,i:89}, +D{l:135,t:0,i:208}, +D{l:134,t:0,i:1178}, +D{l:6,t:0,i:79}, +D{l:135,t:0,i:1519}, +D{l:132,t:10,i:672}, +D{l:133,t:10,i:737}, +D{l:136,t:0,i:741}, +D{l:132,t:11,i:120}, +D{l:4,t:0,i:710}, +D{l:6,t:0,i:376}, +D{l:134,t:0,i:606}, +D{l:134,t:0,i:1347}, +D{l:134,t:0,i:1494}, +D{l:6,t:0,i:850}, +D{l:6,t:0,i:1553}, +D{l:137,t:0,i:821}, +D{l:5,t:10,i:145}, +D{l:134,t:11,i:593}, +D{l:7,t:0,i:1311}, +D{l:140,t:0,i:135}, +D{l:4,t:0,i:467}, +D{l:5,t:0,i:405}, +D{l:134,t:0,i:544}, +D{l:5,t:11,i:820}, +D{l:135,t:11,i:931}, +D{l:6,t:0,i:100}, +D{l:7,t:0,i:244}, +D{l:7,t:0,i:632}, +D{l:7,t:0,i:1609}, +D{l:8,t:0,i:178}, +D{l:8,t:0,i:638}, +D{l:141,t:0,i:58}, +D{l:4,t:10,i:387}, +D{l:135,t:10,i:1288}, +D{l:6,t:11,i:151}, +D{l:6,t:11,i:1675}, +D{l:7,t:11,i:383}, +D{l:151,t:11,i:10}, +D{l:132,t:0,i:481}, +D{l:135,t:10,i:550}, +D{l:134,t:0,i:1378}, +D{l:6,t:11,i:1624}, +D{l:11,t:11,i:11}, +D{l:12,t:11,i:422}, +D{l:13,t:11,i:262}, +D{l:142,t:11,i:360}, +D{l:133,t:0,i:791}, +D{l:4,t:11,i:43}, +D{l:5,t:11,i:344}, +D{l:133,t:11,i:357}, +D{l:7,t:0,i:1227}, +D{l:140,t:0,i:978}, +D{l:7,t:0,i:686}, +D{l:8,t:0,i:33}, +D{l:8,t:0,i:238}, +D{l:10,t:0,i:616}, +D{l:11,t:0,i:467}, +D{l:11,t:0,i:881}, +D{l:13,t:0,i:217}, +D{l:13,t:0,i:253}, +D{l:142,t:0,i:268}, +D{l:137,t:0,i:857}, +D{l:8,t:0,i:467}, +D{l:8,t:0,i:1006}, +D{l:7,t:11,i:148}, +D{l:8,t:11,i:284}, +D{l:141,t:11,i:63}, +D{l:4,t:10,i:576}, +D{l:135,t:10,i:1263}, +D{l:133,t:11,i:888}, +D{l:5,t:10,i:919}, +D{l:134,t:10,i:1673}, +D{l:20,t:10,i:37}, +D{l:148,t:11,i:37}, +D{l:132,t:0,i:447}, +D{l:132,t:11,i:711}, +D{l:4,t:0,i:128}, +D{l:5,t:0,i:415}, +D{l:6,t:0,i:462}, +D{l:7,t:0,i:294}, +D{l:7,t:0,i:578}, +D{l:10,t:0,i:710}, +D{l:139,t:0,i:86}, +D{l:4,t:10,i:82}, +D{l:5,t:10,i:333}, +D{l:5,t:10,i:904}, +D{l:6,t:10,i:207}, +D{l:7,t:10,i:325}, +D{l:7,t:10,i:1726}, +D{l:8,t:10,i:101}, +D{l:10,t:10,i:778}, +D{l:139,t:10,i:220}, +D{l:136,t:0,i:587}, +D{l:137,t:11,i:440}, +D{l:133,t:10,i:903}, +D{l:6,t:0,i:427}, +D{l:7,t:0,i:1018}, +D{l:138,t:0,i:692}, +D{l:4,t:0,i:195}, +D{l:135,t:0,i:802}, +D{l:140,t:10,i:147}, +D{l:134,t:0,i:1546}, +D{l:134,t:0,i:684}, +D{l:132,t:10,i:705}, +D{l:136,t:0,i:345}, +D{l:11,t:11,i:678}, +D{l:140,t:11,i:307}, +D{l:133,t:0,i:365}, +D{l:134,t:0,i:1683}, +D{l:4,t:11,i:65}, +D{l:5,t:11,i:479}, +D{l:5,t:11,i:1004}, +D{l:7,t:11,i:1913}, +D{l:8,t:11,i:317}, +D{l:9,t:11,i:302}, +D{l:10,t:11,i:612}, +D{l:141,t:11,i:22}, +D{l:138,t:0,i:472}, +D{l:4,t:11,i:261}, +D{l:135,t:11,i:510}, +D{l:134,t:10,i:90}, +D{l:142,t:0,i:433}, +D{l:151,t:0,i:28}, +D{l:4,t:11,i:291}, +D{l:7,t:11,i:101}, +D{l:9,t:11,i:515}, +D{l:12,t:11,i:152}, +D{l:12,t:11,i:443}, +D{l:13,t:11,i:392}, +D{l:142,t:11,i:357}, +D{l:140,t:0,i:997}, +D{l:5,t:0,i:3}, +D{l:8,t:0,i:578}, +D{l:9,t:0,i:118}, +D{l:10,t:0,i:705}, +D{l:141,t:0,i:279}, +D{l:135,t:11,i:1266}, +D{l:7,t:10,i:813}, +D{l:12,t:10,i:497}, +D{l:141,t:10,i:56}, +D{l:133,t:0,i:229}, +D{l:6,t:10,i:125}, +D{l:135,t:10,i:1277}, +D{l:8,t:0,i:102}, +D{l:10,t:0,i:578}, +D{l:10,t:0,i:672}, +D{l:12,t:0,i:496}, +D{l:13,t:0,i:408}, +D{l:14,t:0,i:121}, +D{l:17,t:0,i:106}, +D{l:151,t:10,i:12}, +D{l:6,t:0,i:866}, +D{l:134,t:0,i:1080}, +D{l:136,t:0,i:1022}, +D{l:4,t:11,i:130}, +D{l:135,t:11,i:843}, +D{l:5,t:11,i:42}, +D{l:5,t:11,i:879}, +D{l:7,t:11,i:245}, +D{l:7,t:11,i:324}, +D{l:7,t:11,i:1532}, +D{l:11,t:11,i:463}, +D{l:11,t:11,i:472}, +D{l:13,t:11,i:363}, +D{l:144,t:11,i:52}, +D{l:150,t:0,i:55}, +D{l:8,t:0,i:115}, +D{l:8,t:0,i:350}, +D{l:9,t:0,i:489}, +D{l:10,t:0,i:128}, +D{l:11,t:0,i:306}, +D{l:12,t:0,i:373}, +D{l:14,t:0,i:30}, +D{l:17,t:0,i:79}, +D{l:19,t:0,i:80}, +D{l:4,t:11,i:134}, +D{l:133,t:11,i:372}, +D{l:134,t:0,i:657}, +D{l:134,t:0,i:933}, +D{l:135,t:11,i:1147}, +D{l:4,t:0,i:230}, +D{l:133,t:0,i:702}, +D{l:134,t:0,i:1728}, +D{l:4,t:0,i:484}, +D{l:18,t:0,i:26}, +D{l:19,t:0,i:42}, +D{l:20,t:0,i:43}, +D{l:21,t:0,i:0}, +D{l:23,t:0,i:27}, +D{l:152,t:0,i:14}, +D{l:7,t:0,i:185}, +D{l:135,t:0,i:703}, +D{l:6,t:0,i:417}, +D{l:10,t:0,i:618}, +D{l:7,t:10,i:1106}, +D{l:9,t:10,i:770}, +D{l:11,t:10,i:112}, +D{l:140,t:10,i:413}, +D{l:134,t:0,i:803}, +D{l:132,t:11,i:644}, +D{l:134,t:0,i:1262}, +D{l:7,t:11,i:540}, +D{l:12,t:10,i:271}, +D{l:145,t:10,i:109}, +D{l:135,t:11,i:123}, +D{l:132,t:0,i:633}, +D{l:134,t:11,i:623}, +D{l:4,t:11,i:908}, +D{l:5,t:11,i:359}, +D{l:5,t:11,i:508}, +D{l:6,t:11,i:1723}, +D{l:7,t:11,i:343}, +D{l:7,t:11,i:1996}, +D{l:135,t:11,i:2026}, +D{l:135,t:0,i:479}, +D{l:10,t:0,i:262}, +D{l:7,t:10,i:304}, +D{l:9,t:10,i:646}, +D{l:9,t:10,i:862}, +D{l:11,t:10,i:696}, +D{l:12,t:10,i:208}, +D{l:15,t:10,i:79}, +D{l:147,t:10,i:108}, +D{l:4,t:11,i:341}, +D{l:135,t:11,i:480}, +D{l:134,t:0,i:830}, +D{l:5,t:0,i:70}, +D{l:5,t:0,i:622}, +D{l:6,t:0,i:334}, +D{l:7,t:0,i:1032}, +D{l:9,t:0,i:171}, +D{l:11,t:0,i:26}, +D{l:11,t:0,i:213}, +D{l:11,t:0,i:637}, +D{l:11,t:0,i:707}, +D{l:12,t:0,i:202}, +D{l:12,t:0,i:380}, +D{l:13,t:0,i:226}, +D{l:13,t:0,i:355}, +D{l:14,t:0,i:222}, +D{l:145,t:0,i:42}, +D{l:135,t:10,i:981}, +D{l:143,t:0,i:217}, +D{l:137,t:11,i:114}, +D{l:4,t:0,i:23}, +D{l:4,t:0,i:141}, +D{l:5,t:0,i:313}, +D{l:5,t:0,i:1014}, +D{l:6,t:0,i:50}, +D{l:6,t:0,i:51}, +D{l:7,t:0,i:142}, +D{l:7,t:0,i:384}, +D{l:7,t:0,i:559}, +D{l:8,t:0,i:640}, +D{l:9,t:0,i:460}, +D{l:9,t:0,i:783}, +D{l:11,t:0,i:741}, +D{l:12,t:0,i:183}, +D{l:141,t:0,i:488}, +D{l:141,t:0,i:360}, +D{l:7,t:0,i:1586}, +D{l:7,t:11,i:1995}, +D{l:8,t:11,i:299}, +D{l:11,t:11,i:890}, +D{l:140,t:11,i:674}, +D{l:132,t:10,i:434}, +D{l:7,t:0,i:652}, +D{l:134,t:10,i:550}, +D{l:7,t:0,i:766}, +D{l:5,t:10,i:553}, +D{l:138,t:10,i:824}, +D{l:7,t:0,i:737}, +D{l:8,t:0,i:298}, +D{l:136,t:10,i:452}, +D{l:4,t:11,i:238}, +D{l:5,t:11,i:503}, +D{l:6,t:11,i:179}, +D{l:7,t:11,i:2003}, +D{l:8,t:11,i:381}, +D{l:8,t:11,i:473}, +D{l:9,t:11,i:149}, +D{l:10,t:11,i:183}, +D{l:15,t:11,i:45}, +D{l:143,t:11,i:86}, +D{l:133,t:10,i:292}, +D{l:5,t:0,i:222}, +D{l:9,t:0,i:655}, +D{l:138,t:0,i:534}, +D{l:138,t:10,i:135}, +D{l:4,t:11,i:121}, +D{l:5,t:11,i:156}, +D{l:5,t:11,i:349}, +D{l:9,t:11,i:136}, +D{l:10,t:11,i:605}, +D{l:14,t:11,i:342}, +D{l:147,t:11,i:107}, +D{l:137,t:0,i:906}, +D{l:6,t:0,i:1013}, +D{l:134,t:0,i:1250}, +D{l:6,t:0,i:1956}, +D{l:6,t:0,i:2009}, +D{l:8,t:0,i:991}, +D{l:144,t:0,i:120}, +D{l:135,t:11,i:1192}, +D{l:138,t:0,i:503}, +D{l:5,t:0,i:154}, +D{l:7,t:0,i:1491}, +D{l:10,t:0,i:379}, +D{l:138,t:0,i:485}, +D{l:6,t:0,i:1867}, +D{l:6,t:0,i:1914}, +D{l:6,t:0,i:1925}, +D{l:9,t:0,i:917}, +D{l:9,t:0,i:925}, +D{l:9,t:0,i:932}, +D{l:9,t:0,i:951}, +D{l:9,t:0,i:1007}, +D{l:9,t:0,i:1013}, +D{l:12,t:0,i:806}, +D{l:12,t:0,i:810}, +D{l:12,t:0,i:814}, +D{l:12,t:0,i:816}, +D{l:12,t:0,i:824}, +D{l:12,t:0,i:832}, +D{l:12,t:0,i:837}, +D{l:12,t:0,i:863}, +D{l:12,t:0,i:868}, +D{l:12,t:0,i:870}, +D{l:12,t:0,i:889}, +D{l:12,t:0,i:892}, +D{l:12,t:0,i:900}, +D{l:12,t:0,i:902}, +D{l:12,t:0,i:908}, +D{l:12,t:0,i:933}, +D{l:12,t:0,i:942}, +D{l:12,t:0,i:949}, +D{l:12,t:0,i:954}, +D{l:15,t:0,i:175}, +D{l:15,t:0,i:203}, +D{l:15,t:0,i:213}, +D{l:15,t:0,i:218}, +D{l:15,t:0,i:225}, +D{l:15,t:0,i:231}, +D{l:15,t:0,i:239}, +D{l:15,t:0,i:248}, +D{l:15,t:0,i:252}, +D{l:18,t:0,i:190}, +D{l:18,t:0,i:204}, +D{l:18,t:0,i:215}, +D{l:18,t:0,i:216}, +D{l:18,t:0,i:222}, +D{l:18,t:0,i:225}, +D{l:18,t:0,i:230}, +D{l:18,t:0,i:239}, +D{l:18,t:0,i:241}, +D{l:21,t:0,i:42}, +D{l:21,t:0,i:43}, +D{l:21,t:0,i:44}, +D{l:21,t:0,i:45}, +D{l:21,t:0,i:46}, +D{l:21,t:0,i:53}, +D{l:24,t:0,i:27}, +D{l:152,t:0,i:31}, +D{l:133,t:0,i:716}, +D{l:135,t:0,i:844}, +D{l:4,t:0,i:91}, +D{l:5,t:0,i:388}, +D{l:5,t:0,i:845}, +D{l:6,t:0,i:206}, +D{l:6,t:0,i:252}, +D{l:6,t:0,i:365}, +D{l:7,t:0,i:136}, +D{l:7,t:0,i:531}, +D{l:136,t:0,i:621}, +D{l:7,t:10,i:393}, +D{l:10,t:10,i:603}, +D{l:139,t:10,i:206}, +D{l:6,t:11,i:80}, +D{l:6,t:11,i:1694}, +D{l:7,t:11,i:173}, +D{l:7,t:11,i:1974}, +D{l:9,t:11,i:547}, +D{l:10,t:11,i:730}, +D{l:14,t:11,i:18}, +D{l:150,t:11,i:39}, +D{l:137,t:0,i:748}, +D{l:4,t:11,i:923}, +D{l:134,t:11,i:1711}, +D{l:4,t:10,i:912}, +D{l:137,t:10,i:232}, +D{l:7,t:10,i:98}, +D{l:7,t:10,i:1973}, +D{l:136,t:10,i:716}, +D{l:14,t:0,i:103}, +D{l:133,t:10,i:733}, +D{l:132,t:11,i:595}, +D{l:12,t:0,i:158}, +D{l:18,t:0,i:8}, +D{l:19,t:0,i:62}, +D{l:20,t:0,i:6}, +D{l:22,t:0,i:4}, +D{l:23,t:0,i:2}, +D{l:23,t:0,i:9}, +D{l:5,t:11,i:240}, +D{l:6,t:11,i:459}, +D{l:7,t:11,i:12}, +D{l:7,t:11,i:114}, +D{l:7,t:11,i:502}, +D{l:7,t:11,i:1751}, +D{l:7,t:11,i:1753}, +D{l:7,t:11,i:1805}, +D{l:8,t:11,i:658}, +D{l:9,t:11,i:1}, +D{l:11,t:11,i:959}, +D{l:13,t:11,i:446}, +D{l:142,t:11,i:211}, +D{l:135,t:0,i:576}, +D{l:5,t:0,i:771}, +D{l:5,t:0,i:863}, +D{l:5,t:0,i:898}, +D{l:6,t:0,i:648}, +D{l:6,t:0,i:1632}, +D{l:6,t:0,i:1644}, +D{l:134,t:0,i:1780}, +D{l:133,t:0,i:331}, +D{l:7,t:11,i:633}, +D{l:7,t:11,i:905}, +D{l:7,t:11,i:909}, +D{l:7,t:11,i:1538}, +D{l:9,t:11,i:767}, +D{l:140,t:11,i:636}, +D{l:140,t:0,i:632}, +D{l:5,t:0,i:107}, +D{l:7,t:0,i:201}, +D{l:136,t:0,i:518}, +D{l:6,t:0,i:446}, +D{l:7,t:0,i:1817}, +D{l:134,t:11,i:490}, +D{l:9,t:0,i:851}, +D{l:141,t:0,i:510}, +D{l:7,t:11,i:250}, +D{l:8,t:11,i:506}, +D{l:136,t:11,i:507}, +D{l:4,t:0,i:504}, +D{l:137,t:10,i:72}, +D{l:132,t:11,i:158}, +D{l:4,t:11,i:140}, +D{l:7,t:11,i:362}, +D{l:8,t:11,i:209}, +D{l:9,t:11,i:10}, +D{l:9,t:11,i:160}, +D{l:9,t:11,i:503}, +D{l:10,t:11,i:689}, +D{l:11,t:11,i:350}, +D{l:11,t:11,i:553}, +D{l:11,t:11,i:725}, +D{l:12,t:11,i:252}, +D{l:12,t:11,i:583}, +D{l:13,t:11,i:192}, +D{l:13,t:11,i:352}, +D{l:14,t:11,i:269}, +D{l:14,t:11,i:356}, +D{l:148,t:11,i:50}, +D{l:6,t:11,i:597}, +D{l:135,t:11,i:1318}, +D{l:135,t:10,i:1454}, +D{l:5,t:0,i:883}, +D{l:5,t:0,i:975}, +D{l:8,t:0,i:392}, +D{l:148,t:0,i:7}, +D{l:6,t:11,i:228}, +D{l:7,t:11,i:1341}, +D{l:9,t:11,i:408}, +D{l:138,t:11,i:343}, +D{l:11,t:11,i:348}, +D{l:11,t:10,i:600}, +D{l:12,t:11,i:99}, +D{l:13,t:10,i:245}, +D{l:18,t:11,i:1}, +D{l:18,t:11,i:11}, +D{l:147,t:11,i:4}, +D{l:134,t:11,i:296}, +D{l:5,t:0,i:922}, +D{l:134,t:0,i:1707}, +D{l:132,t:11,i:557}, +D{l:4,t:11,i:548}, +D{l:7,t:10,i:164}, +D{l:7,t:10,i:1571}, +D{l:9,t:10,i:107}, +D{l:140,t:10,i:225}, +D{l:7,t:11,i:197}, +D{l:8,t:11,i:142}, +D{l:8,t:11,i:325}, +D{l:9,t:11,i:150}, +D{l:9,t:11,i:596}, +D{l:10,t:11,i:350}, +D{l:10,t:11,i:353}, +D{l:11,t:11,i:74}, +D{l:11,t:11,i:315}, +D{l:14,t:11,i:423}, +D{l:143,t:11,i:141}, +D{l:5,t:0,i:993}, +D{l:7,t:0,i:515}, +D{l:137,t:0,i:91}, +D{l:4,t:0,i:131}, +D{l:8,t:0,i:200}, +D{l:5,t:10,i:484}, +D{l:5,t:10,i:510}, +D{l:6,t:10,i:434}, +D{l:7,t:10,i:1000}, +D{l:7,t:10,i:1098}, +D{l:136,t:10,i:2}, +D{l:152,t:0,i:10}, +D{l:4,t:11,i:62}, +D{l:5,t:11,i:83}, +D{l:6,t:11,i:399}, +D{l:6,t:11,i:579}, +D{l:7,t:11,i:692}, +D{l:7,t:11,i:846}, +D{l:7,t:11,i:1015}, +D{l:7,t:11,i:1799}, +D{l:8,t:11,i:403}, +D{l:9,t:11,i:394}, +D{l:10,t:11,i:133}, +D{l:12,t:11,i:4}, +D{l:12,t:11,i:297}, +D{l:12,t:11,i:452}, +D{l:16,t:11,i:81}, +D{l:18,t:11,i:19}, +D{l:18,t:11,i:25}, +D{l:21,t:11,i:14}, +D{l:22,t:11,i:12}, +D{l:151,t:11,i:18}, +D{l:140,t:11,i:459}, +D{l:132,t:11,i:177}, +D{l:7,t:0,i:1433}, +D{l:9,t:0,i:365}, +D{l:137,t:11,i:365}, +D{l:132,t:10,i:460}, +D{l:5,t:0,i:103}, +D{l:6,t:0,i:2004}, +D{l:7,t:0,i:921}, +D{l:8,t:0,i:580}, +D{l:8,t:0,i:593}, +D{l:8,t:0,i:630}, +D{l:10,t:0,i:28}, +D{l:5,t:11,i:411}, +D{l:135,t:11,i:653}, +D{l:4,t:10,i:932}, +D{l:133,t:10,i:891}, +D{l:4,t:0,i:911}, +D{l:5,t:0,i:867}, +D{l:5,t:0,i:1013}, +D{l:7,t:0,i:2034}, +D{l:8,t:0,i:798}, +D{l:136,t:0,i:813}, +D{l:7,t:11,i:439}, +D{l:10,t:11,i:727}, +D{l:11,t:11,i:260}, +D{l:139,t:11,i:684}, +D{l:136,t:10,i:625}, +D{l:5,t:11,i:208}, +D{l:7,t:11,i:753}, +D{l:135,t:11,i:1528}, +D{l:5,t:0,i:461}, +D{l:7,t:0,i:1925}, +D{l:12,t:0,i:39}, +D{l:13,t:0,i:265}, +D{l:13,t:0,i:439}, +D{l:134,t:10,i:76}, +D{l:6,t:0,i:853}, +D{l:8,t:10,i:92}, +D{l:137,t:10,i:221}, +D{l:5,t:0,i:135}, +D{l:6,t:0,i:519}, +D{l:7,t:0,i:1722}, +D{l:10,t:0,i:271}, +D{l:11,t:0,i:261}, +D{l:145,t:0,i:54}, +D{l:139,t:11,i:814}, +D{l:14,t:0,i:338}, +D{l:148,t:0,i:81}, +D{l:4,t:0,i:300}, +D{l:133,t:0,i:436}, +D{l:5,t:0,i:419}, +D{l:5,t:0,i:687}, +D{l:7,t:0,i:864}, +D{l:9,t:0,i:470}, +D{l:135,t:11,i:864}, +D{l:9,t:0,i:836}, +D{l:133,t:11,i:242}, +D{l:134,t:0,i:1937}, +D{l:4,t:10,i:763}, +D{l:133,t:11,i:953}, +D{l:132,t:10,i:622}, +D{l:132,t:0,i:393}, +D{l:133,t:10,i:253}, +D{l:8,t:0,i:357}, +D{l:10,t:0,i:745}, +D{l:14,t:0,i:426}, +D{l:17,t:0,i:94}, +D{l:19,t:0,i:57}, +D{l:135,t:10,i:546}, +D{l:5,t:11,i:615}, +D{l:146,t:11,i:37}, +D{l:9,t:10,i:73}, +D{l:10,t:10,i:110}, +D{l:14,t:10,i:185}, +D{l:145,t:10,i:119}, +D{l:11,t:0,i:703}, +D{l:7,t:10,i:624}, +D{l:7,t:10,i:916}, +D{l:10,t:10,i:256}, +D{l:139,t:10,i:87}, +D{l:133,t:11,i:290}, +D{l:5,t:10,i:212}, +D{l:12,t:10,i:35}, +D{l:141,t:10,i:382}, +D{l:132,t:11,i:380}, +D{l:5,t:11,i:52}, +D{l:7,t:11,i:277}, +D{l:9,t:11,i:368}, +D{l:139,t:11,i:791}, +D{l:133,t:0,i:387}, +D{l:10,t:11,i:138}, +D{l:139,t:11,i:476}, +D{l:4,t:0,i:6}, +D{l:5,t:0,i:708}, +D{l:136,t:0,i:75}, +D{l:7,t:0,i:1351}, +D{l:9,t:0,i:581}, +D{l:10,t:0,i:639}, +D{l:11,t:0,i:453}, +D{l:140,t:0,i:584}, +D{l:132,t:0,i:303}, +D{l:138,t:0,i:772}, +D{l:135,t:10,i:1175}, +D{l:4,t:0,i:749}, +D{l:5,t:10,i:816}, +D{l:6,t:11,i:256}, +D{l:7,t:11,i:307}, +D{l:7,t:11,i:999}, +D{l:7,t:11,i:1481}, +D{l:7,t:11,i:1732}, +D{l:7,t:11,i:1738}, +D{l:8,t:11,i:265}, +D{l:9,t:11,i:414}, +D{l:11,t:11,i:316}, +D{l:12,t:11,i:52}, +D{l:13,t:11,i:420}, +D{l:147,t:11,i:100}, +D{l:135,t:11,i:1296}, +D{l:6,t:0,i:1065}, +D{l:5,t:10,i:869}, +D{l:5,t:10,i:968}, +D{l:6,t:10,i:1626}, +D{l:8,t:10,i:734}, +D{l:136,t:10,i:784}, +D{l:4,t:10,i:542}, +D{l:6,t:10,i:1716}, +D{l:6,t:10,i:1727}, +D{l:7,t:10,i:1082}, +D{l:7,t:10,i:1545}, +D{l:8,t:10,i:56}, +D{l:8,t:10,i:118}, +D{l:8,t:10,i:412}, +D{l:8,t:10,i:564}, +D{l:9,t:10,i:888}, +D{l:9,t:10,i:908}, +D{l:10,t:10,i:50}, +D{l:10,t:10,i:423}, +D{l:11,t:10,i:685}, +D{l:11,t:10,i:697}, +D{l:11,t:10,i:933}, +D{l:12,t:10,i:299}, +D{l:13,t:10,i:126}, +D{l:13,t:10,i:136}, +D{l:13,t:10,i:170}, +D{l:141,t:10,i:190}, +D{l:134,t:0,i:226}, +D{l:4,t:0,i:106}, +D{l:7,t:0,i:310}, +D{l:11,t:0,i:717}, +D{l:133,t:11,i:723}, +D{l:5,t:0,i:890}, +D{l:5,t:0,i:988}, +D{l:4,t:10,i:232}, +D{l:9,t:10,i:202}, +D{l:10,t:10,i:474}, +D{l:140,t:10,i:433}, +D{l:6,t:0,i:626}, +D{l:142,t:0,i:431}, +D{l:10,t:0,i:706}, +D{l:150,t:0,i:44}, +D{l:13,t:0,i:51}, +D{l:6,t:10,i:108}, +D{l:7,t:10,i:1003}, +D{l:7,t:10,i:1181}, +D{l:8,t:10,i:111}, +D{l:136,t:10,i:343}, +D{l:132,t:0,i:698}, +D{l:5,t:11,i:109}, +D{l:6,t:11,i:1784}, +D{l:7,t:11,i:1895}, +D{l:12,t:11,i:296}, +D{l:140,t:11,i:302}, +D{l:134,t:0,i:828}, +D{l:134,t:10,i:1712}, +D{l:138,t:0,i:17}, +D{l:7,t:0,i:1929}, +D{l:4,t:10,i:133}, +D{l:5,t:11,i:216}, +D{l:7,t:10,i:711}, +D{l:7,t:10,i:1298}, +D{l:7,t:10,i:1585}, +D{l:7,t:11,i:1879}, +D{l:9,t:11,i:141}, +D{l:9,t:11,i:270}, +D{l:9,t:11,i:679}, +D{l:10,t:11,i:159}, +D{l:10,t:11,i:553}, +D{l:11,t:11,i:197}, +D{l:11,t:11,i:438}, +D{l:12,t:11,i:538}, +D{l:12,t:11,i:559}, +D{l:13,t:11,i:193}, +D{l:13,t:11,i:423}, +D{l:14,t:11,i:144}, +D{l:14,t:11,i:166}, +D{l:14,t:11,i:167}, +D{l:15,t:11,i:67}, +D{l:147,t:11,i:84}, +D{l:141,t:11,i:127}, +D{l:7,t:11,i:1872}, +D{l:137,t:11,i:81}, +D{l:6,t:10,i:99}, +D{l:7,t:10,i:1808}, +D{l:145,t:10,i:57}, +D{l:134,t:11,i:391}, +D{l:5,t:0,i:689}, +D{l:6,t:0,i:84}, +D{l:7,t:0,i:1250}, +D{l:6,t:10,i:574}, +D{l:7,t:10,i:428}, +D{l:10,t:10,i:669}, +D{l:11,t:10,i:485}, +D{l:11,t:10,i:840}, +D{l:12,t:10,i:300}, +D{l:142,t:10,i:250}, +D{l:7,t:11,i:322}, +D{l:136,t:11,i:249}, +D{l:7,t:11,i:432}, +D{l:135,t:11,i:1649}, +D{l:135,t:10,i:1871}, +D{l:137,t:10,i:252}, +D{l:6,t:11,i:155}, +D{l:140,t:11,i:234}, +D{l:7,t:0,i:871}, +D{l:19,t:0,i:27}, +D{l:147,t:11,i:27}, +D{l:140,t:0,i:498}, +D{l:5,t:0,i:986}, +D{l:6,t:0,i:130}, +D{l:138,t:0,i:823}, +D{l:6,t:0,i:1793}, +D{l:7,t:0,i:1582}, +D{l:8,t:0,i:458}, +D{l:10,t:0,i:101}, +D{l:10,t:0,i:318}, +D{l:10,t:0,i:945}, +D{l:12,t:0,i:734}, +D{l:16,t:0,i:104}, +D{l:18,t:0,i:177}, +D{l:6,t:10,i:323}, +D{l:135,t:10,i:1564}, +D{l:5,t:11,i:632}, +D{l:138,t:11,i:526}, +D{l:10,t:0,i:435}, +D{l:7,t:10,i:461}, +D{l:136,t:10,i:775}, +D{l:6,t:11,i:144}, +D{l:7,t:11,i:948}, +D{l:7,t:11,i:1042}, +D{l:7,t:11,i:1857}, +D{l:8,t:11,i:235}, +D{l:8,t:11,i:461}, +D{l:9,t:11,i:453}, +D{l:9,t:11,i:530}, +D{l:10,t:11,i:354}, +D{l:17,t:11,i:77}, +D{l:19,t:11,i:99}, +D{l:148,t:11,i:79}, +D{l:138,t:0,i:966}, +D{l:7,t:0,i:1644}, +D{l:137,t:0,i:129}, +D{l:135,t:0,i:997}, +D{l:136,t:0,i:502}, +D{l:5,t:11,i:196}, +D{l:6,t:11,i:486}, +D{l:7,t:11,i:212}, +D{l:8,t:11,i:309}, +D{l:136,t:11,i:346}, +D{l:7,t:10,i:727}, +D{l:146,t:10,i:73}, +D{l:132,t:0,i:823}, +D{l:132,t:11,i:686}, +D{l:135,t:0,i:1927}, +D{l:4,t:0,i:762}, +D{l:7,t:0,i:1756}, +D{l:137,t:0,i:98}, +D{l:136,t:10,i:577}, +D{l:24,t:0,i:8}, +D{l:4,t:11,i:30}, +D{l:5,t:11,i:43}, +D{l:152,t:11,i:8}, +D{l:7,t:0,i:1046}, +D{l:139,t:0,i:160}, +D{l:7,t:0,i:492}, +D{l:4,t:10,i:413}, +D{l:5,t:10,i:677}, +D{l:7,t:11,i:492}, +D{l:8,t:10,i:432}, +D{l:140,t:10,i:280}, +D{l:6,t:0,i:45}, +D{l:7,t:0,i:433}, +D{l:8,t:0,i:129}, +D{l:9,t:0,i:21}, +D{l:10,t:0,i:392}, +D{l:11,t:0,i:79}, +D{l:12,t:0,i:499}, +D{l:13,t:0,i:199}, +D{l:141,t:0,i:451}, +D{l:7,t:0,i:558}, +D{l:136,t:0,i:353}, +D{l:4,t:11,i:220}, +D{l:7,t:11,i:1535}, +D{l:9,t:11,i:93}, +D{l:139,t:11,i:474}, +D{l:7,t:10,i:646}, +D{l:7,t:10,i:1730}, +D{l:11,t:10,i:446}, +D{l:141,t:10,i:178}, +D{l:133,t:0,i:785}, +D{l:134,t:0,i:1145}, +D{l:8,t:0,i:81}, +D{l:9,t:0,i:189}, +D{l:9,t:0,i:201}, +D{l:11,t:0,i:478}, +D{l:11,t:0,i:712}, +D{l:141,t:0,i:338}, +D{l:5,t:0,i:353}, +D{l:151,t:0,i:26}, +D{l:11,t:0,i:762}, +D{l:132,t:10,i:395}, +D{l:134,t:0,i:2024}, +D{l:4,t:0,i:611}, +D{l:133,t:0,i:606}, +D{l:9,t:10,i:174}, +D{l:10,t:10,i:164}, +D{l:11,t:10,i:440}, +D{l:11,t:10,i:841}, +D{l:143,t:10,i:98}, +D{l:134,t:10,i:426}, +D{l:10,t:10,i:608}, +D{l:139,t:10,i:1002}, +D{l:138,t:10,i:250}, +D{l:6,t:0,i:25}, +D{l:7,t:0,i:855}, +D{l:7,t:0,i:1258}, +D{l:144,t:0,i:32}, +D{l:7,t:11,i:1725}, +D{l:138,t:11,i:393}, +D{l:5,t:11,i:263}, +D{l:134,t:11,i:414}, +D{l:6,t:0,i:2011}, +D{l:133,t:10,i:476}, +D{l:4,t:0,i:4}, +D{l:7,t:0,i:1118}, +D{l:7,t:0,i:1320}, +D{l:7,t:0,i:1706}, +D{l:8,t:0,i:277}, +D{l:9,t:0,i:622}, +D{l:10,t:0,i:9}, +D{l:11,t:0,i:724}, +D{l:12,t:0,i:350}, +D{l:12,t:0,i:397}, +D{l:13,t:0,i:28}, +D{l:13,t:0,i:159}, +D{l:15,t:0,i:89}, +D{l:18,t:0,i:5}, +D{l:19,t:0,i:9}, +D{l:20,t:0,i:34}, +D{l:22,t:0,i:47}, +D{l:6,t:11,i:178}, +D{l:6,t:11,i:1750}, +D{l:8,t:11,i:251}, +D{l:9,t:11,i:690}, +D{l:10,t:11,i:155}, +D{l:10,t:11,i:196}, +D{l:10,t:11,i:373}, +D{l:11,t:11,i:698}, +D{l:13,t:11,i:155}, +D{l:148,t:11,i:93}, +D{l:5,t:11,i:97}, +D{l:137,t:11,i:393}, +D{l:7,t:0,i:764}, +D{l:11,t:0,i:461}, +D{l:12,t:0,i:172}, +D{l:5,t:10,i:76}, +D{l:6,t:10,i:458}, +D{l:6,t:10,i:497}, +D{l:7,t:10,i:868}, +D{l:9,t:10,i:658}, +D{l:10,t:10,i:594}, +D{l:11,t:10,i:566}, +D{l:12,t:10,i:338}, +D{l:141,t:10,i:200}, +D{l:134,t:0,i:1449}, +D{l:138,t:11,i:40}, +D{l:134,t:11,i:1639}, +D{l:134,t:0,i:1445}, +D{l:6,t:0,i:1168}, +D{l:4,t:10,i:526}, +D{l:7,t:10,i:1029}, +D{l:135,t:10,i:1054}, +D{l:4,t:11,i:191}, +D{l:7,t:11,i:934}, +D{l:8,t:11,i:647}, +D{l:145,t:11,i:97}, +D{l:132,t:10,i:636}, +D{l:6,t:0,i:233}, +D{l:7,t:10,i:660}, +D{l:7,t:10,i:1124}, +D{l:17,t:10,i:31}, +D{l:19,t:10,i:22}, +D{l:151,t:10,i:14}, +D{l:6,t:10,i:1699}, +D{l:136,t:11,i:110}, +D{l:12,t:11,i:246}, +D{l:15,t:11,i:162}, +D{l:19,t:11,i:64}, +D{l:20,t:11,i:8}, +D{l:20,t:11,i:95}, +D{l:22,t:11,i:24}, +D{l:152,t:11,i:17}, +D{l:5,t:11,i:165}, +D{l:9,t:11,i:346}, +D{l:138,t:11,i:655}, +D{l:5,t:11,i:319}, +D{l:135,t:11,i:534}, +D{l:134,t:0,i:255}, +D{l:9,t:0,i:216}, +D{l:8,t:11,i:128}, +D{l:139,t:11,i:179}, +D{l:9,t:0,i:183}, +D{l:139,t:0,i:286}, +D{l:11,t:0,i:956}, +D{l:151,t:0,i:3}, +D{l:4,t:0,i:536}, +D{l:7,t:0,i:1141}, +D{l:10,t:0,i:723}, +D{l:139,t:0,i:371}, +D{l:4,t:10,i:279}, +D{l:7,t:10,i:301}, +D{l:137,t:10,i:362}, +D{l:7,t:0,i:285}, +D{l:5,t:11,i:57}, +D{l:6,t:11,i:101}, +D{l:6,t:11,i:1663}, +D{l:7,t:11,i:132}, +D{l:7,t:11,i:1048}, +D{l:7,t:11,i:1154}, +D{l:7,t:11,i:1415}, +D{l:7,t:11,i:1507}, +D{l:12,t:11,i:493}, +D{l:15,t:11,i:105}, +D{l:151,t:11,i:15}, +D{l:5,t:11,i:459}, +D{l:7,t:11,i:1073}, +D{l:7,t:10,i:1743}, +D{l:8,t:11,i:241}, +D{l:136,t:11,i:334}, +D{l:4,t:10,i:178}, +D{l:133,t:10,i:399}, +D{l:135,t:0,i:560}, +D{l:132,t:0,i:690}, +D{l:135,t:0,i:1246}, +D{l:18,t:0,i:157}, +D{l:147,t:0,i:63}, +D{l:10,t:0,i:599}, +D{l:11,t:0,i:33}, +D{l:12,t:0,i:571}, +D{l:149,t:0,i:1}, +D{l:6,t:11,i:324}, +D{l:6,t:11,i:520}, +D{l:7,t:11,i:338}, +D{l:7,t:11,i:1616}, +D{l:7,t:11,i:1729}, +D{l:8,t:11,i:228}, +D{l:9,t:11,i:69}, +D{l:139,t:11,i:750}, +D{l:7,t:0,i:1862}, +D{l:12,t:0,i:491}, +D{l:12,t:0,i:520}, +D{l:13,t:0,i:383}, +D{l:142,t:0,i:244}, +D{l:135,t:11,i:734}, +D{l:134,t:10,i:1692}, +D{l:10,t:0,i:448}, +D{l:11,t:0,i:630}, +D{l:17,t:0,i:117}, +D{l:6,t:10,i:202}, +D{l:7,t:11,i:705}, +D{l:12,t:10,i:360}, +D{l:17,t:10,i:118}, +D{l:18,t:10,i:27}, +D{l:148,t:10,i:67}, +D{l:4,t:11,i:73}, +D{l:6,t:11,i:612}, +D{l:7,t:11,i:927}, +D{l:7,t:11,i:1822}, +D{l:8,t:11,i:217}, +D{l:9,t:11,i:472}, +D{l:9,t:11,i:765}, +D{l:9,t:11,i:766}, +D{l:10,t:11,i:408}, +D{l:11,t:11,i:51}, +D{l:11,t:11,i:793}, +D{l:12,t:11,i:266}, +D{l:15,t:11,i:158}, +D{l:20,t:11,i:89}, +D{l:150,t:11,i:32}, +D{l:4,t:0,i:190}, +D{l:133,t:0,i:554}, +D{l:133,t:0,i:1001}, +D{l:5,t:11,i:389}, +D{l:8,t:11,i:636}, +D{l:137,t:11,i:229}, +D{l:5,t:0,i:446}, +D{l:7,t:10,i:872}, +D{l:10,t:10,i:516}, +D{l:139,t:10,i:167}, +D{l:137,t:10,i:313}, +D{l:132,t:10,i:224}, +D{l:134,t:0,i:1313}, +D{l:5,t:10,i:546}, +D{l:7,t:10,i:35}, +D{l:8,t:10,i:11}, +D{l:8,t:10,i:12}, +D{l:9,t:10,i:315}, +D{l:9,t:10,i:533}, +D{l:10,t:10,i:802}, +D{l:11,t:10,i:166}, +D{l:12,t:10,i:525}, +D{l:142,t:10,i:243}, +D{l:6,t:0,i:636}, +D{l:137,t:0,i:837}, +D{l:5,t:10,i:241}, +D{l:8,t:10,i:242}, +D{l:9,t:10,i:451}, +D{l:10,t:10,i:667}, +D{l:11,t:10,i:598}, +D{l:140,t:10,i:429}, +D{l:22,t:10,i:46}, +D{l:150,t:11,i:46}, +D{l:136,t:11,i:472}, +D{l:11,t:0,i:278}, +D{l:142,t:0,i:73}, +D{l:141,t:11,i:185}, +D{l:132,t:0,i:868}, +D{l:134,t:0,i:972}, +D{l:4,t:10,i:366}, +D{l:137,t:10,i:516}, +D{l:138,t:0,i:1010}, +D{l:5,t:11,i:189}, +D{l:6,t:10,i:1736}, +D{l:7,t:11,i:442}, +D{l:7,t:11,i:443}, +D{l:8,t:11,i:281}, +D{l:12,t:11,i:174}, +D{l:13,t:11,i:83}, +D{l:141,t:11,i:261}, +D{l:139,t:11,i:384}, +D{l:6,t:11,i:2}, +D{l:7,t:11,i:191}, +D{l:7,t:11,i:446}, +D{l:7,t:11,i:758}, +D{l:7,t:11,i:1262}, +D{l:7,t:11,i:1737}, +D{l:8,t:11,i:22}, +D{l:8,t:11,i:270}, +D{l:8,t:11,i:612}, +D{l:9,t:11,i:4}, +D{l:9,t:11,i:167}, +D{l:9,t:11,i:312}, +D{l:9,t:11,i:436}, +D{l:10,t:11,i:156}, +D{l:10,t:11,i:216}, +D{l:10,t:11,i:311}, +D{l:10,t:11,i:623}, +D{l:11,t:11,i:72}, +D{l:11,t:11,i:330}, +D{l:11,t:11,i:455}, +D{l:12,t:11,i:101}, +D{l:12,t:11,i:321}, +D{l:12,t:11,i:504}, +D{l:12,t:11,i:530}, +D{l:12,t:11,i:543}, +D{l:13,t:11,i:17}, +D{l:13,t:11,i:156}, +D{l:13,t:11,i:334}, +D{l:14,t:11,i:48}, +D{l:15,t:11,i:70}, +D{l:17,t:11,i:60}, +D{l:148,t:11,i:64}, +D{l:6,t:10,i:331}, +D{l:136,t:10,i:623}, +D{l:135,t:0,i:1231}, +D{l:132,t:0,i:304}, +D{l:6,t:11,i:60}, +D{l:7,t:11,i:670}, +D{l:7,t:11,i:1327}, +D{l:8,t:11,i:411}, +D{l:8,t:11,i:435}, +D{l:9,t:11,i:653}, +D{l:9,t:11,i:740}, +D{l:10,t:11,i:385}, +D{l:11,t:11,i:222}, +D{l:11,t:11,i:324}, +D{l:11,t:11,i:829}, +D{l:140,t:11,i:611}, +D{l:7,t:0,i:506}, +D{l:6,t:11,i:166}, +D{l:7,t:11,i:374}, +D{l:135,t:11,i:1174}, +D{l:14,t:11,i:43}, +D{l:146,t:11,i:21}, +D{l:135,t:11,i:1694}, +D{l:135,t:10,i:1888}, +D{l:5,t:11,i:206}, +D{l:134,t:11,i:398}, +D{l:135,t:11,i:50}, +D{l:150,t:0,i:26}, +D{l:6,t:0,i:53}, +D{l:6,t:0,i:199}, +D{l:7,t:0,i:1408}, +D{l:8,t:0,i:32}, +D{l:8,t:0,i:93}, +D{l:10,t:0,i:397}, +D{l:10,t:0,i:629}, +D{l:11,t:0,i:593}, +D{l:11,t:0,i:763}, +D{l:13,t:0,i:326}, +D{l:145,t:0,i:35}, +D{l:134,t:0,i:105}, +D{l:132,t:10,i:394}, +D{l:4,t:0,i:843}, +D{l:138,t:0,i:794}, +D{l:11,t:0,i:704}, +D{l:141,t:0,i:396}, +D{l:5,t:0,i:114}, +D{l:5,t:0,i:255}, +D{l:141,t:0,i:285}, +D{l:6,t:0,i:619}, +D{l:7,t:0,i:898}, +D{l:7,t:0,i:1092}, +D{l:8,t:0,i:485}, +D{l:18,t:0,i:28}, +D{l:19,t:0,i:116}, +D{l:135,t:10,i:1931}, +D{l:9,t:0,i:145}, +D{l:7,t:10,i:574}, +D{l:135,t:10,i:1719}, +D{l:7,t:0,i:2035}, +D{l:8,t:0,i:19}, +D{l:9,t:0,i:89}, +D{l:138,t:0,i:831}, +D{l:132,t:10,i:658}, +D{l:6,t:11,i:517}, +D{l:7,t:11,i:1159}, +D{l:10,t:11,i:621}, +D{l:139,t:11,i:192}, +D{l:7,t:0,i:1933}, +D{l:7,t:11,i:1933}, +D{l:9,t:10,i:781}, +D{l:10,t:10,i:144}, +D{l:11,t:10,i:385}, +D{l:13,t:10,i:161}, +D{l:13,t:10,i:228}, +D{l:13,t:10,i:268}, +D{l:148,t:10,i:107}, +D{l:136,t:10,i:374}, +D{l:10,t:11,i:223}, +D{l:139,t:11,i:645}, +D{l:135,t:0,i:1728}, +D{l:7,t:11,i:64}, +D{l:7,t:11,i:289}, +D{l:136,t:11,i:245}, +D{l:4,t:10,i:344}, +D{l:6,t:10,i:498}, +D{l:139,t:10,i:323}, +D{l:136,t:0,i:746}, +D{l:135,t:10,i:1063}, +D{l:137,t:10,i:155}, +D{l:4,t:0,i:987}, +D{l:6,t:0,i:1964}, +D{l:6,t:0,i:1974}, +D{l:6,t:0,i:1990}, +D{l:136,t:0,i:995}, +D{l:133,t:11,i:609}, +D{l:133,t:10,i:906}, +D{l:134,t:0,i:1550}, +D{l:134,t:0,i:874}, +D{l:5,t:11,i:129}, +D{l:6,t:11,i:61}, +D{l:135,t:11,i:947}, +D{l:4,t:0,i:1018}, +D{l:6,t:0,i:1938}, +D{l:6,t:0,i:2021}, +D{l:134,t:0,i:2039}, +D{l:132,t:0,i:814}, +D{l:11,t:0,i:126}, +D{l:139,t:0,i:287}, +D{l:134,t:0,i:1264}, +D{l:5,t:0,i:955}, +D{l:136,t:0,i:814}, +D{l:141,t:11,i:506}, +D{l:132,t:11,i:314}, +D{l:6,t:0,i:981}, +D{l:139,t:11,i:1000}, +D{l:5,t:0,i:56}, +D{l:8,t:0,i:892}, +D{l:8,t:0,i:915}, +D{l:140,t:0,i:776}, +D{l:148,t:0,i:100}, +D{l:10,t:0,i:4}, +D{l:10,t:0,i:13}, +D{l:11,t:0,i:638}, +D{l:148,t:0,i:57}, +D{l:148,t:11,i:74}, +D{l:5,t:0,i:738}, +D{l:132,t:10,i:616}, +D{l:133,t:11,i:637}, +D{l:136,t:10,i:692}, +D{l:133,t:0,i:758}, +D{l:132,t:10,i:305}, +D{l:137,t:11,i:590}, +D{l:5,t:11,i:280}, +D{l:135,t:11,i:1226}, +D{l:134,t:11,i:494}, +D{l:135,t:0,i:1112}, +D{l:133,t:11,i:281}, +D{l:13,t:0,i:44}, +D{l:14,t:0,i:214}, +D{l:5,t:10,i:214}, +D{l:7,t:10,i:603}, +D{l:8,t:10,i:611}, +D{l:9,t:10,i:686}, +D{l:10,t:10,i:88}, +D{l:11,t:10,i:459}, +D{l:11,t:10,i:496}, +D{l:12,t:10,i:463}, +D{l:140,t:10,i:590}, +D{l:139,t:0,i:328}, +D{l:135,t:11,i:1064}, +D{l:137,t:0,i:133}, +D{l:7,t:0,i:168}, +D{l:13,t:0,i:196}, +D{l:141,t:0,i:237}, +D{l:134,t:10,i:1703}, +D{l:134,t:0,i:1152}, +D{l:135,t:0,i:1245}, +D{l:5,t:0,i:110}, +D{l:6,t:0,i:169}, +D{l:6,t:0,i:1702}, +D{l:7,t:0,i:400}, +D{l:8,t:0,i:538}, +D{l:9,t:0,i:184}, +D{l:9,t:0,i:524}, +D{l:140,t:0,i:218}, +D{l:6,t:0,i:1816}, +D{l:10,t:0,i:871}, +D{l:12,t:0,i:769}, +D{l:140,t:0,i:785}, +D{l:132,t:11,i:630}, +D{l:7,t:11,i:33}, +D{l:7,t:11,i:120}, +D{l:8,t:11,i:489}, +D{l:9,t:11,i:319}, +D{l:10,t:11,i:820}, +D{l:11,t:11,i:1004}, +D{l:12,t:11,i:379}, +D{l:13,t:11,i:117}, +D{l:13,t:11,i:412}, +D{l:14,t:11,i:25}, +D{l:15,t:11,i:52}, +D{l:15,t:11,i:161}, +D{l:16,t:11,i:47}, +D{l:149,t:11,i:2}, +D{l:6,t:0,i:133}, +D{l:8,t:0,i:413}, +D{l:9,t:0,i:353}, +D{l:139,t:0,i:993}, +D{l:145,t:10,i:19}, +D{l:4,t:11,i:937}, +D{l:133,t:11,i:801}, +D{l:134,t:0,i:978}, +D{l:6,t:0,i:93}, +D{l:6,t:0,i:1508}, +D{l:7,t:0,i:1422}, +D{l:7,t:0,i:1851}, +D{l:8,t:0,i:673}, +D{l:9,t:0,i:529}, +D{l:140,t:0,i:43}, +D{l:6,t:0,i:317}, +D{l:10,t:0,i:512}, +D{l:4,t:10,i:737}, +D{l:11,t:10,i:294}, +D{l:12,t:10,i:60}, +D{l:12,t:10,i:437}, +D{l:13,t:10,i:64}, +D{l:13,t:10,i:380}, +D{l:142,t:10,i:430}, +D{l:9,t:0,i:371}, +D{l:7,t:11,i:1591}, +D{l:144,t:11,i:43}, +D{l:6,t:10,i:1758}, +D{l:8,t:10,i:520}, +D{l:9,t:10,i:345}, +D{l:9,t:10,i:403}, +D{l:142,t:10,i:350}, +D{l:5,t:0,i:526}, +D{l:10,t:10,i:242}, +D{l:138,t:10,i:579}, +D{l:9,t:0,i:25}, +D{l:10,t:0,i:467}, +D{l:138,t:0,i:559}, +D{l:5,t:10,i:139}, +D{l:7,t:10,i:1168}, +D{l:138,t:10,i:539}, +D{l:4,t:0,i:335}, +D{l:135,t:0,i:942}, +D{l:140,t:0,i:754}, +D{l:132,t:11,i:365}, +D{l:11,t:0,i:182}, +D{l:142,t:0,i:195}, +D{l:142,t:11,i:29}, +D{l:5,t:11,i:7}, +D{l:139,t:11,i:774}, +D{l:4,t:11,i:746}, +D{l:135,t:11,i:1090}, +D{l:8,t:0,i:39}, +D{l:10,t:0,i:773}, +D{l:11,t:0,i:84}, +D{l:12,t:0,i:205}, +D{l:142,t:0,i:1}, +D{l:5,t:0,i:601}, +D{l:5,t:0,i:870}, +D{l:5,t:11,i:360}, +D{l:136,t:11,i:237}, +D{l:132,t:0,i:181}, +D{l:136,t:0,i:370}, +D{l:134,t:0,i:1652}, +D{l:8,t:0,i:358}, +D{l:4,t:10,i:107}, +D{l:7,t:10,i:613}, +D{l:8,t:10,i:439}, +D{l:8,t:10,i:504}, +D{l:9,t:10,i:501}, +D{l:10,t:10,i:383}, +D{l:139,t:10,i:477}, +D{l:132,t:10,i:229}, +D{l:137,t:11,i:785}, +D{l:4,t:0,i:97}, +D{l:5,t:0,i:147}, +D{l:6,t:0,i:286}, +D{l:7,t:0,i:1362}, +D{l:141,t:0,i:176}, +D{l:6,t:0,i:537}, +D{l:7,t:0,i:788}, +D{l:7,t:0,i:1816}, +D{l:132,t:10,i:903}, +D{l:140,t:10,i:71}, +D{l:6,t:0,i:743}, +D{l:134,t:0,i:1223}, +D{l:6,t:0,i:375}, +D{l:7,t:0,i:169}, +D{l:7,t:0,i:254}, +D{l:8,t:0,i:780}, +D{l:135,t:11,i:1493}, +D{l:7,t:0,i:1714}, +D{l:4,t:10,i:47}, +D{l:6,t:10,i:373}, +D{l:7,t:10,i:452}, +D{l:7,t:10,i:543}, +D{l:7,t:10,i:1856}, +D{l:9,t:10,i:6}, +D{l:11,t:10,i:257}, +D{l:139,t:10,i:391}, +D{l:6,t:0,i:896}, +D{l:136,t:0,i:1003}, +D{l:135,t:0,i:1447}, +D{l:137,t:11,i:341}, +D{l:5,t:10,i:980}, +D{l:134,t:10,i:1754}, +D{l:145,t:11,i:22}, +D{l:4,t:11,i:277}, +D{l:5,t:11,i:608}, +D{l:6,t:11,i:493}, +D{l:7,t:11,i:457}, +D{l:140,t:11,i:384}, +D{l:7,t:10,i:536}, +D{l:7,t:10,i:1331}, +D{l:136,t:10,i:143}, +D{l:140,t:0,i:744}, +D{l:7,t:11,i:27}, +D{l:135,t:11,i:316}, +D{l:18,t:0,i:126}, +D{l:5,t:10,i:19}, +D{l:134,t:10,i:533}, +D{l:4,t:0,i:788}, +D{l:11,t:0,i:41}, +D{l:5,t:11,i:552}, +D{l:5,t:11,i:586}, +D{l:5,t:11,i:676}, +D{l:6,t:11,i:448}, +D{l:8,t:11,i:244}, +D{l:11,t:11,i:1}, +D{l:11,t:11,i:41}, +D{l:13,t:11,i:3}, +D{l:16,t:11,i:54}, +D{l:17,t:11,i:4}, +D{l:146,t:11,i:13}, +D{l:4,t:0,i:985}, +D{l:6,t:0,i:1801}, +D{l:4,t:11,i:401}, +D{l:137,t:11,i:264}, +D{l:5,t:10,i:395}, +D{l:5,t:10,i:951}, +D{l:134,t:10,i:1776}, +D{l:5,t:0,i:629}, +D{l:135,t:0,i:1549}, +D{l:11,t:10,i:663}, +D{l:12,t:10,i:210}, +D{l:13,t:10,i:166}, +D{l:13,t:10,i:310}, +D{l:14,t:10,i:373}, +D{l:147,t:10,i:43}, +D{l:9,t:11,i:543}, +D{l:10,t:11,i:524}, +D{l:11,t:11,i:30}, +D{l:12,t:11,i:524}, +D{l:14,t:11,i:315}, +D{l:16,t:11,i:18}, +D{l:20,t:11,i:26}, +D{l:148,t:11,i:65}, +D{l:4,t:11,i:205}, +D{l:5,t:11,i:623}, +D{l:7,t:11,i:104}, +D{l:136,t:11,i:519}, +D{l:5,t:0,i:293}, +D{l:134,t:0,i:601}, +D{l:7,t:11,i:579}, +D{l:9,t:11,i:41}, +D{l:9,t:11,i:244}, +D{l:9,t:11,i:669}, +D{l:10,t:11,i:5}, +D{l:11,t:11,i:861}, +D{l:11,t:11,i:951}, +D{l:139,t:11,i:980}, +D{l:132,t:11,i:717}, +D{l:132,t:10,i:695}, +D{l:7,t:10,i:497}, +D{l:9,t:10,i:387}, +D{l:147,t:10,i:81}, +D{l:132,t:0,i:420}, +D{l:142,t:0,i:37}, +D{l:6,t:0,i:1134}, +D{l:6,t:0,i:1900}, +D{l:12,t:0,i:830}, +D{l:12,t:0,i:878}, +D{l:12,t:0,i:894}, +D{l:15,t:0,i:221}, +D{l:143,t:0,i:245}, +D{l:132,t:11,i:489}, +D{l:7,t:0,i:1570}, +D{l:140,t:0,i:542}, +D{l:8,t:0,i:933}, +D{l:136,t:0,i:957}, +D{l:6,t:0,i:1371}, +D{l:7,t:0,i:31}, +D{l:8,t:0,i:373}, +D{l:5,t:10,i:284}, +D{l:6,t:10,i:49}, +D{l:6,t:10,i:350}, +D{l:7,t:10,i:377}, +D{l:7,t:10,i:1693}, +D{l:8,t:10,i:678}, +D{l:9,t:10,i:161}, +D{l:9,t:10,i:585}, +D{l:9,t:10,i:671}, +D{l:9,t:10,i:839}, +D{l:11,t:10,i:912}, +D{l:141,t:10,i:427}, +D{l:135,t:11,i:892}, +D{l:4,t:0,i:325}, +D{l:138,t:0,i:125}, +D{l:139,t:11,i:47}, +D{l:132,t:10,i:597}, +D{l:138,t:0,i:323}, +D{l:6,t:0,i:1547}, +D{l:7,t:11,i:1605}, +D{l:9,t:11,i:473}, +D{l:11,t:11,i:962}, +D{l:146,t:11,i:139}, +D{l:139,t:10,i:908}, +D{l:7,t:11,i:819}, +D{l:9,t:11,i:26}, +D{l:9,t:11,i:392}, +D{l:10,t:11,i:152}, +D{l:10,t:11,i:226}, +D{l:11,t:11,i:19}, +D{l:12,t:11,i:276}, +D{l:12,t:11,i:426}, +D{l:12,t:11,i:589}, +D{l:13,t:11,i:460}, +D{l:15,t:11,i:97}, +D{l:19,t:11,i:48}, +D{l:148,t:11,i:104}, +D{l:135,t:11,i:51}, +D{l:4,t:0,i:718}, +D{l:135,t:0,i:1216}, +D{l:6,t:0,i:1896}, +D{l:6,t:0,i:1905}, +D{l:6,t:0,i:1912}, +D{l:9,t:0,i:947}, +D{l:9,t:0,i:974}, +D{l:12,t:0,i:809}, +D{l:12,t:0,i:850}, +D{l:12,t:0,i:858}, +D{l:12,t:0,i:874}, +D{l:12,t:0,i:887}, +D{l:12,t:0,i:904}, +D{l:12,t:0,i:929}, +D{l:12,t:0,i:948}, +D{l:12,t:0,i:952}, +D{l:15,t:0,i:198}, +D{l:15,t:0,i:206}, +D{l:15,t:0,i:220}, +D{l:15,t:0,i:227}, +D{l:15,t:0,i:247}, +D{l:18,t:0,i:188}, +D{l:21,t:0,i:48}, +D{l:21,t:0,i:50}, +D{l:24,t:0,i:25}, +D{l:24,t:0,i:29}, +D{l:7,t:11,i:761}, +D{l:7,t:11,i:1051}, +D{l:137,t:11,i:545}, +D{l:5,t:0,i:124}, +D{l:5,t:0,i:144}, +D{l:6,t:0,i:548}, +D{l:7,t:0,i:15}, +D{l:7,t:0,i:153}, +D{l:137,t:0,i:629}, +D{l:135,t:11,i:606}, +D{l:135,t:10,i:2014}, +D{l:7,t:10,i:2007}, +D{l:9,t:11,i:46}, +D{l:9,t:10,i:101}, +D{l:9,t:10,i:450}, +D{l:10,t:10,i:66}, +D{l:10,t:10,i:842}, +D{l:11,t:10,i:536}, +D{l:140,t:10,i:587}, +D{l:6,t:0,i:75}, +D{l:7,t:0,i:1531}, +D{l:8,t:0,i:416}, +D{l:9,t:0,i:240}, +D{l:9,t:0,i:275}, +D{l:10,t:0,i:100}, +D{l:11,t:0,i:658}, +D{l:11,t:0,i:979}, +D{l:12,t:0,i:86}, +D{l:14,t:0,i:207}, +D{l:15,t:0,i:20}, +D{l:143,t:0,i:25}, +D{l:5,t:0,i:141}, +D{l:5,t:0,i:915}, +D{l:6,t:0,i:1783}, +D{l:7,t:0,i:211}, +D{l:7,t:0,i:698}, +D{l:7,t:0,i:1353}, +D{l:9,t:0,i:83}, +D{l:9,t:0,i:281}, +D{l:10,t:0,i:376}, +D{l:10,t:0,i:431}, +D{l:11,t:0,i:543}, +D{l:12,t:0,i:664}, +D{l:13,t:0,i:280}, +D{l:13,t:0,i:428}, +D{l:14,t:0,i:61}, +D{l:14,t:0,i:128}, +D{l:17,t:0,i:52}, +D{l:145,t:0,i:81}, +D{l:132,t:11,i:674}, +D{l:135,t:0,i:533}, +D{l:149,t:0,i:6}, +D{l:132,t:11,i:770}, +D{l:133,t:0,i:538}, +D{l:5,t:11,i:79}, +D{l:7,t:11,i:1027}, +D{l:7,t:11,i:1477}, +D{l:139,t:11,i:52}, +D{l:139,t:10,i:62}, +D{l:4,t:0,i:338}, +D{l:133,t:0,i:400}, +D{l:5,t:11,i:789}, +D{l:134,t:11,i:195}, +D{l:4,t:11,i:251}, +D{l:4,t:11,i:688}, +D{l:7,t:11,i:513}, +D{l:7,t:11,i:1284}, +D{l:9,t:11,i:87}, +D{l:138,t:11,i:365}, +D{l:134,t:10,i:1766}, +D{l:6,t:0,i:0}, +D{l:7,t:0,i:84}, +D{l:11,t:0,i:895}, +D{l:145,t:0,i:11}, +D{l:139,t:0,i:892}, +D{l:4,t:0,i:221}, +D{l:5,t:0,i:659}, +D{l:7,t:0,i:697}, +D{l:7,t:0,i:1211}, +D{l:138,t:0,i:284}, +D{l:133,t:0,i:989}, +D{l:133,t:11,i:889}, +D{l:4,t:11,i:160}, +D{l:5,t:11,i:330}, +D{l:7,t:11,i:1434}, +D{l:136,t:11,i:174}, +D{l:6,t:10,i:1665}, +D{l:7,t:10,i:256}, +D{l:7,t:10,i:1388}, +D{l:10,t:10,i:499}, +D{l:139,t:10,i:670}, +D{l:7,t:0,i:848}, +D{l:4,t:10,i:22}, +D{l:5,t:10,i:10}, +D{l:136,t:10,i:97}, +D{l:138,t:0,i:507}, +D{l:133,t:10,i:481}, +D{l:4,t:0,i:188}, +D{l:135,t:0,i:805}, +D{l:5,t:0,i:884}, +D{l:6,t:0,i:732}, +D{l:139,t:0,i:991}, +D{l:135,t:11,i:968}, +D{l:11,t:11,i:636}, +D{l:15,t:11,i:145}, +D{l:17,t:11,i:34}, +D{l:19,t:11,i:50}, +D{l:151,t:11,i:20}, +D{l:7,t:0,i:959}, +D{l:16,t:0,i:60}, +D{l:6,t:10,i:134}, +D{l:7,t:10,i:437}, +D{l:9,t:10,i:37}, +D{l:14,t:10,i:285}, +D{l:142,t:10,i:371}, +D{l:7,t:10,i:486}, +D{l:8,t:10,i:155}, +D{l:11,t:10,i:93}, +D{l:140,t:10,i:164}, +D{l:134,t:0,i:1653}, +D{l:7,t:0,i:337}, +D{l:133,t:10,i:591}, +D{l:6,t:0,i:1989}, +D{l:8,t:0,i:922}, +D{l:8,t:0,i:978}, +D{l:133,t:11,i:374}, +D{l:132,t:0,i:638}, +D{l:138,t:0,i:500}, +D{l:133,t:11,i:731}, +D{l:5,t:10,i:380}, +D{l:5,t:10,i:650}, +D{l:136,t:10,i:310}, +D{l:138,t:11,i:381}, +D{l:4,t:10,i:364}, +D{l:7,t:10,i:1156}, +D{l:7,t:10,i:1187}, +D{l:137,t:10,i:409}, +D{l:137,t:11,i:224}, +D{l:140,t:0,i:166}, +D{l:134,t:10,i:482}, +D{l:4,t:11,i:626}, +D{l:5,t:11,i:642}, +D{l:6,t:11,i:425}, +D{l:10,t:11,i:202}, +D{l:139,t:11,i:141}, +D{l:4,t:10,i:781}, +D{l:6,t:10,i:487}, +D{l:7,t:10,i:926}, +D{l:8,t:10,i:263}, +D{l:139,t:10,i:500}, +D{l:135,t:0,i:418}, +D{l:4,t:10,i:94}, +D{l:135,t:10,i:1265}, +D{l:136,t:0,i:760}, +D{l:132,t:10,i:417}, +D{l:136,t:11,i:835}, +D{l:5,t:10,i:348}, +D{l:134,t:10,i:522}, +D{l:6,t:0,i:1277}, +D{l:134,t:0,i:1538}, +D{l:139,t:11,i:541}, +D{l:135,t:11,i:1597}, +D{l:5,t:11,i:384}, +D{l:8,t:11,i:455}, +D{l:140,t:11,i:48}, +D{l:136,t:0,i:770}, +D{l:5,t:11,i:264}, +D{l:134,t:11,i:184}, +D{l:4,t:0,i:89}, +D{l:5,t:0,i:489}, +D{l:6,t:0,i:315}, +D{l:7,t:0,i:553}, +D{l:7,t:0,i:1745}, +D{l:138,t:0,i:243}, +D{l:4,t:10,i:408}, +D{l:4,t:10,i:741}, +D{l:135,t:10,i:500}, +D{l:134,t:0,i:1396}, +D{l:133,t:0,i:560}, +D{l:6,t:0,i:1658}, +D{l:9,t:0,i:3}, +D{l:10,t:0,i:154}, +D{l:11,t:0,i:641}, +D{l:13,t:0,i:85}, +D{l:13,t:0,i:201}, +D{l:141,t:0,i:346}, +D{l:135,t:11,i:1595}, +D{l:5,t:11,i:633}, +D{l:6,t:11,i:28}, +D{l:7,t:11,i:219}, +D{l:135,t:11,i:1323}, +D{l:9,t:11,i:769}, +D{l:140,t:11,i:185}, +D{l:135,t:11,i:785}, +D{l:7,t:11,i:359}, +D{l:8,t:11,i:243}, +D{l:140,t:11,i:175}, +D{l:138,t:0,i:586}, +D{l:7,t:0,i:1271}, +D{l:134,t:10,i:73}, +D{l:132,t:11,i:105}, +D{l:4,t:0,i:166}, +D{l:5,t:0,i:505}, +D{l:134,t:0,i:1670}, +D{l:133,t:10,i:576}, +D{l:4,t:11,i:324}, +D{l:138,t:11,i:104}, +D{l:142,t:10,i:231}, +D{l:6,t:0,i:637}, +D{l:7,t:10,i:1264}, +D{l:7,t:10,i:1678}, +D{l:11,t:10,i:945}, +D{l:12,t:10,i:341}, +D{l:12,t:10,i:471}, +D{l:12,t:10,i:569}, +D{l:23,t:11,i:21}, +D{l:151,t:11,i:23}, +D{l:8,t:11,i:559}, +D{l:141,t:11,i:109}, +D{l:134,t:0,i:1947}, +D{l:7,t:0,i:445}, +D{l:8,t:0,i:307}, +D{l:8,t:0,i:704}, +D{l:10,t:0,i:41}, +D{l:10,t:0,i:439}, +D{l:11,t:0,i:237}, +D{l:11,t:0,i:622}, +D{l:140,t:0,i:201}, +D{l:135,t:11,i:963}, +D{l:135,t:0,i:1977}, +D{l:4,t:0,i:189}, +D{l:5,t:0,i:713}, +D{l:136,t:0,i:57}, +D{l:138,t:0,i:371}, +D{l:135,t:10,i:538}, +D{l:132,t:0,i:552}, +D{l:6,t:0,i:883}, +D{l:133,t:10,i:413}, +D{l:6,t:0,i:923}, +D{l:132,t:11,i:758}, +D{l:138,t:11,i:215}, +D{l:136,t:10,i:495}, +D{l:7,t:10,i:54}, +D{l:8,t:10,i:312}, +D{l:10,t:10,i:191}, +D{l:10,t:10,i:614}, +D{l:140,t:10,i:567}, +D{l:7,t:11,i:351}, +D{l:139,t:11,i:128}, +D{l:7,t:0,i:875}, +D{l:6,t:10,i:468}, +D{l:7,t:10,i:1478}, +D{l:8,t:10,i:530}, +D{l:142,t:10,i:290}, +D{l:135,t:0,i:1788}, +D{l:17,t:0,i:49}, +D{l:133,t:11,i:918}, +D{l:12,t:11,i:398}, +D{l:20,t:11,i:39}, +D{l:21,t:11,i:11}, +D{l:150,t:11,i:41}, +D{l:10,t:0,i:661}, +D{l:6,t:10,i:484}, +D{l:135,t:10,i:822}, +D{l:135,t:0,i:1945}, +D{l:134,t:0,i:794}, +D{l:137,t:10,i:900}, +D{l:135,t:10,i:1335}, +D{l:6,t:10,i:1724}, +D{l:135,t:10,i:2022}, +D{l:132,t:11,i:340}, +D{l:134,t:0,i:1135}, +D{l:4,t:0,i:784}, +D{l:133,t:0,i:745}, +D{l:5,t:0,i:84}, +D{l:134,t:0,i:163}, +D{l:133,t:0,i:410}, +D{l:4,t:0,i:976}, +D{l:5,t:11,i:985}, +D{l:7,t:11,i:509}, +D{l:7,t:11,i:529}, +D{l:145,t:11,i:96}, +D{l:132,t:10,i:474}, +D{l:134,t:0,i:703}, +D{l:135,t:11,i:1919}, +D{l:5,t:0,i:322}, +D{l:8,t:0,i:186}, +D{l:9,t:0,i:262}, +D{l:10,t:0,i:187}, +D{l:142,t:0,i:208}, +D{l:135,t:10,i:1504}, +D{l:133,t:0,i:227}, +D{l:9,t:0,i:560}, +D{l:13,t:0,i:208}, +D{l:133,t:10,i:305}, +D{l:132,t:11,i:247}, +D{l:7,t:0,i:1395}, +D{l:8,t:0,i:486}, +D{l:9,t:0,i:236}, +D{l:9,t:0,i:878}, +D{l:10,t:0,i:218}, +D{l:11,t:0,i:95}, +D{l:19,t:0,i:17}, +D{l:147,t:0,i:31}, +D{l:7,t:0,i:2043}, +D{l:8,t:0,i:672}, +D{l:141,t:0,i:448}, +D{l:4,t:11,i:184}, +D{l:5,t:11,i:390}, +D{l:6,t:11,i:337}, +D{l:7,t:11,i:23}, +D{l:7,t:11,i:494}, +D{l:7,t:11,i:618}, +D{l:7,t:11,i:1456}, +D{l:8,t:11,i:27}, +D{l:8,t:11,i:599}, +D{l:10,t:11,i:153}, +D{l:139,t:11,i:710}, +D{l:135,t:0,i:466}, +D{l:135,t:10,i:1236}, +D{l:6,t:0,i:167}, +D{l:7,t:0,i:186}, +D{l:7,t:0,i:656}, +D{l:10,t:0,i:643}, +D{l:4,t:10,i:480}, +D{l:6,t:10,i:302}, +D{l:6,t:10,i:1642}, +D{l:7,t:10,i:837}, +D{l:7,t:10,i:1547}, +D{l:7,t:10,i:1657}, +D{l:8,t:10,i:429}, +D{l:9,t:10,i:228}, +D{l:13,t:10,i:289}, +D{l:13,t:10,i:343}, +D{l:147,t:10,i:101}, +D{l:134,t:0,i:1428}, +D{l:134,t:0,i:1440}, +D{l:5,t:0,i:412}, +D{l:7,t:10,i:278}, +D{l:10,t:10,i:739}, +D{l:11,t:10,i:708}, +D{l:141,t:10,i:348}, +D{l:134,t:0,i:1118}, +D{l:136,t:0,i:562}, +D{l:148,t:11,i:46}, +D{l:9,t:0,i:316}, +D{l:139,t:0,i:256}, +D{l:134,t:0,i:1771}, +D{l:135,t:0,i:1190}, +D{l:137,t:0,i:132}, +D{l:10,t:11,i:227}, +D{l:11,t:11,i:497}, +D{l:11,t:11,i:709}, +D{l:140,t:11,i:415}, +D{l:143,t:0,i:66}, +D{l:6,t:11,i:360}, +D{l:7,t:11,i:1664}, +D{l:136,t:11,i:478}, +D{l:144,t:10,i:28}, +D{l:4,t:0,i:317}, +D{l:135,t:0,i:1279}, +D{l:5,t:0,i:63}, +D{l:133,t:0,i:509}, +D{l:136,t:11,i:699}, +D{l:145,t:10,i:36}, +D{l:134,t:0,i:1475}, +D{l:11,t:11,i:343}, +D{l:142,t:11,i:127}, +D{l:132,t:11,i:739}, +D{l:132,t:0,i:288}, +D{l:135,t:11,i:1757}, +D{l:8,t:0,i:89}, +D{l:8,t:0,i:620}, +D{l:9,t:0,i:608}, +D{l:11,t:0,i:628}, +D{l:12,t:0,i:322}, +D{l:143,t:0,i:124}, +D{l:134,t:0,i:1225}, +D{l:7,t:0,i:1189}, +D{l:4,t:11,i:67}, +D{l:5,t:11,i:422}, +D{l:6,t:10,i:363}, +D{l:7,t:11,i:1037}, +D{l:7,t:11,i:1289}, +D{l:7,t:11,i:1555}, +D{l:7,t:10,i:1955}, +D{l:8,t:10,i:725}, +D{l:9,t:11,i:741}, +D{l:145,t:11,i:108}, +D{l:134,t:0,i:1468}, +D{l:6,t:0,i:689}, +D{l:134,t:0,i:1451}, +D{l:138,t:0,i:120}, +D{l:151,t:0,i:1}, +D{l:137,t:10,i:805}, +D{l:142,t:0,i:329}, +D{l:5,t:10,i:813}, +D{l:135,t:10,i:2046}, +D{l:135,t:0,i:226}, +D{l:138,t:11,i:96}, +D{l:7,t:0,i:1855}, +D{l:5,t:10,i:712}, +D{l:11,t:10,i:17}, +D{l:13,t:10,i:321}, +D{l:144,t:10,i:67}, +D{l:9,t:0,i:461}, +D{l:6,t:10,i:320}, +D{l:7,t:10,i:781}, +D{l:7,t:10,i:1921}, +D{l:9,t:10,i:55}, +D{l:10,t:10,i:186}, +D{l:10,t:10,i:273}, +D{l:10,t:10,i:664}, +D{l:10,t:10,i:801}, +D{l:11,t:10,i:996}, +D{l:11,t:10,i:997}, +D{l:13,t:10,i:157}, +D{l:142,t:10,i:170}, +D{l:8,t:11,i:203}, +D{l:8,t:10,i:271}, +D{l:11,t:11,i:823}, +D{l:11,t:11,i:846}, +D{l:12,t:11,i:482}, +D{l:13,t:11,i:133}, +D{l:13,t:11,i:277}, +D{l:13,t:11,i:302}, +D{l:13,t:11,i:464}, +D{l:14,t:11,i:205}, +D{l:142,t:11,i:221}, +D{l:135,t:0,i:1346}, +D{l:4,t:11,i:449}, +D{l:133,t:11,i:718}, +D{l:134,t:0,i:85}, +D{l:14,t:0,i:299}, +D{l:7,t:10,i:103}, +D{l:7,t:10,i:863}, +D{l:11,t:10,i:184}, +D{l:145,t:10,i:62}, +D{l:4,t:11,i:355}, +D{l:6,t:11,i:311}, +D{l:9,t:11,i:256}, +D{l:138,t:11,i:404}, +D{l:137,t:10,i:659}, +D{l:138,t:11,i:758}, +D{l:133,t:11,i:827}, +D{l:5,t:11,i:64}, +D{l:140,t:11,i:581}, +D{l:134,t:0,i:1171}, +D{l:4,t:11,i:442}, +D{l:7,t:11,i:1047}, +D{l:7,t:11,i:1352}, +D{l:135,t:11,i:1643}, +D{l:132,t:0,i:980}, +D{l:5,t:11,i:977}, +D{l:6,t:11,i:288}, +D{l:7,t:11,i:528}, +D{l:135,t:11,i:1065}, +D{l:5,t:0,i:279}, +D{l:6,t:0,i:235}, +D{l:7,t:0,i:468}, +D{l:8,t:0,i:446}, +D{l:9,t:0,i:637}, +D{l:10,t:0,i:717}, +D{l:11,t:0,i:738}, +D{l:140,t:0,i:514}, +D{l:132,t:0,i:293}, +D{l:11,t:10,i:337}, +D{l:142,t:10,i:303}, +D{l:136,t:11,i:285}, +D{l:5,t:0,i:17}, +D{l:6,t:0,i:371}, +D{l:9,t:0,i:528}, +D{l:12,t:0,i:364}, +D{l:132,t:11,i:254}, +D{l:5,t:10,i:77}, +D{l:7,t:10,i:1455}, +D{l:10,t:10,i:843}, +D{l:147,t:10,i:73}, +D{l:150,t:0,i:5}, +D{l:132,t:10,i:458}, +D{l:6,t:11,i:12}, +D{l:7,t:11,i:1219}, +D{l:145,t:11,i:73}, +D{l:135,t:10,i:1420}, +D{l:6,t:10,i:109}, +D{l:138,t:10,i:382}, +D{l:135,t:11,i:125}, +D{l:6,t:10,i:330}, +D{l:7,t:10,i:1084}, +D{l:139,t:10,i:142}, +D{l:6,t:11,i:369}, +D{l:6,t:11,i:502}, +D{l:7,t:11,i:1036}, +D{l:8,t:11,i:348}, +D{l:9,t:11,i:452}, +D{l:10,t:11,i:26}, +D{l:11,t:11,i:224}, +D{l:11,t:11,i:387}, +D{l:11,t:11,i:772}, +D{l:12,t:11,i:95}, +D{l:12,t:11,i:629}, +D{l:13,t:11,i:195}, +D{l:13,t:11,i:207}, +D{l:13,t:11,i:241}, +D{l:14,t:11,i:260}, +D{l:14,t:11,i:270}, +D{l:143,t:11,i:140}, +D{l:132,t:11,i:269}, +D{l:5,t:11,i:480}, +D{l:7,t:11,i:532}, +D{l:7,t:11,i:1197}, +D{l:7,t:11,i:1358}, +D{l:8,t:11,i:291}, +D{l:11,t:11,i:349}, +D{l:142,t:11,i:396}, +D{l:150,t:0,i:48}, +D{l:10,t:0,i:601}, +D{l:13,t:0,i:353}, +D{l:141,t:0,i:376}, +D{l:5,t:0,i:779}, +D{l:5,t:0,i:807}, +D{l:6,t:0,i:1655}, +D{l:134,t:0,i:1676}, +D{l:142,t:11,i:223}, +D{l:4,t:0,i:196}, +D{l:5,t:0,i:558}, +D{l:133,t:0,i:949}, +D{l:148,t:11,i:15}, +D{l:135,t:11,i:1764}, +D{l:134,t:0,i:1322}, +D{l:132,t:0,i:752}, +D{l:139,t:0,i:737}, +D{l:135,t:11,i:657}, +D{l:136,t:11,i:533}, +D{l:135,t:0,i:412}, +D{l:4,t:0,i:227}, +D{l:5,t:0,i:159}, +D{l:5,t:0,i:409}, +D{l:7,t:0,i:80}, +D{l:8,t:0,i:556}, +D{l:10,t:0,i:479}, +D{l:12,t:0,i:418}, +D{l:14,t:0,i:50}, +D{l:14,t:0,i:123}, +D{l:14,t:0,i:192}, +D{l:14,t:0,i:249}, +D{l:14,t:0,i:295}, +D{l:143,t:0,i:27}, +D{l:7,t:0,i:1470}, +D{l:8,t:0,i:66}, +D{l:8,t:0,i:137}, +D{l:8,t:0,i:761}, +D{l:9,t:0,i:638}, +D{l:11,t:0,i:80}, +D{l:11,t:0,i:212}, +D{l:11,t:0,i:368}, +D{l:11,t:0,i:418}, +D{l:12,t:0,i:8}, +D{l:13,t:0,i:15}, +D{l:16,t:0,i:61}, +D{l:17,t:0,i:59}, +D{l:19,t:0,i:28}, +D{l:148,t:0,i:84}, +D{l:135,t:10,i:1985}, +D{l:4,t:11,i:211}, +D{l:4,t:11,i:332}, +D{l:5,t:11,i:335}, +D{l:6,t:11,i:238}, +D{l:7,t:11,i:269}, +D{l:7,t:11,i:811}, +D{l:7,t:11,i:1797}, +D{l:8,t:10,i:122}, +D{l:8,t:11,i:836}, +D{l:9,t:11,i:507}, +D{l:141,t:11,i:242}, +D{l:6,t:0,i:683}, +D{l:134,t:0,i:1252}, +D{l:4,t:0,i:873}, +D{l:132,t:10,i:234}, +D{l:134,t:0,i:835}, +D{l:6,t:0,i:38}, +D{l:7,t:0,i:1220}, +D{l:8,t:0,i:185}, +D{l:8,t:0,i:256}, +D{l:9,t:0,i:22}, +D{l:9,t:0,i:331}, +D{l:10,t:0,i:738}, +D{l:11,t:0,i:205}, +D{l:11,t:0,i:540}, +D{l:11,t:0,i:746}, +D{l:13,t:0,i:465}, +D{l:14,t:0,i:88}, +D{l:142,t:0,i:194}, +D{l:138,t:0,i:986}, +D{l:5,t:11,i:1009}, +D{l:12,t:11,i:582}, +D{l:146,t:11,i:131}, +D{l:4,t:0,i:159}, +D{l:6,t:0,i:115}, +D{l:7,t:0,i:252}, +D{l:7,t:0,i:257}, +D{l:7,t:0,i:1928}, +D{l:8,t:0,i:69}, +D{l:9,t:0,i:384}, +D{l:10,t:0,i:91}, +D{l:10,t:0,i:615}, +D{l:12,t:0,i:375}, +D{l:14,t:0,i:235}, +D{l:18,t:0,i:117}, +D{l:147,t:0,i:123}, +D{l:133,t:0,i:911}, +D{l:136,t:0,i:278}, +D{l:5,t:10,i:430}, +D{l:5,t:10,i:932}, +D{l:6,t:10,i:131}, +D{l:7,t:10,i:417}, +D{l:9,t:10,i:522}, +D{l:11,t:10,i:314}, +D{l:141,t:10,i:390}, +D{l:14,t:10,i:149}, +D{l:14,t:10,i:399}, +D{l:143,t:10,i:57}, +D{l:4,t:0,i:151}, +D{l:7,t:0,i:1567}, +D{l:136,t:0,i:749}, +D{l:5,t:11,i:228}, +D{l:6,t:11,i:203}, +D{l:7,t:11,i:156}, +D{l:8,t:11,i:347}, +D{l:137,t:11,i:265}, +D{l:132,t:10,i:507}, +D{l:10,t:0,i:989}, +D{l:140,t:0,i:956}, +D{l:133,t:0,i:990}, +D{l:5,t:0,i:194}, +D{l:6,t:0,i:927}, +D{l:7,t:0,i:1662}, +D{l:9,t:0,i:90}, +D{l:140,t:0,i:564}, +D{l:4,t:10,i:343}, +D{l:133,t:10,i:511}, +D{l:133,t:0,i:425}, +D{l:7,t:10,i:455}, +D{l:138,t:10,i:591}, +D{l:4,t:0,i:774}, +D{l:7,t:11,i:476}, +D{l:7,t:11,i:1592}, +D{l:138,t:11,i:87}, +D{l:5,t:0,i:971}, +D{l:135,t:10,i:1381}, +D{l:5,t:11,i:318}, +D{l:147,t:11,i:121}, +D{l:5,t:11,i:291}, +D{l:7,t:11,i:765}, +D{l:9,t:11,i:389}, +D{l:140,t:11,i:548}, +D{l:134,t:10,i:575}, +D{l:4,t:0,i:827}, +D{l:12,t:0,i:646}, +D{l:12,t:0,i:705}, +D{l:12,t:0,i:712}, +D{l:140,t:0,i:714}, +D{l:139,t:0,i:752}, +D{l:137,t:0,i:662}, +D{l:5,t:0,i:72}, +D{l:6,t:0,i:264}, +D{l:7,t:0,i:21}, +D{l:7,t:0,i:46}, +D{l:7,t:0,i:2013}, +D{l:8,t:0,i:215}, +D{l:8,t:0,i:513}, +D{l:10,t:0,i:266}, +D{l:139,t:0,i:22}, +D{l:139,t:11,i:522}, +D{l:6,t:0,i:239}, +D{l:7,t:0,i:118}, +D{l:10,t:0,i:95}, +D{l:11,t:0,i:603}, +D{l:13,t:0,i:443}, +D{l:14,t:0,i:160}, +D{l:143,t:0,i:4}, +D{l:6,t:0,i:431}, +D{l:134,t:0,i:669}, +D{l:7,t:10,i:1127}, +D{l:7,t:10,i:1572}, +D{l:10,t:10,i:297}, +D{l:10,t:10,i:422}, +D{l:11,t:10,i:764}, +D{l:11,t:10,i:810}, +D{l:12,t:10,i:264}, +D{l:13,t:10,i:102}, +D{l:13,t:10,i:300}, +D{l:13,t:10,i:484}, +D{l:14,t:10,i:147}, +D{l:14,t:10,i:229}, +D{l:17,t:10,i:71}, +D{l:18,t:10,i:118}, +D{l:147,t:10,i:120}, +D{l:5,t:0,i:874}, +D{l:6,t:0,i:1677}, +D{l:15,t:0,i:0}, +D{l:10,t:11,i:525}, +D{l:139,t:11,i:82}, +D{l:6,t:0,i:65}, +D{l:7,t:0,i:939}, +D{l:7,t:0,i:1172}, +D{l:7,t:0,i:1671}, +D{l:9,t:0,i:540}, +D{l:10,t:0,i:696}, +D{l:11,t:0,i:265}, +D{l:11,t:0,i:732}, +D{l:11,t:0,i:928}, +D{l:11,t:0,i:937}, +D{l:141,t:0,i:438}, +D{l:134,t:0,i:1350}, +D{l:136,t:11,i:547}, +D{l:132,t:11,i:422}, +D{l:5,t:11,i:355}, +D{l:145,t:11,i:0}, +D{l:137,t:11,i:905}, +D{l:5,t:0,i:682}, +D{l:135,t:0,i:1887}, +D{l:132,t:0,i:809}, +D{l:4,t:0,i:696}, +D{l:133,t:11,i:865}, +D{l:6,t:0,i:1074}, +D{l:6,t:0,i:1472}, +D{l:14,t:10,i:35}, +D{l:142,t:10,i:191}, +D{l:5,t:11,i:914}, +D{l:134,t:11,i:1625}, +D{l:133,t:11,i:234}, +D{l:135,t:11,i:1383}, +D{l:137,t:11,i:780}, +D{l:132,t:10,i:125}, +D{l:4,t:0,i:726}, +D{l:133,t:0,i:630}, +D{l:8,t:0,i:802}, +D{l:136,t:0,i:838}, +D{l:132,t:10,i:721}, +D{l:6,t:0,i:1337}, +D{l:7,t:0,i:776}, +D{l:19,t:0,i:56}, +D{l:136,t:10,i:145}, +D{l:132,t:0,i:970}, +D{l:7,t:10,i:792}, +D{l:8,t:10,i:147}, +D{l:10,t:10,i:821}, +D{l:139,t:10,i:1021}, +D{l:139,t:10,i:970}, +D{l:8,t:0,i:940}, +D{l:137,t:0,i:797}, +D{l:135,t:11,i:1312}, +D{l:9,t:0,i:248}, +D{l:10,t:0,i:400}, +D{l:7,t:11,i:816}, +D{l:7,t:11,i:1241}, +D{l:7,t:10,i:1999}, +D{l:9,t:11,i:283}, +D{l:9,t:11,i:520}, +D{l:10,t:11,i:213}, +D{l:10,t:11,i:307}, +D{l:10,t:11,i:463}, +D{l:10,t:11,i:671}, +D{l:10,t:11,i:746}, +D{l:11,t:11,i:401}, +D{l:11,t:11,i:794}, +D{l:12,t:11,i:517}, +D{l:18,t:11,i:107}, +D{l:147,t:11,i:115}, +D{l:6,t:0,i:1951}, +D{l:134,t:0,i:2040}, +D{l:135,t:11,i:339}, +D{l:13,t:0,i:41}, +D{l:15,t:0,i:93}, +D{l:5,t:10,i:168}, +D{l:5,t:10,i:930}, +D{l:8,t:10,i:74}, +D{l:9,t:10,i:623}, +D{l:12,t:10,i:500}, +D{l:140,t:10,i:579}, +D{l:6,t:0,i:118}, +D{l:7,t:0,i:215}, +D{l:7,t:0,i:1521}, +D{l:140,t:0,i:11}, +D{l:6,t:10,i:220}, +D{l:7,t:10,i:1101}, +D{l:141,t:10,i:105}, +D{l:6,t:11,i:421}, +D{l:7,t:11,i:61}, +D{l:7,t:11,i:1540}, +D{l:10,t:11,i:11}, +D{l:138,t:11,i:501}, +D{l:7,t:0,i:615}, +D{l:138,t:0,i:251}, +D{l:140,t:11,i:631}, +D{l:135,t:0,i:1044}, +D{l:6,t:10,i:19}, +D{l:7,t:10,i:1413}, +D{l:139,t:10,i:428}, +D{l:133,t:0,i:225}, +D{l:7,t:10,i:96}, +D{l:8,t:10,i:401}, +D{l:8,t:10,i:703}, +D{l:137,t:10,i:896}, +D{l:145,t:10,i:116}, +D{l:6,t:11,i:102}, +D{l:7,t:11,i:72}, +D{l:15,t:11,i:142}, +D{l:147,t:11,i:67}, +D{l:7,t:10,i:1961}, +D{l:7,t:10,i:1965}, +D{l:8,t:10,i:702}, +D{l:136,t:10,i:750}, +D{l:7,t:10,i:2030}, +D{l:8,t:10,i:150}, +D{l:8,t:10,i:737}, +D{l:12,t:10,i:366}, +D{l:151,t:11,i:30}, +D{l:4,t:0,i:370}, +D{l:5,t:0,i:756}, +D{l:7,t:0,i:1326}, +D{l:135,t:11,i:823}, +D{l:8,t:10,i:800}, +D{l:9,t:10,i:148}, +D{l:9,t:10,i:872}, +D{l:9,t:10,i:890}, +D{l:11,t:10,i:309}, +D{l:11,t:10,i:1001}, +D{l:13,t:10,i:267}, +D{l:141,t:10,i:323}, +D{l:6,t:0,i:1662}, +D{l:7,t:0,i:48}, +D{l:8,t:0,i:771}, +D{l:10,t:0,i:116}, +D{l:13,t:0,i:104}, +D{l:14,t:0,i:105}, +D{l:14,t:0,i:184}, +D{l:15,t:0,i:168}, +D{l:19,t:0,i:92}, +D{l:148,t:0,i:68}, +D{l:10,t:0,i:209}, +D{l:135,t:11,i:1870}, +D{l:7,t:11,i:68}, +D{l:8,t:11,i:48}, +D{l:8,t:11,i:88}, +D{l:8,t:11,i:582}, +D{l:8,t:11,i:681}, +D{l:9,t:11,i:373}, +D{l:9,t:11,i:864}, +D{l:11,t:11,i:157}, +D{l:11,t:11,i:336}, +D{l:11,t:11,i:843}, +D{l:148,t:11,i:27}, +D{l:134,t:0,i:930}, +D{l:4,t:11,i:88}, +D{l:5,t:11,i:137}, +D{l:5,t:11,i:174}, +D{l:5,t:11,i:777}, +D{l:6,t:11,i:1664}, +D{l:6,t:11,i:1725}, +D{l:7,t:11,i:77}, +D{l:7,t:11,i:426}, +D{l:7,t:11,i:1317}, +D{l:7,t:11,i:1355}, +D{l:8,t:11,i:126}, +D{l:8,t:11,i:563}, +D{l:9,t:11,i:523}, +D{l:9,t:11,i:750}, +D{l:10,t:11,i:310}, +D{l:10,t:11,i:836}, +D{l:11,t:11,i:42}, +D{l:11,t:11,i:318}, +D{l:11,t:11,i:731}, +D{l:12,t:11,i:68}, +D{l:12,t:11,i:92}, +D{l:12,t:11,i:507}, +D{l:12,t:11,i:692}, +D{l:13,t:11,i:81}, +D{l:13,t:11,i:238}, +D{l:13,t:11,i:374}, +D{l:18,t:11,i:138}, +D{l:19,t:11,i:78}, +D{l:19,t:11,i:111}, +D{l:20,t:11,i:55}, +D{l:20,t:11,i:77}, +D{l:148,t:11,i:92}, +D{l:4,t:11,i:938}, +D{l:135,t:11,i:1831}, +D{l:5,t:10,i:547}, +D{l:7,t:10,i:424}, +D{l:8,t:11,i:617}, +D{l:138,t:11,i:351}, +D{l:6,t:0,i:1286}, +D{l:6,t:11,i:1668}, +D{l:7,t:11,i:1499}, +D{l:8,t:11,i:117}, +D{l:9,t:11,i:314}, +D{l:138,t:11,i:174}, +D{l:6,t:0,i:759}, +D{l:6,t:0,i:894}, +D{l:7,t:11,i:707}, +D{l:139,t:11,i:563}, +D{l:4,t:0,i:120}, +D{l:135,t:0,i:1894}, +D{l:9,t:0,i:385}, +D{l:149,t:0,i:17}, +D{l:138,t:0,i:429}, +D{l:133,t:11,i:403}, +D{l:5,t:0,i:820}, +D{l:135,t:0,i:931}, +D{l:10,t:0,i:199}, +D{l:133,t:10,i:133}, +D{l:6,t:0,i:151}, +D{l:6,t:0,i:1675}, +D{l:7,t:0,i:383}, +D{l:151,t:0,i:10}, +D{l:6,t:0,i:761}, +D{l:136,t:10,i:187}, +D{l:8,t:0,i:365}, +D{l:10,t:10,i:0}, +D{l:10,t:10,i:818}, +D{l:139,t:10,i:988}, +D{l:4,t:11,i:44}, +D{l:5,t:11,i:311}, +D{l:6,t:11,i:156}, +D{l:7,t:11,i:639}, +D{l:7,t:11,i:762}, +D{l:7,t:11,i:1827}, +D{l:9,t:11,i:8}, +D{l:9,t:11,i:462}, +D{l:148,t:11,i:83}, +D{l:4,t:11,i:346}, +D{l:7,t:11,i:115}, +D{l:9,t:11,i:180}, +D{l:9,t:11,i:456}, +D{l:138,t:11,i:363}, +D{l:136,t:10,i:685}, +D{l:7,t:0,i:1086}, +D{l:145,t:0,i:46}, +D{l:6,t:0,i:1624}, +D{l:11,t:0,i:11}, +D{l:12,t:0,i:422}, +D{l:13,t:0,i:444}, +D{l:142,t:0,i:360}, +D{l:6,t:0,i:1020}, +D{l:6,t:0,i:1260}, +D{l:134,t:0,i:1589}, +D{l:4,t:0,i:43}, +D{l:5,t:0,i:344}, +D{l:5,t:0,i:357}, +D{l:14,t:0,i:472}, +D{l:150,t:0,i:58}, +D{l:6,t:0,i:1864}, +D{l:6,t:0,i:1866}, +D{l:6,t:0,i:1868}, +D{l:6,t:0,i:1869}, +D{l:6,t:0,i:1874}, +D{l:6,t:0,i:1877}, +D{l:6,t:0,i:1903}, +D{l:6,t:0,i:1911}, +D{l:9,t:0,i:920}, +D{l:9,t:0,i:921}, +D{l:9,t:0,i:924}, +D{l:9,t:0,i:946}, +D{l:9,t:0,i:959}, +D{l:9,t:0,i:963}, +D{l:9,t:0,i:970}, +D{l:9,t:0,i:997}, +D{l:9,t:0,i:1008}, +D{l:9,t:0,i:1017}, +D{l:12,t:0,i:795}, +D{l:12,t:0,i:797}, +D{l:12,t:0,i:798}, +D{l:12,t:0,i:800}, +D{l:12,t:0,i:803}, +D{l:12,t:0,i:811}, +D{l:12,t:0,i:820}, +D{l:12,t:0,i:821}, +D{l:12,t:0,i:839}, +D{l:12,t:0,i:841}, +D{l:12,t:0,i:848}, +D{l:12,t:0,i:911}, +D{l:12,t:0,i:921}, +D{l:12,t:0,i:922}, +D{l:12,t:0,i:925}, +D{l:12,t:0,i:937}, +D{l:12,t:0,i:944}, +D{l:12,t:0,i:945}, +D{l:12,t:0,i:953}, +D{l:15,t:0,i:184}, +D{l:15,t:0,i:191}, +D{l:15,t:0,i:199}, +D{l:15,t:0,i:237}, +D{l:15,t:0,i:240}, +D{l:15,t:0,i:243}, +D{l:15,t:0,i:246}, +D{l:18,t:0,i:203}, +D{l:21,t:0,i:40}, +D{l:21,t:0,i:52}, +D{l:21,t:0,i:57}, +D{l:24,t:0,i:23}, +D{l:24,t:0,i:28}, +D{l:152,t:0,i:30}, +D{l:134,t:0,i:725}, +D{l:145,t:11,i:58}, +D{l:133,t:0,i:888}, +D{l:137,t:10,i:874}, +D{l:4,t:0,i:711}, +D{l:8,t:10,i:774}, +D{l:10,t:10,i:670}, +D{l:140,t:10,i:51}, +D{l:144,t:11,i:40}, +D{l:6,t:11,i:185}, +D{l:7,t:11,i:1899}, +D{l:139,t:11,i:673}, +D{l:137,t:10,i:701}, +D{l:137,t:0,i:440}, +D{l:4,t:11,i:327}, +D{l:5,t:11,i:478}, +D{l:7,t:11,i:1332}, +D{l:8,t:11,i:753}, +D{l:140,t:11,i:227}, +D{l:4,t:10,i:127}, +D{l:5,t:10,i:350}, +D{l:6,t:10,i:356}, +D{l:8,t:10,i:426}, +D{l:9,t:10,i:572}, +D{l:10,t:10,i:247}, +D{l:139,t:10,i:312}, +D{l:5,t:11,i:1020}, +D{l:133,t:11,i:1022}, +D{l:4,t:11,i:103}, +D{l:133,t:11,i:401}, +D{l:6,t:0,i:1913}, +D{l:6,t:0,i:1926}, +D{l:6,t:0,i:1959}, +D{l:9,t:0,i:914}, +D{l:9,t:0,i:939}, +D{l:9,t:0,i:952}, +D{l:9,t:0,i:979}, +D{l:9,t:0,i:990}, +D{l:9,t:0,i:998}, +D{l:9,t:0,i:1003}, +D{l:9,t:0,i:1023}, +D{l:12,t:0,i:827}, +D{l:12,t:0,i:834}, +D{l:12,t:0,i:845}, +D{l:12,t:0,i:912}, +D{l:12,t:0,i:935}, +D{l:12,t:0,i:951}, +D{l:15,t:0,i:172}, +D{l:15,t:0,i:174}, +D{l:18,t:0,i:198}, +D{l:149,t:0,i:63}, +D{l:5,t:0,i:958}, +D{l:5,t:0,i:987}, +D{l:4,t:11,i:499}, +D{l:135,t:11,i:1421}, +D{l:7,t:0,i:885}, +D{l:6,t:10,i:59}, +D{l:6,t:10,i:1762}, +D{l:9,t:10,i:603}, +D{l:141,t:10,i:397}, +D{l:10,t:11,i:62}, +D{l:141,t:11,i:164}, +D{l:4,t:0,i:847}, +D{l:135,t:0,i:326}, +D{l:11,t:0,i:276}, +D{l:142,t:0,i:293}, +D{l:4,t:0,i:65}, +D{l:5,t:0,i:479}, +D{l:5,t:0,i:1004}, +D{l:7,t:0,i:1913}, +D{l:8,t:0,i:317}, +D{l:9,t:0,i:302}, +D{l:10,t:0,i:612}, +D{l:13,t:0,i:22}, +D{l:132,t:11,i:96}, +D{l:4,t:0,i:261}, +D{l:135,t:0,i:510}, +D{l:135,t:0,i:1514}, +D{l:6,t:10,i:111}, +D{l:7,t:10,i:4}, +D{l:8,t:10,i:163}, +D{l:8,t:10,i:776}, +D{l:138,t:10,i:566}, +D{l:4,t:0,i:291}, +D{l:9,t:0,i:515}, +D{l:12,t:0,i:152}, +D{l:12,t:0,i:443}, +D{l:13,t:0,i:392}, +D{l:142,t:0,i:357}, +D{l:7,t:11,i:399}, +D{l:135,t:11,i:1492}, +D{l:4,t:0,i:589}, +D{l:139,t:0,i:282}, +D{l:6,t:11,i:563}, +D{l:135,t:10,i:1994}, +D{l:5,t:10,i:297}, +D{l:135,t:10,i:1038}, +D{l:4,t:0,i:130}, +D{l:7,t:0,i:843}, +D{l:135,t:0,i:1562}, +D{l:5,t:0,i:42}, +D{l:5,t:0,i:879}, +D{l:7,t:0,i:245}, +D{l:7,t:0,i:324}, +D{l:7,t:0,i:1532}, +D{l:11,t:0,i:463}, +D{l:11,t:0,i:472}, +D{l:13,t:0,i:363}, +D{l:144,t:0,i:52}, +D{l:4,t:0,i:134}, +D{l:133,t:0,i:372}, +D{l:133,t:0,i:680}, +D{l:136,t:10,i:363}, +D{l:6,t:0,i:1997}, +D{l:8,t:0,i:935}, +D{l:136,t:0,i:977}, +D{l:4,t:0,i:810}, +D{l:135,t:0,i:1634}, +D{l:135,t:10,i:1675}, +D{l:7,t:0,i:1390}, +D{l:4,t:11,i:910}, +D{l:133,t:11,i:832}, +D{l:7,t:10,i:808}, +D{l:8,t:11,i:266}, +D{l:139,t:11,i:578}, +D{l:132,t:0,i:644}, +D{l:4,t:0,i:982}, +D{l:138,t:0,i:867}, +D{l:132,t:10,i:280}, +D{l:135,t:0,i:540}, +D{l:140,t:10,i:54}, +D{l:135,t:0,i:123}, +D{l:134,t:0,i:1978}, +D{l:4,t:10,i:421}, +D{l:133,t:10,i:548}, +D{l:6,t:0,i:623}, +D{l:136,t:0,i:789}, +D{l:4,t:0,i:908}, +D{l:5,t:0,i:359}, +D{l:5,t:0,i:508}, +D{l:6,t:0,i:1723}, +D{l:7,t:0,i:343}, +D{l:7,t:0,i:1996}, +D{l:135,t:0,i:2026}, +D{l:134,t:0,i:1220}, +D{l:4,t:0,i:341}, +D{l:135,t:0,i:480}, +D{l:6,t:10,i:254}, +D{l:9,t:10,i:109}, +D{l:138,t:10,i:103}, +D{l:134,t:0,i:888}, +D{l:8,t:11,i:528}, +D{l:137,t:11,i:348}, +D{l:7,t:0,i:1995}, +D{l:8,t:0,i:299}, +D{l:11,t:0,i:890}, +D{l:12,t:0,i:674}, +D{l:4,t:11,i:20}, +D{l:133,t:11,i:616}, +D{l:135,t:11,i:1094}, +D{l:134,t:10,i:1630}, +D{l:4,t:0,i:238}, +D{l:5,t:0,i:503}, +D{l:6,t:0,i:179}, +D{l:7,t:0,i:2003}, +D{l:8,t:0,i:381}, +D{l:8,t:0,i:473}, +D{l:9,t:0,i:149}, +D{l:10,t:0,i:788}, +D{l:15,t:0,i:45}, +D{l:15,t:0,i:86}, +D{l:20,t:0,i:110}, +D{l:150,t:0,i:57}, +D{l:133,t:10,i:671}, +D{l:4,t:11,i:26}, +D{l:5,t:11,i:429}, +D{l:6,t:11,i:245}, +D{l:7,t:11,i:704}, +D{l:7,t:11,i:1379}, +D{l:135,t:11,i:1474}, +D{l:4,t:0,i:121}, +D{l:5,t:0,i:156}, +D{l:5,t:0,i:349}, +D{l:9,t:0,i:431}, +D{l:10,t:0,i:605}, +D{l:142,t:0,i:342}, +D{l:7,t:11,i:943}, +D{l:139,t:11,i:614}, +D{l:132,t:10,i:889}, +D{l:132,t:11,i:621}, +D{l:7,t:10,i:1382}, +D{l:7,t:11,i:1382}, +D{l:135,t:10,i:1910}, +D{l:132,t:10,i:627}, +D{l:133,t:10,i:775}, +D{l:133,t:11,i:542}, +D{l:133,t:11,i:868}, +D{l:136,t:11,i:433}, +D{l:6,t:0,i:1373}, +D{l:7,t:0,i:1011}, +D{l:11,t:10,i:362}, +D{l:11,t:10,i:948}, +D{l:140,t:10,i:388}, +D{l:6,t:0,i:80}, +D{l:7,t:0,i:173}, +D{l:9,t:0,i:547}, +D{l:10,t:0,i:730}, +D{l:14,t:0,i:18}, +D{l:22,t:0,i:39}, +D{l:135,t:11,i:1495}, +D{l:6,t:0,i:1694}, +D{l:135,t:0,i:1974}, +D{l:140,t:0,i:196}, +D{l:4,t:0,i:923}, +D{l:6,t:0,i:507}, +D{l:6,t:0,i:1711}, +D{l:7,t:10,i:451}, +D{l:8,t:10,i:389}, +D{l:12,t:10,i:490}, +D{l:13,t:10,i:16}, +D{l:13,t:10,i:215}, +D{l:13,t:10,i:351}, +D{l:18,t:10,i:132}, +D{l:147,t:10,i:125}, +D{l:6,t:0,i:646}, +D{l:134,t:0,i:1047}, +D{l:135,t:10,i:841}, +D{l:136,t:10,i:566}, +D{l:6,t:0,i:1611}, +D{l:135,t:0,i:1214}, +D{l:139,t:0,i:926}, +D{l:132,t:11,i:525}, +D{l:132,t:0,i:595}, +D{l:5,t:0,i:240}, +D{l:6,t:0,i:459}, +D{l:7,t:0,i:12}, +D{l:7,t:0,i:114}, +D{l:7,t:0,i:949}, +D{l:7,t:0,i:1753}, +D{l:7,t:0,i:1805}, +D{l:8,t:0,i:658}, +D{l:9,t:0,i:1}, +D{l:11,t:0,i:959}, +D{l:141,t:0,i:446}, +D{l:5,t:10,i:912}, +D{l:134,t:10,i:1695}, +D{l:132,t:0,i:446}, +D{l:7,t:11,i:62}, +D{l:12,t:11,i:45}, +D{l:147,t:11,i:112}, +D{l:5,t:10,i:236}, +D{l:6,t:10,i:572}, +D{l:8,t:10,i:492}, +D{l:11,t:10,i:618}, +D{l:144,t:10,i:56}, +D{l:5,t:10,i:190}, +D{l:136,t:10,i:318}, +D{l:135,t:10,i:1376}, +D{l:4,t:11,i:223}, +D{l:6,t:11,i:359}, +D{l:11,t:11,i:3}, +D{l:13,t:11,i:108}, +D{l:14,t:11,i:89}, +D{l:144,t:11,i:22}, +D{l:132,t:11,i:647}, +D{l:134,t:0,i:490}, +D{l:134,t:0,i:491}, +D{l:134,t:0,i:1584}, +D{l:135,t:11,i:685}, +D{l:138,t:11,i:220}, +D{l:7,t:0,i:250}, +D{l:136,t:0,i:507}, +D{l:132,t:0,i:158}, +D{l:4,t:0,i:140}, +D{l:7,t:0,i:362}, +D{l:8,t:0,i:209}, +D{l:9,t:0,i:10}, +D{l:9,t:0,i:160}, +D{l:9,t:0,i:503}, +D{l:9,t:0,i:614}, +D{l:10,t:0,i:689}, +D{l:11,t:0,i:327}, +D{l:11,t:0,i:553}, +D{l:11,t:0,i:725}, +D{l:11,t:0,i:767}, +D{l:12,t:0,i:252}, +D{l:12,t:0,i:583}, +D{l:13,t:0,i:192}, +D{l:14,t:0,i:269}, +D{l:14,t:0,i:356}, +D{l:148,t:0,i:50}, +D{l:19,t:0,i:1}, +D{l:19,t:0,i:26}, +D{l:150,t:0,i:9}, +D{l:132,t:11,i:109}, +D{l:6,t:0,i:228}, +D{l:7,t:0,i:1341}, +D{l:9,t:0,i:408}, +D{l:138,t:0,i:343}, +D{l:4,t:0,i:373}, +D{l:5,t:0,i:283}, +D{l:6,t:0,i:480}, +D{l:7,t:0,i:609}, +D{l:10,t:0,i:860}, +D{l:138,t:0,i:878}, +D{l:6,t:0,i:779}, +D{l:134,t:0,i:1209}, +D{l:4,t:0,i:557}, +D{l:7,t:11,i:263}, +D{l:7,t:11,i:628}, +D{l:136,t:11,i:349}, +D{l:132,t:0,i:548}, +D{l:7,t:0,i:197}, +D{l:8,t:0,i:142}, +D{l:8,t:0,i:325}, +D{l:9,t:0,i:150}, +D{l:9,t:0,i:596}, +D{l:10,t:0,i:350}, +D{l:10,t:0,i:353}, +D{l:11,t:0,i:74}, +D{l:11,t:0,i:315}, +D{l:12,t:0,i:662}, +D{l:12,t:0,i:681}, +D{l:14,t:0,i:423}, +D{l:143,t:0,i:141}, +D{l:4,t:11,i:40}, +D{l:10,t:11,i:67}, +D{l:11,t:11,i:117}, +D{l:11,t:11,i:768}, +D{l:139,t:11,i:935}, +D{l:7,t:11,i:992}, +D{l:8,t:11,i:301}, +D{l:9,t:11,i:722}, +D{l:12,t:11,i:63}, +D{l:13,t:11,i:29}, +D{l:14,t:11,i:161}, +D{l:143,t:11,i:18}, +D{l:6,t:0,i:1490}, +D{l:138,t:11,i:532}, +D{l:5,t:0,i:580}, +D{l:7,t:0,i:378}, +D{l:7,t:0,i:674}, +D{l:7,t:0,i:1424}, +D{l:15,t:0,i:83}, +D{l:16,t:0,i:11}, +D{l:15,t:11,i:83}, +D{l:144,t:11,i:11}, +D{l:6,t:0,i:1057}, +D{l:6,t:0,i:1335}, +D{l:10,t:0,i:316}, +D{l:7,t:10,i:85}, +D{l:7,t:10,i:247}, +D{l:8,t:10,i:585}, +D{l:138,t:10,i:163}, +D{l:4,t:0,i:169}, +D{l:5,t:0,i:83}, +D{l:6,t:0,i:399}, +D{l:6,t:0,i:579}, +D{l:6,t:0,i:1513}, +D{l:7,t:0,i:692}, +D{l:7,t:0,i:846}, +D{l:7,t:0,i:1015}, +D{l:7,t:0,i:1799}, +D{l:8,t:0,i:403}, +D{l:9,t:0,i:394}, +D{l:10,t:0,i:133}, +D{l:12,t:0,i:4}, +D{l:12,t:0,i:297}, +D{l:12,t:0,i:452}, +D{l:16,t:0,i:81}, +D{l:18,t:0,i:25}, +D{l:21,t:0,i:14}, +D{l:22,t:0,i:12}, +D{l:151,t:0,i:18}, +D{l:134,t:0,i:1106}, +D{l:7,t:0,i:1546}, +D{l:11,t:0,i:299}, +D{l:142,t:0,i:407}, +D{l:134,t:0,i:1192}, +D{l:132,t:0,i:177}, +D{l:5,t:0,i:411}, +D{l:135,t:0,i:653}, +D{l:7,t:0,i:439}, +D{l:10,t:0,i:727}, +D{l:11,t:0,i:260}, +D{l:139,t:0,i:684}, +D{l:138,t:10,i:145}, +D{l:147,t:10,i:83}, +D{l:5,t:0,i:208}, +D{l:7,t:0,i:753}, +D{l:135,t:0,i:1528}, +D{l:137,t:11,i:617}, +D{l:135,t:10,i:1922}, +D{l:135,t:11,i:825}, +D{l:11,t:0,i:422}, +D{l:13,t:0,i:389}, +D{l:4,t:10,i:124}, +D{l:10,t:10,i:457}, +D{l:11,t:10,i:121}, +D{l:11,t:10,i:169}, +D{l:11,t:10,i:870}, +D{l:12,t:10,i:214}, +D{l:14,t:10,i:187}, +D{l:143,t:10,i:77}, +D{l:11,t:0,i:615}, +D{l:15,t:0,i:58}, +D{l:11,t:11,i:615}, +D{l:143,t:11,i:58}, +D{l:9,t:0,i:618}, +D{l:138,t:0,i:482}, +D{l:6,t:0,i:1952}, +D{l:6,t:0,i:1970}, +D{l:142,t:0,i:505}, +D{l:7,t:10,i:1193}, +D{l:135,t:11,i:1838}, +D{l:133,t:0,i:242}, +D{l:135,t:10,i:1333}, +D{l:6,t:10,i:107}, +D{l:7,t:10,i:638}, +D{l:7,t:10,i:1632}, +D{l:137,t:10,i:396}, +D{l:133,t:0,i:953}, +D{l:5,t:10,i:370}, +D{l:134,t:10,i:1756}, +D{l:5,t:11,i:28}, +D{l:6,t:11,i:204}, +D{l:10,t:11,i:320}, +D{l:10,t:11,i:583}, +D{l:13,t:11,i:502}, +D{l:14,t:11,i:72}, +D{l:14,t:11,i:274}, +D{l:14,t:11,i:312}, +D{l:14,t:11,i:344}, +D{l:15,t:11,i:159}, +D{l:16,t:11,i:62}, +D{l:16,t:11,i:69}, +D{l:17,t:11,i:30}, +D{l:18,t:11,i:42}, +D{l:18,t:11,i:53}, +D{l:18,t:11,i:84}, +D{l:18,t:11,i:140}, +D{l:19,t:11,i:68}, +D{l:19,t:11,i:85}, +D{l:20,t:11,i:5}, +D{l:20,t:11,i:45}, +D{l:20,t:11,i:101}, +D{l:22,t:11,i:7}, +D{l:150,t:11,i:20}, +D{l:4,t:11,i:558}, +D{l:6,t:11,i:390}, +D{l:7,t:11,i:162}, +D{l:7,t:11,i:689}, +D{l:9,t:11,i:360}, +D{l:138,t:11,i:653}, +D{l:11,t:0,i:802}, +D{l:141,t:0,i:67}, +D{l:133,t:10,i:204}, +D{l:133,t:0,i:290}, +D{l:5,t:10,i:970}, +D{l:134,t:10,i:1706}, +D{l:132,t:0,i:380}, +D{l:5,t:0,i:52}, +D{l:7,t:0,i:277}, +D{l:9,t:0,i:368}, +D{l:139,t:0,i:791}, +D{l:5,t:11,i:856}, +D{l:6,t:11,i:1672}, +D{l:6,t:11,i:1757}, +D{l:6,t:11,i:1781}, +D{l:7,t:11,i:1150}, +D{l:7,t:11,i:1425}, +D{l:7,t:11,i:1453}, +D{l:140,t:11,i:513}, +D{l:5,t:11,i:92}, +D{l:7,t:10,i:3}, +D{l:10,t:11,i:736}, +D{l:140,t:11,i:102}, +D{l:4,t:0,i:112}, +D{l:5,t:0,i:653}, +D{l:5,t:10,i:483}, +D{l:5,t:10,i:685}, +D{l:6,t:10,i:489}, +D{l:7,t:10,i:1204}, +D{l:136,t:10,i:394}, +D{l:132,t:10,i:921}, +D{l:6,t:0,i:1028}, +D{l:133,t:10,i:1007}, +D{l:5,t:11,i:590}, +D{l:9,t:11,i:213}, +D{l:145,t:11,i:91}, +D{l:135,t:10,i:1696}, +D{l:10,t:0,i:138}, +D{l:139,t:0,i:476}, +D{l:5,t:0,i:725}, +D{l:5,t:0,i:727}, +D{l:135,t:0,i:1811}, +D{l:4,t:0,i:979}, +D{l:6,t:0,i:1821}, +D{l:6,t:0,i:1838}, +D{l:8,t:0,i:876}, +D{l:8,t:0,i:883}, +D{l:8,t:0,i:889}, +D{l:8,t:0,i:893}, +D{l:8,t:0,i:895}, +D{l:10,t:0,i:934}, +D{l:12,t:0,i:720}, +D{l:14,t:0,i:459}, +D{l:148,t:0,i:123}, +D{l:135,t:11,i:551}, +D{l:4,t:0,i:38}, +D{l:6,t:0,i:435}, +D{l:7,t:0,i:307}, +D{l:7,t:0,i:999}, +D{l:7,t:0,i:1481}, +D{l:7,t:0,i:1732}, +D{l:7,t:0,i:1738}, +D{l:8,t:0,i:371}, +D{l:9,t:0,i:414}, +D{l:11,t:0,i:316}, +D{l:12,t:0,i:52}, +D{l:13,t:0,i:420}, +D{l:147,t:0,i:100}, +D{l:135,t:0,i:1296}, +D{l:132,t:10,i:712}, +D{l:134,t:10,i:1629}, +D{l:133,t:0,i:723}, +D{l:134,t:0,i:651}, +D{l:136,t:11,i:191}, +D{l:9,t:11,i:791}, +D{l:10,t:11,i:93}, +D{l:11,t:11,i:301}, +D{l:16,t:11,i:13}, +D{l:17,t:11,i:23}, +D{l:18,t:11,i:135}, +D{l:19,t:11,i:12}, +D{l:20,t:11,i:1}, +D{l:20,t:11,i:12}, +D{l:148,t:11,i:14}, +D{l:136,t:11,i:503}, +D{l:6,t:11,i:466}, +D{l:135,t:11,i:671}, +D{l:6,t:0,i:1200}, +D{l:134,t:0,i:1330}, +D{l:135,t:0,i:1255}, +D{l:134,t:0,i:986}, +D{l:5,t:0,i:109}, +D{l:6,t:0,i:1784}, +D{l:7,t:0,i:1895}, +D{l:12,t:0,i:296}, +D{l:140,t:0,i:302}, +D{l:135,t:11,i:983}, +D{l:133,t:10,i:485}, +D{l:134,t:0,i:660}, +D{l:134,t:0,i:800}, +D{l:5,t:0,i:216}, +D{l:5,t:0,i:294}, +D{l:6,t:0,i:591}, +D{l:7,t:0,i:1879}, +D{l:9,t:0,i:141}, +D{l:9,t:0,i:270}, +D{l:9,t:0,i:679}, +D{l:10,t:0,i:159}, +D{l:11,t:0,i:197}, +D{l:11,t:0,i:438}, +D{l:12,t:0,i:538}, +D{l:12,t:0,i:559}, +D{l:14,t:0,i:144}, +D{l:14,t:0,i:167}, +D{l:15,t:0,i:67}, +D{l:4,t:10,i:285}, +D{l:5,t:10,i:317}, +D{l:6,t:10,i:301}, +D{l:7,t:10,i:7}, +D{l:8,t:10,i:153}, +D{l:10,t:10,i:766}, +D{l:11,t:10,i:468}, +D{l:12,t:10,i:467}, +D{l:141,t:10,i:143}, +D{l:136,t:0,i:945}, +D{l:134,t:0,i:1090}, +D{l:137,t:0,i:81}, +D{l:12,t:11,i:468}, +D{l:19,t:11,i:96}, +D{l:148,t:11,i:24}, +D{l:134,t:0,i:391}, +D{l:138,t:11,i:241}, +D{l:7,t:0,i:322}, +D{l:136,t:0,i:249}, +D{l:134,t:0,i:1412}, +D{l:135,t:11,i:795}, +D{l:5,t:0,i:632}, +D{l:138,t:0,i:526}, +D{l:136,t:10,i:819}, +D{l:6,t:0,i:144}, +D{l:7,t:0,i:948}, +D{l:7,t:0,i:1042}, +D{l:8,t:0,i:235}, +D{l:8,t:0,i:461}, +D{l:9,t:0,i:453}, +D{l:9,t:0,i:796}, +D{l:10,t:0,i:354}, +D{l:17,t:0,i:77}, +D{l:135,t:11,i:954}, +D{l:139,t:10,i:917}, +D{l:6,t:0,i:940}, +D{l:134,t:0,i:1228}, +D{l:4,t:0,i:362}, +D{l:7,t:0,i:52}, +D{l:135,t:0,i:303}, +D{l:6,t:11,i:549}, +D{l:8,t:11,i:34}, +D{l:8,t:11,i:283}, +D{l:9,t:11,i:165}, +D{l:138,t:11,i:475}, +D{l:7,t:11,i:370}, +D{l:7,t:11,i:1007}, +D{l:7,t:11,i:1177}, +D{l:135,t:11,i:1565}, +D{l:5,t:11,i:652}, +D{l:5,t:11,i:701}, +D{l:135,t:11,i:449}, +D{l:5,t:0,i:196}, +D{l:6,t:0,i:486}, +D{l:7,t:0,i:212}, +D{l:8,t:0,i:309}, +D{l:136,t:0,i:346}, +D{l:6,t:10,i:1719}, +D{l:6,t:10,i:1735}, +D{l:7,t:10,i:2016}, +D{l:7,t:10,i:2020}, +D{l:8,t:10,i:837}, +D{l:137,t:10,i:852}, +D{l:6,t:11,i:159}, +D{l:6,t:11,i:364}, +D{l:7,t:11,i:516}, +D{l:7,t:11,i:1439}, +D{l:137,t:11,i:518}, +D{l:135,t:0,i:1912}, +D{l:135,t:0,i:1290}, +D{l:132,t:0,i:686}, +D{l:141,t:11,i:151}, +D{l:138,t:0,i:625}, +D{l:136,t:0,i:706}, +D{l:138,t:10,i:568}, +D{l:139,t:0,i:412}, +D{l:4,t:0,i:30}, +D{l:133,t:0,i:43}, +D{l:8,t:10,i:67}, +D{l:138,t:10,i:419}, +D{l:7,t:0,i:967}, +D{l:141,t:0,i:11}, +D{l:12,t:0,i:758}, +D{l:14,t:0,i:441}, +D{l:142,t:0,i:462}, +D{l:10,t:10,i:657}, +D{l:14,t:10,i:297}, +D{l:142,t:10,i:361}, +D{l:139,t:10,i:729}, +D{l:4,t:0,i:220}, +D{l:135,t:0,i:1535}, +D{l:7,t:11,i:501}, +D{l:9,t:11,i:111}, +D{l:10,t:11,i:141}, +D{l:11,t:11,i:332}, +D{l:13,t:11,i:43}, +D{l:13,t:11,i:429}, +D{l:14,t:11,i:130}, +D{l:14,t:11,i:415}, +D{l:145,t:11,i:102}, +D{l:4,t:0,i:950}, +D{l:6,t:0,i:1859}, +D{l:7,t:0,i:11}, +D{l:8,t:0,i:873}, +D{l:12,t:0,i:710}, +D{l:12,t:0,i:718}, +D{l:12,t:0,i:748}, +D{l:12,t:0,i:765}, +D{l:148,t:0,i:124}, +D{l:5,t:11,i:149}, +D{l:5,t:11,i:935}, +D{l:136,t:11,i:233}, +D{l:142,t:11,i:291}, +D{l:134,t:0,i:1579}, +D{l:7,t:0,i:890}, +D{l:8,t:10,i:51}, +D{l:9,t:10,i:868}, +D{l:10,t:10,i:833}, +D{l:12,t:10,i:481}, +D{l:12,t:10,i:570}, +D{l:148,t:10,i:106}, +D{l:141,t:0,i:2}, +D{l:132,t:10,i:445}, +D{l:136,t:11,i:801}, +D{l:135,t:0,i:1774}, +D{l:7,t:0,i:1725}, +D{l:138,t:0,i:393}, +D{l:5,t:0,i:263}, +D{l:134,t:0,i:414}, +D{l:132,t:11,i:322}, +D{l:133,t:10,i:239}, +D{l:7,t:0,i:456}, +D{l:7,t:10,i:1990}, +D{l:8,t:10,i:130}, +D{l:139,t:10,i:720}, +D{l:137,t:0,i:818}, +D{l:5,t:10,i:123}, +D{l:6,t:10,i:530}, +D{l:7,t:10,i:348}, +D{l:135,t:10,i:1419}, +D{l:135,t:10,i:2024}, +D{l:6,t:0,i:178}, +D{l:6,t:0,i:1750}, +D{l:8,t:0,i:251}, +D{l:9,t:0,i:690}, +D{l:10,t:0,i:155}, +D{l:10,t:0,i:196}, +D{l:10,t:0,i:373}, +D{l:11,t:0,i:698}, +D{l:13,t:0,i:155}, +D{l:148,t:0,i:93}, +D{l:5,t:0,i:97}, +D{l:137,t:0,i:393}, +D{l:134,t:0,i:674}, +D{l:11,t:0,i:223}, +D{l:140,t:0,i:168}, +D{l:132,t:10,i:210}, +D{l:139,t:11,i:464}, +D{l:6,t:0,i:1639}, +D{l:146,t:0,i:159}, +D{l:139,t:11,i:2}, +D{l:7,t:0,i:934}, +D{l:8,t:0,i:647}, +D{l:17,t:0,i:97}, +D{l:19,t:0,i:59}, +D{l:150,t:0,i:2}, +D{l:132,t:0,i:191}, +D{l:5,t:0,i:165}, +D{l:9,t:0,i:346}, +D{l:10,t:0,i:655}, +D{l:11,t:0,i:885}, +D{l:4,t:10,i:430}, +D{l:135,t:11,i:357}, +D{l:133,t:0,i:877}, +D{l:5,t:10,i:213}, +D{l:133,t:11,i:406}, +D{l:8,t:0,i:128}, +D{l:139,t:0,i:179}, +D{l:6,t:11,i:69}, +D{l:135,t:11,i:117}, +D{l:135,t:0,i:1297}, +D{l:11,t:11,i:43}, +D{l:13,t:11,i:72}, +D{l:141,t:11,i:142}, +D{l:135,t:11,i:1830}, +D{l:142,t:0,i:164}, +D{l:5,t:0,i:57}, +D{l:6,t:0,i:101}, +D{l:6,t:0,i:586}, +D{l:6,t:0,i:1663}, +D{l:7,t:0,i:132}, +D{l:7,t:0,i:1154}, +D{l:7,t:0,i:1415}, +D{l:7,t:0,i:1507}, +D{l:12,t:0,i:493}, +D{l:15,t:0,i:105}, +D{l:151,t:0,i:15}, +D{l:5,t:0,i:459}, +D{l:7,t:0,i:1073}, +D{l:8,t:0,i:241}, +D{l:136,t:0,i:334}, +D{l:133,t:11,i:826}, +D{l:133,t:10,i:108}, +D{l:5,t:10,i:219}, +D{l:10,t:11,i:132}, +D{l:11,t:11,i:191}, +D{l:11,t:11,i:358}, +D{l:139,t:11,i:460}, +D{l:6,t:0,i:324}, +D{l:6,t:0,i:520}, +D{l:7,t:0,i:338}, +D{l:7,t:0,i:1729}, +D{l:8,t:0,i:228}, +D{l:139,t:0,i:750}, +D{l:21,t:0,i:30}, +D{l:22,t:0,i:53}, +D{l:4,t:10,i:193}, +D{l:5,t:10,i:916}, +D{l:7,t:10,i:364}, +D{l:10,t:10,i:398}, +D{l:10,t:10,i:726}, +D{l:11,t:10,i:317}, +D{l:11,t:10,i:626}, +D{l:12,t:10,i:142}, +D{l:12,t:10,i:288}, +D{l:12,t:10,i:678}, +D{l:13,t:10,i:313}, +D{l:15,t:10,i:113}, +D{l:146,t:10,i:114}, +D{l:6,t:11,i:110}, +D{l:135,t:11,i:1681}, +D{l:135,t:0,i:910}, +D{l:6,t:10,i:241}, +D{l:7,t:10,i:907}, +D{l:8,t:10,i:832}, +D{l:9,t:10,i:342}, +D{l:10,t:10,i:729}, +D{l:11,t:10,i:284}, +D{l:11,t:10,i:445}, +D{l:11,t:10,i:651}, +D{l:11,t:10,i:863}, +D{l:13,t:10,i:398}, +D{l:146,t:10,i:99}, +D{l:7,t:0,i:705}, +D{l:9,t:0,i:734}, +D{l:5,t:11,i:1000}, +D{l:7,t:11,i:733}, +D{l:137,t:11,i:583}, +D{l:4,t:0,i:73}, +D{l:6,t:0,i:612}, +D{l:7,t:0,i:927}, +D{l:7,t:0,i:1822}, +D{l:8,t:0,i:217}, +D{l:9,t:0,i:765}, +D{l:9,t:0,i:766}, +D{l:10,t:0,i:408}, +D{l:11,t:0,i:51}, +D{l:11,t:0,i:793}, +D{l:12,t:0,i:266}, +D{l:15,t:0,i:158}, +D{l:20,t:0,i:89}, +D{l:150,t:0,i:32}, +D{l:7,t:0,i:1330}, +D{l:4,t:11,i:297}, +D{l:6,t:11,i:529}, +D{l:7,t:11,i:152}, +D{l:7,t:11,i:713}, +D{l:7,t:11,i:1845}, +D{l:8,t:11,i:710}, +D{l:8,t:11,i:717}, +D{l:140,t:11,i:639}, +D{l:5,t:0,i:389}, +D{l:136,t:0,i:636}, +D{l:134,t:0,i:1409}, +D{l:4,t:10,i:562}, +D{l:9,t:10,i:254}, +D{l:139,t:10,i:879}, +D{l:134,t:0,i:893}, +D{l:132,t:10,i:786}, +D{l:4,t:11,i:520}, +D{l:135,t:11,i:575}, +D{l:136,t:0,i:21}, +D{l:140,t:0,i:721}, +D{l:136,t:0,i:959}, +D{l:7,t:11,i:1428}, +D{l:7,t:11,i:1640}, +D{l:9,t:11,i:169}, +D{l:9,t:11,i:182}, +D{l:9,t:11,i:367}, +D{l:9,t:11,i:478}, +D{l:9,t:11,i:506}, +D{l:9,t:11,i:551}, +D{l:9,t:11,i:648}, +D{l:9,t:11,i:651}, +D{l:9,t:11,i:697}, +D{l:9,t:11,i:705}, +D{l:9,t:11,i:725}, +D{l:9,t:11,i:787}, +D{l:9,t:11,i:794}, +D{l:10,t:11,i:198}, +D{l:10,t:11,i:214}, +D{l:10,t:11,i:267}, +D{l:10,t:11,i:275}, +D{l:10,t:11,i:456}, +D{l:10,t:11,i:551}, +D{l:10,t:11,i:561}, +D{l:10,t:11,i:613}, +D{l:10,t:11,i:627}, +D{l:10,t:11,i:668}, +D{l:10,t:11,i:675}, +D{l:10,t:11,i:691}, +D{l:10,t:11,i:695}, +D{l:10,t:11,i:707}, +D{l:10,t:11,i:715}, +D{l:11,t:11,i:183}, +D{l:11,t:11,i:201}, +D{l:11,t:11,i:244}, +D{l:11,t:11,i:262}, +D{l:11,t:11,i:352}, +D{l:11,t:11,i:439}, +D{l:11,t:11,i:493}, +D{l:11,t:11,i:572}, +D{l:11,t:11,i:591}, +D{l:11,t:11,i:608}, +D{l:11,t:11,i:611}, +D{l:11,t:11,i:646}, +D{l:11,t:11,i:674}, +D{l:11,t:11,i:711}, +D{l:11,t:11,i:751}, +D{l:11,t:11,i:761}, +D{l:11,t:11,i:776}, +D{l:11,t:11,i:785}, +D{l:11,t:11,i:850}, +D{l:11,t:11,i:853}, +D{l:11,t:11,i:862}, +D{l:11,t:11,i:865}, +D{l:11,t:11,i:868}, +D{l:11,t:11,i:898}, +D{l:11,t:11,i:902}, +D{l:11,t:11,i:903}, +D{l:11,t:11,i:910}, +D{l:11,t:11,i:932}, +D{l:11,t:11,i:942}, +D{l:11,t:11,i:957}, +D{l:11,t:11,i:967}, +D{l:11,t:11,i:972}, +D{l:12,t:11,i:148}, +D{l:12,t:11,i:195}, +D{l:12,t:11,i:220}, +D{l:12,t:11,i:237}, +D{l:12,t:11,i:318}, +D{l:12,t:11,i:339}, +D{l:12,t:11,i:393}, +D{l:12,t:11,i:445}, +D{l:12,t:11,i:450}, +D{l:12,t:11,i:474}, +D{l:12,t:11,i:509}, +D{l:12,t:11,i:533}, +D{l:12,t:11,i:591}, +D{l:12,t:11,i:594}, +D{l:12,t:11,i:597}, +D{l:12,t:11,i:621}, +D{l:12,t:11,i:633}, +D{l:12,t:11,i:642}, +D{l:13,t:11,i:59}, +D{l:13,t:11,i:60}, +D{l:13,t:11,i:145}, +D{l:13,t:11,i:239}, +D{l:13,t:11,i:250}, +D{l:13,t:11,i:273}, +D{l:13,t:11,i:329}, +D{l:13,t:11,i:344}, +D{l:13,t:11,i:365}, +D{l:13,t:11,i:372}, +D{l:13,t:11,i:387}, +D{l:13,t:11,i:403}, +D{l:13,t:11,i:414}, +D{l:13,t:11,i:456}, +D{l:13,t:11,i:478}, +D{l:13,t:11,i:483}, +D{l:13,t:11,i:489}, +D{l:14,t:11,i:55}, +D{l:14,t:11,i:57}, +D{l:14,t:11,i:81}, +D{l:14,t:11,i:90}, +D{l:14,t:11,i:148}, +D{l:14,t:11,i:239}, +D{l:14,t:11,i:266}, +D{l:14,t:11,i:321}, +D{l:14,t:11,i:326}, +D{l:14,t:11,i:327}, +D{l:14,t:11,i:330}, +D{l:14,t:11,i:347}, +D{l:14,t:11,i:355}, +D{l:14,t:11,i:401}, +D{l:14,t:11,i:411}, +D{l:14,t:11,i:414}, +D{l:14,t:11,i:416}, +D{l:14,t:11,i:420}, +D{l:15,t:11,i:61}, +D{l:15,t:11,i:74}, +D{l:15,t:11,i:87}, +D{l:15,t:11,i:88}, +D{l:15,t:11,i:94}, +D{l:15,t:11,i:96}, +D{l:15,t:11,i:116}, +D{l:15,t:11,i:149}, +D{l:15,t:11,i:154}, +D{l:16,t:11,i:50}, +D{l:16,t:11,i:63}, +D{l:16,t:11,i:73}, +D{l:17,t:11,i:2}, +D{l:17,t:11,i:66}, +D{l:17,t:11,i:92}, +D{l:17,t:11,i:103}, +D{l:17,t:11,i:112}, +D{l:18,t:11,i:50}, +D{l:18,t:11,i:54}, +D{l:18,t:11,i:82}, +D{l:18,t:11,i:86}, +D{l:18,t:11,i:90}, +D{l:18,t:11,i:111}, +D{l:18,t:11,i:115}, +D{l:18,t:11,i:156}, +D{l:19,t:11,i:40}, +D{l:19,t:11,i:79}, +D{l:20,t:11,i:78}, +D{l:149,t:11,i:22}, +D{l:137,t:11,i:170}, +D{l:134,t:0,i:1433}, +D{l:135,t:11,i:1307}, +D{l:139,t:11,i:411}, +D{l:5,t:0,i:189}, +D{l:7,t:0,i:442}, +D{l:7,t:0,i:443}, +D{l:8,t:0,i:281}, +D{l:12,t:0,i:174}, +D{l:141,t:0,i:261}, +D{l:6,t:10,i:216}, +D{l:7,t:10,i:901}, +D{l:7,t:10,i:1343}, +D{l:136,t:10,i:493}, +D{l:5,t:11,i:397}, +D{l:6,t:11,i:154}, +D{l:7,t:10,i:341}, +D{l:7,t:11,i:676}, +D{l:8,t:11,i:443}, +D{l:8,t:11,i:609}, +D{l:9,t:11,i:24}, +D{l:9,t:11,i:325}, +D{l:10,t:11,i:35}, +D{l:11,t:10,i:219}, +D{l:11,t:11,i:535}, +D{l:11,t:11,i:672}, +D{l:11,t:11,i:1018}, +D{l:12,t:11,i:637}, +D{l:144,t:11,i:30}, +D{l:6,t:0,i:2}, +D{l:7,t:0,i:191}, +D{l:7,t:0,i:446}, +D{l:7,t:0,i:1262}, +D{l:7,t:0,i:1737}, +D{l:8,t:0,i:22}, +D{l:8,t:0,i:270}, +D{l:8,t:0,i:612}, +D{l:9,t:0,i:4}, +D{l:9,t:0,i:312}, +D{l:9,t:0,i:436}, +D{l:9,t:0,i:626}, +D{l:10,t:0,i:216}, +D{l:10,t:0,i:311}, +D{l:10,t:0,i:521}, +D{l:10,t:0,i:623}, +D{l:11,t:0,i:72}, +D{l:11,t:0,i:330}, +D{l:11,t:0,i:455}, +D{l:12,t:0,i:321}, +D{l:12,t:0,i:504}, +D{l:12,t:0,i:530}, +D{l:12,t:0,i:543}, +D{l:13,t:0,i:17}, +D{l:13,t:0,i:156}, +D{l:13,t:0,i:334}, +D{l:14,t:0,i:131}, +D{l:17,t:0,i:60}, +D{l:148,t:0,i:64}, +D{l:7,t:0,i:354}, +D{l:10,t:0,i:410}, +D{l:139,t:0,i:815}, +D{l:139,t:10,i:130}, +D{l:7,t:10,i:1734}, +D{l:137,t:11,i:631}, +D{l:12,t:0,i:425}, +D{l:15,t:0,i:112}, +D{l:10,t:10,i:115}, +D{l:11,t:10,i:420}, +D{l:13,t:10,i:404}, +D{l:14,t:10,i:346}, +D{l:143,t:10,i:54}, +D{l:6,t:0,i:60}, +D{l:6,t:0,i:166}, +D{l:7,t:0,i:374}, +D{l:7,t:0,i:670}, +D{l:7,t:0,i:1327}, +D{l:8,t:0,i:411}, +D{l:8,t:0,i:435}, +D{l:9,t:0,i:653}, +D{l:9,t:0,i:740}, +D{l:10,t:0,i:385}, +D{l:11,t:0,i:222}, +D{l:11,t:0,i:324}, +D{l:11,t:0,i:829}, +D{l:140,t:0,i:611}, +D{l:7,t:0,i:1611}, +D{l:13,t:0,i:14}, +D{l:15,t:0,i:44}, +D{l:19,t:0,i:13}, +D{l:148,t:0,i:76}, +D{l:133,t:11,i:981}, +D{l:4,t:11,i:56}, +D{l:7,t:11,i:1791}, +D{l:8,t:11,i:607}, +D{l:8,t:11,i:651}, +D{l:11,t:11,i:465}, +D{l:11,t:11,i:835}, +D{l:12,t:11,i:337}, +D{l:141,t:11,i:480}, +D{l:6,t:0,i:1478}, +D{l:5,t:10,i:1011}, +D{l:136,t:10,i:701}, +D{l:139,t:0,i:596}, +D{l:5,t:0,i:206}, +D{l:134,t:0,i:398}, +D{l:4,t:10,i:54}, +D{l:5,t:10,i:666}, +D{l:7,t:10,i:1039}, +D{l:7,t:10,i:1130}, +D{l:9,t:10,i:195}, +D{l:138,t:10,i:302}, +D{l:7,t:0,i:50}, +D{l:9,t:11,i:158}, +D{l:138,t:11,i:411}, +D{l:135,t:11,i:1120}, +D{l:6,t:0,i:517}, +D{l:7,t:0,i:1159}, +D{l:10,t:0,i:621}, +D{l:11,t:0,i:192}, +D{l:134,t:10,i:1669}, +D{l:4,t:0,i:592}, +D{l:6,t:0,i:600}, +D{l:135,t:0,i:1653}, +D{l:10,t:0,i:223}, +D{l:139,t:0,i:645}, +D{l:136,t:11,i:139}, +D{l:7,t:0,i:64}, +D{l:136,t:0,i:245}, +D{l:142,t:0,i:278}, +D{l:6,t:11,i:622}, +D{l:135,t:11,i:1030}, +D{l:136,t:0,i:604}, +D{l:134,t:0,i:1502}, +D{l:138,t:0,i:265}, +D{l:141,t:11,i:168}, +D{l:7,t:0,i:1763}, +D{l:140,t:0,i:310}, +D{l:7,t:10,i:798}, +D{l:139,t:11,i:719}, +D{l:7,t:11,i:160}, +D{l:10,t:11,i:624}, +D{l:142,t:11,i:279}, +D{l:132,t:11,i:363}, +D{l:7,t:10,i:122}, +D{l:9,t:10,i:259}, +D{l:10,t:10,i:84}, +D{l:11,t:10,i:470}, +D{l:12,t:10,i:541}, +D{l:141,t:10,i:379}, +D{l:5,t:0,i:129}, +D{l:6,t:0,i:61}, +D{l:135,t:0,i:947}, +D{l:134,t:0,i:1356}, +D{l:135,t:11,i:1191}, +D{l:13,t:0,i:505}, +D{l:141,t:0,i:506}, +D{l:11,t:0,i:1000}, +D{l:5,t:10,i:82}, +D{l:5,t:10,i:131}, +D{l:7,t:10,i:1755}, +D{l:8,t:10,i:31}, +D{l:9,t:10,i:168}, +D{l:9,t:10,i:764}, +D{l:139,t:10,i:869}, +D{l:134,t:0,i:966}, +D{l:134,t:10,i:605}, +D{l:134,t:11,i:292}, +D{l:5,t:11,i:177}, +D{l:6,t:11,i:616}, +D{l:7,t:11,i:827}, +D{l:9,t:11,i:525}, +D{l:138,t:11,i:656}, +D{l:135,t:11,i:1486}, +D{l:138,t:11,i:31}, +D{l:5,t:10,i:278}, +D{l:137,t:10,i:68}, +D{l:4,t:10,i:163}, +D{l:5,t:10,i:201}, +D{l:5,t:10,i:307}, +D{l:5,t:10,i:310}, +D{l:6,t:10,i:335}, +D{l:7,t:10,i:284}, +D{l:136,t:10,i:165}, +D{l:6,t:0,i:839}, +D{l:135,t:10,i:1660}, +D{l:136,t:10,i:781}, +D{l:6,t:10,i:33}, +D{l:135,t:10,i:1244}, +D{l:133,t:0,i:637}, +D{l:4,t:11,i:161}, +D{l:133,t:11,i:631}, +D{l:137,t:0,i:590}, +D{l:7,t:10,i:1953}, +D{l:136,t:10,i:720}, +D{l:5,t:0,i:280}, +D{l:7,t:0,i:1226}, +D{l:138,t:10,i:203}, +D{l:134,t:0,i:1386}, +D{l:5,t:0,i:281}, +D{l:6,t:0,i:1026}, +D{l:6,t:10,i:326}, +D{l:7,t:10,i:677}, +D{l:137,t:10,i:425}, +D{l:7,t:11,i:1557}, +D{l:135,t:11,i:1684}, +D{l:135,t:0,i:1064}, +D{l:9,t:11,i:469}, +D{l:9,t:11,i:709}, +D{l:12,t:11,i:512}, +D{l:14,t:11,i:65}, +D{l:145,t:11,i:12}, +D{l:134,t:0,i:917}, +D{l:10,t:11,i:229}, +D{l:11,t:11,i:73}, +D{l:11,t:11,i:376}, +D{l:139,t:11,i:433}, +D{l:7,t:0,i:555}, +D{l:9,t:0,i:192}, +D{l:13,t:0,i:30}, +D{l:13,t:0,i:49}, +D{l:15,t:0,i:150}, +D{l:16,t:0,i:76}, +D{l:20,t:0,i:52}, +D{l:7,t:10,i:1316}, +D{l:7,t:10,i:1412}, +D{l:7,t:10,i:1839}, +D{l:9,t:10,i:589}, +D{l:11,t:10,i:241}, +D{l:11,t:10,i:676}, +D{l:11,t:10,i:811}, +D{l:11,t:10,i:891}, +D{l:12,t:10,i:140}, +D{l:12,t:10,i:346}, +D{l:12,t:10,i:479}, +D{l:13,t:10,i:381}, +D{l:14,t:10,i:188}, +D{l:146,t:10,i:30}, +D{l:149,t:0,i:15}, +D{l:6,t:0,i:1882}, +D{l:6,t:0,i:1883}, +D{l:6,t:0,i:1897}, +D{l:9,t:0,i:945}, +D{l:9,t:0,i:1014}, +D{l:9,t:0,i:1020}, +D{l:12,t:0,i:823}, +D{l:12,t:0,i:842}, +D{l:12,t:0,i:866}, +D{l:12,t:0,i:934}, +D{l:15,t:0,i:242}, +D{l:146,t:0,i:208}, +D{l:6,t:0,i:965}, +D{l:134,t:0,i:1499}, +D{l:7,t:0,i:33}, +D{l:7,t:0,i:120}, +D{l:8,t:0,i:489}, +D{l:9,t:0,i:319}, +D{l:10,t:0,i:820}, +D{l:11,t:0,i:1004}, +D{l:12,t:0,i:379}, +D{l:12,t:0,i:679}, +D{l:13,t:0,i:117}, +D{l:13,t:0,i:412}, +D{l:14,t:0,i:25}, +D{l:15,t:0,i:52}, +D{l:15,t:0,i:161}, +D{l:16,t:0,i:47}, +D{l:149,t:0,i:2}, +D{l:6,t:11,i:558}, +D{l:7,t:11,i:651}, +D{l:8,t:11,i:421}, +D{l:9,t:11,i:0}, +D{l:138,t:11,i:34}, +D{l:4,t:0,i:937}, +D{l:5,t:0,i:801}, +D{l:7,t:0,i:473}, +D{l:5,t:10,i:358}, +D{l:7,t:10,i:1184}, +D{l:10,t:10,i:662}, +D{l:13,t:10,i:212}, +D{l:13,t:10,i:304}, +D{l:13,t:10,i:333}, +D{l:145,t:10,i:98}, +D{l:132,t:0,i:877}, +D{l:6,t:0,i:693}, +D{l:134,t:0,i:824}, +D{l:132,t:0,i:365}, +D{l:7,t:11,i:1832}, +D{l:138,t:11,i:374}, +D{l:5,t:0,i:7}, +D{l:139,t:0,i:774}, +D{l:4,t:0,i:734}, +D{l:5,t:0,i:662}, +D{l:134,t:0,i:430}, +D{l:4,t:0,i:746}, +D{l:135,t:0,i:1090}, +D{l:5,t:0,i:360}, +D{l:8,t:0,i:237}, +D{l:10,t:0,i:231}, +D{l:147,t:0,i:124}, +D{l:138,t:11,i:348}, +D{l:6,t:11,i:6}, +D{l:7,t:11,i:81}, +D{l:7,t:11,i:771}, +D{l:7,t:11,i:1731}, +D{l:9,t:11,i:405}, +D{l:138,t:11,i:421}, +D{l:6,t:0,i:740}, +D{l:137,t:0,i:822}, +D{l:133,t:10,i:946}, +D{l:7,t:0,i:1485}, +D{l:136,t:0,i:929}, +D{l:7,t:10,i:411}, +D{l:8,t:10,i:631}, +D{l:9,t:10,i:323}, +D{l:10,t:10,i:355}, +D{l:11,t:10,i:491}, +D{l:12,t:10,i:143}, +D{l:12,t:10,i:402}, +D{l:13,t:10,i:73}, +D{l:14,t:10,i:408}, +D{l:15,t:10,i:107}, +D{l:146,t:10,i:71}, +D{l:135,t:10,i:590}, +D{l:5,t:11,i:881}, +D{l:133,t:11,i:885}, +D{l:150,t:11,i:25}, +D{l:4,t:0,i:852}, +D{l:5,t:11,i:142}, +D{l:134,t:11,i:546}, +D{l:7,t:10,i:1467}, +D{l:8,t:10,i:328}, +D{l:10,t:10,i:544}, +D{l:11,t:10,i:955}, +D{l:13,t:10,i:320}, +D{l:145,t:10,i:83}, +D{l:9,t:0,i:17}, +D{l:10,t:0,i:291}, +D{l:11,t:10,i:511}, +D{l:13,t:10,i:394}, +D{l:14,t:10,i:298}, +D{l:14,t:10,i:318}, +D{l:146,t:10,i:103}, +D{l:5,t:11,i:466}, +D{l:11,t:11,i:571}, +D{l:12,t:11,i:198}, +D{l:13,t:11,i:283}, +D{l:14,t:11,i:186}, +D{l:15,t:11,i:21}, +D{l:143,t:11,i:103}, +D{l:134,t:0,i:1001}, +D{l:4,t:11,i:185}, +D{l:5,t:11,i:257}, +D{l:5,t:11,i:839}, +D{l:5,t:11,i:936}, +D{l:7,t:11,i:171}, +D{l:9,t:11,i:399}, +D{l:10,t:11,i:258}, +D{l:10,t:11,i:395}, +D{l:10,t:11,i:734}, +D{l:11,t:11,i:1014}, +D{l:12,t:11,i:23}, +D{l:13,t:11,i:350}, +D{l:14,t:11,i:150}, +D{l:147,t:11,i:6}, +D{l:143,t:0,i:35}, +D{l:132,t:0,i:831}, +D{l:5,t:10,i:835}, +D{l:134,t:10,i:483}, +D{l:4,t:0,i:277}, +D{l:5,t:0,i:608}, +D{l:6,t:0,i:493}, +D{l:7,t:0,i:457}, +D{l:12,t:0,i:384}, +D{l:7,t:11,i:404}, +D{l:7,t:11,i:1377}, +D{l:7,t:11,i:1430}, +D{l:7,t:11,i:2017}, +D{l:8,t:11,i:149}, +D{l:8,t:11,i:239}, +D{l:8,t:11,i:512}, +D{l:8,t:11,i:793}, +D{l:8,t:11,i:818}, +D{l:9,t:11,i:474}, +D{l:9,t:11,i:595}, +D{l:10,t:11,i:122}, +D{l:10,t:11,i:565}, +D{l:10,t:11,i:649}, +D{l:10,t:11,i:783}, +D{l:11,t:11,i:239}, +D{l:11,t:11,i:295}, +D{l:11,t:11,i:447}, +D{l:11,t:11,i:528}, +D{l:11,t:11,i:639}, +D{l:11,t:11,i:800}, +D{l:11,t:11,i:936}, +D{l:12,t:11,i:25}, +D{l:12,t:11,i:73}, +D{l:12,t:11,i:77}, +D{l:12,t:11,i:157}, +D{l:12,t:11,i:316}, +D{l:12,t:11,i:390}, +D{l:12,t:11,i:391}, +D{l:12,t:11,i:394}, +D{l:12,t:11,i:395}, +D{l:12,t:11,i:478}, +D{l:12,t:11,i:503}, +D{l:12,t:11,i:592}, +D{l:12,t:11,i:680}, +D{l:13,t:11,i:50}, +D{l:13,t:11,i:53}, +D{l:13,t:11,i:132}, +D{l:13,t:11,i:198}, +D{l:13,t:11,i:275}, +D{l:13,t:11,i:322}, +D{l:13,t:11,i:415}, +D{l:14,t:11,i:71}, +D{l:14,t:11,i:257}, +D{l:14,t:11,i:395}, +D{l:15,t:11,i:71}, +D{l:15,t:11,i:136}, +D{l:17,t:11,i:123}, +D{l:18,t:11,i:93}, +D{l:147,t:11,i:58}, +D{l:134,t:0,i:1351}, +D{l:7,t:0,i:27}, +D{l:135,t:0,i:316}, +D{l:136,t:11,i:712}, +D{l:136,t:0,i:984}, +D{l:133,t:0,i:552}, +D{l:137,t:0,i:264}, +D{l:132,t:0,i:401}, +D{l:6,t:0,i:710}, +D{l:6,t:0,i:1111}, +D{l:134,t:0,i:1343}, +D{l:134,t:0,i:1211}, +D{l:9,t:0,i:543}, +D{l:10,t:0,i:524}, +D{l:11,t:0,i:108}, +D{l:11,t:0,i:653}, +D{l:12,t:0,i:524}, +D{l:13,t:0,i:123}, +D{l:14,t:0,i:252}, +D{l:16,t:0,i:18}, +D{l:19,t:0,i:38}, +D{l:20,t:0,i:26}, +D{l:20,t:0,i:65}, +D{l:21,t:0,i:3}, +D{l:151,t:0,i:11}, +D{l:4,t:0,i:205}, +D{l:5,t:0,i:623}, +D{l:7,t:0,i:104}, +D{l:8,t:0,i:519}, +D{l:137,t:0,i:716}, +D{l:132,t:10,i:677}, +D{l:4,t:11,i:377}, +D{l:152,t:11,i:13}, +D{l:135,t:11,i:1673}, +D{l:7,t:0,i:579}, +D{l:9,t:0,i:41}, +D{l:9,t:0,i:244}, +D{l:9,t:0,i:669}, +D{l:10,t:0,i:5}, +D{l:11,t:0,i:861}, +D{l:11,t:0,i:951}, +D{l:139,t:0,i:980}, +D{l:132,t:0,i:717}, +D{l:136,t:0,i:1011}, +D{l:132,t:0,i:805}, +D{l:4,t:11,i:180}, +D{l:135,t:11,i:1906}, +D{l:132,t:10,i:777}, +D{l:132,t:10,i:331}, +D{l:132,t:0,i:489}, +D{l:6,t:0,i:1024}, +D{l:4,t:11,i:491}, +D{l:133,t:10,i:747}, +D{l:135,t:11,i:1182}, +D{l:4,t:11,i:171}, +D{l:138,t:11,i:234}, +D{l:4,t:11,i:586}, +D{l:7,t:11,i:1186}, +D{l:138,t:11,i:631}, +D{l:135,t:0,i:892}, +D{l:135,t:11,i:336}, +D{l:9,t:11,i:931}, +D{l:10,t:11,i:334}, +D{l:148,t:11,i:71}, +D{l:137,t:0,i:473}, +D{l:6,t:0,i:864}, +D{l:12,t:0,i:659}, +D{l:139,t:11,i:926}, +D{l:7,t:0,i:819}, +D{l:9,t:0,i:26}, +D{l:9,t:0,i:392}, +D{l:10,t:0,i:152}, +D{l:10,t:0,i:226}, +D{l:11,t:0,i:19}, +D{l:12,t:0,i:276}, +D{l:12,t:0,i:426}, +D{l:12,t:0,i:589}, +D{l:13,t:0,i:460}, +D{l:15,t:0,i:97}, +D{l:19,t:0,i:48}, +D{l:148,t:0,i:104}, +D{l:135,t:0,i:51}, +D{l:133,t:10,i:326}, +D{l:4,t:10,i:691}, +D{l:146,t:10,i:16}, +D{l:9,t:0,i:130}, +D{l:11,t:0,i:765}, +D{l:10,t:10,i:680}, +D{l:10,t:10,i:793}, +D{l:141,t:10,i:357}, +D{l:133,t:11,i:765}, +D{l:8,t:0,i:229}, +D{l:6,t:10,i:32}, +D{l:7,t:10,i:385}, +D{l:7,t:10,i:757}, +D{l:7,t:10,i:1916}, +D{l:8,t:10,i:94}, +D{l:8,t:10,i:711}, +D{l:9,t:10,i:541}, +D{l:10,t:10,i:162}, +D{l:10,t:10,i:795}, +D{l:11,t:10,i:989}, +D{l:11,t:10,i:1010}, +D{l:12,t:10,i:14}, +D{l:142,t:10,i:308}, +D{l:7,t:11,i:474}, +D{l:137,t:11,i:578}, +D{l:132,t:0,i:674}, +D{l:132,t:0,i:770}, +D{l:5,t:0,i:79}, +D{l:7,t:0,i:1027}, +D{l:7,t:0,i:1477}, +D{l:139,t:0,i:52}, +D{l:133,t:11,i:424}, +D{l:134,t:0,i:1666}, +D{l:6,t:0,i:409}, +D{l:6,t:10,i:349}, +D{l:6,t:10,i:1682}, +D{l:7,t:10,i:1252}, +D{l:8,t:10,i:112}, +D{l:8,t:11,i:714}, +D{l:9,t:10,i:435}, +D{l:9,t:10,i:668}, +D{l:10,t:10,i:290}, +D{l:10,t:10,i:319}, +D{l:10,t:10,i:815}, +D{l:11,t:10,i:180}, +D{l:11,t:10,i:837}, +D{l:12,t:10,i:240}, +D{l:13,t:10,i:152}, +D{l:13,t:10,i:219}, +D{l:142,t:10,i:158}, +D{l:5,t:0,i:789}, +D{l:134,t:0,i:195}, +D{l:4,t:0,i:251}, +D{l:4,t:0,i:688}, +D{l:7,t:0,i:513}, +D{l:135,t:0,i:1284}, +D{l:132,t:10,i:581}, +D{l:9,t:11,i:420}, +D{l:10,t:11,i:269}, +D{l:10,t:11,i:285}, +D{l:10,t:11,i:576}, +D{l:11,t:11,i:397}, +D{l:13,t:11,i:175}, +D{l:145,t:11,i:90}, +D{l:6,t:10,i:126}, +D{l:7,t:10,i:573}, +D{l:8,t:10,i:397}, +D{l:142,t:10,i:44}, +D{l:132,t:11,i:429}, +D{l:133,t:0,i:889}, +D{l:4,t:0,i:160}, +D{l:5,t:0,i:330}, +D{l:7,t:0,i:1434}, +D{l:136,t:0,i:174}, +D{l:7,t:11,i:18}, +D{l:7,t:11,i:699}, +D{l:7,t:11,i:1966}, +D{l:8,t:11,i:752}, +D{l:9,t:11,i:273}, +D{l:9,t:11,i:412}, +D{l:9,t:11,i:703}, +D{l:10,t:11,i:71}, +D{l:10,t:11,i:427}, +D{l:10,t:11,i:508}, +D{l:146,t:11,i:97}, +D{l:6,t:0,i:872}, +D{l:134,t:0,i:899}, +D{l:133,t:10,i:926}, +D{l:134,t:0,i:1126}, +D{l:134,t:0,i:918}, +D{l:4,t:11,i:53}, +D{l:5,t:11,i:186}, +D{l:135,t:11,i:752}, +D{l:7,t:0,i:268}, +D{l:136,t:0,i:569}, +D{l:134,t:0,i:1224}, +D{l:6,t:0,i:1361}, +D{l:7,t:10,i:1232}, +D{l:137,t:10,i:531}, +D{l:8,t:11,i:575}, +D{l:10,t:11,i:289}, +D{l:139,t:11,i:319}, +D{l:133,t:10,i:670}, +D{l:132,t:11,i:675}, +D{l:133,t:0,i:374}, +D{l:135,t:10,i:1957}, +D{l:133,t:0,i:731}, +D{l:11,t:0,i:190}, +D{l:15,t:0,i:49}, +D{l:11,t:11,i:190}, +D{l:143,t:11,i:49}, +D{l:4,t:0,i:626}, +D{l:5,t:0,i:506}, +D{l:5,t:0,i:642}, +D{l:6,t:0,i:425}, +D{l:10,t:0,i:202}, +D{l:139,t:0,i:141}, +D{l:137,t:0,i:444}, +D{l:7,t:10,i:242}, +D{l:135,t:10,i:1942}, +D{l:6,t:11,i:209}, +D{l:8,t:11,i:468}, +D{l:9,t:11,i:210}, +D{l:11,t:11,i:36}, +D{l:12,t:11,i:28}, +D{l:12,t:11,i:630}, +D{l:13,t:11,i:21}, +D{l:13,t:11,i:349}, +D{l:14,t:11,i:7}, +D{l:145,t:11,i:13}, +D{l:4,t:11,i:342}, +D{l:135,t:11,i:1179}, +D{l:5,t:10,i:834}, +D{l:7,t:10,i:1202}, +D{l:8,t:10,i:14}, +D{l:9,t:10,i:481}, +D{l:137,t:10,i:880}, +D{l:4,t:11,i:928}, +D{l:133,t:11,i:910}, +D{l:4,t:11,i:318}, +D{l:4,t:11,i:496}, +D{l:7,t:11,i:856}, +D{l:139,t:11,i:654}, +D{l:136,t:0,i:835}, +D{l:7,t:0,i:1526}, +D{l:138,t:10,i:465}, +D{l:151,t:0,i:17}, +D{l:135,t:0,i:477}, +D{l:4,t:10,i:357}, +D{l:6,t:10,i:172}, +D{l:7,t:10,i:143}, +D{l:137,t:10,i:413}, +D{l:6,t:0,i:1374}, +D{l:138,t:0,i:994}, +D{l:18,t:0,i:76}, +D{l:132,t:10,i:590}, +D{l:7,t:0,i:287}, +D{l:8,t:0,i:355}, +D{l:9,t:0,i:293}, +D{l:137,t:0,i:743}, +D{l:134,t:0,i:1389}, +D{l:7,t:11,i:915}, +D{l:8,t:11,i:247}, +D{l:147,t:11,i:0}, +D{l:4,t:11,i:202}, +D{l:5,t:11,i:382}, +D{l:6,t:11,i:454}, +D{l:7,t:11,i:936}, +D{l:7,t:11,i:1803}, +D{l:8,t:11,i:758}, +D{l:9,t:11,i:375}, +D{l:9,t:11,i:895}, +D{l:10,t:11,i:743}, +D{l:10,t:11,i:792}, +D{l:11,t:11,i:978}, +D{l:11,t:11,i:1012}, +D{l:142,t:11,i:109}, +D{l:5,t:0,i:384}, +D{l:8,t:0,i:455}, +D{l:140,t:0,i:48}, +D{l:132,t:11,i:390}, +D{l:5,t:10,i:169}, +D{l:7,t:10,i:333}, +D{l:136,t:10,i:45}, +D{l:5,t:0,i:264}, +D{l:134,t:0,i:184}, +D{l:138,t:11,i:791}, +D{l:133,t:11,i:717}, +D{l:132,t:10,i:198}, +D{l:6,t:11,i:445}, +D{l:7,t:11,i:332}, +D{l:137,t:11,i:909}, +D{l:136,t:0,i:1001}, +D{l:4,t:10,i:24}, +D{l:5,t:10,i:140}, +D{l:5,t:10,i:185}, +D{l:7,t:10,i:1500}, +D{l:11,t:10,i:565}, +D{l:139,t:10,i:838}, +D{l:134,t:11,i:578}, +D{l:5,t:0,i:633}, +D{l:6,t:0,i:28}, +D{l:135,t:0,i:1323}, +D{l:132,t:0,i:851}, +D{l:136,t:11,i:267}, +D{l:7,t:0,i:359}, +D{l:8,t:0,i:243}, +D{l:140,t:0,i:175}, +D{l:4,t:10,i:334}, +D{l:133,t:10,i:593}, +D{l:141,t:11,i:87}, +D{l:136,t:11,i:766}, +D{l:10,t:0,i:287}, +D{l:12,t:0,i:138}, +D{l:10,t:11,i:287}, +D{l:140,t:11,i:138}, +D{l:4,t:0,i:105}, +D{l:132,t:0,i:740}, +D{l:140,t:10,i:116}, +D{l:134,t:0,i:857}, +D{l:135,t:11,i:1841}, +D{l:6,t:0,i:1402}, +D{l:137,t:0,i:819}, +D{l:132,t:11,i:584}, +D{l:132,t:10,i:709}, +D{l:133,t:10,i:897}, +D{l:5,t:0,i:224}, +D{l:13,t:0,i:174}, +D{l:146,t:0,i:52}, +D{l:135,t:10,i:1840}, +D{l:4,t:10,i:608}, +D{l:133,t:10,i:497}, +D{l:139,t:11,i:60}, +D{l:4,t:0,i:758}, +D{l:135,t:0,i:1649}, +D{l:4,t:11,i:226}, +D{l:4,t:11,i:326}, +D{l:135,t:11,i:1770}, +D{l:5,t:11,i:426}, +D{l:8,t:11,i:30}, +D{l:9,t:11,i:2}, +D{l:11,t:11,i:549}, +D{l:147,t:11,i:122}, +D{l:135,t:10,i:2039}, +D{l:6,t:10,i:540}, +D{l:136,t:10,i:136}, +D{l:4,t:0,i:573}, +D{l:8,t:0,i:655}, +D{l:4,t:10,i:897}, +D{l:133,t:10,i:786}, +D{l:7,t:0,i:351}, +D{l:139,t:0,i:128}, +D{l:133,t:10,i:999}, +D{l:4,t:10,i:299}, +D{l:135,t:10,i:1004}, +D{l:133,t:0,i:918}, +D{l:132,t:11,i:345}, +D{l:4,t:11,i:385}, +D{l:7,t:11,i:265}, +D{l:135,t:11,i:587}, +D{l:133,t:10,i:456}, +D{l:136,t:10,i:180}, +D{l:6,t:0,i:687}, +D{l:134,t:0,i:1537}, +D{l:4,t:11,i:347}, +D{l:5,t:11,i:423}, +D{l:5,t:11,i:996}, +D{l:135,t:11,i:1329}, +D{l:132,t:10,i:755}, +D{l:7,t:11,i:1259}, +D{l:9,t:11,i:125}, +D{l:11,t:11,i:65}, +D{l:140,t:11,i:285}, +D{l:5,t:11,i:136}, +D{l:6,t:11,i:136}, +D{l:136,t:11,i:644}, +D{l:134,t:0,i:1525}, +D{l:4,t:0,i:1009}, +D{l:135,t:0,i:1139}, +D{l:139,t:10,i:338}, +D{l:132,t:0,i:340}, +D{l:135,t:10,i:1464}, +D{l:8,t:0,i:847}, +D{l:10,t:0,i:861}, +D{l:10,t:0,i:876}, +D{l:10,t:0,i:889}, +D{l:10,t:0,i:922}, +D{l:10,t:0,i:929}, +D{l:10,t:0,i:933}, +D{l:12,t:0,i:784}, +D{l:140,t:0,i:791}, +D{l:139,t:0,i:176}, +D{l:9,t:11,i:134}, +D{l:10,t:11,i:2}, +D{l:10,t:11,i:27}, +D{l:10,t:11,i:333}, +D{l:11,t:11,i:722}, +D{l:143,t:11,i:1}, +D{l:4,t:11,i:433}, +D{l:133,t:11,i:719}, +D{l:5,t:0,i:985}, +D{l:7,t:0,i:509}, +D{l:7,t:0,i:529}, +D{l:145,t:0,i:96}, +D{l:132,t:0,i:615}, +D{l:4,t:10,i:890}, +D{l:5,t:10,i:805}, +D{l:5,t:10,i:819}, +D{l:5,t:10,i:961}, +D{l:6,t:10,i:396}, +D{l:6,t:10,i:1631}, +D{l:6,t:10,i:1678}, +D{l:7,t:10,i:1967}, +D{l:7,t:10,i:2041}, +D{l:9,t:10,i:630}, +D{l:11,t:10,i:8}, +D{l:11,t:10,i:1019}, +D{l:12,t:10,i:176}, +D{l:13,t:10,i:225}, +D{l:14,t:10,i:292}, +D{l:149,t:10,i:24}, +D{l:135,t:0,i:1919}, +D{l:134,t:0,i:1131}, +D{l:144,t:11,i:21}, +D{l:144,t:11,i:51}, +D{l:135,t:10,i:1815}, +D{l:4,t:0,i:247}, +D{l:7,t:10,i:1505}, +D{l:10,t:10,i:190}, +D{l:10,t:10,i:634}, +D{l:11,t:10,i:792}, +D{l:12,t:10,i:358}, +D{l:140,t:10,i:447}, +D{l:5,t:10,i:0}, +D{l:6,t:10,i:536}, +D{l:7,t:10,i:604}, +D{l:13,t:10,i:445}, +D{l:145,t:10,i:126}, +D{l:4,t:0,i:184}, +D{l:5,t:0,i:390}, +D{l:6,t:0,i:337}, +D{l:7,t:0,i:23}, +D{l:7,t:0,i:494}, +D{l:7,t:0,i:618}, +D{l:7,t:0,i:1456}, +D{l:8,t:0,i:27}, +D{l:8,t:0,i:599}, +D{l:10,t:0,i:153}, +D{l:139,t:0,i:710}, +D{l:6,t:10,i:232}, +D{l:6,t:10,i:412}, +D{l:7,t:10,i:1074}, +D{l:8,t:10,i:9}, +D{l:8,t:10,i:157}, +D{l:8,t:10,i:786}, +D{l:9,t:10,i:196}, +D{l:9,t:10,i:352}, +D{l:9,t:10,i:457}, +D{l:10,t:10,i:337}, +D{l:11,t:10,i:232}, +D{l:11,t:10,i:877}, +D{l:12,t:10,i:480}, +D{l:140,t:10,i:546}, +D{l:13,t:0,i:38}, +D{l:135,t:10,i:958}, +D{l:4,t:10,i:382}, +D{l:136,t:10,i:579}, +D{l:4,t:10,i:212}, +D{l:135,t:10,i:1206}, +D{l:4,t:11,i:555}, +D{l:8,t:11,i:536}, +D{l:138,t:11,i:288}, +D{l:11,t:11,i:139}, +D{l:139,t:11,i:171}, +D{l:9,t:11,i:370}, +D{l:138,t:11,i:90}, +D{l:132,t:0,i:1015}, +D{l:134,t:0,i:1088}, +D{l:5,t:10,i:655}, +D{l:135,t:11,i:977}, +D{l:134,t:0,i:1585}, +D{l:17,t:10,i:67}, +D{l:147,t:10,i:74}, +D{l:10,t:0,i:227}, +D{l:11,t:0,i:497}, +D{l:11,t:0,i:709}, +D{l:140,t:0,i:415}, +D{l:6,t:0,i:360}, +D{l:7,t:0,i:1664}, +D{l:136,t:0,i:478}, +D{l:7,t:0,i:95}, +D{l:6,t:10,i:231}, +D{l:136,t:10,i:423}, +D{l:140,t:11,i:65}, +D{l:4,t:11,i:257}, +D{l:135,t:11,i:2031}, +D{l:135,t:11,i:1768}, +D{l:133,t:10,i:300}, +D{l:139,t:11,i:211}, +D{l:136,t:0,i:699}, +D{l:6,t:10,i:237}, +D{l:7,t:10,i:611}, +D{l:8,t:10,i:100}, +D{l:9,t:10,i:416}, +D{l:11,t:10,i:335}, +D{l:12,t:10,i:173}, +D{l:146,t:10,i:101}, +D{l:14,t:0,i:26}, +D{l:146,t:0,i:150}, +D{l:6,t:0,i:581}, +D{l:135,t:0,i:1119}, +D{l:135,t:10,i:1208}, +D{l:132,t:0,i:739}, +D{l:6,t:11,i:83}, +D{l:6,t:11,i:1733}, +D{l:135,t:11,i:1389}, +D{l:137,t:0,i:869}, +D{l:4,t:0,i:67}, +D{l:5,t:0,i:422}, +D{l:7,t:0,i:1037}, +D{l:7,t:0,i:1289}, +D{l:7,t:0,i:1555}, +D{l:9,t:0,i:741}, +D{l:145,t:0,i:108}, +D{l:133,t:10,i:199}, +D{l:12,t:10,i:427}, +D{l:146,t:10,i:38}, +D{l:136,t:0,i:464}, +D{l:142,t:0,i:42}, +D{l:10,t:0,i:96}, +D{l:8,t:11,i:501}, +D{l:137,t:11,i:696}, +D{l:134,t:11,i:592}, +D{l:4,t:0,i:512}, +D{l:4,t:0,i:966}, +D{l:5,t:0,i:342}, +D{l:6,t:0,i:1855}, +D{l:8,t:0,i:869}, +D{l:8,t:0,i:875}, +D{l:8,t:0,i:901}, +D{l:144,t:0,i:26}, +D{l:8,t:0,i:203}, +D{l:11,t:0,i:823}, +D{l:11,t:0,i:846}, +D{l:12,t:0,i:482}, +D{l:13,t:0,i:277}, +D{l:13,t:0,i:302}, +D{l:13,t:0,i:464}, +D{l:14,t:0,i:205}, +D{l:142,t:0,i:221}, +D{l:4,t:0,i:449}, +D{l:133,t:0,i:718}, +D{l:7,t:11,i:1718}, +D{l:9,t:11,i:95}, +D{l:9,t:11,i:274}, +D{l:10,t:11,i:279}, +D{l:10,t:11,i:317}, +D{l:10,t:11,i:420}, +D{l:11,t:11,i:303}, +D{l:11,t:11,i:808}, +D{l:12,t:11,i:134}, +D{l:12,t:11,i:367}, +D{l:13,t:11,i:149}, +D{l:13,t:11,i:347}, +D{l:14,t:11,i:349}, +D{l:14,t:11,i:406}, +D{l:18,t:11,i:22}, +D{l:18,t:11,i:89}, +D{l:18,t:11,i:122}, +D{l:147,t:11,i:47}, +D{l:133,t:11,i:26}, +D{l:4,t:0,i:355}, +D{l:6,t:0,i:311}, +D{l:9,t:0,i:256}, +D{l:138,t:0,i:404}, +D{l:132,t:11,i:550}, +D{l:10,t:0,i:758}, +D{l:6,t:10,i:312}, +D{l:6,t:10,i:1715}, +D{l:10,t:10,i:584}, +D{l:11,t:10,i:546}, +D{l:11,t:10,i:692}, +D{l:12,t:10,i:259}, +D{l:12,t:10,i:295}, +D{l:13,t:10,i:46}, +D{l:141,t:10,i:154}, +D{l:136,t:11,i:822}, +D{l:5,t:0,i:827}, +D{l:4,t:11,i:902}, +D{l:5,t:11,i:809}, +D{l:6,t:11,i:122}, +D{l:135,t:11,i:896}, +D{l:5,t:0,i:64}, +D{l:140,t:0,i:581}, +D{l:4,t:0,i:442}, +D{l:6,t:0,i:739}, +D{l:7,t:0,i:1047}, +D{l:7,t:0,i:1352}, +D{l:7,t:0,i:1643}, +D{l:7,t:11,i:1911}, +D{l:9,t:11,i:449}, +D{l:10,t:11,i:192}, +D{l:138,t:11,i:740}, +D{l:135,t:11,i:262}, +D{l:132,t:10,i:588}, +D{l:133,t:11,i:620}, +D{l:5,t:0,i:977}, +D{l:6,t:0,i:288}, +D{l:7,t:0,i:528}, +D{l:4,t:11,i:34}, +D{l:5,t:11,i:574}, +D{l:7,t:11,i:279}, +D{l:7,t:11,i:1624}, +D{l:136,t:11,i:601}, +D{l:6,t:0,i:1375}, +D{l:4,t:10,i:231}, +D{l:5,t:10,i:61}, +D{l:6,t:10,i:104}, +D{l:7,t:10,i:729}, +D{l:7,t:10,i:964}, +D{l:7,t:10,i:1658}, +D{l:140,t:10,i:414}, +D{l:6,t:10,i:263}, +D{l:138,t:10,i:757}, +D{l:132,t:10,i:320}, +D{l:4,t:0,i:254}, +D{l:7,t:0,i:1309}, +D{l:5,t:11,i:332}, +D{l:135,t:11,i:1309}, +D{l:6,t:11,i:261}, +D{l:8,t:11,i:182}, +D{l:139,t:11,i:943}, +D{l:132,t:10,i:225}, +D{l:6,t:0,i:12}, +D{l:135,t:0,i:1219}, +D{l:4,t:0,i:275}, +D{l:12,t:0,i:376}, +D{l:6,t:11,i:1721}, +D{l:141,t:11,i:490}, +D{l:4,t:11,i:933}, +D{l:133,t:11,i:880}, +D{l:6,t:0,i:951}, +D{l:6,t:0,i:1109}, +D{l:6,t:0,i:1181}, +D{l:7,t:0,i:154}, +D{l:4,t:10,i:405}, +D{l:7,t:10,i:817}, +D{l:14,t:10,i:58}, +D{l:17,t:10,i:37}, +D{l:146,t:10,i:124}, +D{l:6,t:0,i:1520}, +D{l:133,t:10,i:974}, +D{l:134,t:0,i:1753}, +D{l:6,t:0,i:369}, +D{l:6,t:0,i:502}, +D{l:7,t:0,i:1036}, +D{l:8,t:0,i:348}, +D{l:9,t:0,i:452}, +D{l:10,t:0,i:26}, +D{l:11,t:0,i:224}, +D{l:11,t:0,i:387}, +D{l:11,t:0,i:772}, +D{l:12,t:0,i:95}, +D{l:12,t:0,i:629}, +D{l:13,t:0,i:195}, +D{l:13,t:0,i:207}, +D{l:13,t:0,i:241}, +D{l:14,t:0,i:260}, +D{l:14,t:0,i:270}, +D{l:143,t:0,i:140}, +D{l:132,t:0,i:269}, +D{l:5,t:0,i:480}, +D{l:7,t:0,i:532}, +D{l:7,t:0,i:1197}, +D{l:7,t:0,i:1358}, +D{l:8,t:0,i:291}, +D{l:11,t:0,i:349}, +D{l:142,t:0,i:396}, +D{l:5,t:10,i:235}, +D{l:7,t:10,i:1239}, +D{l:11,t:10,i:131}, +D{l:140,t:10,i:370}, +D{l:7,t:10,i:956}, +D{l:7,t:10,i:1157}, +D{l:7,t:10,i:1506}, +D{l:7,t:10,i:1606}, +D{l:7,t:10,i:1615}, +D{l:7,t:10,i:1619}, +D{l:7,t:10,i:1736}, +D{l:7,t:10,i:1775}, +D{l:8,t:10,i:590}, +D{l:9,t:10,i:324}, +D{l:9,t:10,i:736}, +D{l:9,t:10,i:774}, +D{l:9,t:10,i:776}, +D{l:9,t:10,i:784}, +D{l:10,t:10,i:567}, +D{l:10,t:10,i:708}, +D{l:11,t:10,i:518}, +D{l:11,t:10,i:613}, +D{l:11,t:10,i:695}, +D{l:11,t:10,i:716}, +D{l:11,t:10,i:739}, +D{l:11,t:10,i:770}, +D{l:11,t:10,i:771}, +D{l:11,t:10,i:848}, +D{l:11,t:10,i:857}, +D{l:11,t:10,i:931}, +D{l:11,t:10,i:947}, +D{l:12,t:10,i:326}, +D{l:12,t:10,i:387}, +D{l:12,t:10,i:484}, +D{l:12,t:10,i:528}, +D{l:12,t:10,i:552}, +D{l:12,t:10,i:613}, +D{l:13,t:10,i:189}, +D{l:13,t:10,i:256}, +D{l:13,t:10,i:340}, +D{l:13,t:10,i:432}, +D{l:13,t:10,i:436}, +D{l:13,t:10,i:440}, +D{l:13,t:10,i:454}, +D{l:14,t:10,i:174}, +D{l:14,t:10,i:220}, +D{l:14,t:10,i:284}, +D{l:14,t:10,i:390}, +D{l:145,t:10,i:121}, +D{l:8,t:11,i:598}, +D{l:9,t:11,i:664}, +D{l:138,t:11,i:441}, +D{l:9,t:10,i:137}, +D{l:138,t:10,i:221}, +D{l:133,t:11,i:812}, +D{l:148,t:0,i:15}, +D{l:134,t:0,i:1341}, +D{l:6,t:0,i:1017}, +D{l:4,t:11,i:137}, +D{l:7,t:11,i:1178}, +D{l:135,t:11,i:1520}, +D{l:7,t:10,i:390}, +D{l:138,t:10,i:140}, +D{l:7,t:11,i:1260}, +D{l:135,t:11,i:1790}, +D{l:137,t:11,i:191}, +D{l:135,t:10,i:1144}, +D{l:6,t:0,i:1810}, +D{l:7,t:0,i:657}, +D{l:8,t:0,i:886}, +D{l:10,t:0,i:857}, +D{l:14,t:0,i:440}, +D{l:144,t:0,i:96}, +D{l:8,t:0,i:533}, +D{l:6,t:11,i:1661}, +D{l:7,t:11,i:1975}, +D{l:7,t:11,i:2009}, +D{l:135,t:11,i:2011}, +D{l:6,t:0,i:1453}, +D{l:134,t:10,i:464}, +D{l:132,t:11,i:715}, +D{l:5,t:10,i:407}, +D{l:11,t:10,i:204}, +D{l:11,t:10,i:243}, +D{l:11,t:10,i:489}, +D{l:12,t:10,i:293}, +D{l:19,t:10,i:37}, +D{l:20,t:10,i:73}, +D{l:150,t:10,i:38}, +D{l:133,t:11,i:703}, +D{l:4,t:0,i:211}, +D{l:7,t:0,i:1483}, +D{l:5,t:10,i:325}, +D{l:8,t:10,i:5}, +D{l:8,t:10,i:227}, +D{l:9,t:10,i:105}, +D{l:10,t:10,i:585}, +D{l:140,t:10,i:614}, +D{l:4,t:0,i:332}, +D{l:5,t:0,i:335}, +D{l:6,t:0,i:238}, +D{l:7,t:0,i:269}, +D{l:7,t:0,i:811}, +D{l:7,t:0,i:1797}, +D{l:8,t:0,i:836}, +D{l:9,t:0,i:507}, +D{l:141,t:0,i:242}, +D{l:5,t:11,i:89}, +D{l:7,t:11,i:1915}, +D{l:9,t:11,i:185}, +D{l:9,t:11,i:235}, +D{l:9,t:11,i:496}, +D{l:10,t:11,i:64}, +D{l:10,t:11,i:270}, +D{l:10,t:11,i:403}, +D{l:10,t:11,i:469}, +D{l:10,t:11,i:529}, +D{l:10,t:11,i:590}, +D{l:11,t:11,i:140}, +D{l:11,t:11,i:860}, +D{l:13,t:11,i:1}, +D{l:13,t:11,i:422}, +D{l:14,t:11,i:341}, +D{l:14,t:11,i:364}, +D{l:17,t:11,i:93}, +D{l:18,t:11,i:113}, +D{l:19,t:11,i:97}, +D{l:147,t:11,i:113}, +D{l:133,t:11,i:695}, +D{l:16,t:0,i:19}, +D{l:5,t:11,i:6}, +D{l:6,t:11,i:183}, +D{l:6,t:10,i:621}, +D{l:7,t:11,i:680}, +D{l:7,t:11,i:978}, +D{l:7,t:11,i:1013}, +D{l:7,t:11,i:1055}, +D{l:12,t:11,i:230}, +D{l:13,t:11,i:172}, +D{l:13,t:10,i:504}, +D{l:146,t:11,i:29}, +D{l:136,t:0,i:156}, +D{l:133,t:0,i:1009}, +D{l:6,t:11,i:29}, +D{l:139,t:11,i:63}, +D{l:134,t:0,i:820}, +D{l:134,t:10,i:218}, +D{l:7,t:10,i:454}, +D{l:7,t:10,i:782}, +D{l:8,t:10,i:768}, +D{l:140,t:10,i:686}, +D{l:5,t:0,i:228}, +D{l:6,t:0,i:203}, +D{l:7,t:0,i:156}, +D{l:8,t:0,i:347}, +D{l:9,t:0,i:265}, +D{l:18,t:0,i:39}, +D{l:20,t:0,i:54}, +D{l:21,t:0,i:31}, +D{l:22,t:0,i:3}, +D{l:23,t:0,i:0}, +D{l:15,t:11,i:8}, +D{l:18,t:11,i:39}, +D{l:20,t:11,i:54}, +D{l:21,t:11,i:31}, +D{l:22,t:11,i:3}, +D{l:151,t:11,i:0}, +D{l:7,t:0,i:1131}, +D{l:135,t:0,i:1468}, +D{l:144,t:10,i:0}, +D{l:134,t:0,i:1276}, +D{l:10,t:10,i:676}, +D{l:140,t:10,i:462}, +D{l:132,t:11,i:311}, +D{l:134,t:11,i:1740}, +D{l:7,t:11,i:170}, +D{l:8,t:11,i:90}, +D{l:8,t:11,i:177}, +D{l:8,t:11,i:415}, +D{l:11,t:11,i:714}, +D{l:142,t:11,i:281}, +D{l:134,t:10,i:164}, +D{l:6,t:0,i:1792}, +D{l:138,t:0,i:849}, +D{l:150,t:10,i:50}, +D{l:5,t:0,i:291}, +D{l:5,t:0,i:318}, +D{l:7,t:0,i:765}, +D{l:9,t:0,i:389}, +D{l:12,t:0,i:548}, +D{l:8,t:11,i:522}, +D{l:142,t:11,i:328}, +D{l:11,t:11,i:91}, +D{l:13,t:11,i:129}, +D{l:15,t:11,i:101}, +D{l:145,t:11,i:125}, +D{l:4,t:11,i:494}, +D{l:6,t:11,i:74}, +D{l:7,t:11,i:44}, +D{l:7,t:11,i:407}, +D{l:8,t:11,i:551}, +D{l:12,t:11,i:17}, +D{l:15,t:11,i:5}, +D{l:148,t:11,i:11}, +D{l:4,t:11,i:276}, +D{l:133,t:11,i:296}, +D{l:6,t:10,i:343}, +D{l:7,t:10,i:195}, +D{l:7,t:11,i:1777}, +D{l:9,t:10,i:226}, +D{l:10,t:10,i:197}, +D{l:10,t:10,i:575}, +D{l:11,t:10,i:502}, +D{l:139,t:10,i:899}, +D{l:10,t:0,i:525}, +D{l:139,t:0,i:82}, +D{l:14,t:0,i:453}, +D{l:4,t:11,i:7}, +D{l:5,t:11,i:90}, +D{l:5,t:11,i:158}, +D{l:6,t:11,i:542}, +D{l:7,t:11,i:221}, +D{l:7,t:11,i:1574}, +D{l:9,t:11,i:490}, +D{l:10,t:11,i:540}, +D{l:11,t:11,i:443}, +D{l:139,t:11,i:757}, +D{l:135,t:0,i:666}, +D{l:22,t:10,i:29}, +D{l:150,t:11,i:29}, +D{l:4,t:0,i:422}, +D{l:147,t:10,i:8}, +D{l:5,t:0,i:355}, +D{l:145,t:0,i:0}, +D{l:6,t:0,i:1873}, +D{l:9,t:0,i:918}, +D{l:7,t:11,i:588}, +D{l:9,t:11,i:175}, +D{l:138,t:11,i:530}, +D{l:143,t:11,i:31}, +D{l:11,t:0,i:165}, +D{l:7,t:10,i:1125}, +D{l:9,t:10,i:143}, +D{l:14,t:10,i:405}, +D{l:150,t:10,i:21}, +D{l:9,t:0,i:260}, +D{l:137,t:0,i:905}, +D{l:5,t:11,i:872}, +D{l:6,t:11,i:57}, +D{l:6,t:11,i:479}, +D{l:6,t:11,i:562}, +D{l:7,t:11,i:471}, +D{l:7,t:11,i:1060}, +D{l:9,t:11,i:447}, +D{l:9,t:11,i:454}, +D{l:141,t:11,i:6}, +D{l:138,t:11,i:704}, +D{l:133,t:0,i:865}, +D{l:5,t:0,i:914}, +D{l:134,t:0,i:1625}, +D{l:133,t:0,i:234}, +D{l:7,t:0,i:1383}, +D{l:5,t:11,i:31}, +D{l:6,t:11,i:614}, +D{l:145,t:11,i:61}, +D{l:7,t:11,i:1200}, +D{l:138,t:11,i:460}, +D{l:6,t:11,i:424}, +D{l:135,t:11,i:1866}, +D{l:136,t:0,i:306}, +D{l:5,t:10,i:959}, +D{l:12,t:11,i:30}, +D{l:13,t:11,i:148}, +D{l:14,t:11,i:87}, +D{l:14,t:11,i:182}, +D{l:16,t:11,i:42}, +D{l:18,t:11,i:92}, +D{l:148,t:11,i:70}, +D{l:6,t:0,i:1919}, +D{l:6,t:0,i:1921}, +D{l:9,t:0,i:923}, +D{l:9,t:0,i:930}, +D{l:9,t:0,i:941}, +D{l:9,t:0,i:949}, +D{l:9,t:0,i:987}, +D{l:9,t:0,i:988}, +D{l:9,t:0,i:992}, +D{l:12,t:0,i:802}, +D{l:12,t:0,i:815}, +D{l:12,t:0,i:856}, +D{l:12,t:0,i:885}, +D{l:12,t:0,i:893}, +D{l:12,t:0,i:898}, +D{l:12,t:0,i:919}, +D{l:12,t:0,i:920}, +D{l:12,t:0,i:941}, +D{l:12,t:0,i:947}, +D{l:15,t:0,i:183}, +D{l:15,t:0,i:185}, +D{l:15,t:0,i:189}, +D{l:15,t:0,i:197}, +D{l:15,t:0,i:202}, +D{l:15,t:0,i:233}, +D{l:18,t:0,i:218}, +D{l:18,t:0,i:219}, +D{l:18,t:0,i:233}, +D{l:143,t:11,i:156}, +D{l:135,t:10,i:1759}, +D{l:136,t:10,i:173}, +D{l:13,t:0,i:163}, +D{l:13,t:0,i:180}, +D{l:18,t:0,i:78}, +D{l:20,t:0,i:35}, +D{l:5,t:11,i:13}, +D{l:134,t:11,i:142}, +D{l:134,t:10,i:266}, +D{l:6,t:11,i:97}, +D{l:7,t:11,i:116}, +D{l:8,t:11,i:322}, +D{l:8,t:11,i:755}, +D{l:9,t:11,i:548}, +D{l:10,t:11,i:714}, +D{l:11,t:11,i:884}, +D{l:141,t:11,i:324}, +D{l:135,t:0,i:1312}, +D{l:9,t:0,i:814}, +D{l:137,t:11,i:676}, +D{l:133,t:0,i:707}, +D{l:135,t:0,i:1493}, +D{l:6,t:0,i:421}, +D{l:7,t:0,i:61}, +D{l:7,t:0,i:1540}, +D{l:10,t:0,i:11}, +D{l:138,t:0,i:501}, +D{l:12,t:0,i:733}, +D{l:12,t:0,i:766}, +D{l:7,t:11,i:866}, +D{l:135,t:11,i:1163}, +D{l:137,t:0,i:341}, +D{l:142,t:0,i:98}, +D{l:145,t:11,i:115}, +D{l:135,t:11,i:1111}, +D{l:136,t:10,i:300}, +D{l:136,t:0,i:1014}, +D{l:8,t:11,i:1}, +D{l:9,t:11,i:112}, +D{l:138,t:11,i:326}, +D{l:132,t:11,i:730}, +D{l:5,t:11,i:488}, +D{l:6,t:11,i:527}, +D{l:7,t:11,i:489}, +D{l:7,t:11,i:1636}, +D{l:8,t:11,i:121}, +D{l:8,t:11,i:144}, +D{l:8,t:11,i:359}, +D{l:9,t:11,i:193}, +D{l:9,t:11,i:241}, +D{l:9,t:11,i:336}, +D{l:9,t:11,i:882}, +D{l:11,t:11,i:266}, +D{l:11,t:11,i:372}, +D{l:11,t:11,i:944}, +D{l:12,t:11,i:401}, +D{l:140,t:11,i:641}, +D{l:6,t:0,i:971}, +D{l:134,t:0,i:1121}, +D{l:6,t:0,i:102}, +D{l:7,t:0,i:72}, +D{l:15,t:0,i:142}, +D{l:147,t:0,i:67}, +D{l:151,t:0,i:30}, +D{l:135,t:0,i:823}, +D{l:134,t:0,i:1045}, +D{l:5,t:10,i:427}, +D{l:5,t:10,i:734}, +D{l:7,t:10,i:478}, +D{l:136,t:10,i:52}, +D{l:7,t:0,i:1930}, +D{l:11,t:10,i:217}, +D{l:142,t:10,i:165}, +D{l:6,t:0,i:1512}, +D{l:135,t:0,i:1870}, +D{l:9,t:11,i:31}, +D{l:10,t:11,i:244}, +D{l:10,t:11,i:699}, +D{l:12,t:11,i:149}, +D{l:141,t:11,i:497}, +D{l:133,t:11,i:377}, +D{l:145,t:11,i:101}, +D{l:10,t:11,i:158}, +D{l:13,t:11,i:13}, +D{l:13,t:11,i:137}, +D{l:13,t:11,i:258}, +D{l:14,t:11,i:111}, +D{l:14,t:11,i:225}, +D{l:14,t:11,i:253}, +D{l:14,t:11,i:304}, +D{l:14,t:11,i:339}, +D{l:14,t:11,i:417}, +D{l:146,t:11,i:33}, +D{l:6,t:0,i:87}, +D{l:6,t:10,i:1734}, +D{l:7,t:10,i:20}, +D{l:7,t:10,i:1056}, +D{l:8,t:10,i:732}, +D{l:9,t:10,i:406}, +D{l:9,t:10,i:911}, +D{l:138,t:10,i:694}, +D{l:134,t:0,i:1243}, +D{l:137,t:0,i:245}, +D{l:7,t:0,i:68}, +D{l:8,t:0,i:48}, +D{l:8,t:0,i:88}, +D{l:8,t:0,i:582}, +D{l:8,t:0,i:681}, +D{l:9,t:0,i:373}, +D{l:9,t:0,i:864}, +D{l:11,t:0,i:157}, +D{l:11,t:0,i:336}, +D{l:11,t:0,i:843}, +D{l:148,t:0,i:27}, +D{l:8,t:11,i:663}, +D{l:144,t:11,i:8}, +D{l:133,t:10,i:613}, +D{l:4,t:0,i:88}, +D{l:5,t:0,i:137}, +D{l:5,t:0,i:174}, +D{l:5,t:0,i:777}, +D{l:6,t:0,i:1664}, +D{l:6,t:0,i:1725}, +D{l:7,t:0,i:77}, +D{l:7,t:0,i:426}, +D{l:7,t:0,i:1317}, +D{l:7,t:0,i:1355}, +D{l:8,t:0,i:126}, +D{l:8,t:0,i:563}, +D{l:9,t:0,i:523}, +D{l:9,t:0,i:750}, +D{l:10,t:0,i:310}, +D{l:10,t:0,i:836}, +D{l:11,t:0,i:42}, +D{l:11,t:0,i:318}, +D{l:11,t:0,i:731}, +D{l:12,t:0,i:68}, +D{l:12,t:0,i:92}, +D{l:12,t:0,i:507}, +D{l:12,t:0,i:692}, +D{l:13,t:0,i:81}, +D{l:13,t:0,i:238}, +D{l:13,t:0,i:374}, +D{l:14,t:0,i:436}, +D{l:18,t:0,i:138}, +D{l:19,t:0,i:78}, +D{l:19,t:0,i:111}, +D{l:20,t:0,i:55}, +D{l:20,t:0,i:77}, +D{l:148,t:0,i:92}, +D{l:141,t:0,i:418}, +D{l:4,t:0,i:938}, +D{l:137,t:0,i:625}, +D{l:138,t:0,i:351}, +D{l:5,t:11,i:843}, +D{l:7,t:10,i:32}, +D{l:7,t:10,i:984}, +D{l:8,t:10,i:85}, +D{l:8,t:10,i:709}, +D{l:9,t:10,i:579}, +D{l:9,t:10,i:847}, +D{l:9,t:10,i:856}, +D{l:10,t:10,i:799}, +D{l:11,t:10,i:258}, +D{l:11,t:10,i:1007}, +D{l:12,t:10,i:331}, +D{l:12,t:10,i:615}, +D{l:13,t:10,i:188}, +D{l:13,t:10,i:435}, +D{l:14,t:10,i:8}, +D{l:15,t:10,i:165}, +D{l:16,t:10,i:27}, +D{l:148,t:10,i:40}, +D{l:6,t:0,i:1668}, +D{l:7,t:0,i:1499}, +D{l:8,t:0,i:117}, +D{l:9,t:0,i:314}, +D{l:138,t:0,i:174}, +D{l:135,t:0,i:707}, +D{l:132,t:11,i:554}, +D{l:133,t:11,i:536}, +D{l:5,t:0,i:403}, +D{l:5,t:11,i:207}, +D{l:9,t:11,i:79}, +D{l:11,t:11,i:625}, +D{l:145,t:11,i:7}, +D{l:132,t:11,i:424}, +D{l:136,t:11,i:785}, +D{l:4,t:10,i:167}, +D{l:135,t:10,i:82}, +D{l:9,t:0,i:7}, +D{l:23,t:0,i:6}, +D{l:9,t:11,i:7}, +D{l:151,t:11,i:6}, +D{l:6,t:0,i:282}, +D{l:5,t:10,i:62}, +D{l:6,t:10,i:534}, +D{l:7,t:10,i:74}, +D{l:7,t:10,i:678}, +D{l:7,t:10,i:684}, +D{l:7,t:10,i:1043}, +D{l:7,t:10,i:1072}, +D{l:8,t:10,i:280}, +D{l:8,t:10,i:541}, +D{l:8,t:10,i:686}, +D{l:9,t:10,i:258}, +D{l:10,t:10,i:519}, +D{l:11,t:10,i:252}, +D{l:140,t:10,i:282}, +D{l:138,t:10,i:33}, +D{l:132,t:10,i:359}, +D{l:4,t:0,i:44}, +D{l:5,t:0,i:311}, +D{l:6,t:0,i:156}, +D{l:7,t:0,i:639}, +D{l:7,t:0,i:762}, +D{l:7,t:0,i:1827}, +D{l:9,t:0,i:8}, +D{l:9,t:0,i:462}, +D{l:148,t:0,i:83}, +D{l:7,t:11,i:769}, +D{l:9,t:11,i:18}, +D{l:138,t:11,i:358}, +D{l:4,t:0,i:346}, +D{l:7,t:0,i:115}, +D{l:9,t:0,i:180}, +D{l:9,t:0,i:456}, +D{l:10,t:0,i:363}, +D{l:4,t:11,i:896}, +D{l:134,t:11,i:1777}, +D{l:133,t:10,i:211}, +D{l:7,t:0,i:761}, +D{l:7,t:0,i:1051}, +D{l:137,t:0,i:545}, +D{l:6,t:10,i:145}, +D{l:141,t:10,i:336}, +D{l:7,t:11,i:750}, +D{l:9,t:11,i:223}, +D{l:11,t:11,i:27}, +D{l:11,t:11,i:466}, +D{l:12,t:11,i:624}, +D{l:14,t:11,i:265}, +D{l:146,t:11,i:61}, +D{l:6,t:0,i:752}, +D{l:6,t:0,i:768}, +D{l:6,t:0,i:1195}, +D{l:6,t:0,i:1254}, +D{l:6,t:0,i:1619}, +D{l:137,t:0,i:835}, +D{l:6,t:0,i:1936}, +D{l:8,t:0,i:930}, +D{l:136,t:0,i:960}, +D{l:132,t:10,i:263}, +D{l:132,t:11,i:249}, +D{l:12,t:0,i:653}, +D{l:132,t:10,i:916}, +D{l:4,t:11,i:603}, +D{l:133,t:11,i:661}, +D{l:8,t:0,i:344}, +D{l:4,t:11,i:11}, +D{l:6,t:11,i:128}, +D{l:7,t:11,i:231}, +D{l:7,t:11,i:1533}, +D{l:138,t:11,i:725}, +D{l:134,t:0,i:1483}, +D{l:134,t:0,i:875}, +D{l:6,t:0,i:185}, +D{l:7,t:0,i:1899}, +D{l:9,t:0,i:875}, +D{l:139,t:0,i:673}, +D{l:15,t:10,i:155}, +D{l:144,t:10,i:79}, +D{l:7,t:0,i:93}, +D{l:7,t:0,i:210}, +D{l:7,t:0,i:1223}, +D{l:8,t:0,i:451}, +D{l:8,t:0,i:460}, +D{l:11,t:0,i:353}, +D{l:11,t:0,i:475}, +D{l:4,t:10,i:599}, +D{l:6,t:10,i:1634}, +D{l:7,t:10,i:67}, +D{l:7,t:10,i:691}, +D{l:7,t:10,i:979}, +D{l:7,t:10,i:1697}, +D{l:8,t:10,i:207}, +D{l:8,t:10,i:214}, +D{l:8,t:10,i:231}, +D{l:8,t:10,i:294}, +D{l:8,t:10,i:336}, +D{l:8,t:10,i:428}, +D{l:8,t:10,i:471}, +D{l:8,t:10,i:622}, +D{l:8,t:10,i:626}, +D{l:8,t:10,i:679}, +D{l:8,t:10,i:759}, +D{l:8,t:10,i:829}, +D{l:9,t:10,i:11}, +D{l:9,t:10,i:246}, +D{l:9,t:10,i:484}, +D{l:9,t:10,i:573}, +D{l:9,t:10,i:706}, +D{l:9,t:10,i:762}, +D{l:9,t:10,i:798}, +D{l:9,t:10,i:855}, +D{l:9,t:10,i:870}, +D{l:9,t:10,i:912}, +D{l:10,t:10,i:303}, +D{l:10,t:10,i:335}, +D{l:10,t:10,i:424}, +D{l:10,t:10,i:461}, +D{l:10,t:10,i:543}, +D{l:10,t:10,i:759}, +D{l:10,t:10,i:814}, +D{l:11,t:10,i:59}, +D{l:11,t:10,i:235}, +D{l:11,t:10,i:590}, +D{l:11,t:10,i:929}, +D{l:11,t:10,i:963}, +D{l:11,t:10,i:987}, +D{l:12,t:10,i:114}, +D{l:12,t:10,i:182}, +D{l:12,t:10,i:226}, +D{l:12,t:10,i:332}, +D{l:12,t:10,i:439}, +D{l:12,t:10,i:575}, +D{l:12,t:10,i:598}, +D{l:12,t:10,i:675}, +D{l:13,t:10,i:8}, +D{l:13,t:10,i:125}, +D{l:13,t:10,i:194}, +D{l:13,t:10,i:287}, +D{l:14,t:10,i:197}, +D{l:14,t:10,i:383}, +D{l:15,t:10,i:53}, +D{l:17,t:10,i:63}, +D{l:19,t:10,i:46}, +D{l:19,t:10,i:98}, +D{l:19,t:10,i:106}, +D{l:148,t:10,i:85}, +D{l:132,t:11,i:476}, +D{l:4,t:0,i:327}, +D{l:5,t:0,i:478}, +D{l:7,t:0,i:1332}, +D{l:136,t:0,i:753}, +D{l:5,t:0,i:1020}, +D{l:133,t:0,i:1022}, +D{l:135,t:11,i:1807}, +D{l:4,t:0,i:103}, +D{l:133,t:0,i:401}, +D{l:4,t:0,i:499}, +D{l:135,t:0,i:1421}, +D{l:10,t:0,i:207}, +D{l:13,t:0,i:164}, +D{l:147,t:10,i:126}, +D{l:9,t:11,i:20}, +D{l:10,t:11,i:324}, +D{l:139,t:11,i:488}, +D{l:132,t:0,i:96}, +D{l:9,t:11,i:280}, +D{l:138,t:11,i:134}, +D{l:135,t:0,i:968}, +D{l:133,t:10,i:187}, +D{l:135,t:10,i:1286}, +D{l:5,t:11,i:112}, +D{l:6,t:11,i:103}, +D{l:134,t:11,i:150}, +D{l:8,t:0,i:914}, +D{l:10,t:0,i:3}, +D{l:4,t:10,i:215}, +D{l:9,t:10,i:38}, +D{l:11,t:10,i:23}, +D{l:11,t:10,i:127}, +D{l:139,t:10,i:796}, +D{l:135,t:0,i:399}, +D{l:6,t:0,i:563}, +D{l:137,t:0,i:224}, +D{l:6,t:0,i:704}, +D{l:134,t:0,i:1214}, +D{l:4,t:11,i:708}, +D{l:8,t:11,i:15}, +D{l:9,t:11,i:50}, +D{l:9,t:11,i:386}, +D{l:11,t:11,i:18}, +D{l:11,t:11,i:529}, +D{l:140,t:11,i:228}, +D{l:4,t:11,i:563}, +D{l:7,t:11,i:109}, +D{l:7,t:11,i:592}, +D{l:7,t:11,i:637}, +D{l:7,t:11,i:770}, +D{l:7,t:11,i:1701}, +D{l:8,t:11,i:436}, +D{l:8,t:11,i:463}, +D{l:9,t:11,i:60}, +D{l:9,t:11,i:335}, +D{l:9,t:11,i:904}, +D{l:10,t:11,i:73}, +D{l:11,t:11,i:434}, +D{l:12,t:11,i:585}, +D{l:13,t:11,i:331}, +D{l:18,t:11,i:110}, +D{l:148,t:11,i:60}, +D{l:134,t:0,i:1559}, +D{l:132,t:11,i:502}, +D{l:6,t:11,i:347}, +D{l:138,t:11,i:161}, +D{l:4,t:11,i:33}, +D{l:5,t:11,i:102}, +D{l:5,t:11,i:500}, +D{l:6,t:11,i:284}, +D{l:7,t:11,i:1079}, +D{l:7,t:11,i:1423}, +D{l:7,t:11,i:1702}, +D{l:8,t:11,i:470}, +D{l:9,t:11,i:554}, +D{l:9,t:11,i:723}, +D{l:139,t:11,i:333}, +D{l:7,t:11,i:246}, +D{l:135,t:11,i:840}, +D{l:6,t:11,i:10}, +D{l:8,t:11,i:571}, +D{l:9,t:11,i:739}, +D{l:143,t:11,i:91}, +D{l:8,t:0,i:861}, +D{l:10,t:0,i:905}, +D{l:12,t:0,i:730}, +D{l:12,t:0,i:789}, +D{l:133,t:11,i:626}, +D{l:134,t:0,i:946}, +D{l:5,t:0,i:746}, +D{l:12,t:0,i:333}, +D{l:14,t:0,i:332}, +D{l:12,t:11,i:333}, +D{l:142,t:11,i:332}, +D{l:5,t:11,i:18}, +D{l:6,t:11,i:526}, +D{l:13,t:11,i:24}, +D{l:13,t:11,i:110}, +D{l:19,t:11,i:5}, +D{l:147,t:11,i:44}, +D{l:4,t:0,i:910}, +D{l:5,t:0,i:832}, +D{l:135,t:10,i:2002}, +D{l:10,t:11,i:768}, +D{l:139,t:11,i:787}, +D{l:4,t:11,i:309}, +D{l:5,t:11,i:462}, +D{l:7,t:11,i:970}, +D{l:135,t:11,i:1097}, +D{l:4,t:10,i:28}, +D{l:5,t:10,i:440}, +D{l:7,t:10,i:248}, +D{l:11,t:10,i:833}, +D{l:140,t:10,i:344}, +D{l:134,t:10,i:1654}, +D{l:6,t:0,i:632}, +D{l:6,t:0,i:652}, +D{l:6,t:0,i:1272}, +D{l:6,t:0,i:1384}, +D{l:134,t:0,i:1560}, +D{l:134,t:11,i:1704}, +D{l:6,t:0,i:1393}, +D{l:133,t:10,i:853}, +D{l:6,t:10,i:249}, +D{l:7,t:10,i:1234}, +D{l:139,t:10,i:573}, +D{l:5,t:11,i:86}, +D{l:7,t:11,i:743}, +D{l:9,t:11,i:85}, +D{l:10,t:11,i:281}, +D{l:10,t:11,i:432}, +D{l:11,t:11,i:490}, +D{l:12,t:11,i:251}, +D{l:13,t:11,i:118}, +D{l:14,t:11,i:378}, +D{l:146,t:11,i:143}, +D{l:5,t:11,i:524}, +D{l:133,t:11,i:744}, +D{l:134,t:0,i:1514}, +D{l:10,t:0,i:201}, +D{l:142,t:0,i:319}, +D{l:7,t:0,i:717}, +D{l:10,t:0,i:510}, +D{l:7,t:10,i:392}, +D{l:8,t:10,i:20}, +D{l:8,t:10,i:172}, +D{l:8,t:10,i:690}, +D{l:9,t:10,i:383}, +D{l:9,t:10,i:845}, +D{l:11,t:10,i:293}, +D{l:11,t:10,i:832}, +D{l:11,t:10,i:920}, +D{l:11,t:10,i:984}, +D{l:141,t:10,i:221}, +D{l:134,t:0,i:1381}, +D{l:5,t:10,i:858}, +D{l:133,t:10,i:992}, +D{l:8,t:0,i:528}, +D{l:137,t:0,i:348}, +D{l:10,t:11,i:107}, +D{l:140,t:11,i:436}, +D{l:4,t:0,i:20}, +D{l:133,t:0,i:616}, +D{l:134,t:0,i:1251}, +D{l:132,t:11,i:927}, +D{l:10,t:11,i:123}, +D{l:12,t:11,i:670}, +D{l:13,t:11,i:371}, +D{l:14,t:11,i:142}, +D{l:146,t:11,i:94}, +D{l:134,t:0,i:1163}, +D{l:7,t:11,i:1149}, +D{l:137,t:11,i:156}, +D{l:134,t:0,i:307}, +D{l:133,t:11,i:778}, +D{l:7,t:0,i:1091}, +D{l:135,t:0,i:1765}, +D{l:5,t:11,i:502}, +D{l:6,t:10,i:268}, +D{l:137,t:10,i:62}, +D{l:8,t:11,i:196}, +D{l:10,t:11,i:283}, +D{l:139,t:11,i:406}, +D{l:4,t:0,i:26}, +D{l:5,t:0,i:429}, +D{l:6,t:0,i:245}, +D{l:7,t:0,i:704}, +D{l:7,t:0,i:1379}, +D{l:135,t:0,i:1474}, +D{l:133,t:11,i:855}, +D{l:132,t:0,i:881}, +D{l:4,t:0,i:621}, +D{l:135,t:11,i:1596}, +D{l:7,t:11,i:1400}, +D{l:9,t:11,i:446}, +D{l:138,t:11,i:45}, +D{l:6,t:0,i:736}, +D{l:138,t:10,i:106}, +D{l:133,t:0,i:542}, +D{l:134,t:0,i:348}, +D{l:133,t:0,i:868}, +D{l:136,t:0,i:433}, +D{l:135,t:0,i:1495}, +D{l:138,t:0,i:771}, +D{l:6,t:10,i:613}, +D{l:136,t:10,i:223}, +D{l:138,t:0,i:215}, +D{l:141,t:0,i:124}, +D{l:136,t:11,i:391}, +D{l:135,t:11,i:172}, +D{l:132,t:10,i:670}, +D{l:140,t:0,i:55}, +D{l:9,t:10,i:40}, +D{l:139,t:10,i:136}, +D{l:7,t:0,i:62}, +D{l:147,t:0,i:112}, +D{l:132,t:0,i:856}, +D{l:132,t:11,i:568}, +D{l:12,t:0,i:270}, +D{l:139,t:10,i:259}, +D{l:8,t:0,i:572}, +D{l:137,t:0,i:698}, +D{l:4,t:11,i:732}, +D{l:9,t:10,i:310}, +D{l:137,t:10,i:682}, +D{l:142,t:10,i:296}, +D{l:134,t:0,i:939}, +D{l:136,t:11,i:733}, +D{l:135,t:11,i:1435}, +D{l:7,t:10,i:1401}, +D{l:135,t:10,i:1476}, +D{l:6,t:0,i:352}, +D{l:4,t:10,i:296}, +D{l:7,t:10,i:401}, +D{l:7,t:10,i:1410}, +D{l:7,t:10,i:1594}, +D{l:7,t:10,i:1674}, +D{l:8,t:10,i:63}, +D{l:8,t:10,i:660}, +D{l:137,t:10,i:74}, +D{l:4,t:11,i:428}, +D{l:133,t:11,i:668}, +D{l:4,t:10,i:139}, +D{l:4,t:10,i:388}, +D{l:140,t:10,i:188}, +D{l:7,t:11,i:2015}, +D{l:140,t:11,i:665}, +D{l:132,t:0,i:647}, +D{l:146,t:0,i:10}, +D{l:138,t:0,i:220}, +D{l:142,t:0,i:464}, +D{l:132,t:0,i:109}, +D{l:134,t:0,i:1746}, +D{l:6,t:0,i:515}, +D{l:4,t:10,i:747}, +D{l:6,t:11,i:1623}, +D{l:6,t:11,i:1681}, +D{l:7,t:10,i:649}, +D{l:7,t:10,i:1479}, +D{l:135,t:10,i:1583}, +D{l:133,t:10,i:232}, +D{l:135,t:0,i:566}, +D{l:137,t:10,i:887}, +D{l:4,t:0,i:40}, +D{l:10,t:0,i:67}, +D{l:11,t:0,i:117}, +D{l:11,t:0,i:768}, +D{l:139,t:0,i:935}, +D{l:132,t:0,i:801}, +D{l:7,t:0,i:992}, +D{l:8,t:0,i:301}, +D{l:9,t:0,i:722}, +D{l:12,t:0,i:63}, +D{l:13,t:0,i:29}, +D{l:14,t:0,i:161}, +D{l:143,t:0,i:18}, +D{l:139,t:0,i:923}, +D{l:6,t:11,i:1748}, +D{l:8,t:11,i:715}, +D{l:9,t:11,i:802}, +D{l:10,t:11,i:46}, +D{l:10,t:11,i:819}, +D{l:13,t:11,i:308}, +D{l:14,t:11,i:351}, +D{l:14,t:11,i:363}, +D{l:146,t:11,i:67}, +D{l:137,t:11,i:745}, +D{l:7,t:0,i:1145}, +D{l:4,t:10,i:14}, +D{l:7,t:10,i:1801}, +D{l:10,t:10,i:748}, +D{l:141,t:10,i:458}, +D{l:4,t:11,i:63}, +D{l:5,t:11,i:347}, +D{l:134,t:11,i:474}, +D{l:135,t:0,i:568}, +D{l:4,t:10,i:425}, +D{l:7,t:11,i:577}, +D{l:7,t:11,i:1432}, +D{l:9,t:11,i:475}, +D{l:9,t:11,i:505}, +D{l:9,t:11,i:526}, +D{l:9,t:11,i:609}, +D{l:9,t:11,i:689}, +D{l:9,t:11,i:726}, +D{l:9,t:11,i:735}, +D{l:9,t:11,i:738}, +D{l:10,t:11,i:556}, +D{l:10,t:11,i:674}, +D{l:10,t:11,i:684}, +D{l:11,t:11,i:89}, +D{l:11,t:11,i:202}, +D{l:11,t:11,i:272}, +D{l:11,t:11,i:380}, +D{l:11,t:11,i:415}, +D{l:11,t:11,i:505}, +D{l:11,t:11,i:537}, +D{l:11,t:11,i:550}, +D{l:11,t:11,i:562}, +D{l:11,t:11,i:640}, +D{l:11,t:11,i:667}, +D{l:11,t:11,i:688}, +D{l:11,t:11,i:847}, +D{l:11,t:11,i:927}, +D{l:11,t:11,i:930}, +D{l:11,t:11,i:940}, +D{l:12,t:11,i:144}, +D{l:12,t:11,i:325}, +D{l:12,t:11,i:329}, +D{l:12,t:11,i:389}, +D{l:12,t:11,i:403}, +D{l:12,t:11,i:451}, +D{l:12,t:11,i:515}, +D{l:12,t:11,i:604}, +D{l:12,t:11,i:616}, +D{l:12,t:11,i:626}, +D{l:13,t:11,i:66}, +D{l:13,t:11,i:131}, +D{l:13,t:11,i:167}, +D{l:13,t:11,i:236}, +D{l:13,t:11,i:368}, +D{l:13,t:11,i:411}, +D{l:13,t:11,i:434}, +D{l:13,t:11,i:453}, +D{l:13,t:11,i:461}, +D{l:13,t:11,i:474}, +D{l:14,t:11,i:59}, +D{l:14,t:11,i:60}, +D{l:14,t:11,i:139}, +D{l:14,t:11,i:152}, +D{l:14,t:11,i:276}, +D{l:14,t:11,i:353}, +D{l:14,t:11,i:402}, +D{l:15,t:11,i:28}, +D{l:15,t:11,i:81}, +D{l:15,t:11,i:123}, +D{l:15,t:11,i:152}, +D{l:18,t:11,i:136}, +D{l:148,t:11,i:88}, +D{l:137,t:0,i:247}, +D{l:135,t:11,i:1622}, +D{l:9,t:11,i:544}, +D{l:11,t:11,i:413}, +D{l:144,t:11,i:25}, +D{l:4,t:0,i:645}, +D{l:7,t:0,i:825}, +D{l:6,t:10,i:1768}, +D{l:135,t:11,i:89}, +D{l:140,t:0,i:328}, +D{l:5,t:10,i:943}, +D{l:134,t:10,i:1779}, +D{l:134,t:0,i:1363}, +D{l:5,t:10,i:245}, +D{l:6,t:10,i:576}, +D{l:7,t:10,i:582}, +D{l:136,t:10,i:225}, +D{l:134,t:0,i:1280}, +D{l:5,t:11,i:824}, +D{l:133,t:11,i:941}, +D{l:7,t:11,i:440}, +D{l:8,t:11,i:230}, +D{l:139,t:11,i:106}, +D{l:5,t:0,i:28}, +D{l:6,t:0,i:204}, +D{l:10,t:0,i:320}, +D{l:10,t:0,i:583}, +D{l:13,t:0,i:502}, +D{l:14,t:0,i:72}, +D{l:14,t:0,i:274}, +D{l:14,t:0,i:312}, +D{l:14,t:0,i:344}, +D{l:15,t:0,i:159}, +D{l:16,t:0,i:62}, +D{l:16,t:0,i:69}, +D{l:17,t:0,i:30}, +D{l:18,t:0,i:42}, +D{l:18,t:0,i:53}, +D{l:18,t:0,i:84}, +D{l:18,t:0,i:140}, +D{l:19,t:0,i:68}, +D{l:19,t:0,i:85}, +D{l:20,t:0,i:5}, +D{l:20,t:0,i:45}, +D{l:20,t:0,i:101}, +D{l:22,t:0,i:7}, +D{l:150,t:0,i:20}, +D{l:4,t:0,i:558}, +D{l:6,t:0,i:390}, +D{l:7,t:0,i:162}, +D{l:7,t:0,i:689}, +D{l:9,t:0,i:360}, +D{l:138,t:0,i:653}, +D{l:134,t:0,i:764}, +D{l:6,t:0,i:862}, +D{l:137,t:0,i:833}, +D{l:5,t:0,i:856}, +D{l:6,t:0,i:1672}, +D{l:6,t:0,i:1757}, +D{l:134,t:0,i:1781}, +D{l:5,t:0,i:92}, +D{l:10,t:0,i:736}, +D{l:140,t:0,i:102}, +D{l:6,t:0,i:1927}, +D{l:6,t:0,i:1944}, +D{l:8,t:0,i:924}, +D{l:8,t:0,i:948}, +D{l:10,t:0,i:967}, +D{l:138,t:0,i:978}, +D{l:134,t:0,i:1479}, +D{l:5,t:0,i:590}, +D{l:8,t:0,i:360}, +D{l:9,t:0,i:213}, +D{l:138,t:0,i:63}, +D{l:134,t:0,i:1521}, +D{l:6,t:0,i:709}, +D{l:134,t:0,i:891}, +D{l:132,t:10,i:443}, +D{l:13,t:0,i:477}, +D{l:14,t:0,i:120}, +D{l:148,t:0,i:61}, +D{l:4,t:11,i:914}, +D{l:5,t:11,i:800}, +D{l:133,t:11,i:852}, +D{l:10,t:11,i:54}, +D{l:141,t:11,i:115}, +D{l:4,t:11,i:918}, +D{l:133,t:11,i:876}, +D{l:139,t:11,i:152}, +D{l:4,t:11,i:92}, +D{l:133,t:11,i:274}, +D{l:135,t:11,i:1901}, +D{l:9,t:11,i:800}, +D{l:10,t:11,i:693}, +D{l:11,t:11,i:482}, +D{l:11,t:11,i:734}, +D{l:139,t:11,i:789}, +D{l:9,t:0,i:483}, +D{l:132,t:10,i:298}, +D{l:6,t:0,i:1213}, +D{l:141,t:11,i:498}, +D{l:135,t:11,i:1451}, +D{l:133,t:11,i:743}, +D{l:4,t:0,i:1022}, +D{l:10,t:0,i:1000}, +D{l:12,t:0,i:957}, +D{l:12,t:0,i:980}, +D{l:12,t:0,i:1013}, +D{l:14,t:0,i:481}, +D{l:144,t:0,i:116}, +D{l:8,t:0,i:503}, +D{l:17,t:0,i:29}, +D{l:4,t:11,i:49}, +D{l:7,t:11,i:280}, +D{l:135,t:11,i:1633}, +D{l:135,t:0,i:1712}, +D{l:134,t:0,i:466}, +D{l:136,t:11,i:47}, +D{l:5,t:10,i:164}, +D{l:7,t:10,i:121}, +D{l:142,t:10,i:189}, +D{l:7,t:10,i:812}, +D{l:7,t:10,i:1261}, +D{l:7,t:10,i:1360}, +D{l:9,t:10,i:632}, +D{l:140,t:10,i:352}, +D{l:139,t:10,i:556}, +D{l:132,t:0,i:731}, +D{l:5,t:11,i:272}, +D{l:5,t:11,i:908}, +D{l:5,t:11,i:942}, +D{l:7,t:11,i:1008}, +D{l:7,t:11,i:1560}, +D{l:8,t:11,i:197}, +D{l:9,t:11,i:47}, +D{l:11,t:11,i:538}, +D{l:139,t:11,i:742}, +D{l:4,t:10,i:172}, +D{l:9,t:10,i:611}, +D{l:10,t:10,i:436}, +D{l:12,t:10,i:673}, +D{l:141,t:10,i:255}, +D{l:133,t:10,i:844}, +D{l:10,t:0,i:484}, +D{l:11,t:0,i:754}, +D{l:12,t:0,i:457}, +D{l:14,t:0,i:171}, +D{l:14,t:0,i:389}, +D{l:146,t:0,i:153}, +D{l:9,t:10,i:263}, +D{l:10,t:10,i:147}, +D{l:138,t:10,i:492}, +D{l:137,t:11,i:891}, +D{l:138,t:0,i:241}, +D{l:133,t:10,i:537}, +D{l:6,t:0,i:2005}, +D{l:136,t:0,i:964}, +D{l:137,t:10,i:842}, +D{l:151,t:11,i:8}, +D{l:4,t:11,i:407}, +D{l:132,t:11,i:560}, +D{l:135,t:11,i:1884}, +D{l:6,t:0,i:1100}, +D{l:134,t:0,i:1242}, +D{l:135,t:0,i:954}, +D{l:5,t:10,i:230}, +D{l:5,t:10,i:392}, +D{l:6,t:10,i:420}, +D{l:9,t:10,i:568}, +D{l:140,t:10,i:612}, +D{l:4,t:11,i:475}, +D{l:11,t:11,i:35}, +D{l:11,t:11,i:90}, +D{l:13,t:11,i:7}, +D{l:13,t:11,i:71}, +D{l:13,t:11,i:177}, +D{l:142,t:11,i:422}, +D{l:136,t:11,i:332}, +D{l:135,t:0,i:1958}, +D{l:6,t:0,i:549}, +D{l:8,t:0,i:34}, +D{l:8,t:0,i:283}, +D{l:9,t:0,i:165}, +D{l:138,t:0,i:475}, +D{l:10,t:0,i:952}, +D{l:12,t:0,i:966}, +D{l:140,t:0,i:994}, +D{l:5,t:0,i:652}, +D{l:5,t:0,i:701}, +D{l:135,t:0,i:449}, +D{l:4,t:0,i:655}, +D{l:7,t:0,i:850}, +D{l:17,t:0,i:75}, +D{l:146,t:0,i:137}, +D{l:4,t:0,i:146}, +D{l:7,t:0,i:1618}, +D{l:8,t:0,i:670}, +D{l:5,t:10,i:41}, +D{l:7,t:10,i:1459}, +D{l:7,t:10,i:1469}, +D{l:7,t:10,i:1859}, +D{l:9,t:10,i:549}, +D{l:139,t:10,i:905}, +D{l:133,t:10,i:696}, +D{l:6,t:0,i:159}, +D{l:6,t:0,i:364}, +D{l:7,t:0,i:516}, +D{l:137,t:0,i:518}, +D{l:135,t:0,i:1439}, +D{l:6,t:11,i:222}, +D{l:7,t:11,i:636}, +D{l:7,t:11,i:1620}, +D{l:8,t:11,i:409}, +D{l:9,t:11,i:693}, +D{l:139,t:11,i:77}, +D{l:13,t:0,i:151}, +D{l:141,t:11,i:45}, +D{l:6,t:0,i:1027}, +D{l:4,t:11,i:336}, +D{l:132,t:10,i:771}, +D{l:139,t:11,i:392}, +D{l:10,t:11,i:121}, +D{l:11,t:11,i:175}, +D{l:149,t:11,i:16}, +D{l:8,t:0,i:950}, +D{l:138,t:0,i:983}, +D{l:133,t:10,i:921}, +D{l:135,t:0,i:993}, +D{l:6,t:10,i:180}, +D{l:7,t:10,i:1137}, +D{l:8,t:10,i:751}, +D{l:139,t:10,i:805}, +D{l:7,t:0,i:501}, +D{l:9,t:0,i:111}, +D{l:10,t:0,i:141}, +D{l:11,t:0,i:332}, +D{l:13,t:0,i:43}, +D{l:13,t:0,i:429}, +D{l:14,t:0,i:130}, +D{l:14,t:0,i:415}, +D{l:145,t:0,i:102}, +D{l:4,t:10,i:183}, +D{l:5,t:11,i:882}, +D{l:7,t:10,i:271}, +D{l:11,t:10,i:824}, +D{l:11,t:10,i:952}, +D{l:13,t:10,i:278}, +D{l:13,t:10,i:339}, +D{l:13,t:10,i:482}, +D{l:14,t:10,i:424}, +D{l:148,t:10,i:99}, +D{l:4,t:10,i:19}, +D{l:5,t:10,i:477}, +D{l:5,t:10,i:596}, +D{l:6,t:10,i:505}, +D{l:7,t:10,i:1221}, +D{l:11,t:10,i:907}, +D{l:12,t:10,i:209}, +D{l:141,t:10,i:214}, +D{l:135,t:10,i:1215}, +D{l:133,t:0,i:452}, +D{l:132,t:11,i:426}, +D{l:5,t:0,i:149}, +D{l:136,t:0,i:233}, +D{l:133,t:0,i:935}, +D{l:6,t:11,i:58}, +D{l:7,t:11,i:654}, +D{l:7,t:11,i:745}, +D{l:7,t:11,i:1969}, +D{l:8,t:11,i:240}, +D{l:8,t:11,i:675}, +D{l:9,t:11,i:479}, +D{l:9,t:11,i:731}, +D{l:10,t:11,i:330}, +D{l:10,t:11,i:593}, +D{l:10,t:11,i:817}, +D{l:11,t:11,i:32}, +D{l:11,t:11,i:133}, +D{l:11,t:11,i:221}, +D{l:145,t:11,i:68}, +D{l:12,t:0,i:582}, +D{l:18,t:0,i:131}, +D{l:7,t:11,i:102}, +D{l:137,t:11,i:538}, +D{l:136,t:0,i:801}, +D{l:134,t:10,i:1645}, +D{l:132,t:0,i:70}, +D{l:6,t:10,i:92}, +D{l:6,t:10,i:188}, +D{l:7,t:10,i:1269}, +D{l:7,t:10,i:1524}, +D{l:7,t:10,i:1876}, +D{l:10,t:10,i:228}, +D{l:139,t:10,i:1020}, +D{l:4,t:10,i:459}, +D{l:133,t:10,i:966}, +D{l:138,t:0,i:369}, +D{l:16,t:0,i:36}, +D{l:140,t:10,i:330}, +D{l:141,t:11,i:366}, +D{l:7,t:0,i:721}, +D{l:10,t:0,i:236}, +D{l:12,t:0,i:204}, +D{l:6,t:10,i:18}, +D{l:7,t:10,i:932}, +D{l:8,t:10,i:757}, +D{l:9,t:10,i:54}, +D{l:9,t:10,i:65}, +D{l:9,t:10,i:844}, +D{l:10,t:10,i:113}, +D{l:10,t:10,i:315}, +D{l:10,t:10,i:798}, +D{l:11,t:10,i:153}, +D{l:12,t:10,i:151}, +D{l:12,t:10,i:392}, +D{l:12,t:10,i:666}, +D{l:142,t:10,i:248}, +D{l:7,t:0,i:241}, +D{l:10,t:0,i:430}, +D{l:8,t:10,i:548}, +D{l:9,t:10,i:532}, +D{l:10,t:10,i:117}, +D{l:11,t:10,i:351}, +D{l:11,t:10,i:375}, +D{l:143,t:10,i:23}, +D{l:134,t:10,i:1742}, +D{l:133,t:10,i:965}, +D{l:133,t:11,i:566}, +D{l:6,t:11,i:48}, +D{l:135,t:11,i:63}, +D{l:134,t:10,i:182}, +D{l:10,t:10,i:65}, +D{l:10,t:10,i:488}, +D{l:138,t:10,i:497}, +D{l:6,t:11,i:114}, +D{l:7,t:11,i:1224}, +D{l:7,t:11,i:1556}, +D{l:136,t:11,i:3}, +D{l:134,t:0,i:1817}, +D{l:8,t:11,i:576}, +D{l:137,t:11,i:267}, +D{l:6,t:0,i:1078}, +D{l:144,t:0,i:16}, +D{l:9,t:10,i:588}, +D{l:138,t:10,i:260}, +D{l:138,t:0,i:1021}, +D{l:5,t:0,i:406}, +D{l:134,t:0,i:2022}, +D{l:133,t:11,i:933}, +D{l:6,t:0,i:69}, +D{l:135,t:0,i:117}, +D{l:7,t:0,i:1830}, +D{l:136,t:11,i:427}, +D{l:4,t:0,i:432}, +D{l:135,t:0,i:824}, +D{l:134,t:10,i:1786}, +D{l:133,t:0,i:826}, +D{l:139,t:11,i:67}, +D{l:133,t:11,i:759}, +D{l:135,t:10,i:308}, +D{l:137,t:0,i:816}, +D{l:133,t:0,i:1000}, +D{l:4,t:0,i:297}, +D{l:6,t:0,i:529}, +D{l:7,t:0,i:152}, +D{l:7,t:0,i:713}, +D{l:7,t:0,i:1845}, +D{l:8,t:0,i:710}, +D{l:8,t:0,i:717}, +D{l:12,t:0,i:639}, +D{l:140,t:0,i:685}, +D{l:7,t:0,i:423}, +D{l:136,t:10,i:588}, +D{l:136,t:10,i:287}, +D{l:136,t:0,i:510}, +D{l:134,t:0,i:1048}, +D{l:6,t:0,i:618}, +D{l:7,t:11,i:56}, +D{l:7,t:11,i:1989}, +D{l:8,t:11,i:337}, +D{l:8,t:11,i:738}, +D{l:9,t:11,i:600}, +D{l:10,t:11,i:483}, +D{l:12,t:11,i:37}, +D{l:13,t:11,i:447}, +D{l:142,t:11,i:92}, +D{l:4,t:0,i:520}, +D{l:135,t:0,i:575}, +D{l:8,t:0,i:990}, +D{l:138,t:0,i:977}, +D{l:135,t:11,i:774}, +D{l:9,t:11,i:347}, +D{l:11,t:11,i:24}, +D{l:140,t:11,i:170}, +D{l:136,t:11,i:379}, +D{l:140,t:10,i:290}, +D{l:132,t:11,i:328}, +D{l:4,t:0,i:321}, +D{l:134,t:0,i:569}, +D{l:4,t:11,i:101}, +D{l:135,t:11,i:1171}, +D{l:7,t:0,i:723}, +D{l:7,t:0,i:1135}, +D{l:5,t:11,i:833}, +D{l:136,t:11,i:744}, +D{l:7,t:10,i:719}, +D{l:8,t:10,i:809}, +D{l:136,t:10,i:834}, +D{l:8,t:0,i:921}, +D{l:136,t:10,i:796}, +D{l:5,t:10,i:210}, +D{l:6,t:10,i:213}, +D{l:7,t:10,i:60}, +D{l:10,t:10,i:364}, +D{l:139,t:10,i:135}, +D{l:5,t:0,i:397}, +D{l:6,t:0,i:154}, +D{l:7,t:0,i:676}, +D{l:8,t:0,i:443}, +D{l:8,t:0,i:609}, +D{l:9,t:0,i:24}, +D{l:9,t:0,i:325}, +D{l:10,t:0,i:35}, +D{l:11,t:0,i:535}, +D{l:11,t:0,i:672}, +D{l:11,t:0,i:1018}, +D{l:12,t:0,i:637}, +D{l:16,t:0,i:30}, +D{l:5,t:10,i:607}, +D{l:8,t:10,i:326}, +D{l:136,t:10,i:490}, +D{l:4,t:10,i:701}, +D{l:5,t:10,i:472}, +D{l:6,t:11,i:9}, +D{l:6,t:11,i:397}, +D{l:7,t:11,i:53}, +D{l:7,t:11,i:1742}, +D{l:9,t:10,i:758}, +D{l:10,t:11,i:632}, +D{l:11,t:11,i:828}, +D{l:140,t:11,i:146}, +D{l:135,t:10,i:380}, +D{l:135,t:10,i:1947}, +D{l:148,t:11,i:109}, +D{l:10,t:10,i:278}, +D{l:138,t:11,i:278}, +D{l:134,t:0,i:856}, +D{l:7,t:0,i:139}, +D{l:4,t:10,i:386}, +D{l:8,t:10,i:405}, +D{l:8,t:10,i:728}, +D{l:9,t:10,i:497}, +D{l:11,t:10,i:110}, +D{l:11,t:10,i:360}, +D{l:15,t:10,i:37}, +D{l:144,t:10,i:84}, +D{l:141,t:0,i:282}, +D{l:133,t:0,i:981}, +D{l:5,t:0,i:288}, +D{l:7,t:10,i:1452}, +D{l:7,t:10,i:1480}, +D{l:8,t:10,i:634}, +D{l:140,t:10,i:472}, +D{l:7,t:0,i:1890}, +D{l:8,t:11,i:367}, +D{l:10,t:11,i:760}, +D{l:14,t:11,i:79}, +D{l:20,t:11,i:17}, +D{l:152,t:11,i:0}, +D{l:4,t:10,i:524}, +D{l:136,t:10,i:810}, +D{l:4,t:0,i:56}, +D{l:7,t:0,i:1791}, +D{l:8,t:0,i:607}, +D{l:8,t:0,i:651}, +D{l:11,t:0,i:465}, +D{l:11,t:0,i:835}, +D{l:12,t:0,i:337}, +D{l:141,t:0,i:480}, +D{l:10,t:10,i:238}, +D{l:141,t:10,i:33}, +D{l:11,t:11,i:417}, +D{l:12,t:11,i:223}, +D{l:140,t:11,i:265}, +D{l:9,t:0,i:158}, +D{l:10,t:0,i:411}, +D{l:140,t:0,i:261}, +D{l:133,t:10,i:532}, +D{l:133,t:10,i:997}, +D{l:12,t:11,i:186}, +D{l:12,t:11,i:292}, +D{l:14,t:11,i:100}, +D{l:146,t:11,i:70}, +D{l:6,t:0,i:1403}, +D{l:136,t:0,i:617}, +D{l:134,t:0,i:1205}, +D{l:139,t:0,i:563}, +D{l:4,t:0,i:242}, +D{l:134,t:0,i:333}, +D{l:4,t:11,i:186}, +D{l:5,t:11,i:157}, +D{l:8,t:11,i:168}, +D{l:138,t:11,i:6}, +D{l:132,t:0,i:369}, +D{l:133,t:11,i:875}, +D{l:5,t:10,i:782}, +D{l:5,t:10,i:829}, +D{l:134,t:10,i:1738}, +D{l:134,t:0,i:622}, +D{l:135,t:11,i:1272}, +D{l:6,t:0,i:1407}, +D{l:7,t:11,i:111}, +D{l:136,t:11,i:581}, +D{l:7,t:10,i:1823}, +D{l:139,t:10,i:693}, +D{l:7,t:0,i:160}, +D{l:10,t:0,i:624}, +D{l:142,t:0,i:279}, +D{l:132,t:0,i:363}, +D{l:10,t:11,i:589}, +D{l:12,t:11,i:111}, +D{l:13,t:11,i:260}, +D{l:14,t:11,i:82}, +D{l:18,t:11,i:63}, +D{l:147,t:11,i:45}, +D{l:7,t:11,i:1364}, +D{l:7,t:11,i:1907}, +D{l:141,t:11,i:158}, +D{l:4,t:11,i:404}, +D{l:4,t:11,i:659}, +D{l:135,t:11,i:675}, +D{l:13,t:11,i:211}, +D{l:14,t:11,i:133}, +D{l:14,t:11,i:204}, +D{l:15,t:11,i:64}, +D{l:15,t:11,i:69}, +D{l:15,t:11,i:114}, +D{l:16,t:11,i:10}, +D{l:19,t:11,i:23}, +D{l:19,t:11,i:35}, +D{l:19,t:11,i:39}, +D{l:19,t:11,i:51}, +D{l:19,t:11,i:71}, +D{l:19,t:11,i:75}, +D{l:152,t:11,i:15}, +D{l:4,t:10,i:78}, +D{l:5,t:10,i:96}, +D{l:5,t:10,i:182}, +D{l:7,t:10,i:1724}, +D{l:7,t:10,i:1825}, +D{l:10,t:10,i:394}, +D{l:10,t:10,i:471}, +D{l:11,t:10,i:532}, +D{l:14,t:10,i:340}, +D{l:145,t:10,i:88}, +D{l:135,t:10,i:1964}, +D{l:133,t:11,i:391}, +D{l:11,t:11,i:887}, +D{l:14,t:11,i:365}, +D{l:142,t:11,i:375}, +D{l:5,t:11,i:540}, +D{l:6,t:11,i:1697}, +D{l:7,t:11,i:222}, +D{l:136,t:11,i:341}, +D{l:134,t:11,i:78}, +D{l:9,t:0,i:601}, +D{l:9,t:0,i:619}, +D{l:10,t:0,i:505}, +D{l:10,t:0,i:732}, +D{l:11,t:0,i:355}, +D{l:140,t:0,i:139}, +D{l:134,t:0,i:292}, +D{l:139,t:0,i:174}, +D{l:5,t:0,i:177}, +D{l:6,t:0,i:616}, +D{l:7,t:0,i:827}, +D{l:9,t:0,i:525}, +D{l:138,t:0,i:656}, +D{l:10,t:0,i:31}, +D{l:6,t:10,i:215}, +D{l:7,t:10,i:1028}, +D{l:7,t:10,i:1473}, +D{l:7,t:10,i:1721}, +D{l:9,t:10,i:424}, +D{l:138,t:10,i:779}, +D{l:135,t:10,i:584}, +D{l:136,t:11,i:293}, +D{l:134,t:0,i:685}, +D{l:135,t:11,i:1868}, +D{l:133,t:11,i:460}, +D{l:7,t:0,i:647}, +D{l:6,t:10,i:67}, +D{l:7,t:10,i:1630}, +D{l:9,t:10,i:354}, +D{l:9,t:10,i:675}, +D{l:10,t:10,i:830}, +D{l:14,t:10,i:80}, +D{l:145,t:10,i:80}, +D{l:4,t:0,i:161}, +D{l:133,t:0,i:631}, +D{l:6,t:10,i:141}, +D{l:7,t:10,i:225}, +D{l:9,t:10,i:59}, +D{l:9,t:10,i:607}, +D{l:10,t:10,i:312}, +D{l:11,t:10,i:687}, +D{l:12,t:10,i:555}, +D{l:13,t:10,i:373}, +D{l:13,t:10,i:494}, +D{l:148,t:10,i:58}, +D{l:7,t:11,i:965}, +D{l:7,t:11,i:1460}, +D{l:135,t:11,i:1604}, +D{l:136,t:10,i:783}, +D{l:134,t:11,i:388}, +D{l:6,t:0,i:722}, +D{l:6,t:0,i:1267}, +D{l:4,t:11,i:511}, +D{l:9,t:11,i:333}, +D{l:9,t:11,i:379}, +D{l:10,t:11,i:602}, +D{l:11,t:11,i:441}, +D{l:11,t:11,i:723}, +D{l:11,t:11,i:976}, +D{l:140,t:11,i:357}, +D{l:134,t:0,i:1797}, +D{l:135,t:0,i:1684}, +D{l:9,t:0,i:469}, +D{l:9,t:0,i:709}, +D{l:12,t:0,i:512}, +D{l:14,t:0,i:65}, +D{l:17,t:0,i:12}, +D{l:5,t:11,i:938}, +D{l:136,t:11,i:707}, +D{l:7,t:0,i:1230}, +D{l:136,t:0,i:531}, +D{l:10,t:0,i:229}, +D{l:11,t:0,i:73}, +D{l:11,t:0,i:376}, +D{l:139,t:0,i:433}, +D{l:12,t:0,i:268}, +D{l:12,t:0,i:640}, +D{l:142,t:0,i:119}, +D{l:7,t:10,i:430}, +D{l:139,t:10,i:46}, +D{l:6,t:0,i:558}, +D{l:7,t:0,i:651}, +D{l:8,t:0,i:421}, +D{l:9,t:0,i:0}, +D{l:10,t:0,i:34}, +D{l:139,t:0,i:1008}, +D{l:6,t:0,i:106}, +D{l:7,t:0,i:1786}, +D{l:7,t:0,i:1821}, +D{l:9,t:0,i:102}, +D{l:9,t:0,i:763}, +D{l:5,t:10,i:602}, +D{l:7,t:10,i:2018}, +D{l:137,t:10,i:418}, +D{l:5,t:0,i:65}, +D{l:6,t:0,i:416}, +D{l:7,t:0,i:1720}, +D{l:7,t:0,i:1924}, +D{l:10,t:0,i:109}, +D{l:11,t:0,i:14}, +D{l:11,t:0,i:70}, +D{l:11,t:0,i:569}, +D{l:11,t:0,i:735}, +D{l:15,t:0,i:153}, +D{l:20,t:0,i:80}, +D{l:136,t:10,i:677}, +D{l:135,t:11,i:1625}, +D{l:137,t:11,i:772}, +D{l:136,t:0,i:595}, +D{l:6,t:11,i:469}, +D{l:7,t:11,i:1709}, +D{l:138,t:11,i:515}, +D{l:7,t:0,i:1832}, +D{l:138,t:0,i:374}, +D{l:9,t:0,i:106}, +D{l:9,t:0,i:163}, +D{l:9,t:0,i:296}, +D{l:10,t:0,i:167}, +D{l:10,t:0,i:172}, +D{l:10,t:0,i:777}, +D{l:139,t:0,i:16}, +D{l:6,t:0,i:6}, +D{l:7,t:0,i:81}, +D{l:7,t:0,i:771}, +D{l:7,t:0,i:1731}, +D{l:9,t:0,i:405}, +D{l:138,t:0,i:421}, +D{l:4,t:11,i:500}, +D{l:135,t:11,i:938}, +D{l:5,t:11,i:68}, +D{l:134,t:11,i:383}, +D{l:5,t:0,i:881}, +D{l:133,t:0,i:885}, +D{l:6,t:0,i:854}, +D{l:6,t:0,i:1132}, +D{l:6,t:0,i:1495}, +D{l:6,t:0,i:1526}, +D{l:6,t:0,i:1533}, +D{l:134,t:0,i:1577}, +D{l:4,t:11,i:337}, +D{l:6,t:11,i:353}, +D{l:7,t:11,i:1934}, +D{l:8,t:11,i:488}, +D{l:137,t:11,i:429}, +D{l:7,t:11,i:236}, +D{l:7,t:11,i:1795}, +D{l:8,t:11,i:259}, +D{l:9,t:11,i:135}, +D{l:9,t:11,i:177}, +D{l:10,t:11,i:825}, +D{l:11,t:11,i:115}, +D{l:11,t:11,i:370}, +D{l:11,t:11,i:405}, +D{l:11,t:11,i:604}, +D{l:12,t:11,i:10}, +D{l:12,t:11,i:667}, +D{l:12,t:11,i:669}, +D{l:13,t:11,i:76}, +D{l:14,t:11,i:310}, +D{l:15,t:11,i:76}, +D{l:15,t:11,i:147}, +D{l:148,t:11,i:23}, +D{l:5,t:0,i:142}, +D{l:134,t:0,i:546}, +D{l:4,t:11,i:15}, +D{l:5,t:11,i:22}, +D{l:6,t:11,i:244}, +D{l:7,t:11,i:40}, +D{l:7,t:11,i:200}, +D{l:7,t:11,i:906}, +D{l:7,t:11,i:1199}, +D{l:9,t:11,i:616}, +D{l:10,t:11,i:716}, +D{l:11,t:11,i:635}, +D{l:11,t:11,i:801}, +D{l:140,t:11,i:458}, +D{l:5,t:0,i:466}, +D{l:11,t:0,i:571}, +D{l:12,t:0,i:198}, +D{l:13,t:0,i:283}, +D{l:14,t:0,i:186}, +D{l:15,t:0,i:21}, +D{l:15,t:0,i:103}, +D{l:135,t:10,i:329}, +D{l:4,t:0,i:185}, +D{l:5,t:0,i:257}, +D{l:5,t:0,i:839}, +D{l:5,t:0,i:936}, +D{l:9,t:0,i:399}, +D{l:10,t:0,i:258}, +D{l:10,t:0,i:395}, +D{l:10,t:0,i:734}, +D{l:11,t:0,i:1014}, +D{l:12,t:0,i:23}, +D{l:13,t:0,i:350}, +D{l:14,t:0,i:150}, +D{l:19,t:0,i:6}, +D{l:135,t:11,i:1735}, +D{l:12,t:11,i:36}, +D{l:141,t:11,i:337}, +D{l:5,t:11,i:598}, +D{l:7,t:11,i:791}, +D{l:8,t:11,i:108}, +D{l:137,t:11,i:123}, +D{l:132,t:10,i:469}, +D{l:7,t:0,i:404}, +D{l:7,t:0,i:1377}, +D{l:7,t:0,i:1430}, +D{l:7,t:0,i:2017}, +D{l:8,t:0,i:149}, +D{l:8,t:0,i:239}, +D{l:8,t:0,i:512}, +D{l:8,t:0,i:793}, +D{l:8,t:0,i:818}, +D{l:9,t:0,i:474}, +D{l:9,t:0,i:595}, +D{l:10,t:0,i:122}, +D{l:10,t:0,i:565}, +D{l:10,t:0,i:649}, +D{l:10,t:0,i:783}, +D{l:11,t:0,i:239}, +D{l:11,t:0,i:295}, +D{l:11,t:0,i:447}, +D{l:11,t:0,i:528}, +D{l:11,t:0,i:639}, +D{l:11,t:0,i:800}, +D{l:12,t:0,i:25}, +D{l:12,t:0,i:77}, +D{l:12,t:0,i:157}, +D{l:12,t:0,i:256}, +D{l:12,t:0,i:316}, +D{l:12,t:0,i:390}, +D{l:12,t:0,i:391}, +D{l:12,t:0,i:395}, +D{l:12,t:0,i:478}, +D{l:12,t:0,i:503}, +D{l:12,t:0,i:592}, +D{l:12,t:0,i:680}, +D{l:13,t:0,i:50}, +D{l:13,t:0,i:53}, +D{l:13,t:0,i:132}, +D{l:13,t:0,i:198}, +D{l:13,t:0,i:322}, +D{l:13,t:0,i:415}, +D{l:13,t:0,i:511}, +D{l:14,t:0,i:71}, +D{l:14,t:0,i:395}, +D{l:15,t:0,i:71}, +D{l:15,t:0,i:136}, +D{l:17,t:0,i:123}, +D{l:18,t:0,i:93}, +D{l:147,t:0,i:58}, +D{l:136,t:0,i:712}, +D{l:134,t:10,i:1743}, +D{l:5,t:10,i:929}, +D{l:6,t:10,i:340}, +D{l:8,t:10,i:376}, +D{l:136,t:10,i:807}, +D{l:6,t:0,i:1848}, +D{l:8,t:0,i:860}, +D{l:10,t:0,i:856}, +D{l:10,t:0,i:859}, +D{l:10,t:0,i:925}, +D{l:10,t:0,i:941}, +D{l:140,t:0,i:762}, +D{l:6,t:0,i:629}, +D{l:6,t:0,i:906}, +D{l:9,t:0,i:810}, +D{l:140,t:0,i:652}, +D{l:5,t:10,i:218}, +D{l:7,t:10,i:1610}, +D{l:138,t:10,i:83}, +D{l:7,t:10,i:1512}, +D{l:135,t:10,i:1794}, +D{l:4,t:0,i:377}, +D{l:24,t:0,i:13}, +D{l:4,t:11,i:155}, +D{l:7,t:11,i:1689}, +D{l:11,t:10,i:0}, +D{l:144,t:10,i:78}, +D{l:4,t:11,i:164}, +D{l:5,t:11,i:151}, +D{l:5,t:11,i:730}, +D{l:5,t:11,i:741}, +D{l:7,t:11,i:498}, +D{l:7,t:11,i:870}, +D{l:7,t:11,i:1542}, +D{l:12,t:11,i:213}, +D{l:14,t:11,i:36}, +D{l:14,t:11,i:391}, +D{l:17,t:11,i:111}, +D{l:18,t:11,i:6}, +D{l:18,t:11,i:46}, +D{l:18,t:11,i:151}, +D{l:19,t:11,i:36}, +D{l:20,t:11,i:32}, +D{l:20,t:11,i:56}, +D{l:20,t:11,i:69}, +D{l:20,t:11,i:102}, +D{l:21,t:11,i:4}, +D{l:22,t:11,i:8}, +D{l:22,t:11,i:10}, +D{l:22,t:11,i:14}, +D{l:150,t:11,i:31}, +D{l:7,t:0,i:1842}, +D{l:133,t:10,i:571}, +D{l:4,t:10,i:455}, +D{l:4,t:11,i:624}, +D{l:135,t:11,i:1752}, +D{l:134,t:0,i:1501}, +D{l:4,t:11,i:492}, +D{l:5,t:11,i:451}, +D{l:6,t:10,i:161}, +D{l:7,t:10,i:372}, +D{l:137,t:10,i:597}, +D{l:132,t:10,i:349}, +D{l:4,t:0,i:180}, +D{l:135,t:0,i:1906}, +D{l:135,t:11,i:835}, +D{l:141,t:11,i:70}, +D{l:132,t:0,i:491}, +D{l:137,t:10,i:751}, +D{l:6,t:10,i:432}, +D{l:139,t:10,i:322}, +D{l:4,t:0,i:171}, +D{l:138,t:0,i:234}, +D{l:6,t:11,i:113}, +D{l:135,t:11,i:436}, +D{l:4,t:0,i:586}, +D{l:7,t:0,i:1186}, +D{l:138,t:0,i:631}, +D{l:5,t:10,i:468}, +D{l:10,t:10,i:325}, +D{l:11,t:10,i:856}, +D{l:12,t:10,i:345}, +D{l:143,t:10,i:104}, +D{l:5,t:10,i:223}, +D{l:10,t:11,i:592}, +D{l:10,t:11,i:753}, +D{l:12,t:11,i:317}, +D{l:12,t:11,i:355}, +D{l:12,t:11,i:465}, +D{l:12,t:11,i:469}, +D{l:12,t:11,i:560}, +D{l:12,t:11,i:578}, +D{l:141,t:11,i:243}, +D{l:132,t:10,i:566}, +D{l:135,t:11,i:520}, +D{l:4,t:10,i:59}, +D{l:135,t:10,i:1394}, +D{l:6,t:10,i:436}, +D{l:139,t:10,i:481}, +D{l:9,t:0,i:931}, +D{l:10,t:0,i:334}, +D{l:20,t:0,i:71}, +D{l:4,t:10,i:48}, +D{l:5,t:10,i:271}, +D{l:7,t:10,i:953}, +D{l:135,t:11,i:1878}, +D{l:11,t:0,i:170}, +D{l:5,t:10,i:610}, +D{l:136,t:10,i:457}, +D{l:133,t:10,i:755}, +D{l:6,t:0,i:1587}, +D{l:135,t:10,i:1217}, +D{l:4,t:10,i:197}, +D{l:149,t:11,i:26}, +D{l:133,t:11,i:585}, +D{l:137,t:11,i:521}, +D{l:133,t:0,i:765}, +D{l:133,t:10,i:217}, +D{l:139,t:11,i:586}, +D{l:133,t:0,i:424}, +D{l:9,t:11,i:752}, +D{l:12,t:11,i:610}, +D{l:13,t:11,i:431}, +D{l:16,t:11,i:59}, +D{l:146,t:11,i:109}, +D{l:136,t:0,i:714}, +D{l:7,t:0,i:685}, +D{l:132,t:11,i:307}, +D{l:9,t:0,i:420}, +D{l:10,t:0,i:269}, +D{l:10,t:0,i:285}, +D{l:10,t:0,i:576}, +D{l:11,t:0,i:397}, +D{l:13,t:0,i:175}, +D{l:145,t:0,i:90}, +D{l:132,t:0,i:429}, +D{l:133,t:11,i:964}, +D{l:9,t:11,i:463}, +D{l:138,t:11,i:595}, +D{l:7,t:0,i:18}, +D{l:7,t:0,i:699}, +D{l:7,t:0,i:1966}, +D{l:8,t:0,i:752}, +D{l:9,t:0,i:273}, +D{l:9,t:0,i:412}, +D{l:9,t:0,i:703}, +D{l:10,t:0,i:71}, +D{l:10,t:0,i:427}, +D{l:138,t:0,i:508}, +D{l:4,t:10,i:165}, +D{l:7,t:10,i:1398}, +D{l:135,t:10,i:1829}, +D{l:4,t:0,i:53}, +D{l:5,t:0,i:186}, +D{l:7,t:0,i:752}, +D{l:7,t:0,i:828}, +D{l:142,t:0,i:116}, +D{l:8,t:0,i:575}, +D{l:10,t:0,i:289}, +D{l:139,t:0,i:319}, +D{l:132,t:0,i:675}, +D{l:134,t:0,i:1424}, +D{l:4,t:11,i:75}, +D{l:5,t:11,i:180}, +D{l:6,t:11,i:500}, +D{l:7,t:11,i:58}, +D{l:7,t:11,i:710}, +D{l:138,t:11,i:645}, +D{l:133,t:11,i:649}, +D{l:6,t:11,i:276}, +D{l:7,t:11,i:282}, +D{l:7,t:11,i:879}, +D{l:7,t:11,i:924}, +D{l:8,t:11,i:459}, +D{l:9,t:11,i:599}, +D{l:9,t:11,i:754}, +D{l:11,t:11,i:574}, +D{l:12,t:11,i:128}, +D{l:12,t:11,i:494}, +D{l:13,t:11,i:52}, +D{l:13,t:11,i:301}, +D{l:15,t:11,i:30}, +D{l:143,t:11,i:132}, +D{l:6,t:0,i:647}, +D{l:134,t:0,i:1095}, +D{l:5,t:10,i:9}, +D{l:7,t:10,i:297}, +D{l:7,t:10,i:966}, +D{l:140,t:10,i:306}, +D{l:132,t:11,i:200}, +D{l:134,t:0,i:1334}, +D{l:5,t:10,i:146}, +D{l:6,t:10,i:411}, +D{l:138,t:10,i:721}, +D{l:6,t:0,i:209}, +D{l:6,t:0,i:1141}, +D{l:6,t:0,i:1288}, +D{l:8,t:0,i:468}, +D{l:9,t:0,i:210}, +D{l:11,t:0,i:36}, +D{l:12,t:0,i:28}, +D{l:12,t:0,i:630}, +D{l:13,t:0,i:21}, +D{l:13,t:0,i:349}, +D{l:14,t:0,i:7}, +D{l:145,t:0,i:13}, +D{l:6,t:10,i:177}, +D{l:135,t:10,i:467}, +D{l:4,t:0,i:342}, +D{l:135,t:0,i:1179}, +D{l:10,t:11,i:454}, +D{l:140,t:11,i:324}, +D{l:4,t:0,i:928}, +D{l:133,t:0,i:910}, +D{l:7,t:0,i:1838}, +D{l:6,t:11,i:225}, +D{l:137,t:11,i:211}, +D{l:16,t:0,i:101}, +D{l:20,t:0,i:115}, +D{l:20,t:0,i:118}, +D{l:148,t:0,i:122}, +D{l:4,t:0,i:496}, +D{l:135,t:0,i:856}, +D{l:4,t:0,i:318}, +D{l:11,t:0,i:654}, +D{l:7,t:11,i:718}, +D{l:139,t:11,i:102}, +D{l:8,t:11,i:58}, +D{l:9,t:11,i:724}, +D{l:11,t:11,i:809}, +D{l:13,t:11,i:113}, +D{l:145,t:11,i:72}, +D{l:5,t:10,i:200}, +D{l:6,t:11,i:345}, +D{l:135,t:11,i:1247}, +D{l:8,t:11,i:767}, +D{l:8,t:11,i:803}, +D{l:9,t:11,i:301}, +D{l:137,t:11,i:903}, +D{l:7,t:0,i:915}, +D{l:8,t:0,i:247}, +D{l:19,t:0,i:0}, +D{l:7,t:11,i:1949}, +D{l:136,t:11,i:674}, +D{l:4,t:0,i:202}, +D{l:5,t:0,i:382}, +D{l:6,t:0,i:454}, +D{l:7,t:0,i:936}, +D{l:7,t:0,i:1803}, +D{l:8,t:0,i:758}, +D{l:9,t:0,i:375}, +D{l:9,t:0,i:895}, +D{l:10,t:0,i:743}, +D{l:10,t:0,i:792}, +D{l:11,t:0,i:978}, +D{l:11,t:0,i:1012}, +D{l:142,t:0,i:109}, +D{l:7,t:0,i:1150}, +D{l:7,t:0,i:1425}, +D{l:7,t:0,i:1453}, +D{l:140,t:0,i:513}, +D{l:134,t:11,i:259}, +D{l:138,t:0,i:791}, +D{l:11,t:0,i:821}, +D{l:12,t:0,i:110}, +D{l:12,t:0,i:153}, +D{l:18,t:0,i:41}, +D{l:150,t:0,i:19}, +D{l:134,t:10,i:481}, +D{l:132,t:0,i:796}, +D{l:6,t:0,i:445}, +D{l:9,t:0,i:909}, +D{l:136,t:11,i:254}, +D{l:10,t:0,i:776}, +D{l:13,t:0,i:345}, +D{l:142,t:0,i:425}, +D{l:4,t:10,i:84}, +D{l:7,t:10,i:1482}, +D{l:10,t:10,i:76}, +D{l:138,t:10,i:142}, +D{l:135,t:11,i:742}, +D{l:6,t:0,i:578}, +D{l:133,t:10,i:1015}, +D{l:6,t:0,i:1387}, +D{l:4,t:10,i:315}, +D{l:5,t:10,i:507}, +D{l:135,t:10,i:1370}, +D{l:4,t:0,i:438}, +D{l:133,t:0,i:555}, +D{l:136,t:0,i:766}, +D{l:133,t:11,i:248}, +D{l:134,t:10,i:1722}, +D{l:4,t:11,i:116}, +D{l:5,t:11,i:95}, +D{l:5,t:11,i:445}, +D{l:7,t:11,i:1688}, +D{l:8,t:11,i:29}, +D{l:9,t:11,i:272}, +D{l:11,t:11,i:509}, +D{l:139,t:11,i:915}, +D{l:135,t:0,i:541}, +D{l:133,t:11,i:543}, +D{l:8,t:10,i:222}, +D{l:8,t:10,i:476}, +D{l:9,t:10,i:238}, +D{l:11,t:10,i:516}, +D{l:11,t:10,i:575}, +D{l:15,t:10,i:109}, +D{l:146,t:10,i:100}, +D{l:6,t:0,i:880}, +D{l:134,t:0,i:1191}, +D{l:5,t:11,i:181}, +D{l:136,t:11,i:41}, +D{l:134,t:0,i:1506}, +D{l:132,t:11,i:681}, +D{l:7,t:11,i:25}, +D{l:8,t:11,i:202}, +D{l:138,t:11,i:536}, +D{l:139,t:0,i:983}, +D{l:137,t:0,i:768}, +D{l:132,t:0,i:584}, +D{l:9,t:11,i:423}, +D{l:140,t:11,i:89}, +D{l:8,t:11,i:113}, +D{l:9,t:11,i:877}, +D{l:10,t:11,i:554}, +D{l:11,t:11,i:83}, +D{l:12,t:11,i:136}, +D{l:147,t:11,i:109}, +D{l:7,t:10,i:706}, +D{l:7,t:10,i:1058}, +D{l:138,t:10,i:538}, +D{l:133,t:11,i:976}, +D{l:4,t:11,i:206}, +D{l:135,t:11,i:746}, +D{l:136,t:11,i:526}, +D{l:140,t:0,i:737}, +D{l:11,t:10,i:92}, +D{l:11,t:10,i:196}, +D{l:11,t:10,i:409}, +D{l:11,t:10,i:450}, +D{l:11,t:10,i:666}, +D{l:11,t:10,i:777}, +D{l:12,t:10,i:262}, +D{l:13,t:10,i:385}, +D{l:13,t:10,i:393}, +D{l:15,t:10,i:115}, +D{l:16,t:10,i:45}, +D{l:145,t:10,i:82}, +D{l:4,t:0,i:226}, +D{l:4,t:0,i:326}, +D{l:7,t:0,i:1770}, +D{l:4,t:11,i:319}, +D{l:5,t:11,i:699}, +D{l:138,t:11,i:673}, +D{l:6,t:10,i:40}, +D{l:135,t:10,i:1781}, +D{l:5,t:0,i:426}, +D{l:8,t:0,i:30}, +D{l:9,t:0,i:2}, +D{l:11,t:0,i:549}, +D{l:147,t:0,i:122}, +D{l:6,t:0,i:1161}, +D{l:134,t:0,i:1329}, +D{l:138,t:10,i:97}, +D{l:6,t:10,i:423}, +D{l:7,t:10,i:665}, +D{l:135,t:10,i:1210}, +D{l:7,t:11,i:13}, +D{l:8,t:11,i:226}, +D{l:10,t:11,i:537}, +D{l:11,t:11,i:570}, +D{l:11,t:11,i:605}, +D{l:11,t:11,i:799}, +D{l:11,t:11,i:804}, +D{l:12,t:11,i:85}, +D{l:12,t:11,i:516}, +D{l:12,t:11,i:623}, +D{l:13,t:11,i:112}, +D{l:13,t:11,i:361}, +D{l:14,t:11,i:77}, +D{l:14,t:11,i:78}, +D{l:17,t:11,i:28}, +D{l:147,t:11,i:110}, +D{l:132,t:11,i:769}, +D{l:132,t:11,i:551}, +D{l:132,t:11,i:728}, +D{l:147,t:0,i:117}, +D{l:9,t:11,i:57}, +D{l:9,t:11,i:459}, +D{l:10,t:11,i:425}, +D{l:11,t:11,i:119}, +D{l:12,t:11,i:184}, +D{l:12,t:11,i:371}, +D{l:13,t:11,i:358}, +D{l:145,t:11,i:51}, +D{l:5,t:11,i:188}, +D{l:5,t:11,i:814}, +D{l:8,t:11,i:10}, +D{l:9,t:11,i:421}, +D{l:9,t:11,i:729}, +D{l:10,t:11,i:609}, +D{l:139,t:11,i:689}, +D{l:134,t:11,i:624}, +D{l:135,t:11,i:298}, +D{l:135,t:0,i:462}, +D{l:4,t:0,i:345}, +D{l:139,t:10,i:624}, +D{l:136,t:10,i:574}, +D{l:4,t:0,i:385}, +D{l:7,t:0,i:265}, +D{l:135,t:0,i:587}, +D{l:6,t:0,i:808}, +D{l:132,t:11,i:528}, +D{l:133,t:0,i:398}, +D{l:132,t:10,i:354}, +D{l:4,t:0,i:347}, +D{l:5,t:0,i:423}, +D{l:5,t:0,i:996}, +D{l:135,t:0,i:1329}, +D{l:135,t:10,i:1558}, +D{l:7,t:0,i:1259}, +D{l:9,t:0,i:125}, +D{l:139,t:0,i:65}, +D{l:5,t:0,i:136}, +D{l:6,t:0,i:136}, +D{l:136,t:0,i:644}, +D{l:5,t:11,i:104}, +D{l:6,t:11,i:173}, +D{l:135,t:11,i:1631}, +D{l:135,t:0,i:469}, +D{l:133,t:10,i:830}, +D{l:4,t:0,i:278}, +D{l:5,t:0,i:465}, +D{l:135,t:0,i:1367}, +D{l:7,t:11,i:810}, +D{l:8,t:11,i:138}, +D{l:8,t:11,i:342}, +D{l:9,t:11,i:84}, +D{l:10,t:11,i:193}, +D{l:11,t:11,i:883}, +D{l:140,t:11,i:359}, +D{l:5,t:10,i:496}, +D{l:135,t:10,i:203}, +D{l:4,t:0,i:433}, +D{l:133,t:0,i:719}, +D{l:6,t:11,i:95}, +D{l:134,t:10,i:547}, +D{l:5,t:10,i:88}, +D{l:137,t:10,i:239}, +D{l:6,t:11,i:406}, +D{l:10,t:11,i:409}, +D{l:10,t:11,i:447}, +D{l:11,t:11,i:44}, +D{l:140,t:11,i:100}, +D{l:134,t:0,i:1423}, +D{l:7,t:10,i:650}, +D{l:135,t:10,i:1310}, +D{l:134,t:0,i:749}, +D{l:135,t:11,i:1243}, +D{l:135,t:0,i:1363}, +D{l:6,t:0,i:381}, +D{l:7,t:0,i:645}, +D{l:7,t:0,i:694}, +D{l:8,t:0,i:546}, +D{l:7,t:10,i:1076}, +D{l:9,t:10,i:80}, +D{l:11,t:10,i:78}, +D{l:11,t:10,i:421}, +D{l:11,t:10,i:534}, +D{l:140,t:10,i:545}, +D{l:134,t:11,i:1636}, +D{l:135,t:11,i:1344}, +D{l:12,t:0,i:277}, +D{l:7,t:10,i:274}, +D{l:11,t:10,i:479}, +D{l:139,t:10,i:507}, +D{l:6,t:0,i:705}, +D{l:6,t:0,i:783}, +D{l:6,t:0,i:1275}, +D{l:6,t:0,i:1481}, +D{l:4,t:11,i:282}, +D{l:7,t:11,i:1034}, +D{l:11,t:11,i:398}, +D{l:11,t:11,i:634}, +D{l:12,t:11,i:1}, +D{l:12,t:11,i:79}, +D{l:12,t:11,i:544}, +D{l:14,t:11,i:237}, +D{l:17,t:11,i:10}, +D{l:146,t:11,i:20}, +D{l:134,t:0,i:453}, +D{l:4,t:0,i:555}, +D{l:8,t:0,i:536}, +D{l:10,t:0,i:288}, +D{l:11,t:0,i:1005}, +D{l:4,t:10,i:497}, +D{l:135,t:10,i:1584}, +D{l:5,t:11,i:118}, +D{l:5,t:11,i:499}, +D{l:6,t:11,i:476}, +D{l:7,t:11,i:600}, +D{l:7,t:11,i:888}, +D{l:135,t:11,i:1096}, +D{l:138,t:0,i:987}, +D{l:7,t:0,i:1107}, +D{l:7,t:10,i:261}, +D{l:7,t:10,i:1115}, +D{l:7,t:10,i:1354}, +D{l:7,t:10,i:1588}, +D{l:7,t:10,i:1705}, +D{l:7,t:10,i:1902}, +D{l:9,t:10,i:465}, +D{l:10,t:10,i:248}, +D{l:10,t:10,i:349}, +D{l:10,t:10,i:647}, +D{l:11,t:10,i:527}, +D{l:11,t:10,i:660}, +D{l:11,t:10,i:669}, +D{l:12,t:10,i:529}, +D{l:141,t:10,i:305}, +D{l:7,t:11,i:296}, +D{l:7,t:11,i:596}, +D{l:8,t:11,i:560}, +D{l:8,t:11,i:586}, +D{l:9,t:11,i:612}, +D{l:11,t:11,i:100}, +D{l:11,t:11,i:304}, +D{l:12,t:11,i:46}, +D{l:13,t:11,i:89}, +D{l:14,t:11,i:112}, +D{l:145,t:11,i:122}, +D{l:9,t:0,i:370}, +D{l:138,t:0,i:90}, +D{l:136,t:10,i:13}, +D{l:132,t:0,i:860}, +D{l:7,t:10,i:642}, +D{l:8,t:10,i:250}, +D{l:11,t:10,i:123}, +D{l:11,t:10,i:137}, +D{l:13,t:10,i:48}, +D{l:142,t:10,i:95}, +D{l:135,t:10,i:1429}, +D{l:137,t:11,i:321}, +D{l:132,t:0,i:257}, +D{l:135,t:0,i:2031}, +D{l:7,t:0,i:1768}, +D{l:7,t:11,i:1599}, +D{l:7,t:11,i:1723}, +D{l:8,t:11,i:79}, +D{l:8,t:11,i:106}, +D{l:8,t:11,i:190}, +D{l:8,t:11,i:302}, +D{l:8,t:11,i:383}, +D{l:9,t:11,i:119}, +D{l:9,t:11,i:233}, +D{l:9,t:11,i:298}, +D{l:9,t:11,i:419}, +D{l:9,t:11,i:471}, +D{l:10,t:11,i:181}, +D{l:10,t:11,i:406}, +D{l:11,t:11,i:57}, +D{l:11,t:11,i:85}, +D{l:11,t:11,i:120}, +D{l:11,t:11,i:177}, +D{l:11,t:11,i:296}, +D{l:11,t:11,i:382}, +D{l:11,t:11,i:454}, +D{l:11,t:11,i:758}, +D{l:11,t:11,i:999}, +D{l:12,t:11,i:27}, +D{l:12,t:11,i:98}, +D{l:12,t:11,i:131}, +D{l:12,t:11,i:245}, +D{l:12,t:11,i:312}, +D{l:12,t:11,i:446}, +D{l:12,t:11,i:454}, +D{l:13,t:11,i:25}, +D{l:13,t:11,i:98}, +D{l:13,t:11,i:426}, +D{l:13,t:11,i:508}, +D{l:14,t:11,i:6}, +D{l:14,t:11,i:163}, +D{l:14,t:11,i:272}, +D{l:14,t:11,i:277}, +D{l:14,t:11,i:370}, +D{l:15,t:11,i:95}, +D{l:15,t:11,i:138}, +D{l:15,t:11,i:167}, +D{l:17,t:11,i:18}, +D{l:17,t:11,i:38}, +D{l:20,t:11,i:96}, +D{l:149,t:11,i:32}, +D{l:5,t:11,i:722}, +D{l:134,t:11,i:1759}, +D{l:145,t:11,i:16}, +D{l:6,t:0,i:1071}, +D{l:134,t:0,i:1561}, +D{l:10,t:10,i:545}, +D{l:140,t:10,i:301}, +D{l:6,t:0,i:83}, +D{l:6,t:0,i:1733}, +D{l:135,t:0,i:1389}, +D{l:4,t:0,i:835}, +D{l:135,t:0,i:1818}, +D{l:133,t:11,i:258}, +D{l:4,t:10,i:904}, +D{l:133,t:10,i:794}, +D{l:134,t:0,i:2006}, +D{l:5,t:11,i:30}, +D{l:7,t:11,i:495}, +D{l:8,t:11,i:134}, +D{l:9,t:11,i:788}, +D{l:140,t:11,i:438}, +D{l:135,t:11,i:2004}, +D{l:137,t:0,i:696}, +D{l:5,t:11,i:50}, +D{l:6,t:11,i:439}, +D{l:7,t:11,i:780}, +D{l:135,t:11,i:1040}, +D{l:7,t:11,i:772}, +D{l:7,t:11,i:1104}, +D{l:7,t:11,i:1647}, +D{l:11,t:11,i:269}, +D{l:11,t:11,i:539}, +D{l:11,t:11,i:607}, +D{l:11,t:11,i:627}, +D{l:11,t:11,i:706}, +D{l:11,t:11,i:975}, +D{l:12,t:11,i:248}, +D{l:12,t:11,i:311}, +D{l:12,t:11,i:434}, +D{l:12,t:11,i:600}, +D{l:12,t:11,i:622}, +D{l:13,t:11,i:297}, +D{l:13,t:11,i:367}, +D{l:13,t:11,i:485}, +D{l:14,t:11,i:69}, +D{l:14,t:11,i:409}, +D{l:143,t:11,i:108}, +D{l:5,t:11,i:1}, +D{l:6,t:11,i:81}, +D{l:138,t:11,i:520}, +D{l:7,t:0,i:1718}, +D{l:9,t:0,i:95}, +D{l:9,t:0,i:274}, +D{l:10,t:0,i:279}, +D{l:10,t:0,i:317}, +D{l:10,t:0,i:420}, +D{l:11,t:0,i:303}, +D{l:11,t:0,i:808}, +D{l:12,t:0,i:134}, +D{l:12,t:0,i:367}, +D{l:13,t:0,i:149}, +D{l:13,t:0,i:347}, +D{l:14,t:0,i:349}, +D{l:14,t:0,i:406}, +D{l:18,t:0,i:22}, +D{l:18,t:0,i:89}, +D{l:18,t:0,i:122}, +D{l:147,t:0,i:47}, +D{l:5,t:11,i:482}, +D{l:8,t:11,i:98}, +D{l:9,t:11,i:172}, +D{l:10,t:11,i:222}, +D{l:10,t:11,i:700}, +D{l:10,t:11,i:822}, +D{l:11,t:11,i:302}, +D{l:11,t:11,i:778}, +D{l:12,t:11,i:50}, +D{l:12,t:11,i:127}, +D{l:12,t:11,i:396}, +D{l:13,t:11,i:62}, +D{l:13,t:11,i:328}, +D{l:14,t:11,i:122}, +D{l:147,t:11,i:72}, +D{l:7,t:10,i:386}, +D{l:138,t:10,i:713}, +D{l:6,t:10,i:7}, +D{l:6,t:10,i:35}, +D{l:7,t:10,i:147}, +D{l:7,t:10,i:1069}, +D{l:7,t:10,i:1568}, +D{l:7,t:10,i:1575}, +D{l:7,t:10,i:1917}, +D{l:8,t:10,i:43}, +D{l:8,t:10,i:208}, +D{l:9,t:10,i:128}, +D{l:9,t:10,i:866}, +D{l:10,t:10,i:20}, +D{l:11,t:10,i:981}, +D{l:147,t:10,i:33}, +D{l:133,t:0,i:26}, +D{l:132,t:0,i:550}, +D{l:5,t:11,i:2}, +D{l:7,t:11,i:1494}, +D{l:136,t:11,i:589}, +D{l:6,t:11,i:512}, +D{l:7,t:11,i:797}, +D{l:8,t:11,i:253}, +D{l:9,t:11,i:77}, +D{l:10,t:11,i:1}, +D{l:10,t:11,i:129}, +D{l:10,t:11,i:225}, +D{l:11,t:11,i:118}, +D{l:11,t:11,i:226}, +D{l:11,t:11,i:251}, +D{l:11,t:11,i:430}, +D{l:11,t:11,i:701}, +D{l:11,t:11,i:974}, +D{l:11,t:11,i:982}, +D{l:12,t:11,i:64}, +D{l:12,t:11,i:260}, +D{l:12,t:11,i:488}, +D{l:140,t:11,i:690}, +D{l:7,t:10,i:893}, +D{l:141,t:10,i:424}, +D{l:134,t:0,i:901}, +D{l:136,t:0,i:822}, +D{l:4,t:0,i:902}, +D{l:5,t:0,i:809}, +D{l:134,t:0,i:122}, +D{l:6,t:0,i:807}, +D{l:134,t:0,i:1366}, +D{l:7,t:0,i:262}, +D{l:5,t:11,i:748}, +D{l:134,t:11,i:553}, +D{l:133,t:0,i:620}, +D{l:4,t:0,i:34}, +D{l:5,t:0,i:574}, +D{l:7,t:0,i:279}, +D{l:7,t:0,i:1624}, +D{l:136,t:0,i:601}, +D{l:9,t:0,i:170}, +D{l:6,t:10,i:322}, +D{l:9,t:10,i:552}, +D{l:11,t:10,i:274}, +D{l:13,t:10,i:209}, +D{l:13,t:10,i:499}, +D{l:14,t:10,i:85}, +D{l:15,t:10,i:126}, +D{l:145,t:10,i:70}, +D{l:132,t:0,i:537}, +D{l:4,t:11,i:12}, +D{l:7,t:11,i:420}, +D{l:7,t:11,i:522}, +D{l:7,t:11,i:809}, +D{l:8,t:11,i:797}, +D{l:141,t:11,i:88}, +D{l:133,t:0,i:332}, +D{l:8,t:10,i:83}, +D{l:8,t:10,i:742}, +D{l:8,t:10,i:817}, +D{l:9,t:10,i:28}, +D{l:9,t:10,i:29}, +D{l:9,t:10,i:885}, +D{l:10,t:10,i:387}, +D{l:11,t:10,i:633}, +D{l:11,t:10,i:740}, +D{l:13,t:10,i:235}, +D{l:13,t:10,i:254}, +D{l:15,t:10,i:143}, +D{l:143,t:10,i:146}, +D{l:6,t:0,i:1909}, +D{l:9,t:0,i:964}, +D{l:12,t:0,i:822}, +D{l:12,t:0,i:854}, +D{l:12,t:0,i:865}, +D{l:12,t:0,i:910}, +D{l:12,t:0,i:938}, +D{l:15,t:0,i:169}, +D{l:15,t:0,i:208}, +D{l:15,t:0,i:211}, +D{l:18,t:0,i:205}, +D{l:18,t:0,i:206}, +D{l:18,t:0,i:220}, +D{l:18,t:0,i:223}, +D{l:152,t:0,i:24}, +D{l:140,t:10,i:49}, +D{l:5,t:11,i:528}, +D{l:135,t:11,i:1580}, +D{l:6,t:0,i:261}, +D{l:8,t:0,i:182}, +D{l:139,t:0,i:943}, +D{l:134,t:0,i:1721}, +D{l:4,t:0,i:933}, +D{l:133,t:0,i:880}, +D{l:136,t:11,i:321}, +D{l:5,t:11,i:266}, +D{l:9,t:11,i:290}, +D{l:9,t:11,i:364}, +D{l:10,t:11,i:293}, +D{l:11,t:11,i:606}, +D{l:142,t:11,i:45}, +D{l:6,t:0,i:1609}, +D{l:4,t:11,i:50}, +D{l:6,t:11,i:510}, +D{l:6,t:11,i:594}, +D{l:9,t:11,i:121}, +D{l:10,t:11,i:49}, +D{l:10,t:11,i:412}, +D{l:139,t:11,i:834}, +D{l:7,t:0,i:895}, +D{l:136,t:11,i:748}, +D{l:132,t:11,i:466}, +D{l:4,t:10,i:110}, +D{l:10,t:10,i:415}, +D{l:10,t:10,i:597}, +D{l:142,t:10,i:206}, +D{l:133,t:0,i:812}, +D{l:135,t:11,i:281}, +D{l:6,t:0,i:1890}, +D{l:6,t:0,i:1902}, +D{l:6,t:0,i:1916}, +D{l:9,t:0,i:929}, +D{l:9,t:0,i:942}, +D{l:9,t:0,i:975}, +D{l:9,t:0,i:984}, +D{l:9,t:0,i:986}, +D{l:9,t:0,i:1011}, +D{l:9,t:0,i:1019}, +D{l:12,t:0,i:804}, +D{l:12,t:0,i:851}, +D{l:12,t:0,i:867}, +D{l:12,t:0,i:916}, +D{l:12,t:0,i:923}, +D{l:15,t:0,i:194}, +D{l:15,t:0,i:204}, +D{l:15,t:0,i:210}, +D{l:15,t:0,i:222}, +D{l:15,t:0,i:223}, +D{l:15,t:0,i:229}, +D{l:15,t:0,i:250}, +D{l:18,t:0,i:179}, +D{l:18,t:0,i:186}, +D{l:18,t:0,i:192}, +D{l:7,t:10,i:205}, +D{l:135,t:10,i:2000}, +D{l:132,t:11,i:667}, +D{l:135,t:0,i:778}, +D{l:4,t:0,i:137}, +D{l:7,t:0,i:1178}, +D{l:135,t:0,i:1520}, +D{l:134,t:0,i:1314}, +D{l:4,t:11,i:242}, +D{l:134,t:11,i:333}, +D{l:6,t:0,i:1661}, +D{l:7,t:0,i:1975}, +D{l:7,t:0,i:2009}, +D{l:135,t:0,i:2011}, +D{l:134,t:0,i:1591}, +D{l:4,t:10,i:283}, +D{l:135,t:10,i:1194}, +D{l:11,t:0,i:820}, +D{l:150,t:0,i:51}, +D{l:4,t:11,i:39}, +D{l:5,t:11,i:36}, +D{l:7,t:11,i:1843}, +D{l:8,t:11,i:407}, +D{l:11,t:11,i:144}, +D{l:140,t:11,i:523}, +D{l:134,t:10,i:1720}, +D{l:4,t:11,i:510}, +D{l:7,t:11,i:29}, +D{l:7,t:11,i:66}, +D{l:7,t:11,i:1980}, +D{l:10,t:11,i:487}, +D{l:10,t:11,i:809}, +D{l:146,t:11,i:9}, +D{l:5,t:0,i:89}, +D{l:7,t:0,i:1915}, +D{l:9,t:0,i:185}, +D{l:9,t:0,i:235}, +D{l:10,t:0,i:64}, +D{l:10,t:0,i:270}, +D{l:10,t:0,i:403}, +D{l:10,t:0,i:469}, +D{l:10,t:0,i:529}, +D{l:10,t:0,i:590}, +D{l:11,t:0,i:140}, +D{l:11,t:0,i:860}, +D{l:13,t:0,i:1}, +D{l:13,t:0,i:422}, +D{l:14,t:0,i:341}, +D{l:14,t:0,i:364}, +D{l:17,t:0,i:93}, +D{l:18,t:0,i:113}, +D{l:19,t:0,i:97}, +D{l:147,t:0,i:113}, +D{l:133,t:0,i:695}, +D{l:6,t:0,i:987}, +D{l:134,t:0,i:1160}, +D{l:5,t:0,i:6}, +D{l:6,t:0,i:183}, +D{l:7,t:0,i:680}, +D{l:7,t:0,i:978}, +D{l:7,t:0,i:1013}, +D{l:7,t:0,i:1055}, +D{l:12,t:0,i:230}, +D{l:13,t:0,i:172}, +D{l:146,t:0,i:29}, +D{l:134,t:11,i:570}, +D{l:132,t:11,i:787}, +D{l:134,t:11,i:518}, +D{l:6,t:0,i:29}, +D{l:139,t:0,i:63}, +D{l:132,t:11,i:516}, +D{l:136,t:11,i:821}, +D{l:132,t:0,i:311}, +D{l:134,t:0,i:1740}, +D{l:7,t:0,i:170}, +D{l:8,t:0,i:90}, +D{l:8,t:0,i:177}, +D{l:8,t:0,i:415}, +D{l:11,t:0,i:714}, +D{l:14,t:0,i:281}, +D{l:136,t:10,i:735}, +D{l:134,t:0,i:1961}, +D{l:135,t:11,i:1405}, +D{l:4,t:11,i:10}, +D{l:7,t:11,i:917}, +D{l:139,t:11,i:786}, +D{l:5,t:10,i:132}, +D{l:9,t:10,i:486}, +D{l:9,t:10,i:715}, +D{l:10,t:10,i:458}, +D{l:11,t:10,i:373}, +D{l:11,t:10,i:668}, +D{l:11,t:10,i:795}, +D{l:11,t:10,i:897}, +D{l:12,t:10,i:272}, +D{l:12,t:10,i:424}, +D{l:12,t:10,i:539}, +D{l:12,t:10,i:558}, +D{l:14,t:10,i:245}, +D{l:14,t:10,i:263}, +D{l:14,t:10,i:264}, +D{l:14,t:10,i:393}, +D{l:142,t:10,i:403}, +D{l:11,t:0,i:91}, +D{l:13,t:0,i:129}, +D{l:15,t:0,i:101}, +D{l:145,t:0,i:125}, +D{l:135,t:0,i:1132}, +D{l:4,t:0,i:494}, +D{l:6,t:0,i:74}, +D{l:7,t:0,i:44}, +D{l:7,t:0,i:407}, +D{l:12,t:0,i:17}, +D{l:15,t:0,i:5}, +D{l:148,t:0,i:11}, +D{l:133,t:10,i:379}, +D{l:5,t:0,i:270}, +D{l:5,t:11,i:684}, +D{l:6,t:10,i:89}, +D{l:6,t:10,i:400}, +D{l:7,t:10,i:1569}, +D{l:7,t:10,i:1623}, +D{l:7,t:10,i:1850}, +D{l:8,t:10,i:218}, +D{l:8,t:10,i:422}, +D{l:9,t:10,i:570}, +D{l:138,t:10,i:626}, +D{l:4,t:0,i:276}, +D{l:133,t:0,i:296}, +D{l:6,t:0,i:1523}, +D{l:134,t:11,i:27}, +D{l:6,t:10,i:387}, +D{l:7,t:10,i:882}, +D{l:141,t:10,i:111}, +D{l:6,t:10,i:224}, +D{l:7,t:10,i:877}, +D{l:137,t:10,i:647}, +D{l:135,t:10,i:790}, +D{l:4,t:0,i:7}, +D{l:5,t:0,i:90}, +D{l:5,t:0,i:158}, +D{l:6,t:0,i:542}, +D{l:7,t:0,i:221}, +D{l:7,t:0,i:1574}, +D{l:9,t:0,i:490}, +D{l:10,t:0,i:540}, +D{l:11,t:0,i:443}, +D{l:139,t:0,i:757}, +D{l:7,t:0,i:588}, +D{l:9,t:0,i:175}, +D{l:138,t:0,i:530}, +D{l:135,t:10,i:394}, +D{l:142,t:11,i:23}, +D{l:134,t:0,i:786}, +D{l:135,t:0,i:580}, +D{l:7,t:0,i:88}, +D{l:136,t:0,i:627}, +D{l:5,t:0,i:872}, +D{l:6,t:0,i:57}, +D{l:7,t:0,i:471}, +D{l:9,t:0,i:447}, +D{l:137,t:0,i:454}, +D{l:6,t:11,i:342}, +D{l:6,t:11,i:496}, +D{l:8,t:11,i:275}, +D{l:137,t:11,i:206}, +D{l:4,t:11,i:909}, +D{l:133,t:11,i:940}, +D{l:6,t:0,i:735}, +D{l:132,t:11,i:891}, +D{l:8,t:0,i:845}, +D{l:8,t:0,i:916}, +D{l:135,t:10,i:1409}, +D{l:5,t:0,i:31}, +D{l:134,t:0,i:614}, +D{l:11,t:0,i:458}, +D{l:12,t:0,i:15}, +D{l:140,t:0,i:432}, +D{l:8,t:0,i:330}, +D{l:140,t:0,i:477}, +D{l:4,t:0,i:530}, +D{l:5,t:0,i:521}, +D{l:7,t:0,i:1200}, +D{l:10,t:0,i:460}, +D{l:132,t:11,i:687}, +D{l:6,t:0,i:424}, +D{l:135,t:0,i:1866}, +D{l:9,t:0,i:569}, +D{l:12,t:0,i:12}, +D{l:12,t:0,i:81}, +D{l:12,t:0,i:319}, +D{l:13,t:0,i:69}, +D{l:14,t:0,i:259}, +D{l:16,t:0,i:87}, +D{l:17,t:0,i:1}, +D{l:17,t:0,i:21}, +D{l:17,t:0,i:24}, +D{l:18,t:0,i:15}, +D{l:18,t:0,i:56}, +D{l:18,t:0,i:59}, +D{l:18,t:0,i:127}, +D{l:18,t:0,i:154}, +D{l:19,t:0,i:19}, +D{l:148,t:0,i:31}, +D{l:7,t:0,i:1302}, +D{l:136,t:10,i:38}, +D{l:134,t:11,i:253}, +D{l:5,t:10,i:261}, +D{l:7,t:10,i:78}, +D{l:7,t:10,i:199}, +D{l:8,t:10,i:815}, +D{l:9,t:10,i:126}, +D{l:138,t:10,i:342}, +D{l:5,t:0,i:595}, +D{l:135,t:0,i:1863}, +D{l:6,t:11,i:41}, +D{l:141,t:11,i:160}, +D{l:5,t:0,i:13}, +D{l:134,t:0,i:142}, +D{l:6,t:0,i:97}, +D{l:7,t:0,i:116}, +D{l:8,t:0,i:322}, +D{l:8,t:0,i:755}, +D{l:9,t:0,i:548}, +D{l:10,t:0,i:714}, +D{l:11,t:0,i:884}, +D{l:13,t:0,i:324}, +D{l:7,t:11,i:1304}, +D{l:138,t:11,i:477}, +D{l:132,t:10,i:628}, +D{l:134,t:11,i:1718}, +D{l:7,t:10,i:266}, +D{l:136,t:10,i:804}, +D{l:135,t:10,i:208}, +D{l:7,t:0,i:1021}, +D{l:6,t:10,i:79}, +D{l:135,t:10,i:1519}, +D{l:7,t:0,i:1472}, +D{l:135,t:0,i:1554}, +D{l:6,t:11,i:362}, +D{l:146,t:11,i:51}, +D{l:7,t:0,i:1071}, +D{l:7,t:0,i:1541}, +D{l:7,t:0,i:1767}, +D{l:7,t:0,i:1806}, +D{l:11,t:0,i:162}, +D{l:11,t:0,i:242}, +D{l:11,t:0,i:452}, +D{l:12,t:0,i:605}, +D{l:15,t:0,i:26}, +D{l:144,t:0,i:44}, +D{l:136,t:10,i:741}, +D{l:133,t:11,i:115}, +D{l:145,t:0,i:115}, +D{l:134,t:10,i:376}, +D{l:6,t:0,i:1406}, +D{l:134,t:0,i:1543}, +D{l:5,t:11,i:193}, +D{l:12,t:11,i:178}, +D{l:13,t:11,i:130}, +D{l:145,t:11,i:84}, +D{l:135,t:0,i:1111}, +D{l:8,t:0,i:1}, +D{l:9,t:0,i:650}, +D{l:10,t:0,i:326}, +D{l:5,t:11,i:705}, +D{l:137,t:11,i:606}, +D{l:5,t:0,i:488}, +D{l:6,t:0,i:527}, +D{l:7,t:0,i:489}, +D{l:7,t:0,i:1636}, +D{l:8,t:0,i:121}, +D{l:8,t:0,i:144}, +D{l:8,t:0,i:359}, +D{l:9,t:0,i:193}, +D{l:9,t:0,i:241}, +D{l:9,t:0,i:336}, +D{l:9,t:0,i:882}, +D{l:11,t:0,i:266}, +D{l:11,t:0,i:372}, +D{l:11,t:0,i:944}, +D{l:12,t:0,i:401}, +D{l:140,t:0,i:641}, +D{l:135,t:11,i:174}, +D{l:6,t:0,i:267}, +D{l:7,t:10,i:244}, +D{l:7,t:10,i:632}, +D{l:7,t:10,i:1609}, +D{l:8,t:10,i:178}, +D{l:8,t:10,i:638}, +D{l:141,t:10,i:58}, +D{l:134,t:0,i:1983}, +D{l:134,t:0,i:1155}, +D{l:134,t:0,i:1575}, +D{l:134,t:0,i:1438}, +D{l:9,t:0,i:31}, +D{l:10,t:0,i:244}, +D{l:10,t:0,i:699}, +D{l:12,t:0,i:149}, +D{l:141,t:0,i:497}, +D{l:133,t:0,i:377}, +D{l:4,t:11,i:122}, +D{l:5,t:11,i:796}, +D{l:5,t:11,i:952}, +D{l:6,t:11,i:1660}, +D{l:6,t:11,i:1671}, +D{l:8,t:11,i:567}, +D{l:9,t:11,i:687}, +D{l:9,t:11,i:742}, +D{l:10,t:11,i:686}, +D{l:11,t:11,i:356}, +D{l:11,t:11,i:682}, +D{l:140,t:11,i:281}, +D{l:145,t:0,i:101}, +D{l:11,t:11,i:0}, +D{l:144,t:11,i:78}, +D{l:5,t:11,i:179}, +D{l:5,t:10,i:791}, +D{l:7,t:11,i:1095}, +D{l:135,t:11,i:1213}, +D{l:8,t:11,i:372}, +D{l:9,t:11,i:122}, +D{l:138,t:11,i:175}, +D{l:7,t:10,i:686}, +D{l:8,t:10,i:33}, +D{l:8,t:10,i:238}, +D{l:10,t:10,i:616}, +D{l:11,t:10,i:467}, +D{l:11,t:10,i:881}, +D{l:13,t:10,i:217}, +D{l:13,t:10,i:253}, +D{l:142,t:10,i:268}, +D{l:9,t:0,i:476}, +D{l:4,t:11,i:66}, +D{l:7,t:11,i:722}, +D{l:135,t:11,i:904}, +D{l:7,t:11,i:352}, +D{l:137,t:11,i:684}, +D{l:135,t:0,i:2023}, +D{l:135,t:0,i:1836}, +D{l:132,t:10,i:447}, +D{l:5,t:0,i:843}, +D{l:144,t:0,i:35}, +D{l:137,t:11,i:779}, +D{l:141,t:11,i:35}, +D{l:4,t:10,i:128}, +D{l:5,t:10,i:415}, +D{l:6,t:10,i:462}, +D{l:7,t:10,i:294}, +D{l:7,t:10,i:578}, +D{l:10,t:10,i:710}, +D{l:139,t:10,i:86}, +D{l:132,t:0,i:554}, +D{l:133,t:0,i:536}, +D{l:136,t:10,i:587}, +D{l:5,t:0,i:207}, +D{l:9,t:0,i:79}, +D{l:11,t:0,i:625}, +D{l:145,t:0,i:7}, +D{l:7,t:0,i:1371}, +D{l:6,t:10,i:427}, +D{l:138,t:10,i:692}, +D{l:4,t:0,i:424}, +D{l:4,t:10,i:195}, +D{l:135,t:10,i:802}, +D{l:8,t:0,i:785}, +D{l:133,t:11,i:564}, +D{l:135,t:0,i:336}, +D{l:4,t:0,i:896}, +D{l:6,t:0,i:1777}, +D{l:134,t:11,i:556}, +D{l:137,t:11,i:103}, +D{l:134,t:10,i:1683}, +D{l:7,t:11,i:544}, +D{l:8,t:11,i:719}, +D{l:138,t:11,i:61}, +D{l:138,t:10,i:472}, +D{l:4,t:11,i:5}, +D{l:5,t:11,i:498}, +D{l:136,t:11,i:637}, +D{l:7,t:0,i:750}, +D{l:9,t:0,i:223}, +D{l:11,t:0,i:27}, +D{l:11,t:0,i:466}, +D{l:12,t:0,i:624}, +D{l:14,t:0,i:265}, +D{l:146,t:0,i:61}, +D{l:12,t:0,i:238}, +D{l:18,t:0,i:155}, +D{l:12,t:11,i:238}, +D{l:146,t:11,i:155}, +D{l:151,t:10,i:28}, +D{l:133,t:11,i:927}, +D{l:12,t:0,i:383}, +D{l:5,t:10,i:3}, +D{l:8,t:10,i:578}, +D{l:9,t:10,i:118}, +D{l:10,t:10,i:705}, +D{l:141,t:10,i:279}, +D{l:4,t:11,i:893}, +D{l:5,t:11,i:780}, +D{l:133,t:11,i:893}, +D{l:4,t:0,i:603}, +D{l:133,t:0,i:661}, +D{l:4,t:0,i:11}, +D{l:6,t:0,i:128}, +D{l:7,t:0,i:231}, +D{l:7,t:0,i:1533}, +D{l:10,t:0,i:725}, +D{l:5,t:10,i:229}, +D{l:5,t:11,i:238}, +D{l:135,t:11,i:1350}, +D{l:8,t:10,i:102}, +D{l:10,t:10,i:578}, +D{l:10,t:10,i:672}, +D{l:12,t:10,i:496}, +D{l:13,t:10,i:408}, +D{l:14,t:10,i:121}, +D{l:145,t:10,i:106}, +D{l:132,t:0,i:476}, +D{l:134,t:0,i:1552}, +D{l:134,t:11,i:1729}, +D{l:8,t:10,i:115}, +D{l:8,t:10,i:350}, +D{l:9,t:10,i:489}, +D{l:10,t:10,i:128}, +D{l:11,t:10,i:306}, +D{l:12,t:10,i:373}, +D{l:14,t:10,i:30}, +D{l:17,t:10,i:79}, +D{l:19,t:10,i:80}, +D{l:150,t:10,i:55}, +D{l:135,t:0,i:1807}, +D{l:4,t:0,i:680}, +D{l:4,t:11,i:60}, +D{l:7,t:11,i:760}, +D{l:7,t:11,i:1800}, +D{l:8,t:11,i:314}, +D{l:9,t:11,i:700}, +D{l:139,t:11,i:487}, +D{l:4,t:10,i:230}, +D{l:5,t:10,i:702}, +D{l:148,t:11,i:94}, +D{l:132,t:11,i:228}, +D{l:139,t:0,i:435}, +D{l:9,t:0,i:20}, +D{l:10,t:0,i:324}, +D{l:10,t:0,i:807}, +D{l:139,t:0,i:488}, +D{l:6,t:10,i:1728}, +D{l:136,t:11,i:419}, +D{l:4,t:10,i:484}, +D{l:18,t:10,i:26}, +D{l:19,t:10,i:42}, +D{l:20,t:10,i:43}, +D{l:21,t:10,i:0}, +D{l:23,t:10,i:27}, +D{l:152,t:10,i:14}, +D{l:135,t:0,i:1431}, +D{l:133,t:11,i:828}, +D{l:5,t:0,i:112}, +D{l:6,t:0,i:103}, +D{l:6,t:0,i:150}, +D{l:7,t:0,i:1303}, +D{l:9,t:0,i:292}, +D{l:10,t:0,i:481}, +D{l:20,t:0,i:13}, +D{l:7,t:11,i:176}, +D{l:7,t:11,i:178}, +D{l:7,t:11,i:1110}, +D{l:10,t:11,i:481}, +D{l:148,t:11,i:13}, +D{l:138,t:0,i:356}, +D{l:4,t:11,i:51}, +D{l:5,t:11,i:39}, +D{l:6,t:11,i:4}, +D{l:7,t:11,i:591}, +D{l:7,t:11,i:849}, +D{l:7,t:11,i:951}, +D{l:7,t:11,i:1129}, +D{l:7,t:11,i:1613}, +D{l:7,t:11,i:1760}, +D{l:7,t:11,i:1988}, +D{l:9,t:11,i:434}, +D{l:10,t:11,i:754}, +D{l:11,t:11,i:25}, +D{l:11,t:11,i:37}, +D{l:139,t:11,i:414}, +D{l:6,t:0,i:1963}, +D{l:134,t:0,i:2000}, +D{l:132,t:10,i:633}, +D{l:6,t:0,i:1244}, +D{l:133,t:11,i:902}, +D{l:135,t:11,i:928}, +D{l:140,t:0,i:18}, +D{l:138,t:0,i:204}, +D{l:135,t:11,i:1173}, +D{l:134,t:0,i:867}, +D{l:4,t:0,i:708}, +D{l:8,t:0,i:15}, +D{l:9,t:0,i:50}, +D{l:9,t:0,i:386}, +D{l:11,t:0,i:18}, +D{l:11,t:0,i:529}, +D{l:140,t:0,i:228}, +D{l:134,t:11,i:270}, +D{l:4,t:0,i:563}, +D{l:7,t:0,i:109}, +D{l:7,t:0,i:592}, +D{l:7,t:0,i:637}, +D{l:7,t:0,i:770}, +D{l:8,t:0,i:463}, +D{l:9,t:0,i:60}, +D{l:9,t:0,i:335}, +D{l:9,t:0,i:904}, +D{l:10,t:0,i:73}, +D{l:11,t:0,i:434}, +D{l:12,t:0,i:585}, +D{l:13,t:0,i:331}, +D{l:18,t:0,i:110}, +D{l:148,t:0,i:60}, +D{l:132,t:0,i:502}, +D{l:14,t:11,i:359}, +D{l:19,t:11,i:52}, +D{l:148,t:11,i:47}, +D{l:6,t:11,i:377}, +D{l:7,t:11,i:1025}, +D{l:9,t:11,i:613}, +D{l:145,t:11,i:104}, +D{l:6,t:0,i:347}, +D{l:10,t:0,i:161}, +D{l:5,t:10,i:70}, +D{l:5,t:10,i:622}, +D{l:6,t:10,i:334}, +D{l:7,t:10,i:1032}, +D{l:9,t:10,i:171}, +D{l:11,t:10,i:26}, +D{l:11,t:10,i:213}, +D{l:11,t:10,i:637}, +D{l:11,t:10,i:707}, +D{l:12,t:10,i:202}, +D{l:12,t:10,i:380}, +D{l:13,t:10,i:226}, +D{l:13,t:10,i:355}, +D{l:14,t:10,i:222}, +D{l:145,t:10,i:42}, +D{l:132,t:11,i:416}, +D{l:4,t:0,i:33}, +D{l:5,t:0,i:102}, +D{l:6,t:0,i:284}, +D{l:7,t:0,i:1079}, +D{l:7,t:0,i:1423}, +D{l:7,t:0,i:1702}, +D{l:8,t:0,i:470}, +D{l:9,t:0,i:554}, +D{l:9,t:0,i:723}, +D{l:11,t:0,i:333}, +D{l:142,t:11,i:372}, +D{l:5,t:11,i:152}, +D{l:5,t:11,i:197}, +D{l:7,t:11,i:340}, +D{l:7,t:11,i:867}, +D{l:10,t:11,i:548}, +D{l:10,t:11,i:581}, +D{l:11,t:11,i:6}, +D{l:12,t:11,i:3}, +D{l:12,t:11,i:19}, +D{l:14,t:11,i:110}, +D{l:142,t:11,i:289}, +D{l:7,t:0,i:246}, +D{l:135,t:0,i:840}, +D{l:6,t:0,i:10}, +D{l:8,t:0,i:571}, +D{l:9,t:0,i:739}, +D{l:143,t:0,i:91}, +D{l:6,t:0,i:465}, +D{l:7,t:0,i:1465}, +D{l:4,t:10,i:23}, +D{l:4,t:10,i:141}, +D{l:5,t:10,i:313}, +D{l:5,t:10,i:1014}, +D{l:6,t:10,i:50}, +D{l:7,t:10,i:142}, +D{l:7,t:10,i:559}, +D{l:8,t:10,i:640}, +D{l:9,t:10,i:460}, +D{l:9,t:10,i:783}, +D{l:11,t:10,i:741}, +D{l:12,t:10,i:183}, +D{l:141,t:10,i:488}, +D{l:133,t:0,i:626}, +D{l:136,t:0,i:614}, +D{l:138,t:0,i:237}, +D{l:7,t:11,i:34}, +D{l:7,t:11,i:190}, +D{l:8,t:11,i:28}, +D{l:8,t:11,i:141}, +D{l:8,t:11,i:444}, +D{l:8,t:11,i:811}, +D{l:9,t:11,i:468}, +D{l:11,t:11,i:334}, +D{l:12,t:11,i:24}, +D{l:12,t:11,i:386}, +D{l:140,t:11,i:576}, +D{l:133,t:11,i:757}, +D{l:5,t:0,i:18}, +D{l:6,t:0,i:526}, +D{l:13,t:0,i:24}, +D{l:13,t:0,i:110}, +D{l:19,t:0,i:5}, +D{l:147,t:0,i:44}, +D{l:6,t:0,i:506}, +D{l:134,t:11,i:506}, +D{l:135,t:11,i:1553}, +D{l:4,t:0,i:309}, +D{l:5,t:0,i:462}, +D{l:7,t:0,i:970}, +D{l:7,t:0,i:1097}, +D{l:22,t:0,i:30}, +D{l:22,t:0,i:33}, +D{l:7,t:11,i:1385}, +D{l:11,t:11,i:582}, +D{l:11,t:11,i:650}, +D{l:11,t:11,i:901}, +D{l:11,t:11,i:949}, +D{l:12,t:11,i:232}, +D{l:12,t:11,i:236}, +D{l:13,t:11,i:413}, +D{l:13,t:11,i:501}, +D{l:146,t:11,i:116}, +D{l:9,t:0,i:140}, +D{l:5,t:10,i:222}, +D{l:138,t:10,i:534}, +D{l:6,t:0,i:1056}, +D{l:137,t:10,i:906}, +D{l:134,t:0,i:1704}, +D{l:138,t:10,i:503}, +D{l:134,t:0,i:1036}, +D{l:5,t:10,i:154}, +D{l:7,t:10,i:1491}, +D{l:10,t:10,i:379}, +D{l:138,t:10,i:485}, +D{l:4,t:11,i:383}, +D{l:133,t:10,i:716}, +D{l:134,t:0,i:1315}, +D{l:5,t:0,i:86}, +D{l:7,t:0,i:743}, +D{l:9,t:0,i:85}, +D{l:10,t:0,i:281}, +D{l:10,t:0,i:432}, +D{l:11,t:0,i:825}, +D{l:12,t:0,i:251}, +D{l:13,t:0,i:118}, +D{l:142,t:0,i:378}, +D{l:8,t:0,i:264}, +D{l:4,t:10,i:91}, +D{l:5,t:10,i:388}, +D{l:5,t:10,i:845}, +D{l:6,t:10,i:206}, +D{l:6,t:10,i:252}, +D{l:6,t:10,i:365}, +D{l:7,t:10,i:136}, +D{l:7,t:10,i:531}, +D{l:136,t:10,i:621}, +D{l:5,t:0,i:524}, +D{l:133,t:0,i:744}, +D{l:5,t:11,i:277}, +D{l:141,t:11,i:247}, +D{l:132,t:11,i:435}, +D{l:10,t:0,i:107}, +D{l:140,t:0,i:436}, +D{l:132,t:0,i:927}, +D{l:10,t:0,i:123}, +D{l:12,t:0,i:670}, +D{l:146,t:0,i:94}, +D{l:7,t:0,i:1149}, +D{l:9,t:0,i:156}, +D{l:138,t:0,i:957}, +D{l:5,t:11,i:265}, +D{l:6,t:11,i:212}, +D{l:135,t:11,i:28}, +D{l:133,t:0,i:778}, +D{l:133,t:0,i:502}, +D{l:8,t:0,i:196}, +D{l:10,t:0,i:283}, +D{l:139,t:0,i:406}, +D{l:135,t:10,i:576}, +D{l:136,t:11,i:535}, +D{l:134,t:0,i:1312}, +D{l:5,t:10,i:771}, +D{l:5,t:10,i:863}, +D{l:5,t:10,i:898}, +D{l:6,t:10,i:1632}, +D{l:6,t:10,i:1644}, +D{l:134,t:10,i:1780}, +D{l:5,t:0,i:855}, +D{l:5,t:10,i:331}, +D{l:135,t:11,i:1487}, +D{l:132,t:11,i:702}, +D{l:5,t:11,i:808}, +D{l:135,t:11,i:2045}, +D{l:7,t:0,i:1400}, +D{l:9,t:0,i:446}, +D{l:138,t:0,i:45}, +D{l:140,t:10,i:632}, +D{l:132,t:0,i:1003}, +D{l:5,t:11,i:166}, +D{l:8,t:11,i:739}, +D{l:140,t:11,i:511}, +D{l:5,t:10,i:107}, +D{l:7,t:10,i:201}, +D{l:136,t:10,i:518}, +D{l:6,t:10,i:446}, +D{l:135,t:10,i:1817}, +D{l:134,t:0,i:1532}, +D{l:134,t:0,i:1097}, +D{l:4,t:11,i:119}, +D{l:5,t:11,i:170}, +D{l:5,t:11,i:447}, +D{l:7,t:11,i:1708}, +D{l:7,t:11,i:1889}, +D{l:9,t:11,i:357}, +D{l:9,t:11,i:719}, +D{l:12,t:11,i:486}, +D{l:140,t:11,i:596}, +D{l:9,t:10,i:851}, +D{l:141,t:10,i:510}, +D{l:7,t:0,i:612}, +D{l:8,t:0,i:545}, +D{l:8,t:0,i:568}, +D{l:8,t:0,i:642}, +D{l:9,t:0,i:717}, +D{l:10,t:0,i:541}, +D{l:10,t:0,i:763}, +D{l:11,t:0,i:449}, +D{l:12,t:0,i:489}, +D{l:13,t:0,i:153}, +D{l:13,t:0,i:296}, +D{l:14,t:0,i:138}, +D{l:14,t:0,i:392}, +D{l:15,t:0,i:50}, +D{l:16,t:0,i:6}, +D{l:16,t:0,i:12}, +D{l:20,t:0,i:9}, +D{l:132,t:10,i:504}, +D{l:4,t:11,i:450}, +D{l:135,t:11,i:1158}, +D{l:11,t:0,i:54}, +D{l:13,t:0,i:173}, +D{l:13,t:0,i:294}, +D{l:5,t:10,i:883}, +D{l:5,t:10,i:975}, +D{l:8,t:10,i:392}, +D{l:148,t:10,i:7}, +D{l:13,t:0,i:455}, +D{l:15,t:0,i:99}, +D{l:15,t:0,i:129}, +D{l:144,t:0,i:68}, +D{l:135,t:0,i:172}, +D{l:132,t:11,i:754}, +D{l:5,t:10,i:922}, +D{l:134,t:10,i:1707}, +D{l:134,t:0,i:1029}, +D{l:17,t:11,i:39}, +D{l:148,t:11,i:36}, +D{l:4,t:0,i:568}, +D{l:5,t:10,i:993}, +D{l:7,t:10,i:515}, +D{l:137,t:10,i:91}, +D{l:132,t:0,i:732}, +D{l:10,t:0,i:617}, +D{l:138,t:11,i:617}, +D{l:134,t:0,i:974}, +D{l:7,t:0,i:989}, +D{l:10,t:0,i:377}, +D{l:12,t:0,i:363}, +D{l:13,t:0,i:68}, +D{l:13,t:0,i:94}, +D{l:14,t:0,i:108}, +D{l:142,t:0,i:306}, +D{l:136,t:0,i:733}, +D{l:132,t:0,i:428}, +D{l:7,t:0,i:1789}, +D{l:135,t:11,i:1062}, +D{l:7,t:0,i:2015}, +D{l:140,t:0,i:665}, +D{l:135,t:10,i:1433}, +D{l:5,t:0,i:287}, +D{l:7,t:10,i:921}, +D{l:8,t:10,i:580}, +D{l:8,t:10,i:593}, +D{l:8,t:10,i:630}, +D{l:138,t:10,i:28}, +D{l:138,t:0,i:806}, +D{l:4,t:10,i:911}, +D{l:5,t:10,i:867}, +D{l:5,t:10,i:1013}, +D{l:7,t:10,i:2034}, +D{l:8,t:10,i:798}, +D{l:136,t:10,i:813}, +D{l:134,t:0,i:1539}, +D{l:8,t:11,i:523}, +D{l:150,t:11,i:34}, +D{l:135,t:11,i:740}, +D{l:7,t:11,i:238}, +D{l:7,t:11,i:2033}, +D{l:8,t:11,i:120}, +D{l:8,t:11,i:188}, +D{l:8,t:11,i:659}, +D{l:9,t:11,i:598}, +D{l:10,t:11,i:466}, +D{l:12,t:11,i:342}, +D{l:12,t:11,i:588}, +D{l:13,t:11,i:503}, +D{l:14,t:11,i:246}, +D{l:143,t:11,i:92}, +D{l:7,t:0,i:1563}, +D{l:141,t:0,i:182}, +D{l:5,t:10,i:135}, +D{l:6,t:10,i:519}, +D{l:7,t:10,i:1722}, +D{l:10,t:10,i:271}, +D{l:11,t:10,i:261}, +D{l:145,t:10,i:54}, +D{l:14,t:10,i:338}, +D{l:148,t:10,i:81}, +D{l:7,t:0,i:484}, +D{l:4,t:10,i:300}, +D{l:133,t:10,i:436}, +D{l:145,t:11,i:114}, +D{l:6,t:0,i:1623}, +D{l:134,t:0,i:1681}, +D{l:133,t:11,i:640}, +D{l:4,t:11,i:201}, +D{l:7,t:11,i:1744}, +D{l:8,t:11,i:602}, +D{l:11,t:11,i:247}, +D{l:11,t:11,i:826}, +D{l:145,t:11,i:65}, +D{l:8,t:11,i:164}, +D{l:146,t:11,i:62}, +D{l:6,t:0,i:1833}, +D{l:6,t:0,i:1861}, +D{l:136,t:0,i:878}, +D{l:134,t:0,i:1569}, +D{l:8,t:10,i:357}, +D{l:10,t:10,i:745}, +D{l:14,t:10,i:426}, +D{l:17,t:10,i:94}, +D{l:147,t:10,i:57}, +D{l:12,t:0,i:93}, +D{l:12,t:0,i:501}, +D{l:13,t:0,i:362}, +D{l:14,t:0,i:151}, +D{l:15,t:0,i:40}, +D{l:15,t:0,i:59}, +D{l:16,t:0,i:46}, +D{l:17,t:0,i:25}, +D{l:18,t:0,i:14}, +D{l:18,t:0,i:134}, +D{l:19,t:0,i:25}, +D{l:19,t:0,i:69}, +D{l:20,t:0,i:16}, +D{l:20,t:0,i:19}, +D{l:20,t:0,i:66}, +D{l:21,t:0,i:23}, +D{l:21,t:0,i:25}, +D{l:150,t:0,i:42}, +D{l:6,t:0,i:1748}, +D{l:8,t:0,i:715}, +D{l:9,t:0,i:802}, +D{l:10,t:0,i:46}, +D{l:10,t:0,i:819}, +D{l:13,t:0,i:308}, +D{l:14,t:0,i:351}, +D{l:14,t:0,i:363}, +D{l:146,t:0,i:67}, +D{l:132,t:0,i:994}, +D{l:4,t:0,i:63}, +D{l:133,t:0,i:347}, +D{l:132,t:0,i:591}, +D{l:133,t:0,i:749}, +D{l:7,t:11,i:1577}, +D{l:10,t:11,i:304}, +D{l:10,t:11,i:549}, +D{l:11,t:11,i:424}, +D{l:12,t:11,i:365}, +D{l:13,t:11,i:220}, +D{l:13,t:11,i:240}, +D{l:142,t:11,i:33}, +D{l:133,t:0,i:366}, +D{l:7,t:0,i:557}, +D{l:12,t:0,i:547}, +D{l:14,t:0,i:86}, +D{l:133,t:10,i:387}, +D{l:135,t:0,i:1747}, +D{l:132,t:11,i:907}, +D{l:5,t:11,i:100}, +D{l:10,t:11,i:329}, +D{l:12,t:11,i:416}, +D{l:149,t:11,i:29}, +D{l:4,t:10,i:6}, +D{l:5,t:10,i:708}, +D{l:136,t:10,i:75}, +D{l:7,t:10,i:1351}, +D{l:9,t:10,i:581}, +D{l:10,t:10,i:639}, +D{l:11,t:10,i:453}, +D{l:140,t:10,i:584}, +D{l:7,t:0,i:89}, +D{l:132,t:10,i:303}, +D{l:138,t:10,i:772}, +D{l:132,t:11,i:176}, +D{l:5,t:11,i:636}, +D{l:5,t:11,i:998}, +D{l:8,t:11,i:26}, +D{l:137,t:11,i:358}, +D{l:7,t:11,i:9}, +D{l:7,t:11,i:1508}, +D{l:9,t:11,i:317}, +D{l:10,t:11,i:210}, +D{l:10,t:11,i:292}, +D{l:10,t:11,i:533}, +D{l:11,t:11,i:555}, +D{l:12,t:11,i:526}, +D{l:12,t:11,i:607}, +D{l:13,t:11,i:263}, +D{l:13,t:11,i:459}, +D{l:142,t:11,i:271}, +D{l:134,t:0,i:1463}, +D{l:6,t:0,i:772}, +D{l:6,t:0,i:1137}, +D{l:139,t:11,i:595}, +D{l:7,t:0,i:977}, +D{l:139,t:11,i:66}, +D{l:138,t:0,i:893}, +D{l:20,t:0,i:48}, +D{l:148,t:11,i:48}, +D{l:5,t:0,i:824}, +D{l:133,t:0,i:941}, +D{l:134,t:11,i:295}, +D{l:7,t:0,i:1543}, +D{l:7,t:0,i:1785}, +D{l:10,t:0,i:690}, +D{l:4,t:10,i:106}, +D{l:139,t:10,i:717}, +D{l:7,t:0,i:440}, +D{l:8,t:0,i:230}, +D{l:139,t:0,i:106}, +D{l:5,t:10,i:890}, +D{l:133,t:10,i:988}, +D{l:6,t:10,i:626}, +D{l:142,t:10,i:431}, +D{l:10,t:11,i:127}, +D{l:141,t:11,i:27}, +D{l:17,t:0,i:32}, +D{l:10,t:10,i:706}, +D{l:150,t:10,i:44}, +D{l:132,t:0,i:216}, +D{l:137,t:0,i:332}, +D{l:4,t:10,i:698}, +D{l:136,t:11,i:119}, +D{l:139,t:11,i:267}, +D{l:138,t:10,i:17}, +D{l:11,t:11,i:526}, +D{l:11,t:11,i:939}, +D{l:141,t:11,i:290}, +D{l:7,t:11,i:1167}, +D{l:11,t:11,i:934}, +D{l:13,t:11,i:391}, +D{l:145,t:11,i:76}, +D{l:139,t:11,i:39}, +D{l:134,t:10,i:84}, +D{l:4,t:0,i:914}, +D{l:5,t:0,i:800}, +D{l:133,t:0,i:852}, +D{l:10,t:0,i:416}, +D{l:141,t:0,i:115}, +D{l:7,t:0,i:564}, +D{l:142,t:0,i:168}, +D{l:4,t:0,i:918}, +D{l:133,t:0,i:876}, +D{l:134,t:0,i:1764}, +D{l:152,t:0,i:3}, +D{l:4,t:0,i:92}, +D{l:5,t:0,i:274}, +D{l:7,t:11,i:126}, +D{l:136,t:11,i:84}, +D{l:140,t:10,i:498}, +D{l:136,t:11,i:790}, +D{l:8,t:0,i:501}, +D{l:5,t:10,i:986}, +D{l:6,t:10,i:130}, +D{l:7,t:10,i:1582}, +D{l:8,t:10,i:458}, +D{l:10,t:10,i:101}, +D{l:10,t:10,i:318}, +D{l:138,t:10,i:823}, +D{l:6,t:11,i:64}, +D{l:12,t:11,i:377}, +D{l:141,t:11,i:309}, +D{l:5,t:0,i:743}, +D{l:138,t:0,i:851}, +D{l:4,t:0,i:49}, +D{l:7,t:0,i:280}, +D{l:135,t:0,i:1633}, +D{l:134,t:0,i:879}, +D{l:136,t:0,i:47}, +D{l:7,t:10,i:1644}, +D{l:137,t:10,i:129}, +D{l:132,t:0,i:865}, +D{l:134,t:0,i:1202}, +D{l:9,t:11,i:34}, +D{l:139,t:11,i:484}, +D{l:135,t:10,i:997}, +D{l:5,t:0,i:272}, +D{l:5,t:0,i:908}, +D{l:5,t:0,i:942}, +D{l:8,t:0,i:197}, +D{l:9,t:0,i:47}, +D{l:11,t:0,i:538}, +D{l:139,t:0,i:742}, +D{l:6,t:11,i:1700}, +D{l:7,t:11,i:26}, +D{l:7,t:11,i:293}, +D{l:7,t:11,i:382}, +D{l:7,t:11,i:1026}, +D{l:7,t:11,i:1087}, +D{l:7,t:11,i:2027}, +D{l:8,t:11,i:24}, +D{l:8,t:11,i:114}, +D{l:8,t:11,i:252}, +D{l:8,t:11,i:727}, +D{l:8,t:11,i:729}, +D{l:9,t:11,i:30}, +D{l:9,t:11,i:199}, +D{l:9,t:11,i:231}, +D{l:9,t:11,i:251}, +D{l:9,t:11,i:334}, +D{l:9,t:11,i:361}, +D{l:9,t:11,i:488}, +D{l:9,t:11,i:712}, +D{l:10,t:11,i:55}, +D{l:10,t:11,i:60}, +D{l:10,t:11,i:232}, +D{l:10,t:11,i:332}, +D{l:10,t:11,i:384}, +D{l:10,t:11,i:396}, +D{l:10,t:11,i:504}, +D{l:10,t:11,i:542}, +D{l:10,t:11,i:652}, +D{l:11,t:11,i:20}, +D{l:11,t:11,i:48}, +D{l:11,t:11,i:207}, +D{l:11,t:11,i:291}, +D{l:11,t:11,i:298}, +D{l:11,t:11,i:342}, +D{l:11,t:11,i:365}, +D{l:11,t:11,i:394}, +D{l:11,t:11,i:620}, +D{l:11,t:11,i:705}, +D{l:11,t:11,i:1017}, +D{l:12,t:11,i:123}, +D{l:12,t:11,i:340}, +D{l:12,t:11,i:406}, +D{l:12,t:11,i:643}, +D{l:13,t:11,i:61}, +D{l:13,t:11,i:269}, +D{l:13,t:11,i:311}, +D{l:13,t:11,i:319}, +D{l:13,t:11,i:486}, +D{l:14,t:11,i:234}, +D{l:15,t:11,i:62}, +D{l:15,t:11,i:85}, +D{l:16,t:11,i:71}, +D{l:18,t:11,i:119}, +D{l:148,t:11,i:105}, +D{l:6,t:0,i:1455}, +D{l:150,t:11,i:37}, +D{l:135,t:10,i:1927}, +D{l:135,t:0,i:1911}, +D{l:137,t:0,i:891}, +D{l:7,t:10,i:1756}, +D{l:137,t:10,i:98}, +D{l:7,t:10,i:1046}, +D{l:139,t:10,i:160}, +D{l:132,t:0,i:761}, +D{l:6,t:11,i:379}, +D{l:7,t:11,i:270}, +D{l:7,t:11,i:1116}, +D{l:8,t:11,i:176}, +D{l:8,t:11,i:183}, +D{l:9,t:11,i:432}, +D{l:9,t:11,i:661}, +D{l:12,t:11,i:247}, +D{l:12,t:11,i:617}, +D{l:146,t:11,i:125}, +D{l:6,t:10,i:45}, +D{l:7,t:10,i:433}, +D{l:8,t:10,i:129}, +D{l:9,t:10,i:21}, +D{l:10,t:10,i:392}, +D{l:11,t:10,i:79}, +D{l:12,t:10,i:499}, +D{l:13,t:10,i:199}, +D{l:141,t:10,i:451}, +D{l:4,t:0,i:407}, +D{l:5,t:11,i:792}, +D{l:133,t:11,i:900}, +D{l:132,t:0,i:560}, +D{l:135,t:0,i:183}, +D{l:13,t:0,i:490}, +D{l:7,t:10,i:558}, +D{l:136,t:10,i:353}, +D{l:4,t:0,i:475}, +D{l:6,t:0,i:731}, +D{l:11,t:0,i:35}, +D{l:13,t:0,i:71}, +D{l:13,t:0,i:177}, +D{l:14,t:0,i:422}, +D{l:133,t:10,i:785}, +D{l:8,t:10,i:81}, +D{l:9,t:10,i:189}, +D{l:9,t:10,i:201}, +D{l:11,t:10,i:478}, +D{l:11,t:10,i:712}, +D{l:141,t:10,i:338}, +D{l:4,t:0,i:418}, +D{l:4,t:0,i:819}, +D{l:133,t:10,i:353}, +D{l:151,t:10,i:26}, +D{l:4,t:11,i:901}, +D{l:133,t:11,i:776}, +D{l:132,t:0,i:575}, +D{l:7,t:0,i:818}, +D{l:16,t:0,i:92}, +D{l:17,t:0,i:14}, +D{l:17,t:0,i:45}, +D{l:18,t:0,i:75}, +D{l:148,t:0,i:18}, +D{l:6,t:0,i:222}, +D{l:7,t:0,i:636}, +D{l:7,t:0,i:1620}, +D{l:8,t:0,i:409}, +D{l:9,t:0,i:693}, +D{l:139,t:0,i:77}, +D{l:6,t:10,i:25}, +D{l:7,t:10,i:855}, +D{l:7,t:10,i:1258}, +D{l:144,t:10,i:32}, +D{l:6,t:0,i:1880}, +D{l:6,t:0,i:1887}, +D{l:6,t:0,i:1918}, +D{l:6,t:0,i:1924}, +D{l:9,t:0,i:967}, +D{l:9,t:0,i:995}, +D{l:9,t:0,i:1015}, +D{l:12,t:0,i:826}, +D{l:12,t:0,i:849}, +D{l:12,t:0,i:857}, +D{l:12,t:0,i:860}, +D{l:12,t:0,i:886}, +D{l:12,t:0,i:932}, +D{l:18,t:0,i:228}, +D{l:18,t:0,i:231}, +D{l:146,t:0,i:240}, +D{l:134,t:0,i:633}, +D{l:134,t:0,i:1308}, +D{l:4,t:11,i:37}, +D{l:5,t:11,i:334}, +D{l:135,t:11,i:1253}, +D{l:10,t:0,i:86}, +D{l:4,t:10,i:4}, +D{l:7,t:10,i:1118}, +D{l:7,t:10,i:1320}, +D{l:7,t:10,i:1706}, +D{l:8,t:10,i:277}, +D{l:9,t:10,i:622}, +D{l:11,t:10,i:724}, +D{l:12,t:10,i:350}, +D{l:12,t:10,i:397}, +D{l:13,t:10,i:28}, +D{l:13,t:10,i:159}, +D{l:15,t:10,i:89}, +D{l:18,t:10,i:5}, +D{l:19,t:10,i:9}, +D{l:20,t:10,i:34}, +D{l:150,t:10,i:47}, +D{l:132,t:11,i:508}, +D{l:137,t:11,i:448}, +D{l:12,t:11,i:107}, +D{l:146,t:11,i:31}, +D{l:132,t:0,i:817}, +D{l:134,t:0,i:663}, +D{l:133,t:0,i:882}, +D{l:134,t:0,i:914}, +D{l:132,t:11,i:540}, +D{l:132,t:11,i:533}, +D{l:136,t:11,i:608}, +D{l:8,t:0,i:885}, +D{l:138,t:0,i:865}, +D{l:132,t:0,i:426}, +D{l:6,t:0,i:58}, +D{l:7,t:0,i:745}, +D{l:7,t:0,i:1969}, +D{l:8,t:0,i:399}, +D{l:8,t:0,i:675}, +D{l:9,t:0,i:479}, +D{l:9,t:0,i:731}, +D{l:10,t:0,i:330}, +D{l:10,t:0,i:593}, +D{l:10,t:0,i:817}, +D{l:11,t:0,i:32}, +D{l:11,t:0,i:133}, +D{l:11,t:0,i:221}, +D{l:145,t:0,i:68}, +D{l:134,t:10,i:255}, +D{l:7,t:0,i:102}, +D{l:137,t:0,i:538}, +D{l:137,t:10,i:216}, +D{l:7,t:11,i:253}, +D{l:136,t:11,i:549}, +D{l:135,t:11,i:912}, +D{l:9,t:10,i:183}, +D{l:139,t:10,i:286}, +D{l:11,t:10,i:956}, +D{l:151,t:10,i:3}, +D{l:8,t:11,i:527}, +D{l:18,t:11,i:60}, +D{l:147,t:11,i:24}, +D{l:4,t:10,i:536}, +D{l:7,t:10,i:1141}, +D{l:10,t:10,i:723}, +D{l:139,t:10,i:371}, +D{l:133,t:11,i:920}, +D{l:7,t:0,i:876}, +D{l:135,t:10,i:285}, +D{l:135,t:10,i:560}, +D{l:132,t:10,i:690}, +D{l:142,t:11,i:126}, +D{l:11,t:10,i:33}, +D{l:12,t:10,i:571}, +D{l:149,t:10,i:1}, +D{l:133,t:0,i:566}, +D{l:9,t:0,i:139}, +D{l:10,t:0,i:399}, +D{l:11,t:0,i:469}, +D{l:12,t:0,i:634}, +D{l:13,t:0,i:223}, +D{l:132,t:11,i:483}, +D{l:6,t:0,i:48}, +D{l:135,t:0,i:63}, +D{l:18,t:0,i:12}, +D{l:7,t:10,i:1862}, +D{l:12,t:10,i:491}, +D{l:12,t:10,i:520}, +D{l:13,t:10,i:383}, +D{l:142,t:10,i:244}, +D{l:135,t:11,i:1665}, +D{l:132,t:11,i:448}, +D{l:9,t:11,i:495}, +D{l:146,t:11,i:104}, +D{l:6,t:0,i:114}, +D{l:7,t:0,i:1224}, +D{l:7,t:0,i:1556}, +D{l:136,t:0,i:3}, +D{l:4,t:10,i:190}, +D{l:133,t:10,i:554}, +D{l:8,t:0,i:576}, +D{l:9,t:0,i:267}, +D{l:133,t:10,i:1001}, +D{l:133,t:10,i:446}, +D{l:133,t:0,i:933}, +D{l:139,t:11,i:1009}, +D{l:8,t:11,i:653}, +D{l:13,t:11,i:93}, +D{l:147,t:11,i:14}, +D{l:6,t:0,i:692}, +D{l:6,t:0,i:821}, +D{l:134,t:0,i:1077}, +D{l:5,t:11,i:172}, +D{l:135,t:11,i:801}, +D{l:138,t:0,i:752}, +D{l:4,t:0,i:375}, +D{l:134,t:0,i:638}, +D{l:134,t:0,i:1011}, +D{l:140,t:11,i:540}, +D{l:9,t:0,i:96}, +D{l:133,t:11,i:260}, +D{l:139,t:11,i:587}, +D{l:135,t:10,i:1231}, +D{l:12,t:0,i:30}, +D{l:13,t:0,i:148}, +D{l:14,t:0,i:87}, +D{l:14,t:0,i:182}, +D{l:16,t:0,i:42}, +D{l:20,t:0,i:70}, +D{l:132,t:10,i:304}, +D{l:6,t:0,i:1398}, +D{l:7,t:0,i:56}, +D{l:7,t:0,i:1989}, +D{l:8,t:0,i:337}, +D{l:8,t:0,i:738}, +D{l:9,t:0,i:600}, +D{l:12,t:0,i:37}, +D{l:13,t:0,i:447}, +D{l:142,t:0,i:92}, +D{l:138,t:0,i:666}, +D{l:5,t:0,i:394}, +D{l:7,t:0,i:487}, +D{l:136,t:0,i:246}, +D{l:9,t:0,i:437}, +D{l:6,t:10,i:53}, +D{l:6,t:10,i:199}, +D{l:7,t:10,i:1408}, +D{l:8,t:10,i:32}, +D{l:8,t:10,i:93}, +D{l:10,t:10,i:397}, +D{l:10,t:10,i:629}, +D{l:11,t:10,i:593}, +D{l:11,t:10,i:763}, +D{l:13,t:10,i:326}, +D{l:145,t:10,i:35}, +D{l:134,t:10,i:105}, +D{l:9,t:0,i:320}, +D{l:10,t:0,i:506}, +D{l:138,t:10,i:794}, +D{l:7,t:11,i:57}, +D{l:8,t:11,i:167}, +D{l:8,t:11,i:375}, +D{l:9,t:11,i:82}, +D{l:9,t:11,i:561}, +D{l:10,t:11,i:620}, +D{l:10,t:11,i:770}, +D{l:11,t:10,i:704}, +D{l:141,t:10,i:396}, +D{l:6,t:0,i:1003}, +D{l:5,t:10,i:114}, +D{l:5,t:10,i:255}, +D{l:141,t:10,i:285}, +D{l:7,t:0,i:866}, +D{l:135,t:0,i:1163}, +D{l:133,t:11,i:531}, +D{l:132,t:0,i:328}, +D{l:7,t:10,i:2035}, +D{l:8,t:10,i:19}, +D{l:9,t:10,i:89}, +D{l:138,t:10,i:831}, +D{l:8,t:11,i:194}, +D{l:136,t:11,i:756}, +D{l:136,t:0,i:1000}, +D{l:5,t:11,i:453}, +D{l:134,t:11,i:441}, +D{l:4,t:0,i:101}, +D{l:5,t:0,i:833}, +D{l:7,t:0,i:1171}, +D{l:136,t:0,i:744}, +D{l:133,t:0,i:726}, +D{l:136,t:10,i:746}, +D{l:138,t:0,i:176}, +D{l:6,t:0,i:9}, +D{l:6,t:0,i:397}, +D{l:7,t:0,i:53}, +D{l:7,t:0,i:1742}, +D{l:10,t:0,i:632}, +D{l:11,t:0,i:828}, +D{l:140,t:0,i:146}, +D{l:135,t:11,i:22}, +D{l:145,t:11,i:64}, +D{l:132,t:0,i:839}, +D{l:11,t:0,i:417}, +D{l:12,t:0,i:223}, +D{l:140,t:0,i:265}, +D{l:4,t:11,i:102}, +D{l:7,t:11,i:815}, +D{l:7,t:11,i:1699}, +D{l:139,t:11,i:964}, +D{l:5,t:10,i:955}, +D{l:136,t:10,i:814}, +D{l:6,t:0,i:1931}, +D{l:6,t:0,i:2007}, +D{l:18,t:0,i:246}, +D{l:146,t:0,i:247}, +D{l:8,t:0,i:198}, +D{l:11,t:0,i:29}, +D{l:140,t:0,i:534}, +D{l:135,t:0,i:1771}, +D{l:6,t:0,i:846}, +D{l:7,t:11,i:1010}, +D{l:11,t:11,i:733}, +D{l:11,t:11,i:759}, +D{l:12,t:11,i:563}, +D{l:13,t:11,i:34}, +D{l:14,t:11,i:101}, +D{l:18,t:11,i:45}, +D{l:146,t:11,i:129}, +D{l:4,t:0,i:186}, +D{l:5,t:0,i:157}, +D{l:8,t:0,i:168}, +D{l:138,t:0,i:6}, +D{l:132,t:11,i:899}, +D{l:133,t:10,i:56}, +D{l:148,t:10,i:100}, +D{l:133,t:0,i:875}, +D{l:5,t:0,i:773}, +D{l:5,t:0,i:991}, +D{l:6,t:0,i:1635}, +D{l:134,t:0,i:1788}, +D{l:6,t:0,i:1274}, +D{l:9,t:0,i:477}, +D{l:141,t:0,i:78}, +D{l:4,t:0,i:639}, +D{l:7,t:0,i:111}, +D{l:8,t:0,i:581}, +D{l:12,t:0,i:177}, +D{l:6,t:11,i:52}, +D{l:9,t:11,i:104}, +D{l:9,t:11,i:559}, +D{l:10,t:10,i:4}, +D{l:10,t:10,i:13}, +D{l:11,t:10,i:638}, +D{l:12,t:11,i:308}, +D{l:19,t:11,i:87}, +D{l:148,t:10,i:57}, +D{l:132,t:11,i:604}, +D{l:4,t:11,i:301}, +D{l:133,t:10,i:738}, +D{l:133,t:10,i:758}, +D{l:134,t:0,i:1747}, +D{l:7,t:11,i:1440}, +D{l:11,t:11,i:854}, +D{l:11,t:11,i:872}, +D{l:11,t:11,i:921}, +D{l:12,t:11,i:551}, +D{l:13,t:11,i:472}, +D{l:142,t:11,i:367}, +D{l:7,t:0,i:1364}, +D{l:7,t:0,i:1907}, +D{l:141,t:0,i:158}, +D{l:134,t:0,i:873}, +D{l:4,t:0,i:404}, +D{l:4,t:0,i:659}, +D{l:7,t:0,i:552}, +D{l:135,t:0,i:675}, +D{l:135,t:10,i:1112}, +D{l:139,t:10,i:328}, +D{l:7,t:11,i:508}, +D{l:137,t:10,i:133}, +D{l:133,t:0,i:391}, +D{l:5,t:10,i:110}, +D{l:6,t:10,i:169}, +D{l:6,t:10,i:1702}, +D{l:7,t:10,i:400}, +D{l:8,t:10,i:538}, +D{l:9,t:10,i:184}, +D{l:9,t:10,i:524}, +D{l:140,t:10,i:218}, +D{l:6,t:11,i:310}, +D{l:7,t:11,i:1849}, +D{l:8,t:11,i:72}, +D{l:8,t:11,i:272}, +D{l:8,t:11,i:431}, +D{l:9,t:11,i:12}, +D{l:9,t:11,i:351}, +D{l:10,t:11,i:563}, +D{l:10,t:11,i:630}, +D{l:10,t:11,i:810}, +D{l:11,t:11,i:367}, +D{l:11,t:11,i:599}, +D{l:11,t:11,i:686}, +D{l:140,t:11,i:672}, +D{l:5,t:0,i:540}, +D{l:6,t:0,i:1697}, +D{l:136,t:0,i:668}, +D{l:132,t:0,i:883}, +D{l:134,t:0,i:78}, +D{l:12,t:0,i:628}, +D{l:18,t:0,i:79}, +D{l:6,t:10,i:133}, +D{l:9,t:10,i:353}, +D{l:139,t:10,i:993}, +D{l:6,t:11,i:181}, +D{l:7,t:11,i:537}, +D{l:8,t:11,i:64}, +D{l:9,t:11,i:127}, +D{l:10,t:11,i:496}, +D{l:12,t:11,i:510}, +D{l:141,t:11,i:384}, +D{l:6,t:10,i:93}, +D{l:7,t:10,i:1422}, +D{l:7,t:10,i:1851}, +D{l:8,t:10,i:673}, +D{l:9,t:10,i:529}, +D{l:140,t:10,i:43}, +D{l:137,t:10,i:371}, +D{l:134,t:0,i:1460}, +D{l:134,t:0,i:962}, +D{l:4,t:11,i:244}, +D{l:135,t:11,i:233}, +D{l:9,t:10,i:25}, +D{l:10,t:10,i:467}, +D{l:138,t:10,i:559}, +D{l:4,t:10,i:335}, +D{l:135,t:10,i:942}, +D{l:133,t:0,i:460}, +D{l:135,t:11,i:334}, +D{l:134,t:11,i:1650}, +D{l:4,t:0,i:199}, +D{l:139,t:0,i:34}, +D{l:5,t:10,i:601}, +D{l:8,t:10,i:39}, +D{l:10,t:10,i:773}, +D{l:11,t:10,i:84}, +D{l:12,t:10,i:205}, +D{l:142,t:10,i:1}, +D{l:133,t:10,i:870}, +D{l:134,t:0,i:388}, +D{l:14,t:0,i:474}, +D{l:148,t:0,i:120}, +D{l:133,t:11,i:369}, +D{l:139,t:0,i:271}, +D{l:4,t:0,i:511}, +D{l:9,t:0,i:333}, +D{l:9,t:0,i:379}, +D{l:10,t:0,i:602}, +D{l:11,t:0,i:441}, +D{l:11,t:0,i:723}, +D{l:11,t:0,i:976}, +D{l:12,t:0,i:357}, +D{l:132,t:10,i:181}, +D{l:134,t:0,i:608}, +D{l:134,t:10,i:1652}, +D{l:22,t:0,i:49}, +D{l:137,t:11,i:338}, +D{l:140,t:0,i:988}, +D{l:134,t:0,i:617}, +D{l:5,t:0,i:938}, +D{l:136,t:0,i:707}, +D{l:132,t:10,i:97}, +D{l:5,t:10,i:147}, +D{l:6,t:10,i:286}, +D{l:7,t:10,i:1362}, +D{l:141,t:10,i:176}, +D{l:6,t:0,i:756}, +D{l:134,t:0,i:1149}, +D{l:133,t:11,i:896}, +D{l:6,t:10,i:375}, +D{l:7,t:10,i:169}, +D{l:7,t:10,i:254}, +D{l:136,t:10,i:780}, +D{l:134,t:0,i:1583}, +D{l:135,t:10,i:1447}, +D{l:139,t:0,i:285}, +D{l:7,t:11,i:1117}, +D{l:8,t:11,i:393}, +D{l:136,t:11,i:539}, +D{l:135,t:0,i:344}, +D{l:6,t:0,i:469}, +D{l:7,t:0,i:1709}, +D{l:138,t:0,i:515}, +D{l:5,t:10,i:629}, +D{l:135,t:10,i:1549}, +D{l:5,t:11,i:4}, +D{l:5,t:11,i:810}, +D{l:6,t:11,i:13}, +D{l:6,t:11,i:538}, +D{l:6,t:11,i:1690}, +D{l:6,t:11,i:1726}, +D{l:7,t:11,i:499}, +D{l:7,t:11,i:1819}, +D{l:8,t:11,i:148}, +D{l:8,t:11,i:696}, +D{l:8,t:11,i:791}, +D{l:12,t:11,i:125}, +D{l:13,t:11,i:54}, +D{l:143,t:11,i:9}, +D{l:135,t:11,i:1268}, +D{l:137,t:0,i:404}, +D{l:132,t:0,i:500}, +D{l:5,t:0,i:68}, +D{l:134,t:0,i:383}, +D{l:11,t:0,i:216}, +D{l:139,t:0,i:340}, +D{l:4,t:11,i:925}, +D{l:5,t:11,i:803}, +D{l:8,t:11,i:698}, +D{l:138,t:11,i:828}, +D{l:4,t:0,i:337}, +D{l:6,t:0,i:353}, +D{l:7,t:0,i:1934}, +D{l:8,t:0,i:488}, +D{l:137,t:0,i:429}, +D{l:7,t:0,i:236}, +D{l:7,t:0,i:1795}, +D{l:8,t:0,i:259}, +D{l:9,t:0,i:135}, +D{l:9,t:0,i:177}, +D{l:9,t:0,i:860}, +D{l:10,t:0,i:825}, +D{l:11,t:0,i:115}, +D{l:11,t:0,i:370}, +D{l:11,t:0,i:405}, +D{l:11,t:0,i:604}, +D{l:12,t:0,i:10}, +D{l:12,t:0,i:667}, +D{l:12,t:0,i:669}, +D{l:13,t:0,i:76}, +D{l:14,t:0,i:310}, +D{l:15,t:0,i:76}, +D{l:15,t:0,i:147}, +D{l:148,t:0,i:23}, +D{l:4,t:0,i:15}, +D{l:4,t:0,i:490}, +D{l:5,t:0,i:22}, +D{l:6,t:0,i:244}, +D{l:7,t:0,i:40}, +D{l:7,t:0,i:200}, +D{l:7,t:0,i:906}, +D{l:7,t:0,i:1199}, +D{l:9,t:0,i:616}, +D{l:10,t:0,i:716}, +D{l:11,t:0,i:635}, +D{l:11,t:0,i:801}, +D{l:140,t:0,i:458}, +D{l:12,t:0,i:756}, +D{l:132,t:10,i:420}, +D{l:134,t:0,i:1504}, +D{l:6,t:0,i:757}, +D{l:133,t:11,i:383}, +D{l:6,t:0,i:1266}, +D{l:135,t:0,i:1735}, +D{l:5,t:0,i:598}, +D{l:7,t:0,i:791}, +D{l:8,t:0,i:108}, +D{l:9,t:0,i:123}, +D{l:7,t:10,i:1570}, +D{l:140,t:10,i:542}, +D{l:142,t:11,i:410}, +D{l:9,t:11,i:660}, +D{l:138,t:11,i:347}]; diff --git a/rust/vendor/brotli/src/enc/stride_eval.rs b/rust/vendor/brotli/src/enc/stride_eval.rs new file mode 100644 index 0000000..2fe980a --- /dev/null +++ b/rust/vendor/brotli/src/enc/stride_eval.rs @@ -0,0 +1,265 @@ +use core; +use super::super::alloc; +use super::super::alloc::{SliceWrapper, SliceWrapperMut, Allocator}; +use super::interface; +use super::backward_references::BrotliEncoderParams; +use super::input_pair::{InputPair, InputReference, InputReferenceMut}; +use super::ir_interpret::{IRInterpreter, push_base}; +use super::util::{floatX, FastLog2u16}; +use super::prior_eval::{DEFAULT_SPEED}; +const NIBBLE_PRIOR_SIZE: usize = 16; +pub const STRIDE_PRIOR_SIZE: usize = 256 * 256 * NIBBLE_PRIOR_SIZE * 2; + +pub fn local_init_cdfs(cdfs: &mut [u16]) { + for (index, item) in cdfs.iter_mut().enumerate() { + *item = 4 + 4 * (index as u16 & 0xf); + } +} +#[allow(unused_variables)] +fn stride_lookup_lin(stride_byte:u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + if let Some(nibble) = high_nibble { + 1 + 2 * (actual_context as usize + | ((stride_byte as usize & 0xf) << 8) + | ((nibble as usize) << 12)) + } else { + 2 * (actual_context as usize | ((stride_byte as usize) << 8)) + } +} + +struct CDF<'a> { + cdf:&'a mut [u16], +} +struct Stride1Prior{ +} +impl Stride1Prior { + fn lookup_lin(stride_byte:u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> usize { + stride_lookup_lin(stride_byte, selected_context, actual_context, high_nibble) + } + fn lookup_mut(data:&mut [u16], stride_byte: u8, selected_context:u8, actual_context:usize, high_nibble: Option) -> CDF { + let index = Self::lookup_lin(stride_byte, selected_context, actual_context, + high_nibble) * NIBBLE_PRIOR_SIZE; + CDF::from(data.split_at_mut(index).1.split_at_mut(16).0) + } +} + +impl<'a> CDF<'a> { + pub fn cost(&self, nibble_u8:u8) -> floatX { + assert_eq!(self.cdf.len(), 16); + let nibble = nibble_u8 as usize & 0xf; + let mut pdf = self.cdf[nibble]; + if nibble_u8 != 0 { + pdf -= self.cdf[nibble - 1]; + } + FastLog2u16(self.cdf[15]) - FastLog2u16(pdf) + } + pub fn update(&mut self, nibble_u8:u8, speed: (u16, u16)) { + assert_eq!(self.cdf.len(), 16); + for nib_range in (nibble_u8 as usize & 0xf) .. 16 { + self.cdf[nib_range] += speed.0; + } + if self.cdf[15] >= speed.1 { + const CDF_BIAS:[u16;16] = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; + for nibble_index in 0..16 { + let tmp = &mut self.cdf[nibble_index]; + *tmp = (tmp.wrapping_add(CDF_BIAS[nibble_index])).wrapping_sub( + tmp.wrapping_add(CDF_BIAS[nibble_index]) >> 2); + } + } + } +} + +impl<'a> From<&'a mut[u16]> for CDF<'a> { + fn from(cdf: &'a mut[u16]) -> CDF<'a> { + assert_eq!(cdf.len(), 16); + CDF { + cdf:cdf, + } + } +} + + +pub struct StrideEval<'a, + Alloc:alloc::Allocator + alloc::Allocator + alloc::Allocator +'a, + > { + input: InputPair<'a>, + alloc: &'a mut Alloc, + context_map: &'a interface::PredictionModeContextMap>, + block_type: u8, + local_byte_offset: usize, + stride_priors: [>::AllocatedMemory;8], + score: >::AllocatedMemory, + cur_score_epoch: usize, + stride_speed: [(u16, u16);2], + cur_stride: u8, +} + +impl<'a, + Alloc:alloc::Allocator + alloc::Allocator + alloc::Allocator+'a, + > StrideEval<'a, Alloc> { + pub fn new(alloc: &'a mut Alloc, + input: InputPair<'a>, + prediction_mode: &'a interface::PredictionModeContextMap>, + params: &BrotliEncoderParams, + ) -> Self { + let do_alloc = true; + let mut stride_speed = prediction_mode.stride_context_speed(); + if stride_speed[0] == (0, 0) { + stride_speed[0] = params.literal_adaptation[0] + } + if stride_speed[0] == (0, 0) { + stride_speed[0] = DEFAULT_SPEED; + } + if stride_speed[1] == (0, 0) { + stride_speed[1] = params.literal_adaptation[1] + } + if stride_speed[1] == (0, 0) { + stride_speed[1] = stride_speed[0]; + } + let score = if do_alloc { + >::alloc_cell(alloc, 8 * 4) // FIXME make this bigger than just 4 + } else { + >::AllocatedMemory::default() + }; + let stride_priors = if do_alloc { + [>::alloc_cell(alloc, STRIDE_PRIOR_SIZE), + >::alloc_cell(alloc, STRIDE_PRIOR_SIZE), + >::alloc_cell(alloc, STRIDE_PRIOR_SIZE), + >::alloc_cell(alloc, STRIDE_PRIOR_SIZE), + >::alloc_cell(alloc, STRIDE_PRIOR_SIZE), + >::alloc_cell(alloc, STRIDE_PRIOR_SIZE), + >::alloc_cell(alloc, STRIDE_PRIOR_SIZE), + >::alloc_cell(alloc, STRIDE_PRIOR_SIZE), + ] + } else { + [>::AllocatedMemory::default(), + >::AllocatedMemory::default(), + >::AllocatedMemory::default(), + >::AllocatedMemory::default(), + >::AllocatedMemory::default(), + >::AllocatedMemory::default(), + >::AllocatedMemory::default(), + >::AllocatedMemory::default(), + ] + }; + let mut ret = StrideEval::{ + input: input, + context_map: prediction_mode, + block_type: 0, + alloc: alloc, + cur_stride: 1, + cur_score_epoch: 0, + local_byte_offset: 0, + stride_priors: stride_priors, + score: score, + stride_speed: stride_speed, + }; + for stride_prior in ret.stride_priors.iter_mut() { + local_init_cdfs(stride_prior.slice_mut()); + } + ret + } + pub fn alloc(&mut self) -> &mut Alloc { + self.alloc + } + pub fn choose_stride(&self, stride_data: &mut[u8]) { + assert_eq!(stride_data.len(), self.cur_score_epoch); + assert!(self.score.slice().len() > stride_data.len()); + assert!(self.score.slice().len() > (stride_data.len() << 3) + 7 + 8); + for (index, choice) in stride_data.iter_mut().enumerate() { + let choices = self.score.slice().split_at((1 + index) << 3).1.split_at(8).0; + let mut best_choice: u8 = 0; + let mut best_score = choices[0]; + for (cur_index, cur_score) in choices.iter().enumerate() { + if *cur_score + 2.0 < best_score { // needs to be 2 bits better to be worth the type switch + best_score = *cur_score; + best_choice = cur_index as u8; + } + } + *choice = best_choice; + } + } + pub fn num_types(&self) -> usize { + self.cur_score_epoch + } + fn update_cost_base(&mut self, stride_prior: [u8;8], selected_bits: u8, cm_prior: usize, literal: u8) { + type CurPrior = Stride1Prior; + { + for i in 0..8 { + let mut cdf = CurPrior::lookup_mut(self.stride_priors[i].slice_mut(), + stride_prior[i], selected_bits, cm_prior, None); + self.score.slice_mut()[self.cur_score_epoch * 8 + i] += cdf.cost(literal>>4); + cdf.update(literal >> 4, self.stride_speed[1]); + } + } + { + for i in 0..8 { + let mut cdf = CurPrior::lookup_mut(self.stride_priors[i].slice_mut(), + stride_prior[i], selected_bits, cm_prior, Some(literal >> 4)); + self.score.slice_mut()[self.cur_score_epoch * 8 + i] += cdf.cost(literal&0xf); + cdf.update(literal&0xf, self.stride_speed[0]); + } + } + } +} +impl<'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> Drop for StrideEval<'a, Alloc> { + fn drop(&mut self) { + >::free_cell(&mut self.alloc, core::mem::replace(&mut self.score, >::AllocatedMemory::default())); + for i in 0..8 { + >::free_cell(&mut self.alloc, core::mem::replace(&mut self.stride_priors[i], >::AllocatedMemory::default())); + } + } +} + +impl<'a, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> IRInterpreter for StrideEval<'a, Alloc> { + fn inc_local_byte_offset(&mut self, inc: usize) { + self.local_byte_offset += inc; + } + fn local_byte_offset(&self) -> usize { + self.local_byte_offset + } + fn update_block_type(&mut self, new_type: u8, stride: u8) { + self.block_type = new_type; + self.cur_stride = stride; + self.cur_score_epoch += 1; + if self.cur_score_epoch * 8 + 7 >= self.score.slice().len() { + let new_len = self.score.slice().len() * 2; + let mut new_score = >::alloc_cell(self.alloc, new_len); + for (src, dst) in self.score.slice().iter().zip(new_score.slice_mut().split_at_mut(self.score.slice().len()).0.iter_mut()) { + *dst = *src; + } + >::free_cell(self.alloc, core::mem::replace(&mut self.score, new_score)); + } + } + fn block_type(&self) -> u8 { + self.block_type + } + fn literal_data_at_offset(&self, index:usize) -> u8 { + self.input[index] + } + fn literal_context_map(&self) -> &[u8] { + self.context_map.literal_context_map.slice() + } + fn prediction_mode(&self) -> ::interface::LiteralPredictionModeNibble { + self.context_map.literal_prediction_mode() + } + fn update_cost(&mut self, stride_prior: [u8;8], stride_prior_offset: usize , selected_bits: u8, cm_prior: usize, literal: u8) { + let reversed_stride_priors = [stride_prior[stride_prior_offset&7], + stride_prior[stride_prior_offset.wrapping_sub(1)&7], + stride_prior[stride_prior_offset.wrapping_sub(2)&7], + stride_prior[stride_prior_offset.wrapping_sub(3)&7], + stride_prior[stride_prior_offset.wrapping_sub(4)&7], + stride_prior[stride_prior_offset.wrapping_sub(5)&7], + stride_prior[stride_prior_offset.wrapping_sub(6)&7], + stride_prior[stride_prior_offset.wrapping_sub(7)&7]]; + self.update_cost_base(reversed_stride_priors, selected_bits, cm_prior, literal) + } +} + + +impl<'a, 'b, Alloc: alloc::Allocator + alloc::Allocator + alloc::Allocator> interface::CommandProcessor<'b> for StrideEval<'a, Alloc> { + fn push(&mut self, + val: interface::Command>) { + push_base(self, val) + } +} + diff --git a/rust/vendor/brotli/src/enc/test.rs b/rust/vendor/brotli/src/enc/test.rs new file mode 100755 index 0000000..fb2a5c2 --- /dev/null +++ b/rust/vendor/brotli/src/enc/test.rs @@ -0,0 +1,453 @@ +#![cfg(test)] +use core; +use super::{s16, v8}; +extern crate alloc_no_stdlib; +extern crate brotli_decompressor; +use super::cluster::HistogramPair; +use super::ZopfliNode; +use super::encode::{BrotliEncoderCreateInstance, BrotliEncoderSetParameter, + BrotliEncoderDestroyInstance, BrotliEncoderIsFinished, + BrotliEncoderCompressStream, BrotliEncoderParameter, BrotliEncoderOperation}; +use super::histogram::{ContextType, HistogramLiteral, HistogramCommand, HistogramDistance}; +use super::super::alloc::{AllocatedStackMemory, Allocator, SliceWrapper, SliceWrapperMut, + StackAllocator, bzero}; +use enc::util::brotli_min_size_t; +use super::StaticCommand; +extern "C" { + fn calloc(n_elem: usize, el_size: usize) -> *mut u8; +} +extern "C" { + fn free(ptr: *mut u8); +} +use super::pdf::PDF; +use super::command::Command; +use super::entropy_encode::HuffmanTree; +use super::combined_alloc::CombiningAllocator; +pub use super::super::{BrotliDecompressStream, BrotliResult, BrotliState}; +use brotli_decompressor::HuffmanCode; +use core::ops; +use super::interface; + +declare_stack_allocator_struct!(MemPool, 128, stack); +declare_stack_allocator_struct!(CallocatedFreelist4096, 128, calloc); +declare_stack_allocator_struct!(CallocatedFreelist2048, 64, calloc); +declare_stack_allocator_struct!(CallocatedFreelist1024, 32, calloc); + +fn oneshot_compress(input: &[u8], + output: &mut [u8], + quality: u32, + lgwin: u32, + magic: bool, + in_batch_size: usize, + out_batch_size: usize) + -> (i32, usize) { + let stack_u8_buffer = + unsafe { define_allocator_memory_pool!(96, u8, [0; 24 * 1024 * 1024], calloc) }; + let stack_u16_buffer = + unsafe { define_allocator_memory_pool!(96, u16, [0; 128 * 1024], calloc) }; + let stack_i32_buffer = + unsafe { define_allocator_memory_pool!(96, i32, [0; 128 * 1024], calloc) }; + let stack_u32_buffer = + unsafe { define_allocator_memory_pool!(96, u32, [0; 32 * 1024 * 1024], calloc) }; + let stack_u64_buffer = + unsafe { define_allocator_memory_pool!(96, u64, [0; 32 * 1024], calloc) }; + let stack_f64_buffer = + unsafe { define_allocator_memory_pool!(48, super::util::floatX, [0; 128 * 1024], calloc) }; + let stack_f8_buffer = + unsafe { define_allocator_memory_pool!(48, v8, [0; 128 * 1024], calloc) }; + let stack_16x16_buffer = + unsafe { define_allocator_memory_pool!(48, s16, [0; 128 * 1024], calloc) }; + let stack_hl_buffer = + unsafe { define_allocator_memory_pool!(48, HistogramLiteral, [0; 128 * 1024], calloc) }; + let stack_hc_buffer = + unsafe { define_allocator_memory_pool!(48, HistogramCommand, [0; 128 * 1024], calloc) }; + let stack_hd_buffer = + unsafe { define_allocator_memory_pool!(48, HistogramDistance, [0; 128 * 1024], calloc) }; + let stack_hp_buffer = + unsafe { define_allocator_memory_pool!(48, HistogramPair, [0; 128 * 1024], calloc) }; + let stack_ct_buffer = + unsafe { define_allocator_memory_pool!(48, ContextType, [0; 128 * 1024], calloc) }; + let stack_ht_buffer = + unsafe { define_allocator_memory_pool!(48, HuffmanTree, [0; 128 * 1024], calloc) }; + let stack_zn_buffer = + unsafe { define_allocator_memory_pool!(48, ZopfliNode, [0; 1024], calloc) }; + let stack_mc_buffer = + unsafe { define_allocator_memory_pool!(48, Command, [0; 128 * 1024], calloc) }; + let stack_pdf_buffer = + unsafe { define_allocator_memory_pool!(48, PDF, [0; 1], calloc) }; + let stack_sc_buffer = + unsafe { define_allocator_memory_pool!(48, StaticCommand, [0; 100], calloc) }; + let stack_u8_allocator = CallocatedFreelist4096::::new_allocator(stack_u8_buffer.data, bzero); + let stack_u16_allocator = CallocatedFreelist4096::::new_allocator(stack_u16_buffer.data, + bzero); + let stack_i32_allocator = CallocatedFreelist1024::::new_allocator(stack_i32_buffer.data, + bzero); + let stack_u32_allocator = CallocatedFreelist4096::::new_allocator(stack_u32_buffer.data, + bzero); + let stack_u64_allocator = CallocatedFreelist1024::::new_allocator(stack_u64_buffer.data, + bzero); + let stack_zn_allocator = CallocatedFreelist1024::::new_allocator(stack_zn_buffer.data, + bzero); + let mf64 = CallocatedFreelist2048::::new_allocator(stack_f64_buffer.data, bzero); + let mf8 = CallocatedFreelist2048::::new_allocator(stack_f8_buffer.data, bzero); + let m16x16 = CallocatedFreelist2048::::new_allocator(stack_16x16_buffer.data, bzero); + let mpdf = CallocatedFreelist2048::::new_allocator(stack_pdf_buffer.data, bzero); + let msc = CallocatedFreelist2048::::new_allocator(stack_sc_buffer.data, bzero); + let stack_mc_allocator = CallocatedFreelist2048::::new_allocator(stack_mc_buffer.data, + bzero); + let mhl = CallocatedFreelist2048::::new_allocator(stack_hl_buffer.data, + bzero); + let mhc = CallocatedFreelist2048::::new_allocator(stack_hc_buffer.data, + bzero); + let mhd = CallocatedFreelist2048::::new_allocator(stack_hd_buffer.data, + bzero); + let mhp = CallocatedFreelist2048::::new_allocator(stack_hp_buffer.data, bzero); + let mct = CallocatedFreelist2048::::new_allocator(stack_ct_buffer.data, bzero); + let mht = CallocatedFreelist2048::::new_allocator(stack_ht_buffer.data, bzero); + let mut s_orig = BrotliEncoderCreateInstance(CombiningAllocator::new( + stack_u8_allocator, + stack_u16_allocator, + stack_i32_allocator, + stack_u32_allocator, + stack_u64_allocator, + stack_mc_allocator, + mf64, + mf8, + m16x16, + mpdf, + msc, + mhl, + mhc, + mhd, + mhp, + mct, + mht, + stack_zn_allocator, + )); + let mut next_in_offset: usize = 0; + let mut next_out_offset: usize = 0; + { + let s = &mut s_orig; + + BrotliEncoderSetParameter(s, + BrotliEncoderParameter::BROTLI_PARAM_QUALITY, + quality as (u32)); + if magic { + BrotliEncoderSetParameter(s, + BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, + magic as (u32)); + + } + if quality >= 10 { + BrotliEncoderSetParameter(s, + BrotliEncoderParameter::BROTLI_PARAM_Q9_5, + 1); + } + BrotliEncoderSetParameter(s, + BrotliEncoderParameter::BROTLI_PARAM_LGWIN, + lgwin as (u32)); + BrotliEncoderSetParameter(s, BrotliEncoderParameter::BROTLI_PARAM_MODE, 0 as (u32)); // gen, text, font + BrotliEncoderSetParameter(s, + BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, + input.len() as (u32)); + loop { + let mut available_in: usize = brotli_min_size_t(input.len() - next_in_offset, in_batch_size); + let mut available_out: usize = brotli_min_size_t(output.len() - next_out_offset, + out_batch_size); + if available_out == 0 { + panic!("No output buffer space"); + } + let mut total_out = Some(0usize); + let op: BrotliEncoderOperation; + if available_in == input.len() - next_in_offset { + op = BrotliEncoderOperation::BROTLI_OPERATION_FINISH; + } else { + op = BrotliEncoderOperation::BROTLI_OPERATION_PROCESS; + } + let mut nop_callback = |_data:&mut interface::PredictionModeContextMap, + _cmds: &mut [interface::StaticCommand], + _mb: interface::InputPair, + _mfv:&mut CombiningAllocator<_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_>|(); + + let result = BrotliEncoderCompressStream(s, + op, + &mut available_in, + input, + &mut next_in_offset, + &mut available_out, + output, + &mut next_out_offset, + &mut total_out, + &mut nop_callback); + if result <= 0 { + return (result, next_out_offset); + } + if BrotliEncoderIsFinished(s) != 0 { + break; + } + } + + BrotliEncoderDestroyInstance(s); + } + + return (1, next_out_offset); +} + +fn oneshot_decompress(compressed: &[u8], mut output: &mut [u8]) -> (BrotliResult, usize, usize) { + let mut available_in: usize = compressed.len(); + let mut available_out: usize = output.len(); + let mut stack_u8_buffer = define_allocator_memory_pool!(128, u8, [0; 100 * 1024], stack); + let mut stack_u32_buffer = define_allocator_memory_pool!(128, u32, [0; 36 * 1024], stack); + let mut stack_hc_buffer = define_allocator_memory_pool!(128, + HuffmanCode, + [HuffmanCode::default(); 116 * 1024], + stack); + + let stack_u8_allocator = MemPool::::new_allocator(&mut stack_u8_buffer, bzero); + let stack_u32_allocator = MemPool::::new_allocator(&mut stack_u32_buffer, bzero); + let stack_hc_allocator = MemPool::::new_allocator(&mut stack_hc_buffer, bzero); + let mut input_offset: usize = 0; + let mut output_offset: usize = 0; + let mut written: usize = 0; + let mut brotli_state = + BrotliState::new(stack_u8_allocator, stack_u32_allocator, stack_hc_allocator); + let result = BrotliDecompressStream(&mut available_in, + &mut input_offset, + &compressed[..], + &mut available_out, + &mut output_offset, + &mut output, + &mut written, + &mut brotli_state); + return (result, input_offset, output_offset); + +} + +fn oneshot(input: &[u8], + compressed: &mut [u8], + output: &mut [u8], + q: u32, + lg: u32, + magic: bool, + in_buffer_size: usize, + out_buffer_size: usize) + -> (BrotliResult, usize, usize) { + let (success, mut available_in) = + oneshot_compress(input, compressed, q, lg, magic, in_buffer_size, out_buffer_size); + if success == 0 { + //return (BrotliResult::ResultFailure, 0, 0); + available_in = compressed.len(); + } + return oneshot_decompress(&mut compressed[..available_in], output); +} + +#[test] +fn test_roundtrip_10x10y() { + const BUFFER_SIZE: usize = 128; + let mut compressed: [u8; 13] = [0; 13]; + let mut output = [0u8; BUFFER_SIZE]; + let mut input = ['x' as u8, 'x' as u8, 'x' as u8, 'x' as u8, 'x' as u8, 'x' as u8, 'x' as u8, + 'x' as u8, 'x' as u8, 'x' as u8, 'y' as u8, 'y' as u8, 'y' as u8, 'y' as u8, + 'y' as u8, 'y' as u8, 'y' as u8, 'y' as u8, 'y' as u8, 'y' as u8]; + let (result, compressed_offset, output_offset) = oneshot(&mut input[..], + &mut compressed, + &mut output[..], + 9, + 10, + false, + 1, + 1); + match result { + BrotliResult::ResultSuccess => {} + _ => assert!(false), + } + let mut i: usize = 0; + while i < 10 { + assert_eq!(output[i], 'x' as u8); + assert_eq!(output[i + 10], 'y' as u8); + i += 1; + } + assert_eq!(output_offset, 20); + assert_eq!(compressed_offset, compressed.len()); +} + +macro_rules! test_roundtrip_file { + ($filedata : expr, $bufsize: expr, $quality: expr, $lgwin: expr, $magic: expr, $in_buf:expr, $out_buf:expr) => {{ + let stack_u8_buffer = unsafe{define_allocator_memory_pool!(4096, u8, [0; 18 * 1024 * 1024], calloc)}; + let mut stack_u8_allocator = CallocatedFreelist4096::::new_allocator(stack_u8_buffer.data, bzero); + + let mut compressed = stack_u8_allocator.alloc_cell($bufsize); + let inp = $filedata; + let mut output = stack_u8_allocator.alloc_cell(inp.len() + 16); + let (result, compressed_offset, output_offset) = oneshot(&inp[..], + compressed.slice_mut(), + output.slice_mut(), + $quality, + $lgwin, + $magic, + $in_buf, + $out_buf); + match result { + BrotliResult::ResultSuccess => {} + _ => assert!(false), + } + for i in 0..inp.len() { + if inp[i] != output[i] { + assert_eq!((i,inp[i]), (i,output[i])); + } + assert_eq!(inp[i], output[i]); + } + assert!(compressed_offset <= compressed.slice().len()); + assert_eq!(output_offset, inp.len()); + stack_u8_allocator.free_cell(output); + stack_u8_allocator.free_cell(compressed); + }}; +} + +#[test] +fn test_roundtrip_64x() { + test_roundtrip_file!(include_bytes!("../../testdata/64x"), 72, 9, 10, false, 3, 2); +} +#[test] +fn test_roundtrip_ukkonooa() { + test_roundtrip_file!(include_bytes!("../../testdata/ukkonooa"), 82, 9, 10, true, 3, 2); +} +#[test] +fn test_roundtrip_backward65536() { + test_roundtrip_file!(include_bytes!("../../testdata/backward65536"), 72000, 9, 10, false, 3, 2); +} +#[test] +fn test_roundtrip_aaabaaaa() { + test_roundtrip_file!(include_bytes!("../../testdata/aaabaaaa"), 72000, 9, 10, true, 3, 2); +} +#[test] +fn test_roundtrip_monkey() { + test_roundtrip_file!(include_bytes!("../../testdata/monkey"), 72000, 9, 10, false, 16, 15); +} +#[test] +fn test_roundtrip_quickfox_repeated() { + test_roundtrip_file!(include_bytes!("../../testdata/quickfox_repeated"), 16384, 9, 10, true, 257, 255); +} + +#[test] +fn test_roundtrip_asyoulik() { + test_roundtrip_file!(include_bytes!("../../testdata/asyoulik.txt"), 64384, 9, 15, false, 513, 511); +} + +#[test] +fn test_roundtrip_asyoulik9_5() { + test_roundtrip_file!(include_bytes!("../../testdata/asyoulik.txt"), 62384, 10, 15, true, 513, 511); +} + +#[test] +fn test_roundtrip_compressed() { + test_roundtrip_file!(include_bytes!("../../testdata/compressed_file"), 50400, 9, 10, false, 1025, 1024); +} + +#[test] +fn test_roundtrip_compressed_repeated() { + test_roundtrip_file!(include_bytes!("../../testdata/compressed_repeated"), + 120000, + 9, + 16, + false, + 2049, + 2047); +} + +#[test] +fn test_roundtrip_first_58_bytes_alice() { + test_roundtrip_file!(&include_bytes!("../../testdata/alice29.txt")[..58], 50400, 2, 10, true, 1, 2); +} +#[test] +fn test_roundtrip_first_2_bytes_alice() { + test_roundtrip_file!(&include_bytes!("../../testdata/alice29.txt")[..2], 50400, 2, 10, true, 1, 2); +} + + +#[test] +fn test_roundtrip_quickfox() { + test_roundtrip_file!(include_bytes!("../../testdata/quickfox"), 256, 9, 10, false, 1, 2); +} + + +#[test] +fn test_roundtrip_x() { + const BUFFER_SIZE: usize = 16384; + let mut compressed: [u8; 6] = [0x0b, 0x00, 0x80, 0x58, 0x03, 0]; + let mut output = [0u8; BUFFER_SIZE]; + let mut input = ['X' as u8]; + let (result, compressed_offset, output_offset) = oneshot(&mut input[..], + &mut compressed[..], + &mut output[..], + 9, + 10, + false, + 1, + 2); + match result { + BrotliResult::ResultSuccess => {} + _ => assert!(false), + } + assert_eq!(output[0], 'X' as u8); + assert_eq!(output_offset, 1); + assert_eq!(compressed_offset, compressed.len()); +} + +#[test] +fn test_roundtrip_empty() { + let mut compressed: [u8; 2] = [0x06, 0]; + let mut output = [0u8; 1]; + let (result, compressed_offset, output_offset) = + oneshot(&mut [], &mut compressed[..], &mut output[..], 9, 10, false, 2, 3); + match result { + BrotliResult::ResultSuccess => {} + _ => assert!(false), + } + assert_eq!(output_offset, 0); + assert_eq!(compressed_offset, compressed.len()); +} +/* + + +#[cfg(feature="std")] +struct Buffer { + data: Vec, + read_offset: usize, +} +#[cfg(feature="std")] +impl Buffer { + pub fn new(buf: &[u8]) -> Buffer { + let mut ret = Buffer { + data: Vec::::new(), + read_offset: 0, + }; + ret.data.extend(buf); + return ret; + } +} +#[cfg(feature="std")] +impl io::Read for Buffer { + fn read(self: &mut Self, buf: &mut [u8]) -> io::Result { + let bytes_to_read = ::core::cmp::min(buf.len(), self.data.len() - self.read_offset); + if bytes_to_read > 0 { + buf[0..bytes_to_read] + .clone_from_slice(&self.data[self.read_offset..self.read_offset + bytes_to_read]); + } + self.read_offset += bytes_to_read; + return Ok(bytes_to_read); + } +} +#[cfg(feature="std")] +impl io::Write for Buffer { + fn write(self: &mut Self, buf: &[u8]) -> io::Result { + self.data.extend(buf); + return Ok(buf.len()); + } + fn flush(self: &mut Self) -> io::Result<()> { + return Ok(()); + } +} + + +*/ diff --git a/rust/vendor/brotli/src/enc/threading.rs b/rust/vendor/brotli/src/enc/threading.rs new file mode 100644 index 0000000..0e264e4 --- /dev/null +++ b/rust/vendor/brotli/src/enc/threading.rs @@ -0,0 +1,496 @@ +use alloc::{Allocator, SliceWrapper, SliceWrapperMut}; +use core::marker::PhantomData; +use core::mem; +use core::any; +#[cfg(feature="std")] +use std; +use super::BrotliAlloc; +use super::encode::{ + BrotliEncoderOperation, + BrotliEncoderCreateInstance, + BrotliEncoderSetCustomDictionaryWithOptionalPrecomputedHasher, + BrotliEncoderDestroyInstance, + BrotliEncoderMaxCompressedSize, + BrotliEncoderCompressStream, + SanitizeParams, + HasherSetup, +}; +use concat::{ + BroCatli, + BroCatliResult, +}; +use core::ops::Range; +use super::backward_references::{BrotliEncoderParams, UnionHasher, CloneWithAlloc, AnyHasher}; +pub type PoisonedThreadError = (); + +#[cfg(feature="std")] +pub type LowLevelThreadError = std::boxed::Box; +#[cfg(not(feature="std"))] +pub type LowLevelThreadError = (); + + +pub trait AnyBoxConstructor { + fn new(data:LowLevelThreadError) -> Self; +} + +pub trait Joinable:Sized { + fn join(self) -> Result; +} +#[derive(Debug)] +pub enum BrotliEncoderThreadError { + InsufficientOutputSpace, + ConcatenationDidNotProcessFullFile, + ConcatenationError(BroCatliResult), + ConcatenationFinalizationError(BroCatliResult), + OtherThreadPanic, + ThreadExecError(LowLevelThreadError), +} + +impl AnyBoxConstructor for BrotliEncoderThreadError { + fn new(data:LowLevelThreadError) -> Self { + BrotliEncoderThreadError::ThreadExecError(data) + } +} + + +pub struct CompressedFileChunk where >::AllocatedMemory: Send { + data_backing:>::AllocatedMemory, + data_size: usize, +} +pub struct CompressionThreadResult where >::AllocatedMemory: Send { + compressed: Result, BrotliEncoderThreadError>, + alloc: Alloc, +} +pub enum InternalSendAlloc> + where >::AllocatedMemory: Send { + A(Alloc, ExtraInput), + Join(Join), + SpawningOrJoining(PhantomData), +} +impl > InternalSendAlloc where >::AllocatedMemory: Send { + fn unwrap_input(&mut self) -> (&mut Alloc, &mut ExtraInput) { + match *self { + InternalSendAlloc::A(ref mut alloc, ref mut extra) => (alloc, extra), + _ => panic!("Bad state for allocator"), + } + } +} + +pub struct SendAlloc>(pub InternalSendAlloc)//FIXME pub + where >::AllocatedMemory: Send; + +impl> SendAlloc + where >::AllocatedMemory: Send { + pub fn new(alloc: Alloc, extra_input: ExtraInput) -> Self { + SendAlloc::(InternalSendAlloc::A(alloc, extra_input)) + } + pub fn unwrap_or(self, other: Alloc, other_extra: ExtraInput) -> (Alloc, ExtraInput) { + match self.0 { + InternalSendAlloc::A(alloc, extra_input) => { + (alloc, extra_input) + }, + InternalSendAlloc::SpawningOrJoining(_) | InternalSendAlloc::Join(_) => { + (other, other_extra) + }, + } + } + fn unwrap_view_mut(&mut self) -> (&mut Alloc, &mut ExtraInput) { + match self.0 { + InternalSendAlloc::A(ref mut alloc, ref mut extra_input) => { + (alloc, extra_input) + }, + InternalSendAlloc::SpawningOrJoining(_) | InternalSendAlloc::Join(_) => panic!("Item permanently borrowed/leaked"), + } + } + pub fn unwrap(self) -> (Alloc, ExtraInput) { + match self.0 { + InternalSendAlloc::A(alloc, extra_input) => { + (alloc, extra_input) + }, + InternalSendAlloc::SpawningOrJoining(_) | InternalSendAlloc::Join(_) => panic!("Item permanently borrowed/leaked"), + } + } + pub fn replace_with_default(&mut self) -> (Alloc, ExtraInput) { + match mem::replace(&mut self.0, InternalSendAlloc::SpawningOrJoining(PhantomData::default())) { + InternalSendAlloc::A(alloc, extra_input) => { + (alloc, extra_input) + }, + InternalSendAlloc::SpawningOrJoining(_) | InternalSendAlloc::Join(_) => panic!("Item permanently borrowed/leaked"), + } + } +} + +pub enum InternalOwned { // FIXME pub + Item(T), + Borrowed, +} + +pub struct Owned(pub InternalOwned); // FIXME pub +impl Owned { + pub fn new(data:T) -> Self { + Owned::(InternalOwned::Item(data)) + } + pub fn unwrap_or(self, other: T) -> T { + if let InternalOwned::Item(x) = self.0 { + x + } else { + other + } + } + pub fn unwrap(self) -> T { + if let InternalOwned::Item(x) = self.0 { + x + } else { + panic!("Item permanently borrowed") + } + } + pub fn view(&self) -> &T { + if let InternalOwned::Item(ref x) = self.0 { + x + } else { + panic!("Item permanently borrowed") + } + } +} + + + +pub trait OwnedRetriever { + fn view T>(&self, f:F) -> Result; + fn unwrap(self) -> Result; +} + +#[cfg(feature="std")] +impl OwnedRetriever for std::sync::Arc> { + fn view T>(&self, f:F) -> Result { + match self.read() { + Ok(ref u) => Ok(f(u)), + Err(_) => Err(PoisonedThreadError::default()), + } + } + fn unwrap(self) -> Result { + match std::sync::Arc::try_unwrap(self) { + Ok(rwlock) => match rwlock.into_inner() { + Ok(u) => Ok(u), + Err(_) => Err(PoisonedThreadError::default()), + }, + Err(_) => Err(PoisonedThreadError::default()), + } + } +} + + + +pub trait BatchSpawnable + where >::AllocatedMemory:Send+'static +{ + type JoinHandle: Joinable; + type FinalJoinHandle: OwnedRetriever; + // this function takes in an input slice + // a SendAlloc per thread and converts them all into JoinHandle + // the input is borrowed until the joins complete + // owned is set to borrowed + // the final join handle is a r/w lock which will return the SliceW to the owner + // the FinalJoinHandle is only to be called when each individual JoinHandle has been examined + // the function is called with the thread_index, the num_threads, a reference to the slice under a read lock, + // and an allocator from the alloc_per_thread + fn make_spawner( + &mut self, + input: &mut Owned, + ) -> Self::FinalJoinHandle; + fn spawn ReturnValue+Send+'static+Copy>( + &mut self, + handle:&mut Self::FinalJoinHandle, + alloc:&mut SendAlloc, + index: usize, + num_threads: usize, + f: F, + ); +} + +pub trait BatchSpawnableLite + where >::AllocatedMemory:Send+'static +{ + type JoinHandle: Joinable; + type FinalJoinHandle: OwnedRetriever; + fn make_spawner( + &mut self, + input: &mut Owned, + ) -> Self::FinalJoinHandle; + fn spawn( + &mut self, + handle:&mut Self::FinalJoinHandle, + alloc_per_thread:&mut SendAlloc, + index: usize, + num_threads: usize, + f: fn(ExtraInput, usize, usize, &U, Alloc) -> ReturnValue, + ); +} +/* +impl + BatchSpawnableLite for BatchSpawnable { + type JoinHandle = >::JoinHandle; + type FinalJoinHandle = >::FinalJoinHandle; + fn batch_spawn( + &mut self, + input: &mut Owned, + alloc_per_thread:&mut [SendAlloc], + f: fn(usize, usize, &U, Alloc) -> T, + ) -> Self::FinalJoinHandle { + >::batch_spawn(self, input, alloc_per_thread, f) + } +}*/ + +pub fn CompressMultiSlice, + UnionHasher, + Alloc, + (>::AllocatedMemory, BrotliEncoderParams)>> ( + params:&BrotliEncoderParams, + input_slice: &[u8], + output: &mut [u8], + alloc_per_thread:&mut [SendAlloc, UnionHasher, Alloc, Spawner::JoinHandle>], + thread_spawner: &mut Spawner, +) -> Result where >::AllocatedMemory: Send+Sync, >::AllocatedMemory: Send+Sync, >::AllocatedMemory: Send+Sync { + let input = if let InternalSendAlloc::A(ref mut alloc, ref _extra) = alloc_per_thread[0].0 { + let mut input = >::alloc_cell(alloc, input_slice.len()); + input.slice_mut().clone_from_slice(input_slice); + input + } else { + >::AllocatedMemory::default() + }; + let mut owned_input = Owned::new(input); + let ret = CompressMulti(params, &mut owned_input, output, alloc_per_thread, thread_spawner); + if let InternalSendAlloc::A(ref mut alloc, ref _extra) = alloc_per_thread[0].0 { + >::free_cell(alloc, owned_input.unwrap()); + } + ret +} + +fn get_range(thread_index: usize, num_threads: usize, file_size: usize) -> Range { + ((thread_index * file_size) / num_threads)..(((thread_index + 1) * file_size) / num_threads) +} + +fn compress_part>( + hasher: UnionHasher, + thread_index: usize, + num_threads: usize, + input_and_params:&(SliceW, BrotliEncoderParams), + mut alloc: Alloc, +) -> CompressionThreadResult where >::AllocatedMemory:Send+'static { + let mut range = get_range(thread_index, num_threads, input_and_params.0.len()); + let mut mem = >::alloc_cell(&mut alloc, + BrotliEncoderMaxCompressedSize(range.end - range.start)); + let mut state = BrotliEncoderCreateInstance(alloc); + state.params = input_and_params.1.clone(); + if thread_index != 0 { + state.params.catable = true; // make sure we can concatenate this to the other work results + state.params.magic_number = false; // no reason to pepper this around + } + state.params.appendable = true; // make sure we are at least appendable, so that future items can be catted in + if thread_index != 0 { + BrotliEncoderSetCustomDictionaryWithOptionalPrecomputedHasher( + &mut state, range.start, &input_and_params.0.slice()[..range.start], hasher, + ); + } + let mut out_offset = 0usize; + let compression_result; + let mut available_out = mem.len(); + loop { + let mut next_in_offset = 0usize; + let mut available_in = range.end - range.start; + let result = BrotliEncoderCompressStream(&mut state, + BrotliEncoderOperation::BROTLI_OPERATION_FINISH, + &mut available_in, + &input_and_params.0.slice()[range.clone()], + &mut next_in_offset, + &mut available_out, + mem.slice_mut(), + &mut out_offset, + &mut None, + &mut |_a,_b,_c,_d|()); + let new_range = range.start + next_in_offset..range.end; + range = new_range; + if result != 0 { + compression_result = Ok(out_offset); + break; + } else if available_out == 0 { + compression_result = Err(BrotliEncoderThreadError::InsufficientOutputSpace); // mark no space?? + break; + } + } + BrotliEncoderDestroyInstance(&mut state); + match compression_result { + Ok(size) => { + CompressionThreadResult::{ + compressed:Ok(CompressedFileChunk{data_backing:mem, data_size:size}), + alloc:state.m8, + } + }, + Err(e) => { + >::free_cell(&mut state.m8, mem); + CompressionThreadResult::{ + compressed:Err(e), + alloc:state.m8, + } + }, + } +} + +pub fn CompressMulti+Send+'static+Sync, + Spawner:BatchSpawnableLite, + UnionHasher, + Alloc, + (SliceW, BrotliEncoderParams)>> ( + params:&BrotliEncoderParams, + owned_input: &mut Owned, + output: &mut [u8], + alloc_per_thread:&mut [SendAlloc, UnionHasher, Alloc, Spawner::JoinHandle>], + thread_spawner: &mut Spawner, +) -> Result where >::AllocatedMemory: Send, >::AllocatedMemory: Send, >::AllocatedMemory: Send{ + let num_threads = alloc_per_thread.len(); + let actually_owned_mem = mem::replace(owned_input, Owned(InternalOwned::Borrowed)); + let mut owned_input_pair = Owned::new((actually_owned_mem.unwrap(), params.clone())); + // start thread spawner + let mut spawner_and_input = thread_spawner.make_spawner(&mut owned_input_pair); + if num_threads > 1 { + // spawn first thread without "custom dictionary" while we compute the custom dictionary for other work items + thread_spawner.spawn(&mut spawner_and_input, &mut alloc_per_thread[0], 0, num_threads, compress_part); + } + // populate all hashers at once, cloning them one by one + let mut compression_last_thread_result; + if num_threads > 1 && params.favor_cpu_efficiency { + let mut local_params = params.clone(); + SanitizeParams(&mut local_params); + let mut hasher = UnionHasher::Uninit; + HasherSetup(alloc_per_thread[num_threads -1].0.unwrap_input().0, + &mut hasher, + &mut local_params, + &[], + 0, + 0, + 0); + for thread_index in 1..num_threads { + let res = spawner_and_input.view(|input_and_params:&(SliceW, BrotliEncoderParams)| -> () { + let range = get_range(thread_index - 1, num_threads, input_and_params.0.len()); + let overlap = hasher.StoreLookahead().wrapping_sub(1usize); + if range.end - range.start > overlap { + hasher.BulkStoreRange(input_and_params.0.slice(), + !(0usize), + if range.start > overlap {range.start - overlap} else {0}, range.end - overlap); + } + }); + if let Err(_e) = res { + return Err(BrotliEncoderThreadError::OtherThreadPanic); + } + if thread_index + 1 != num_threads { + { + let (alloc, out_hasher) = alloc_per_thread[thread_index].unwrap_view_mut(); + *out_hasher = hasher.clone_with_alloc(alloc); + } + thread_spawner.spawn(&mut spawner_and_input, &mut alloc_per_thread[thread_index], thread_index, num_threads, compress_part); + } + } + let (alloc, _extra) = alloc_per_thread[num_threads -1].replace_with_default(); + compression_last_thread_result = spawner_and_input.view(move |input_and_params:&(SliceW, BrotliEncoderParams)| -> CompressionThreadResult { + compress_part(hasher, + num_threads - 1, + num_threads, + input_and_params, + alloc, + ) + }); + } else { + if num_threads > 1 { + for thread_index in 1..num_threads-1 { + thread_spawner.spawn(&mut spawner_and_input, &mut alloc_per_thread[thread_index], thread_index, num_threads, compress_part); + } + } + let (alloc, _extra) = alloc_per_thread[num_threads - 1].replace_with_default(); + compression_last_thread_result = spawner_and_input.view(move |input_and_params:&(SliceW, BrotliEncoderParams)| -> CompressionThreadResult { + compress_part(UnionHasher::Uninit, + num_threads - 1, + num_threads, + input_and_params, + alloc, + ) + }); + } + let mut compression_result = Err(BrotliEncoderThreadError::InsufficientOutputSpace); + let mut out_file_size = 0usize; + let mut bro_cat_li = BroCatli::new(); + for (index, thread) in alloc_per_thread.iter_mut().enumerate() { + let mut cur_result = if index + 1 == num_threads { + match mem::replace(&mut compression_last_thread_result, Err(())){ + Ok(result) => result, + Err(_err) => return Err(BrotliEncoderThreadError::OtherThreadPanic), + } + } else { + match mem::replace(&mut thread.0, InternalSendAlloc::SpawningOrJoining(PhantomData::default())) { + InternalSendAlloc::A(_, _) | InternalSendAlloc::SpawningOrJoining(_) => panic!("Thread not properly spawned"), + InternalSendAlloc::Join(join) => match join.join() { + Ok(result) => result, + Err(err) => { + return Err(err); + } + } + } + }; + match cur_result.compressed { + Ok(compressed_out) => { + bro_cat_li.new_brotli_file(); + let mut in_offset = 0usize; + let cat_result = bro_cat_li.stream(&compressed_out.data_backing.slice()[..compressed_out.data_size], + &mut in_offset, + output, + &mut out_file_size); + match cat_result { + BroCatliResult::Success | BroCatliResult::NeedsMoreInput => { + compression_result = Ok(out_file_size); + }, + BroCatliResult::NeedsMoreOutput => { + compression_result = Err(BrotliEncoderThreadError::InsufficientOutputSpace); // not enough space + }, + err => { + compression_result = Err(BrotliEncoderThreadError::ConcatenationError(err)); // misc error + }, + } + >::free_cell(&mut cur_result.alloc, compressed_out.data_backing); + } + Err(e) => { + compression_result = Err(e); + } + } + thread.0 = InternalSendAlloc::A(cur_result.alloc, UnionHasher::Uninit); + } + if let Err(e) = compression_result { + return Err(e); + } + match bro_cat_li.finish(output, &mut out_file_size) { + BroCatliResult::Success => compression_result = Ok(out_file_size), + err => compression_result = Err(BrotliEncoderThreadError::ConcatenationFinalizationError(err)), + } + if let Ok(retrieved_owned_input) = spawner_and_input.unwrap() { + *owned_input = Owned::new(retrieved_owned_input.0); // return the input to its rightful owner before returning + } else { + if let Ok(_) = compression_result { + compression_result = Err(BrotliEncoderThreadError::OtherThreadPanic); + } + } + compression_result +} + diff --git a/rust/vendor/brotli/src/enc/utf8_util.rs b/rust/vendor/brotli/src/enc/utf8_util.rs new file mode 100755 index 0000000..703d92c --- /dev/null +++ b/rust/vendor/brotli/src/enc/utf8_util.rs @@ -0,0 +1,68 @@ +#![allow(dead_code)] +static kMinUTF8Ratio: super::util::floatX = 0.75 as super::util::floatX; + +fn BrotliParseAsUTF8(symbol: &mut i32, input: &[u8], size: usize) -> usize { + if input[0i32 as (usize)] as (i32) & 0x80i32 == 0i32 { + *symbol = input[0i32 as (usize)] as (i32); + if *symbol > 0i32 { + return 1i32 as (usize); + } + } + if size > 1u32 as (usize) && (input[0i32 as (usize)] as (i32) & 0xe0i32 == 0xc0i32) && + (input[1i32 as (usize)] as (i32) & 0xc0i32 == 0x80i32) { + *symbol = (input[0i32 as (usize)] as (i32) & 0x1fi32) << 6i32 | + input[1i32 as (usize)] as (i32) & 0x3fi32; + if *symbol > 0x7fi32 { + return 2i32 as (usize); + } + } + if size > 2u32 as (usize) && (input[0i32 as (usize)] as (i32) & 0xf0i32 == 0xe0i32) && + (input[1i32 as (usize)] as (i32) & 0xc0i32 == 0x80i32) && + (input[2i32 as (usize)] as (i32) & 0xc0i32 == 0x80i32) { + *symbol = (input[0i32 as (usize)] as (i32) & 0xfi32) << 12i32 | + (input[1i32 as (usize)] as (i32) & 0x3fi32) << 6i32 | + input[2i32 as (usize)] as (i32) & 0x3fi32; + if *symbol > 0x7ffi32 { + return 3i32 as (usize); + } + } + if size > 3u32 as (usize) && (input[0i32 as (usize)] as (i32) & 0xf8i32 == 0xf0i32) && + (input[1i32 as (usize)] as (i32) & 0xc0i32 == 0x80i32) && + (input[2i32 as (usize)] as (i32) & 0xc0i32 == 0x80i32) && + (input[3i32 as (usize)] as (i32) & 0xc0i32 == 0x80i32) { + *symbol = (input[0i32 as (usize)] as (i32) & 0x7i32) << 18i32 | + (input[1i32 as (usize)] as (i32) & 0x3fi32) << 12i32 | + (input[2i32 as (usize)] as (i32) & 0x3fi32) << 6i32 | + input[3i32 as (usize)] as (i32) & 0x3fi32; + if *symbol > 0xffffi32 && (*symbol <= 0x10ffffi32) { + return 4i32 as (usize); + } + } + *symbol = 0x110000i32 | input[0i32 as (usize)] as (i32); + 1i32 as (usize) +} + +pub fn BrotliIsMostlyUTF8(data: &[u8], + pos: usize, + mask: usize, + length: usize, + min_fraction: super::util::floatX) + -> i32 { + let mut size_utf8: usize = 0usize; + let mut i: usize = 0usize; + while i < length { + let mut symbol: i32 = 0; + let bytes_read: usize = BrotliParseAsUTF8(&mut symbol, + &data[((pos.wrapping_add(i) & mask) as (usize))..], + length.wrapping_sub(i)); + i = i.wrapping_add(bytes_read); + if symbol < 0x110000i32 { + size_utf8 = size_utf8.wrapping_add(bytes_read); + } + } + if !!(size_utf8 as (super::util::floatX) > min_fraction * length as (super::util::floatX)) { + 1i32 + } else { + 0i32 + } +} diff --git a/rust/vendor/brotli/src/enc/util.rs b/rust/vendor/brotli/src/enc/util.rs new file mode 100755 index 0000000..85718dd --- /dev/null +++ b/rust/vendor/brotli/src/enc/util.rs @@ -0,0 +1,4543 @@ +#![allow(dead_code)] +use core; +#[cfg(feature="float64")] +pub type floatX = f64; + +#[cfg(not(feature="float64"))] +pub type floatX = f32; + +#[inline(always)] +pub fn brotli_max_uint32_t(a: u32, b: u32) -> u32 { + core::cmp::max(a, b) +} +#[inline(always)] +pub fn brotli_min_uint32_t(a: u32, b: u32) -> u32 { + core::cmp::min(a, b) +} +#[inline(always)] +pub fn brotli_min_size_t(a: usize, b: usize) -> usize { + core::cmp::min(a,b) +} +#[inline(always)] +pub fn brotli_max_size_t(a: usize, b: usize) -> usize { + core::cmp::max(a,b) +} +#[inline(always)] +pub fn brotli_max_uint8_t(a: u8, b: u8) -> u8 { + core::cmp::max(a,b) +} + + + +static kLog2Table: [f32; 256] = [0.0000000000000000, + 0.0000000000000000, + 1.0000000000000000, + 1.5849625007211563, + 2.0000000000000000, + 2.3219280948873622, + 2.5849625007211561, + 2.8073549220576042, + 3.0000000000000000, + 3.1699250014423126, + 3.3219280948873626, + 3.4594316186372978, + 3.5849625007211565, + 3.7004397181410922, + 3.8073549220576037, + 3.9068905956085187, + 4.0000000000000000, + 4.0874628412503400, + 4.1699250014423122, + 4.2479275134435852, + 4.3219280948873626, + 4.3923174227787607, + 4.4594316186372973, + 4.5235619560570131, + 4.5849625007211570, + 4.6438561897747244, + 4.7004397181410926, + 4.7548875021634691, + 4.8073549220576037, + 4.8579809951275728, + 4.9068905956085187, + 4.9541963103868758, + 5.0000000000000000, + 5.0443941193584534, + 5.0874628412503400, + 5.1292830169449664, + 5.1699250014423122, + 5.2094533656289501, + 5.2479275134435852, + 5.2854022188622487, + 5.3219280948873626, + 5.3575520046180838, + 5.3923174227787607, + 5.4262647547020979, + 5.4594316186372973, + 5.4918530963296748, + 5.5235619560570131, + 5.5545888516776376, + 5.5849625007211570, + 5.6147098441152083, + 5.6438561897747244, + 5.6724253419714961, + 5.7004397181410926, + 5.7279204545631996, + 5.7548875021634691, + 5.7813597135246599, + 5.8073549220576046, + 5.8328900141647422, + 5.8579809951275719, + 5.8826430493618416, + 5.9068905956085187, + 5.9307373375628867, + 5.9541963103868758, + 5.9772799234999168, + 6.0000000000000000, + 6.0223678130284544, + 6.0443941193584534, + 6.0660891904577721, + 6.0874628412503400, + 6.1085244567781700, + 6.1292830169449672, + 6.1497471195046822, + 6.1699250014423122, + 6.1898245588800176, + 6.2094533656289510, + 6.2288186904958804, + 6.2479275134435861, + 6.2667865406949019, + 6.2854022188622487, + 6.3037807481771031, + 6.3219280948873617, + 6.3398500028846252, + 6.3575520046180847, + 6.3750394313469254, + 6.3923174227787598, + 6.4093909361377026, + 6.4262647547020979, + 6.4429434958487288, + 6.4594316186372982, + 6.4757334309663976, + 6.4918530963296748, + 6.5077946401986964, + 6.5235619560570131, + 6.5391588111080319, + 6.5545888516776376, + 6.5698556083309478, + 6.5849625007211561, + 6.5999128421871278, + 6.6147098441152092, + 6.6293566200796095, + 6.6438561897747253, + 6.6582114827517955, + 6.6724253419714952, + 6.6865005271832185, + 6.7004397181410917, + 6.7142455176661224, + 6.7279204545631988, + 6.7414669864011465, + 6.7548875021634691, + 6.7681843247769260, + 6.7813597135246599, + 6.7944158663501062, + 6.8073549220576037, + 6.8201789624151887, + 6.8328900141647422, + 6.8454900509443757, + 6.8579809951275719, + 6.8703647195834048, + 6.8826430493618416, + 6.8948177633079437, + 6.9068905956085187, + 6.9188632372745955, + 6.9307373375628867, + 6.9425145053392399, + 6.9541963103868758, + 6.9657842846620879, + 6.9772799234999168, + 6.9886846867721664, + 7.0000000000000000, + 7.0112272554232540, + 7.0223678130284544, + 7.0334230015374501, + 7.0443941193584534, + 7.0552824355011898, + 7.0660891904577721, + 7.0768155970508317, + 7.0874628412503400, + 7.0980320829605272, + 7.1085244567781700, + 7.1189410727235076, + 7.1292830169449664, + 7.1395513523987937, + 7.1497471195046822, + 7.1598713367783891, + 7.1699250014423130, + 7.1799090900149345, + 7.1898245588800176, + 7.1996723448363644, + 7.2094533656289492, + 7.2191685204621621, + 7.2288186904958804, + 7.2384047393250794, + 7.2479275134435861, + 7.2573878426926521, + 7.2667865406949019, + 7.2761244052742384, + 7.2854022188622487, + 7.2946207488916270, + 7.3037807481771031, + 7.3128829552843557, + 7.3219280948873617, + 7.3309168781146177, + 7.3398500028846243, + 7.3487281542310781, + 7.3575520046180847, + 7.3663222142458151, + 7.3750394313469254, + 7.3837042924740528, + 7.3923174227787607, + 7.4008794362821844, + 7.4093909361377026, + 7.4178525148858991, + 7.4262647547020979, + 7.4346282276367255, + 7.4429434958487288, + 7.4512111118323299, + 7.4594316186372973, + 7.4676055500829976, + 7.4757334309663976, + 7.4838157772642564, + 7.4918530963296748, + 7.4998458870832057, + 7.5077946401986964, + 7.5156998382840436, + 7.5235619560570131, + 7.5313814605163119, + 7.5391588111080319, + 7.5468944598876373, + 7.5545888516776376, + 7.5622424242210728, + 7.5698556083309478, + 7.5774288280357487, + 7.5849625007211561, + 7.5924570372680806, + 7.5999128421871278, + 7.6073303137496113, + 7.6147098441152075, + 7.6220518194563764, + 7.6293566200796095, + 7.6366246205436488, + 7.6438561897747244, + 7.6510516911789290, + 7.6582114827517955, + 7.6653359171851765, + 7.6724253419714952, + 7.6794800995054464, + 7.6865005271832185, + 7.6934869574993252, + 7.7004397181410926, + 7.7073591320808825, + 7.7142455176661224, + 7.7210991887071856, + 7.7279204545631996, + 7.7347096202258392, + 7.7414669864011465, + 7.7481928495894596, + 7.7548875021634691, + 7.7615512324444795, + 7.7681843247769260, + 7.7747870596011737, + 7.7813597135246608, + 7.7879025593914317, + 7.7944158663501062, + 7.8008998999203047, + 7.8073549220576037, + 7.8137811912170374, + 7.8201789624151887, + 7.8265484872909159, + 7.8328900141647422, + 7.8392037880969445, + 7.8454900509443757, + 7.8517490414160571, + 7.8579809951275719, + 7.8641861446542798, + 7.8703647195834048, + 7.8765169465650002, + 7.8826430493618425, + 7.8887432488982601, + 7.8948177633079446, + 7.9008668079807496, + 7.9068905956085187, + 7.9128893362299619, + 7.9188632372745955, + 7.9248125036057813, + 7.9307373375628867, + 7.9366379390025719, + 7.9425145053392399, + 7.9483672315846778, + 7.9541963103868758, + 7.9600019320680806, + 7.9657842846620870, + 7.9715435539507720, + 7.9772799234999168, + 7.9829935746943104, + 7.9886846867721664, + 7.9943534368588578]; + +#[inline(always)] +pub fn FastLog2u16(v: u16) -> floatX { + log64k[v as usize] +} + +#[cfg(feature="std")] +#[inline(always)] +pub fn FastLog2(v: u64) -> floatX { + if v < 256 { + return kLog2Table[v as usize] as floatX; + } + (v as f32).log2() as floatX +} + +#[cfg(not(feature="std"))] +#[inline(always)] +pub fn FastLog2(v: u64) -> floatX { + if v < 256 { + return kLog2Table[v as usize] as floatX; + } + FastLog2u64(v) +} + +#[cfg(feature="std")] +#[inline(always)] +pub fn FastLog2f64(v: u64) -> floatX { + if v < 256 { + return kLog2Table[v as usize] as floatX; + } + (v as floatX).log2() +} + +#[cfg(not(feature="std"))] +#[inline(always)] +pub fn FastLog2f64(v: u64) -> floatX { + FastLog2(v) as floatX +} + +#[inline] +pub fn FastLog2u64(v: u64) -> floatX { + let bsr_8 = 56i8 - v.leading_zeros() as i8; + let offset = bsr_8 & -((bsr_8 >= 0) as i8); + offset as floatX + kLog2Table[(v >> offset) as u8 as usize] as (floatX) +} + +#[inline(always)] +pub fn FastLog2u32(v: i32) -> floatX { + let bsr_8 = 24i8 - v.leading_zeros() as i8; + let offset = bsr_8 & -((bsr_8 >= 0) as i8); + offset as floatX + kLog2Table[(v >> offset) as u8 as usize] as (floatX) +} + +#[inline(always)] +pub fn xFastLog2u16(v: u16) -> floatX { + let bsr_8 = 8i8 - v.leading_zeros() as i8; + let offset = (bsr_8 & -((bsr_8 >= 0) as i8)); + offset as floatX + kLog2Table[(v >> offset) as u8 as usize] as (floatX) +} + +#[cfg(feature="std")] +#[inline(always)] +pub fn FastPow2(v: super::util::floatX) -> super::util::floatX { + return (2 as super::util::floatX).powf(v); +} + + +#[cfg(not(feature="std"))] +#[inline(always)] +pub fn FastPow2(v: super::util::floatX) -> super::util::floatX { + assert!(v >= 0 as super::util::floatX); + let round_down = v as i32; + let remainder = v - round_down as super::util::floatX; + let mut x = 1 as super::util::floatX; + // (1 + (x/n) * ln2) ^ n + // let n = 8 + x += remainder * (0.693147180559945309417232121458 / 256.0) as super::util::floatX; + x *= x; + x *= x; + x *= x; + x *= x; + x *= x; + x *= x; + x *= x; + x *= x; + return (1 << round_down) as super::util::floatX * x; +} + +#[inline(always)] +pub fn Log2FloorNonZero(v: u64) -> u32 { + (63u32 ^ v.leading_zeros()) as u32 +} + +mod test { + fn baseline_log2_floor_non_zero(mut n:u64) -> u32 { + let mut result: u32 = 0u32; + while { + n = n >> 1i32; + n + } != 0 { + result = result.wrapping_add(1 as (u32)); + } + result + } + + #[test] + fn log2floor_non_zero_works(){ + let examples = [4u64, 254u64, 256u64, + 1428u64, 25412509u64, 21350891256u64, + 65536u64, 1258912591u64, 60968101u64, + 1u64, 12589125190825u64, 105912059215091u64, + 0u64]; + for example in examples.iter() { + let fast_version = super::Log2FloorNonZero(*example); + let baseline_version = baseline_log2_floor_non_zero(*example); + if *example != 0 { // make sure we don't panic when computing...but don't care about result + assert_eq!(fast_version, + baseline_version); + } + } + } +pub fn approx_eq(a : f64, b: f64, tol: f64) { + let mut t0 = a - b; + let mut t1 = b - a; + if t0 < 0.0 { + t0 = -t0; + } + if t1 < 0.0 { + t1 = -t1; + } + if (!(t1 < tol)) { + assert_eq!(a, b); + } + if (!(t0 < tol)) { + assert_eq!(a, b); + } +} + #[test] + fn fast_log2_works(){ + let examples = [4u64, 254u64, 256u64, + 1428u64, 25412509u64, 21350891256u64, + 65536u64, 1258912591u64, 60968101u64, + 1u64, 12589125190825u64, 105912059215091u64, + 0u64]; + let tol = [0.00001, 0.0001, 0.0001, 0.005, 0.007, 0.008, 0.01, 0.01, 0.01, 0.000001, 0.01, 0.01, 0.0001]; + for (index, example) in examples.iter().enumerate() { + let fast_version = super::FastLog2(*example); + if *example != 0 { // make sure we don't panic when computing...but don't care about result + let baseline_version = (*example as f64).log2(); + approx_eq(fast_version as f64, baseline_version, tol[index]); + } else { + //assert_eq!(fast_version as f64, 0.0 as f64); + } + } + } +} + + +static log64k : [floatX; 65536] = [ + 0.0,0.0,1.0,1.58496250072,2.0,2.32192809489,2.58496250072,2.80735492206,3.0,3.16992500144,3.32192809489,3.45943161864,3.58496250072,3.70043971814,3.80735492206,3.90689059561, +4.0,4.08746284125,4.16992500144,4.24792751344,4.32192809489,4.39231742278,4.45943161864,4.52356195606,4.58496250072,4.64385618977,4.70043971814,4.75488750216,4.80735492206,4.85798099513,4.90689059561,4.95419631039, +5.0,5.04439411936,5.08746284125,5.12928301694,5.16992500144,5.20945336563,5.24792751344,5.28540221886,5.32192809489,5.35755200462,5.39231742278,5.4262647547,5.45943161864,5.49185309633,5.52356195606,5.55458885168, +5.58496250072,5.61470984412,5.64385618977,5.67242534197,5.70043971814,5.72792045456,5.75488750216,5.78135971352,5.80735492206,5.83289001416,5.85798099513,5.88264304936,5.90689059561,5.93073733756,5.95419631039,5.9772799235, +6.0,6.02236781303,6.04439411936,6.06608919046,6.08746284125,6.10852445678,6.12928301694,6.1497471195,6.16992500144,6.18982455888,6.20945336563,6.2288186905,6.24792751344,6.26678654069,6.28540221886,6.30378074818, +6.32192809489,6.33985000288,6.35755200462,6.37503943135,6.39231742278,6.40939093614,6.4262647547,6.44294349585,6.45943161864,6.47573343097,6.49185309633,6.5077946402,6.52356195606,6.53915881111,6.55458885168,6.56985560833, +6.58496250072,6.59991284219,6.61470984412,6.62935662008,6.64385618977,6.65821148275,6.67242534197,6.68650052718,6.70043971814,6.71424551767,6.72792045456,6.7414669864,6.75488750216,6.76818432478,6.78135971352,6.79441586635, +6.80735492206,6.82017896242,6.83289001416,6.84549005094,6.85798099513,6.87036471958,6.88264304936,6.89481776331,6.90689059561,6.91886323727,6.93073733756,6.94251450534,6.95419631039,6.96578428466,6.9772799235,6.98868468677, +7.0,7.01122725542,7.02236781303,7.03342300154,7.04439411936,7.0552824355,7.06608919046,7.07681559705,7.08746284125,7.09803208296,7.10852445678,7.11894107272,7.12928301694,7.1395513524,7.1497471195,7.15987133678, +7.16992500144,7.17990909001,7.18982455888,7.19967234484,7.20945336563,7.21916852046,7.2288186905,7.23840473933,7.24792751344,7.25738784269,7.26678654069,7.27612440527,7.28540221886,7.29462074889,7.30378074818,7.31288295528, +7.32192809489,7.33091687811,7.33985000288,7.34872815423,7.35755200462,7.36632221425,7.37503943135,7.38370429247,7.39231742278,7.40087943628,7.40939093614,7.41785251489,7.4262647547,7.43462822764,7.44294349585,7.45121111183, +7.45943161864,7.46760555008,7.47573343097,7.48381577726,7.49185309633,7.49984588708,7.5077946402,7.51569983828,7.52356195606,7.53138146052,7.53915881111,7.54689445989,7.55458885168,7.56224242422,7.56985560833,7.57742882804, +7.58496250072,7.59245703727,7.59991284219,7.60733031375,7.61470984412,7.62205181946,7.62935662008,7.63662462054,7.64385618977,7.65105169118,7.65821148275,7.66533591719,7.67242534197,7.67948009951,7.68650052718,7.6934869575, +7.70043971814,7.70735913208,7.71424551767,7.72109918871,7.72792045456,7.73470962023,7.7414669864,7.74819284959,7.75488750216,7.76155123244,7.76818432478,7.7747870596,7.78135971352,7.78790255939,7.79441586635,7.80089989992, +7.80735492206,7.81378119122,7.82017896242,7.82654848729,7.83289001416,7.8392037881,7.84549005094,7.85174904142,7.85798099513,7.86418614465,7.87036471958,7.87651694657,7.88264304936,7.8887432489,7.89481776331,7.90086680798, +7.90689059561,7.91288933623,7.91886323727,7.92481250361,7.93073733756,7.936637939,7.94251450534,7.94836723158,7.95419631039,7.96000193207,7.96578428466,7.97154355395,7.9772799235,7.98299357469,7.98868468677,7.99435343686, +8.0,8.00562454919,8.01122725542,8.01680828769,8.02236781303,8.02790599657,8.03342300154,8.03891898929,8.04439411936,8.04984854945,8.0552824355,8.06069593169,8.06608919046,8.07146236256,8.07681559705,8.08214904135, +8.08746284125,8.09275714092,8.09803208296,8.10328780841,8.10852445678,8.11374216605,8.11894107272,8.12412131183,8.12928301694,8.13442632022,8.1395513524,8.14465824283,8.1497471195,8.15481810905,8.15987133678,8.16490692668, +8.16992500144,8.1749256825,8.17990909001,8.18487534291,8.18982455888,8.19475685442,8.19967234484,8.20457114425,8.20945336563,8.2143191208,8.21916852046,8.2240016742,8.2288186905,8.23361967676,8.23840473933,8.24317398347, +8.24792751344,8.25266543245,8.25738784269,8.26209484537,8.26678654069,8.2714630279,8.27612440527,8.28077077013,8.28540221886,8.29001884693,8.29462074889,8.29920801839,8.30378074818,8.30833903014,8.31288295528,8.31741261376, +8.32192809489,8.32642948712,8.33091687811,8.33539035469,8.33985000288,8.34429590792,8.34872815423,8.3531468255,8.35755200462,8.36194377374,8.36632221425,8.37068740681,8.37503943135,8.37937836707,8.38370429247,8.38801728535, +8.39231742278,8.39660478118,8.40087943628,8.40514146314,8.40939093614,8.41362792902,8.41785251489,8.42206476617,8.4262647547,8.43045255167,8.43462822764,8.43879185258,8.44294349585,8.44708322621,8.45121111183,8.4553272203, +8.45943161864,8.46352437327,8.46760555008,8.47167521439,8.47573343097,8.47978026403,8.48381577726,8.48784003382,8.49185309633,8.49585502689,8.49984588708,8.503825738,8.5077946402,8.51175265377,8.51569983828,8.51963625284, +8.52356195606,8.52747700606,8.53138146052,8.53527537662,8.53915881111,8.54303182026,8.54689445989,8.55074678538,8.55458885168,8.55842071327,8.56224242422,8.56605403817,8.56985560833,8.57364718749,8.57742882804,8.58120058192, +8.58496250072,8.58871463558,8.59245703727,8.59618975614,8.59991284219,8.60362634499,8.60733031375,8.61102479731,8.61470984412,8.61838550226,8.62205181946,8.62570884306,8.62935662008,8.63299519714,8.63662462054,8.64024493622, +8.64385618977,8.64745842645,8.65105169118,8.65463602853,8.65821148275,8.66177809777,8.66533591719,8.66888498427,8.67242534197,8.67595703294,8.67948009951,8.68299458368,8.68650052718,8.68999797142,8.6934869575,8.69696752623, +8.70043971814,8.70390357344,8.70735913208,8.7108064337,8.71424551767,8.71767642307,8.72109918871,8.72451385312,8.72792045456,8.73131903103,8.73470962023,8.73809225962,8.7414669864,8.7448338375,8.74819284959,8.75154405909, +8.75488750216,8.75822321473,8.76155123244,8.76487159074,8.76818432478,8.7714894695,8.7747870596,8.77807712954,8.78135971352,8.78463484556,8.78790255939,8.79116288856,8.79441586635,8.79766152585,8.80089989992,8.80413102118, +8.80735492206,8.81057163474,8.81378119122,8.81698362326,8.82017896242,8.82336724005,8.82654848729,8.82972273509,8.83289001416,8.83605035506,8.8392037881,8.84235034341,8.84549005094,8.84862294043,8.85174904142,8.85486838326, +8.85798099513,8.861086906,8.86418614465,8.86727873971,8.87036471958,8.87344411252,8.87651694656,8.87958324961,8.88264304936,8.88569637334,8.8887432489,8.89178370322,8.89481776331,8.89784545601,8.90086680798,8.90388184574, +8.90689059561,8.90989308377,8.91288933623,8.91587937884,8.91886323727,8.92184093707,8.92481250361,8.92777796208,8.93073733756,8.93369065495,8.936637939,8.93957921431,8.94251450534,8.94544383638,8.94836723158,8.95128471497, +8.95419631039,8.95710204156,8.96000193207,8.96289600534,8.96578428466,8.9686667932,8.97154355395,8.97441458981,8.9772799235,8.98013957764,8.98299357469,8.985841937,8.98868468677,8.99152184608,8.99435343686,8.99717948094, +9.0,9.00281501561,9.00562454919,9.00842862207,9.01122725542,9.01402047031,9.01680828769,9.01959072836,9.02236781303,9.02513956228,9.02790599657,9.03066713625,9.03342300154,9.03617361255,9.03891898929,9.04165915164, +9.04439411936,9.04712391211,9.04984854945,9.0525680508,9.0552824355,9.05799172276,9.06069593169,9.06339508129,9.06608919046,9.06877827799,9.07146236256,9.07414146275,9.07681559705,9.07948478383,9.08214904135,9.0848083878, +9.08746284125,9.09011241966,9.09275714092,9.09539702279,9.09803208296,9.10066233901,9.10328780841,9.10590850857,9.10852445678,9.11113567023,9.11374216605,9.11634396124,9.11894107272,9.12153351734,9.12412131183,9.12670447284, +9.12928301694,9.13185696061,9.13442632022,9.13699111208,9.1395513524,9.1421070573,9.14465824283,9.14720492494,9.1497471195,9.15228484231,9.15481810905,9.15734693536,9.15987133678,9.16239132876,9.16490692668,9.16741814583, +9.16992500144,9.17242750865,9.1749256825,9.17741953799,9.17990909001,9.1823943534,9.18487534291,9.1873520732,9.18982455888,9.19229281447,9.19475685442,9.19721669311,9.19967234484,9.20212382383,9.20457114425,9.20701432018, +9.20945336563,9.21188829455,9.2143191208,9.2167458582,9.21916852046,9.22158712126,9.2240016742,9.22641219279,9.2288186905,9.23122118071,9.23361967676,9.2360141919,9.23840473933,9.24079133216,9.24317398347,9.24555270626, +9.24792751344,9.25029841791,9.25266543245,9.25502856982,9.25738784269,9.25974326369,9.26209484537,9.26444260023,9.26678654069,9.26912667915,9.2714630279,9.27379559921,9.27612440527,9.27844945822,9.28077077013,9.28308835302, +9.28540221886,9.28771237955,9.29001884693,9.2923216328,9.29462074889,9.29691620688,9.29920801839,9.30149619498,9.30378074818,9.30606168943,9.30833903014,9.31061278166,9.31288295528,9.31514956226,9.31741261376,9.31967212095, +9.32192809489,9.32418054662,9.32642948712,9.32867492733,9.33091687811,9.33315535031,9.33539035469,9.33762190199,9.33985000288,9.342074668,9.34429590792,9.34651373317,9.34872815423,9.35093918155,9.3531468255,9.35535109642, +9.35755200462,9.35974956032,9.36194377374,9.36413465501,9.36632221425,9.36850646151,9.37068740681,9.37286506011,9.37503943135,9.37721053039,9.37937836707,9.38154295118,9.38370429247,9.38586240064,9.38801728535,9.3901689562, +9.39231742278,9.39446269461,9.39660478118,9.39874369194,9.40087943628,9.40301202357,9.40514146314,9.40726776424,9.40939093614,9.41151098801,9.41362792902,9.41574176829,9.41785251489,9.41996017785,9.42206476617,9.42416628882, +9.4262647547,9.4283601727,9.43045255167,9.43254190039,9.43462822764,9.43671154214,9.43879185258,9.44086916761,9.44294349585,9.44501484587,9.44708322621,9.44914864538,9.45121111183,9.45327063401,9.4553272203,9.45738087907, +9.45943161864,9.46147944729,9.46352437327,9.46556640481,9.46760555008,9.46964181724,9.47167521439,9.47370574962,9.47573343097,9.47775826644,9.47978026403,9.48179943167,9.48381577726,9.4858293087,9.48784003382,9.48984796044, +9.49185309633,9.49385544924,9.49585502689,9.49785183695,9.49984588708,9.5018371849,9.503825738,9.50581155392,9.5077946402,9.50977500433,9.51175265377,9.51372759595,9.51569983828,9.51766938813,9.51963625284,9.52160043972, +9.52356195606,9.5255208091,9.52747700606,9.52943055415,9.53138146052,9.53332973231,9.53527537662,9.53721840054,9.53915881111,9.54109661535,9.54303182026,9.54496443279,9.54689445989,9.54882190846,9.55074678538,9.55266909751, +9.55458885168,9.55650605467,9.55842071327,9.56033283421,9.56224242422,9.56414948999,9.56605403817,9.56795607542,9.56985560833,9.5717526435,9.57364718749,9.57553924683,9.57742882804,9.57931593758,9.58120058192,9.5830827675, +9.58496250072,9.58683978796,9.58871463558,9.59058704992,9.59245703727,9.59432460392,9.59618975614,9.59805250016,9.59991284219,9.60177078841,9.60362634499,9.60547951806,9.60733031375,9.60917873814,9.61102479731,9.61286849729, +9.61470984412,9.61654884378,9.61838550226,9.62021982551,9.62205181946,9.62388149001,9.62570884306,9.62753388447,9.62935662008,9.6311770557,9.63299519714,9.63481105017,9.63662462054,9.63843591399,9.64024493622,9.64205169293, +9.64385618977,9.64565843241,9.64745842645,9.64925617752,9.65105169118,9.652844973,9.65463602853,9.65642486328,9.65821148275,9.65999589243,9.66177809777,9.66355810422,9.66533591719,9.66711154208,9.66888498427,9.67065624912, +9.67242534197,9.67419226815,9.67595703294,9.67771964164,9.67948009951,9.68123841178,9.68299458368,9.68474862042,9.68650052718,9.68825030913,9.68999797142,9.69174351917,9.6934869575,9.6952282915,9.69696752623,9.69870466677, +9.70043971814,9.70217268537,9.70390357344,9.70563238736,9.70735913208,9.70908381255,9.7108064337,9.71252700044,9.71424551767,9.71596199026,9.71767642307,9.71938882094,9.72109918871,9.72280753117,9.72451385312,9.72621815933, +9.72792045456,9.72962074355,9.73131903103,9.73301532169,9.73470962023,9.73640193132,9.73809225962,9.73978060977,9.7414669864,9.74315139411,9.7448338375,9.74651432114,9.74819284959,9.7498694274,9.75154405909,9.75321674918, +9.75488750216,9.75655632252,9.75822321473,9.75988818322,9.76155123244,9.76321236681,9.76487159074,9.7665289086,9.76818432478,9.76983784363,9.7714894695,9.77313920672,9.7747870596,9.77643303244,9.77807712954,9.77971935514, +9.78135971352,9.78299820892,9.78463484556,9.78626962765,9.78790255939,9.78953364497,9.79116288856,9.7927902943,9.79441586635,9.79603960883,9.79766152585,9.79928162152,9.80089989992,9.80251636512,9.80413102118,9.80574387215, +9.80735492206,9.80896417492,9.81057163474,9.81217730551,9.81378119122,9.81538329581,9.81698362326,9.81858217748,9.82017896242,9.82177398197,9.82336724005,9.82495874053,9.82654848729,9.82813648419,9.82972273509,9.8313072438, +9.83289001416,9.83447104998,9.83605035506,9.83762793317,9.8392037881,9.8407779236,9.84235034341,9.84392105129,9.84549005094,9.84705734609,9.84862294043,9.85018683765,9.85174904142,9.8533095554,9.85486838326,9.85642552863, +9.85798099513,9.85953478638,9.861086906,9.86263735756,9.86418614465,9.86573327085,9.86727873971,9.86882255477,9.87036471958,9.87190523766,9.87344411252,9.87498134765,9.87651694657,9.87805091273,9.87958324961,9.88111396068, +9.88264304936,9.88417051911,9.88569637334,9.88722061547,9.8887432489,9.89026427702,9.89178370322,9.89330153086,9.89481776331,9.89633240391,9.89784545601,9.89935692292,9.90086680798,9.90237511449,9.90388184574,9.90538700502, +9.90689059561,9.90839262077,9.90989308377,9.91139198784,9.91288933623,9.91438513216,9.91587937884,9.91737207948,9.91886323727,9.92035285542,9.92184093707,9.92332748542,9.92481250361,9.92629599478,9.92777796208,9.92925840864, +9.93073733756,9.93221475197,9.93369065495,9.9351650496,9.936637939,9.93810932622,9.93957921431,9.94104760634,9.94251450534,9.94397991434,9.94544383638,9.94690627446,9.94836723158,9.94982671076,9.95128471497,9.95274124719, +9.95419631039,9.95564990753,9.95710204156,9.95855271543,9.96000193207,9.9614496944,9.96289600534,9.96434086779,9.96578428466,9.96722625884,9.9686667932,9.97010589061,9.97154355395,9.97297978607,9.97441458981,9.97584796801, +9.9772799235,9.97871045911,9.98013957764,9.9815672819,9.98299357469,9.9844184588,9.985841937,9.98726401207,9.98868468677,9.99010396386,9.99152184608,9.99293833617,9.99435343686,9.99576715088,9.99717948094,9.99859042975, +10.0,10.0014081944,10.0028150156,10.0042204663,10.0056245492,10.0070272669,10.0084286221,10.0098286174,10.0112272554,10.0126245389,10.0140204703,10.0154150524,10.0168082877,10.0182001788,10.0195907284,10.0209799389, +10.022367813,10.0237543533,10.0251395623,10.0265234425,10.0279059966,10.029287227,10.0306671362,10.0320457269,10.0334230015,10.0347989626,10.0361736126,10.037546954,10.0389189893,10.040289721,10.0416591516,10.0430272836, +10.0443941194,10.0457596614,10.0471239121,10.048486874,10.0498485495,10.0512089409,10.0525680508,10.0539258815,10.0552824355,10.0566377151,10.0579917228,10.0593444608,10.0606959317,10.0620461377,10.0633950813,10.0647427648, +10.0660891905,10.0674343608,10.068778278,10.0701209445,10.0714623626,10.0728025345,10.0741414628,10.0754791495,10.0768155971,10.0781508077,10.0794847838,10.0808175276,10.0821490414,10.0834793273,10.0848083878,10.086136225, +10.0874628413,10.0887882387,10.0901124197,10.0914353863,10.0927571409,10.0940776857,10.0953970228,10.0967151545,10.098032083,10.0993478104,10.100662339,10.1019756709,10.1032878084,10.1045987536,10.1059085086,10.1072170756, +10.1085244568,10.1098306543,10.1111356702,10.1124395068,10.113742166,10.1150436502,10.1163439612,10.1176431014,10.1189410727,10.1202378773,10.1215335173,10.1228279948,10.1241213118,10.1254134705,10.1267044728,10.127994321, +10.1292830169,10.1305705628,10.1318569606,10.1331422124,10.1344263202,10.1357092861,10.1369911121,10.1382718002,10.1395513524,10.1408297708,10.1421070573,10.143383214,10.1446582428,10.1459321458,10.1472049249,10.1484765822, +10.1497471195,10.1510165389,10.1522848423,10.1535520317,10.1548181091,10.1560830763,10.1573469354,10.1586096882,10.1598713368,10.161131883,10.1623913288,10.163649676,10.1649069267,10.1661630826,10.1674181458,10.1686721181, +10.1699250014,10.1711767977,10.1724275086,10.1736771363,10.1749256825,10.1761731491,10.177419538,10.178664851,10.17990909,10.1811522569,10.1823943534,10.1836353815,10.1848753429,10.1861142395,10.1873520732,10.1885888457, +10.1898245589,10.1910592145,10.1922928145,10.1935253605,10.1947568544,10.195987298,10.1972166931,10.1984450415,10.1996723448,10.200898605,10.2021238238,10.203348003,10.2045711442,10.2057932494,10.2070143202,10.2082343583, +10.2094533656,10.2106713438,10.2118882945,10.2131042196,10.2143191208,10.2155329997,10.2167458582,10.2179576979,10.2191685205,10.2203783277,10.2215871213,10.2227949029,10.2240016742,10.2252074369,10.2264121928,10.2276159434, +10.2288186905,10.2300204357,10.2312211807,10.2324209272,10.2336196768,10.2348174311,10.2360141919,10.2372099608,10.2384047393,10.2395985292,10.2407913322,10.2419831497,10.2431739835,10.2443638351,10.2455527063,10.2467405985, +10.2479275134,10.2491134527,10.2502984179,10.2514824106,10.2526654325,10.253847485,10.2550285698,10.2562086885,10.2573878427,10.2585660339,10.2597432637,10.2609195337,10.2620948454,10.2632692004,10.2644426002,10.2656150465, +10.2667865407,10.2679570844,10.2691266791,10.2702953265,10.2714630279,10.272629785,10.2737955992,10.2749604721,10.2761244053,10.2772874001,10.2784494582,10.2796105811,10.2807707701,10.281930027,10.283088353,10.2842457498, +10.2854022189,10.2865577616,10.2877123795,10.2888660742,10.2900188469,10.2911706993,10.2923216328,10.2934716488,10.2946207489,10.2957689344,10.2969162069,10.2980625677,10.2992080184,10.3003525603,10.301496195,10.3026389238, +10.3037807482,10.3049216696,10.3060616894,10.3072008091,10.3083390301,10.3094763538,10.3106127817,10.311748315,10.3128829553,10.3140167039,10.3151495623,10.3162815317,10.3174126138,10.3185428097,10.3196721209,10.3208005489, +10.3219280949,10.3230547603,10.3241805466,10.3253054551,10.3264294871,10.3275526441,10.3286749273,10.3297963382,10.3309168781,10.3320365484,10.3331553503,10.3342732853,10.3353903547,10.3365065598,10.337621902,10.3387363826, +10.3398500029,10.3409627643,10.342074668,10.3431857154,10.3442959079,10.3454052467,10.3465137332,10.3476213686,10.3487281542,10.3498340915,10.3509391815,10.3520434258,10.3531468255,10.3542493819,10.3553510964,10.3564519702, +10.3575520046,10.3586512009,10.3597495603,10.3608470842,10.3619437737,10.3630396303,10.364134655,10.3652288493,10.3663222142,10.3674147512,10.3685064615,10.3695973463,10.3706874068,10.3717766443,10.3728650601,10.3739526554, +10.3750394313,10.3761253893,10.3772105304,10.3782948559,10.3793783671,10.3804610651,10.3815429512,10.3826240266,10.3837042925,10.3847837501,10.3858624006,10.3869402453,10.3880172853,10.3890935219,10.3901689562,10.3912435894, +10.3923174228,10.3933904574,10.3944626946,10.3955341355,10.3966047812,10.3976746329,10.3987436919,10.3998119593,10.4008794363,10.401946124,10.4030120236,10.4040771362,10.4051414631,10.4062050054,10.4072677642,10.4083297408, +10.4093909361,10.4104513515,10.411510988,10.4125698468,10.413627929,10.4146852358,10.4157417683,10.4167975276,10.4178525149,10.4189067313,10.4199601778,10.4210128558,10.4220647662,10.4231159101,10.4241662888,10.4252159033, +10.4262647547,10.4273128441,10.4283601727,10.4294067415,10.4304525517,10.4314976043,10.4325419004,10.4335854412,10.4346282276,10.4356702609,10.4367115421,10.4377520723,10.4387918526,10.439830884,10.4408691676,10.4419067045, +10.4429434958,10.4439795426,10.4450148459,10.4460494067,10.4470832262,10.4481163054,10.4491486454,10.4501802472,10.4512111118,10.4522412404,10.453270634,10.4542992936,10.4553272203,10.4563544151,10.4573808791,10.4584066132, +10.4594316186,10.4604558963,10.4614794473,10.4625022726,10.4635243733,10.4645457503,10.4655664048,10.4665863377,10.4676055501,10.4686240429,10.4696418172,10.4706588741,10.4716752144,10.4726908392,10.4737057496,10.4747199465, +10.475733431,10.4767462039,10.4777582664,10.4787696195,10.479780264,10.4807902011,10.4817994317,10.4828079567,10.4838157773,10.4848228943,10.4858293087,10.4868350216,10.4878400338,10.4888443465,10.4898479604,10.4908508767, +10.4918530963,10.4928546202,10.4938554492,10.4948555845,10.4958550269,10.4968537774,10.497851837,10.4988492065,10.4998458871,10.5008418796,10.5018371849,10.5028318041,10.503825738,10.5048189876,10.5058115539,10.5068034378, +10.5077946402,10.5087851621,10.5097750043,10.5107641679,10.5117526538,10.5127404628,10.513727596,10.5147140541,10.5156998383,10.5166849493,10.5176693881,10.5186531557,10.5196362528,10.5206186806,10.5216004397,10.5225815313, +10.5235619561,10.524541715,10.5255208091,10.5264992391,10.5274770061,10.5284541108,10.5294305541,10.5304063371,10.5313814605,10.5323559253,10.5333297323,10.5343028825,10.5352753766,10.5362472157,10.5372184005,10.5381889321, +10.5391588111,10.5401280386,10.5410966153,10.5420645423,10.5430318203,10.5439984501,10.5449644328,10.5459297691,10.5468944599,10.5478585061,10.5488219085,10.5497846679,10.5507467854,10.5517082616,10.5526690975,10.5536292939, +10.5545888517,10.5555477716,10.5565060547,10.5574637016,10.5584207133,10.5593770905,10.5603328342,10.5612879452,10.5622424242,10.5631962722,10.56414949,10.5651020784,10.5660540382,10.5670053702,10.5679560754,10.5689061545, +10.5698556083,10.5708044377,10.5717526435,10.5727002265,10.5736471875,10.5745935273,10.5755392468,10.5764843468,10.577428828,10.5783726914,10.5793159376,10.5802585675,10.5812005819,10.5821419817,10.5830827675,10.5840229403, +10.5849625007,10.5859014497,10.586839788,10.5877775163,10.5887146356,10.5896511465,10.5905870499,10.5915223466,10.5924570373,10.5933911228,10.5943246039,10.5952574814,10.5961897561,10.5971214288,10.5980525002,10.598982971, +10.5999128422,10.6008421144,10.6017707884,10.602698865,10.603626345,10.6045532291,10.6054795181,10.6064052127,10.6073303137,10.608254822,10.6091787381,10.610102063,10.6110247973,10.6119469418,10.6128684973,10.6137894645, +10.6147098441,10.615629637,10.6165488438,10.6174674653,10.6183855023,10.6193029554,10.6202198255,10.6211361133,10.6220518195,10.6229669448,10.62388149,10.6247954559,10.6257088431,10.6266216524,10.6275338845,10.6284455401, +10.6293566201,10.630267125,10.6311770557,10.6320864128,10.6329951971,10.6339034093,10.6348110502,10.6357181203,10.6366246205,10.6375305515,10.638435914,10.6393407087,10.6402449362,10.6411485974,10.6420516929,10.6429542235, +10.6438561898,10.6447575925,10.6456584324,10.6465587102,10.6474584265,10.648357582,10.6492561775,10.6501542137,10.6510516912,10.6519486107,10.652844973,10.6537407787,10.6546360285,10.6555307232,10.6564248633,10.6573184496, +10.6582114828,10.6591039635,10.6599958924,10.6608872703,10.6617780978,10.6626683755,10.6635581042,10.6644472845,10.6653359172,10.6662240028,10.6671115421,10.6679985357,10.6688849843,10.6697708885,10.6706562491,10.6715410667, +10.672425342,10.6733090756,10.6741922681,10.6750749204,10.6759570329,10.6768386065,10.6777196416,10.6786001391,10.6794800995,10.6803595235,10.6812384118,10.682116765,10.6829945837,10.6838718686,10.6847486204,10.6856248397, +10.6865005272,10.6873756834,10.6882503091,10.6891244049,10.6899979714,10.6908710093,10.6917435192,10.6926155017,10.6934869575,10.6943578872,10.6952282915,10.696098171,10.6969675262,10.697836358,10.6987046668,10.6995724533, +10.7004397181,10.701306462,10.7021726854,10.703038389,10.7039035734,10.7047682394,10.7056323874,10.7064960181,10.7073591321,10.70822173,10.7090838126,10.7099453802,10.7108064337,10.7116669736,10.7125270004,10.7133865149, +10.7142455177,10.7151040092,10.7159619903,10.7168194613,10.7176764231,10.7185328761,10.7193888209,10.7202442583,10.7210991887,10.7219536128,10.7228075312,10.7236609444,10.7245138531,10.7253662579,10.7262181593,10.727069558, +10.7279204546,10.7287708495,10.7296207436,10.7304701372,10.731319031,10.7321674257,10.7330153217,10.7338627197,10.7347096202,10.7355560239,10.7364019313,10.737247343,10.7380922596,10.7389366817,10.7397806098,10.7406240445, +10.7414669864,10.7423094361,10.7431513941,10.7439928611,10.7448338375,10.745674324,10.7465143211,10.7473538295,10.7481928496,10.749031382,10.7498694274,10.7507069862,10.7515440591,10.7523806466,10.7532167492,10.7540523675, +10.7548875022,10.7557221536,10.7565563225,10.7573900094,10.7582232147,10.7590559392,10.7598881832,10.7607199475,10.7615512324,10.7623820387,10.7632123668,10.7640422173,10.7648715907,10.7657004877,10.7665289086,10.7673568541, +10.7681843248,10.7690113211,10.7698378436,10.7706638929,10.7714894695,10.7723145739,10.7731392067,10.7739633684,10.7747870596,10.7756102808,10.7764330324,10.7772553152,10.7780771295,10.778898476,10.7797193551,10.7805397675, +10.7813597135,10.7821791938,10.7829982089,10.7838167593,10.7846348456,10.7854524682,10.7862696276,10.7870863246,10.7879025594,10.7887183327,10.789533645,10.7903484968,10.7911628886,10.7919768209,10.7927902943,10.7936033093, +10.7944158664,10.795227966,10.7960396088,10.7968507953,10.7976615259,10.7984718011,10.7992816215,10.8000909876,10.8008998999,10.8017083589,10.8025163651,10.803323919,10.8041310212,10.8049376721,10.8057438722,10.806549622, +10.8073549221,10.8081597729,10.8089641749,10.8097681287,10.8105716347,10.8113746935,10.8121773055,10.8129794713,10.8137811912,10.8145824659,10.8153832958,10.8161836814,10.8169836233,10.8177831218,10.8185821775,10.8193807909, +10.8201789624,10.8209766926,10.821773982,10.822570831,10.82336724,10.8241632097,10.8249587405,10.8257538329,10.8265484873,10.8273427042,10.8281364842,10.8289298277,10.8297227351,10.830515207,10.8313072438,10.832098846, +10.8328900142,10.8336807487,10.83447105,10.8352609186,10.8360503551,10.8368393597,10.8376279332,10.8384160758,10.8392037881,10.8399910705,10.8407779236,10.8415643477,10.8423503434,10.8431359111,10.8439210513,10.8447057644, +10.8454900509,10.8462739113,10.8470573461,10.8478403556,10.8486229404,10.8494051009,10.8501868376,10.850968151,10.8517490414,10.8525295094,10.8533095554,10.8540891799,10.8548683833,10.855647166,10.8564255286,10.8572034715, +10.8579809951,10.8587580999,10.8595347864,10.8603110549,10.861086906,10.8618623401,10.8626373576,10.8634119589,10.8641861447,10.8649599151,10.8657332709,10.8665062122,10.8672787397,10.8680508537,10.8688225548,10.8695938432, +10.8703647196,10.8711351842,10.8719052377,10.8726748803,10.8734441125,10.8742129348,10.8749813477,10.8757493514,10.8765169466,10.8772841335,10.8780509127,10.8788172846,10.8795832496,10.8803488082,10.8811139607,10.8818787076, +10.8826430494,10.8834069864,10.8841705191,10.8849336479,10.8856963733,10.8864586957,10.8872206155,10.8879821331,10.8887432489,10.8895039634,10.890264277,10.8910241901,10.8917837032,10.8925428166,10.8933015309,10.8940598463, +10.8948177633,10.8955752824,10.8963324039,10.8970891283,10.897845456,10.8986013874,10.8993569229,10.900112063,10.900866808,10.9016211583,10.9023751145,10.9031286768,10.9038818457,10.9046346217,10.905387005,10.9061389962, +10.9068905956,10.9076418037,10.9083926208,10.9091430473,10.9098930838,10.9106427305,10.9113919878,10.9121408563,10.9128893362,10.913637428,10.9143851322,10.915132449,10.9158793788,10.9166259222,10.9173720795,10.918117851, +10.9188632373,10.9196082386,10.9203528554,10.9210970881,10.9218409371,10.9225844027,10.9233274854,10.9240701856,10.9248125036,10.9255544399,10.9262959948,10.9270371687,10.9277779621,10.9285183753,10.9292584086,10.9299980626, +10.9307373376,10.9314762339,10.932214752,10.9329528922,10.933690655,10.9344280406,10.9351650496,10.9359016823,10.936637939,10.9373738202,10.9381093262,10.9388444575,10.9395792143,10.9403135971,10.9410476063,10.9417812423, +10.9425145053,10.9432473959,10.9439799143,10.944712061,10.9454438364,10.9461752407,10.9469062745,10.947636938,10.9483672316,10.9490971557,10.9498267108,10.950555897,10.951284715,10.9520131649,10.9527412472,10.9534689622, +10.9541963104,10.954923292,10.9556499075,10.9563761572,10.9571020416,10.9578275608,10.9585527154,10.9592775057,10.9600019321,10.9607259948,10.9614496944,10.9621730311,10.9628960053,10.9636186174,10.9643408678,10.9650627567, +10.9657842847,10.9665054519,10.9672262588,10.9679467058,10.9686667932,10.9693865213,10.9701058906,10.9708249014,10.971543554,10.9722618487,10.9729797861,10.9736973663,10.9744145898,10.9751314569,10.975847968,10.9765641234, +10.9772799235,10.9779953686,10.9787104591,10.9794251953,10.9801395776,10.9808536064,10.9815672819,10.9822806046,10.9829935747,10.9837061927,10.9844184588,10.9851303735,10.985841937,10.9865531498,10.9872640121,10.9879745243, +10.9886846868,10.9893944998,10.9901039639,10.9908130792,10.9915218461,10.992230265,10.9929383362,10.99364606,10.9943534369,10.995060467,10.9957671509,10.9964734887,10.9971794809,10.9978851278,10.9985904297,10.999295387, +11.0,11.000704269,11.0014081944,11.0021117765,11.0028150156,11.0035179121,11.0042204663,11.0049226786,11.0056245492,11.0063260785,11.0070272669,11.0077281146,11.0084286221,11.0091287895,11.0098286174,11.0105281059, +11.0112272554,11.0119260663,11.0126245389,11.0133226734,11.0140204703,11.0147179299,11.0154150524,11.0161118382,11.0168082877,11.0175044011,11.0182001788,11.0188956211,11.0195907284,11.0202855008,11.0209799389,11.0216740429, +11.022367813,11.0230612497,11.0237543533,11.024447124,11.0251395623,11.0258316683,11.0265234425,11.0272148852,11.0279059966,11.0285967771,11.029287227,11.0299773466,11.0306671362,11.0313565963,11.0320457269,11.0327345286, +11.0334230015,11.0341111461,11.0347989626,11.0354864513,11.0361736126,11.0368604467,11.037546954,11.0382331347,11.0389189893,11.039604518,11.040289721,11.0409745988,11.0416591516,11.0423433798,11.0430272836,11.0437108633, +11.0443941194,11.0450770519,11.0457596614,11.046441948,11.0471239121,11.047805554,11.048486874,11.0491678724,11.0498485495,11.0505289055,11.0512089409,11.0518886559,11.0525680508,11.0532471259,11.0539258815,11.054604318, +11.0552824355,11.0559602345,11.0566377151,11.0573148778,11.0579917228,11.0586682503,11.0593444608,11.0600203545,11.0606959317,11.0613711927,11.0620461377,11.0627207672,11.0633950813,11.0640690804,11.0647427648,11.0654161347, +11.0660891905,11.0667619324,11.0674343608,11.0681064759,11.068778278,11.0694497674,11.0701209445,11.0707918094,11.0714623626,11.0721326042,11.0728025345,11.073472154,11.0741414628,11.0748104612,11.0754791495,11.076147528, +11.0768155971,11.0774833569,11.0781508077,11.07881795,11.0794847838,11.0801513096,11.0808175276,11.0814834381,11.0821490414,11.0828143377,11.0834793273,11.0841440106,11.0848083878,11.0854724592,11.086136225,11.0867996856, +11.0874628413,11.0881256922,11.0887882387,11.0894504811,11.0901124197,11.0907740546,11.0914353863,11.092096415,11.0927571409,11.0934175644,11.0940776857,11.094737505,11.0953970228,11.0960562392,11.0967151545,11.097373769, +11.098032083,11.0986900967,11.0993478104,11.1000052244,11.100662339,11.1013191544,11.1019756709,11.1026318889,11.1032878084,11.1039434299,11.1045987536,11.1052537797,11.1059085086,11.1065629404,11.1072170756,11.1078709143, +11.1085244568,11.1091777034,11.1098306543,11.1104833098,11.1111356702,11.1117877358,11.1124395068,11.1130909834,11.113742166,11.1143930549,11.1150436502,11.1156939522,11.1163439612,11.1169936775,11.1176431014,11.118292233, +11.1189410727,11.1195896207,11.1202378773,11.1208858428,11.1215335173,11.1221809013,11.1228279948,11.1234747982,11.1241213118,11.1247675358,11.1254134705,11.1260591161,11.1267044728,11.1273495411,11.127994321,11.1286388129, +11.1292830169,11.1299269335,11.1305705628,11.1312139051,11.1318569606,11.1324997296,11.1331422124,11.1337844092,11.1344263202,11.1350679458,11.1357092861,11.1363503415,11.1369911121,11.1376315982,11.1382718002,11.1389117181, +11.1395513524,11.1401907032,11.1408297708,11.1414685554,11.1421070573,11.1427452768,11.143383214,11.1440208693,11.1446582428,11.1452953349,11.1459321458,11.1465686757,11.1472049249,11.1478408937,11.1484765822,11.1491119907, +11.1497471195,11.1503819688,11.1510165389,11.15165083,11.1522848423,11.1529185761,11.1535520317,11.1541852093,11.1548181091,11.1554507313,11.1560830763,11.1567151442,11.1573469354,11.1579784499,11.1586096882,11.1592406504, +11.1598713368,11.1605017476,11.161131883,11.1617617433,11.1623913288,11.1630206396,11.163649676,11.1642784383,11.1649069267,11.1655351414,11.1661630826,11.1667907507,11.1674181458,11.1680452682,11.1686721181,11.1692986958, +11.1699250014,11.1705510353,11.1711767977,11.1718022887,11.1724275086,11.1730524578,11.1736771363,11.1743015445,11.1749256825,11.1755495506,11.1761731491,11.1767964781,11.177419538,11.1780423289,11.178664851,11.1792871046, +11.17990909,11.1805308073,11.1811522569,11.1817734388,11.1823943534,11.1830150009,11.1836353815,11.1842554954,11.1848753429,11.1854949242,11.1861142395,11.1867332891,11.1873520732,11.187970592,11.1885888457,11.1892068346, +11.1898245589,11.1904420188,11.1910592145,11.1916761464,11.1922928145,11.1929092191,11.1935253605,11.1941412389,11.1947568544,11.1953722074,11.195987298,11.1966021265,11.1972166931,11.197830998,11.1984450415,11.1990588237, +11.1996723448,11.2002856052,11.200898605,11.2015113445,11.2021238238,11.2027360433,11.203348003,11.2039597032,11.2045711442,11.2051823262,11.2057932494,11.206403914,11.2070143202,11.2076244682,11.2082343583,11.2088439907, +11.2094533656,11.2100624832,11.2106713438,11.2112799475,11.2118882945,11.2124963852,11.2131042196,11.2137117981,11.2143191208,11.2149261879,11.2155329997,11.2161395564,11.2167458582,11.2173519053,11.2179576979,11.2185632362, +11.2191685205,11.2197735509,11.2203783277,11.2209828511,11.2215871213,11.2221911385,11.2227949029,11.2233984147,11.2240016742,11.2246046815,11.2252074369,11.2258099406,11.2264121928,11.2270141936,11.2276159434,11.2282174423, +11.2288186905,11.2294196882,11.2300204357,11.2306209331,11.2312211807,11.2318211787,11.2324209272,11.2330204265,11.2336196768,11.2342186782,11.2348174311,11.2354159356,11.2360141919,11.2366122002,11.2372099608,11.2378074737, +11.2384047393,11.2390017578,11.2395985292,11.240195054,11.2407913322,11.241387364,11.2419831497,11.2425786895,11.2431739835,11.243769032,11.2443638351,11.2449583932,11.2455527063,11.2461467746,11.2467405985,11.247334178, +11.2479275134,11.2485206049,11.2491134527,11.249706057,11.2502984179,11.2508905357,11.2514824106,11.2520740428,11.2526654325,11.2532565798,11.253847485,11.2544381483,11.2550285698,11.2556187498,11.2562086885,11.2567983861, +11.2573878427,11.2579770586,11.2585660339,11.2591547689,11.2597432637,11.2603315186,11.2609195337,11.2615073092,11.2620948454,11.2626821424,11.2632692004,11.2638560196,11.2644426002,11.2650289425,11.2656150465,11.2662009125, +11.2667865407,11.2673719313,11.2679570844,11.2685420003,11.2691266791,11.2697111211,11.2702953265,11.2708792953,11.2714630279,11.2720465244,11.272629785,11.2732128099,11.2737955992,11.2743781532,11.2749604721,11.2755425561, +11.2761244053,11.2767060199,11.2772874001,11.2778685462,11.2784494582,11.2790301364,11.2796105811,11.2801907922,11.2807707701,11.281350515,11.281930027,11.2825093062,11.283088353,11.2836671675,11.2842457498,11.2848241002, +11.2854022189,11.2859801059,11.2865577616,11.2871351861,11.2877123795,11.2882893422,11.2888660742,11.2894425757,11.2900188469,11.2905948881,11.2911706993,11.2917462808,11.2923216328,11.2928967554,11.2934716488,11.2940463133, +11.2946207489,11.2951949559,11.2957689344,11.2963426847,11.2969162069,11.2974895012,11.2980625677,11.2986354067,11.2992080184,11.2997804029,11.3003525603,11.300924491,11.301496195,11.3020676725,11.3026389238,11.3032099489, +11.3037807482,11.3043513217,11.3049216696,11.3054917921,11.3060616894,11.3066313617,11.3072008091,11.3077700319,11.3083390301,11.3089078041,11.3094763538,11.3100446796,11.3106127817,11.3111806601,11.311748315,11.3123157467, +11.3128829553,11.313449941,11.3140167039,11.3145832443,11.3151495623,11.315715658,11.3162815317,11.3168471836,11.3174126138,11.3179778224,11.3185428097,11.3191075758,11.3196721209,11.3202364452,11.3208005489,11.321364432, +11.3219280949,11.3224915376,11.3230547603,11.3236177633,11.3241805466,11.3247431105,11.3253054551,11.3258675806,11.3264294871,11.3269911749,11.3275526441,11.3281138948,11.3286749273,11.3292357417,11.3297963382,11.330356717, +11.3309168781,11.3314768219,11.3320365484,11.3325960578,11.3331553503,11.3337144261,11.3342732853,11.3348319281,11.3353903547,11.3359485652,11.3365065598,11.3370643387,11.337621902,11.3381792499,11.3387363826,11.3392933002, +11.3398500029,11.3404064909,11.3409627643,11.3415188232,11.342074668,11.3426302987,11.3431857154,11.3437409185,11.3442959079,11.3448506839,11.3454052467,11.3459595964,11.3465137332,11.3470676572,11.3476213686,11.3481748675, +11.3487281542,11.3492812288,11.3498340915,11.3503867423,11.3509391815,11.3514914093,11.3520434258,11.3525952311,11.3531468255,11.353698209,11.3542493819,11.3548003444,11.3553510964,11.3559016383,11.3564519702,11.3570020923, +11.3575520046,11.3581017074,11.3586512009,11.3592004851,11.3597495603,11.3602984266,11.3608470842,11.3613955332,11.3619437737,11.362491806,11.3630396303,11.3635872465,11.364134655,11.3646818559,11.3652288493,11.3657756353, +11.3663222142,11.3668685862,11.3674147512,11.3679607096,11.3685064615,11.369052007,11.3695973463,11.3701424795,11.3706874068,11.3712321284,11.3717766443,11.3723209549,11.3728650601,11.3734089602,11.3739526554,11.3744961457, +11.3750394313,11.3755825125,11.3761253893,11.3766680619,11.3772105304,11.377752795,11.3782948559,11.3788367132,11.3793783671,11.3799198176,11.3804610651,11.3810021096,11.3815429512,11.3820835901,11.3826240266,11.3831642606, +11.3837042925,11.3842441222,11.3847837501,11.3853231762,11.3858624006,11.3864014236,11.3869402453,11.3874788658,11.3880172853,11.388555504,11.3890935219,11.3896313393,11.3901689562,11.3907063729,11.3912435894,11.391780606, +11.3923174228,11.3928540399,11.3933904574,11.3939266756,11.3944626946,11.3949985145,11.3955341355,11.3960695576,11.3966047812,11.3971398062,11.3976746329,11.3982092615,11.3987436919,11.3992779245,11.3998119593,11.4003457965, +11.4008794363,11.4014128787,11.401946124,11.4024791722,11.4030120236,11.4035446782,11.4040771362,11.4046093978,11.4051414631,11.4056733323,11.4062050054,11.4067364827,11.4072677642,11.4077988502,11.4083297408,11.408860436, +11.4093909361,11.4099212412,11.4104513515,11.410981267,11.411510988,11.4120405146,11.4125698468,11.4130989849,11.413627929,11.4141566793,11.4146852358,11.4152135988,11.4157417683,11.4162697445,11.4167975276,11.4173251177, +11.4178525149,11.4183797194,11.4189067313,11.4194335507,11.4199601778,11.4204866128,11.4210128558,11.4215389068,11.4220647662,11.4225904339,11.4231159101,11.4236411951,11.4241662888,11.4246911915,11.4252159033,11.4257404243, +11.4262647547,11.4267888946,11.4273128441,11.4278366035,11.4283601727,11.428883552,11.4294067415,11.4299297414,11.4304525517,11.4309751726,11.4314976043,11.4320198468,11.4325419004,11.4330637651,11.4335854412,11.4341069286, +11.4346282276,11.4351493384,11.4356702609,11.4361909955,11.4367115421,11.437231901,11.4377520723,11.4382720561,11.4387918526,11.4393114618,11.439830884,11.4403501192,11.4408691676,11.4413880293,11.4419067045,11.4424251933, +11.4429434958,11.4434616122,11.4439795426,11.4444972871,11.4450148459,11.445532219,11.4460494067,11.4465664091,11.4470832262,11.4475998583,11.4481163054,11.4486325677,11.4491486454,11.4496645385,11.4501802472,11.4506957716, +11.4512111118,11.4517262681,11.4522412404,11.452756029,11.453270634,11.4537850555,11.4542992936,11.4548133485,11.4553272203,11.4558409091,11.4563544151,11.4568677384,11.4573808791,11.4578938373,11.4584066132,11.458919207, +11.4594316186,11.4599438484,11.4604558963,11.4609677626,11.4614794473,11.4619909506,11.4625022726,11.4630134134,11.4635243733,11.4640351522,11.4645457503,11.4650561678,11.4655664048,11.4660764614,11.4665863377,11.4670960339, +11.4676055501,11.4681148864,11.4686240429,11.4691330198,11.4696418172,11.4701504353,11.4706588741,11.4711671337,11.4716752144,11.4721831162,11.4726908392,11.4731983837,11.4737057496,11.4742129372,11.4747199465,11.4752267777, +11.475733431,11.4762399063,11.4767462039,11.4772523239,11.4777582664,11.4782640316,11.4787696195,11.4792750303,11.479780264,11.4802853209,11.4807902011,11.4812949046,11.4817994317,11.4823037823,11.4828079567,11.483311955, +11.4838157773,11.4843194236,11.4848228943,11.4853261892,11.4858293087,11.4863322528,11.4868350216,11.4873376152,11.4878400338,11.4883422775,11.4888443465,11.4893462407,11.4898479604,11.4903495057,11.4908508767,11.4913520736, +11.4918530963,11.4923539452,11.4928546202,11.4933551215,11.4938554492,11.4943556035,11.4948555845,11.4953553922,11.4958550269,11.4963544886,11.4968537774,11.4973528935,11.497851837,11.4983506079,11.4988492065,11.4993476329, +11.4998458871,11.5003439693,11.5008418796,11.5013396181,11.5018371849,11.5023345802,11.5028318041,11.5033288566,11.503825738,11.5043224483,11.5048189876,11.5053153561,11.5058115539,11.5063075811,11.5068034378,11.5072991241, +11.5077946402,11.5082899861,11.5087851621,11.5092801681,11.5097750043,11.5102696709,11.5107641679,11.5112584955,11.5117526538,11.5122466428,11.5127404628,11.5132341138,11.513727596,11.5142209094,11.5147140541,11.5152070304, +11.5156998383,11.5161924779,11.5166849493,11.5171772527,11.5176693881,11.5181613558,11.5186531557,11.519144788,11.5196362528,11.5201275503,11.5206186806,11.5211096437,11.5216004397,11.5220910689,11.5225815313,11.5230718269, +11.5235619561,11.5240519187,11.524541715,11.5250313451,11.5255208091,11.5260101071,11.5264992391,11.5269882054,11.5274770061,11.5279656411,11.5284541108,11.5289424151,11.5294305541,11.5299185281,11.5304063371,11.5308939812, +11.5313814605,11.5318687752,11.5323559253,11.532842911,11.5333297323,11.5338163894,11.5343028825,11.5347892115,11.5352753766,11.535761378,11.5362472157,11.5367328898,11.5372184005,11.5377037479,11.5381889321,11.5386739531, +11.5391588111,11.5396435062,11.5401280386,11.5406124082,11.5410966153,11.54158066,11.5420645423,11.5425482623,11.5430318203,11.5435152162,11.5439984501,11.5444815223,11.5449644328,11.5454471817,11.5459297691,11.5464121951, +11.5468944599,11.5473765635,11.5478585061,11.5483402877,11.5488219085,11.5493033685,11.5497846679,11.5502658069,11.5507467854,11.5512276036,11.5517082616,11.5521887596,11.5526690975,11.5531492756,11.5536292939,11.5541091526, +11.5545888517,11.5550683913,11.5555477716,11.5560269927,11.5565060547,11.5569849576,11.5574637016,11.5579422868,11.5584207133,11.5588989811,11.5593770905,11.5598550415,11.5603328342,11.5608104687,11.5612879452,11.5617652636, +11.5622424242,11.562719427,11.5631962722,11.5636729598,11.56414949,11.5646258628,11.5651020784,11.5655781368,11.5660540382,11.5665297826,11.5670053702,11.5674808011,11.5679560754,11.5684311932,11.5689061545,11.5693809595, +11.5698556083,11.570330101,11.5708044377,11.5712786185,11.5717526435,11.5722265128,11.5727002265,11.5731737847,11.5736471875,11.574120435,11.5745935273,11.5750664646,11.5755392468,11.5760118742,11.5764843468,11.5769566647, +11.577428828,11.5779008369,11.5783726914,11.5788443916,11.5793159376,11.5797873295,11.5802585675,11.5807296516,11.5812005819,11.5816713586,11.5821419817,11.5826124513,11.5830827675,11.5835529305,11.5840229403,11.584492797, +11.5849625007,11.5854320516,11.5859014497,11.5863706951,11.586839788,11.5873087283,11.5877775163,11.588246152,11.5887146356,11.589182967,11.5896511465,11.5901191741,11.5905870499,11.591054774,11.5915223466,11.5919897676, +11.5924570373,11.5929241556,11.5933911228,11.5938579389,11.5943246039,11.5947911181,11.5952574814,11.5957236941,11.5961897561,11.5966556677,11.5971214288,11.5975870396,11.5980525002,11.5985178106,11.598982971,11.5994479815, +11.5999128422,11.6003775531,11.6008421144,11.6013065261,11.6017707884,11.6022349013,11.602698865,11.6031626795,11.603626345,11.6040898615,11.6045532291,11.6050164479,11.6054795181,11.6059424396,11.6064052127,11.6068678374, +11.6073303137,11.6077926419,11.608254822,11.608716854,11.6091787381,11.6096404744,11.610102063,11.6105635039,11.6110247973,11.6114859432,11.6119469418,11.6124077931,11.6128684973,11.6133290544,11.6137894645,11.6142497277, +11.6147098441,11.6151698138,11.615629637,11.6160893136,11.6165488438,11.6170082277,11.6174674653,11.6179265568,11.6183855023,11.6188443018,11.6193029554,11.6197614633,11.6202198255,11.6206780421,11.6211361133,11.621594039, +11.6220518195,11.6225094547,11.6229669448,11.6234242899,11.62388149,11.6243385453,11.6247954559,11.6252522217,11.6257088431,11.6261653199,11.6266216524,11.6270778405,11.6275338845,11.6279897843,11.6284455401,11.628901152, +11.6293566201,11.6298119444,11.630267125,11.6307221621,11.6311770557,11.6316318059,11.6320864128,11.6325408765,11.6329951971,11.6334493747,11.6339034093,11.6343573011,11.6348110502,11.6352646565,11.6357181203,11.6361714416, +11.6366246205,11.6370776571,11.6375305515,11.6379833038,11.638435914,11.6388883823,11.6393407087,11.6397928933,11.6402449362,11.6406968376,11.6411485974,11.6416002158,11.6420516929,11.6425030288,11.6429542235,11.6434052771, +11.6438561898,11.6443069615,11.6447575925,11.6452080828,11.6456584324,11.6461086415,11.6465587102,11.6470086384,11.6474584265,11.6479080743,11.648357582,11.6488069497,11.6492561775,11.6497052655,11.6501542137,11.6506030222, +11.6510516912,11.6515002207,11.6519486107,11.6523968615,11.652844973,11.6532929454,11.6537407787,11.6541884731,11.6546360285,11.6550834452,11.6555307232,11.6559778625,11.6564248633,11.6568717256,11.6573184496,11.6577650353, +11.6582114828,11.6586577921,11.6591039635,11.6595499969,11.6599958924,11.6604416502,11.6608872703,11.6613327528,11.6617780978,11.6622233053,11.6626683755,11.6631133085,11.6635581042,11.6640027629,11.6644472845,11.6648916693, +11.6653359172,11.6657800283,11.6662240028,11.6666678407,11.6671115421,11.667555107,11.6679985357,11.6684418281,11.6688849843,11.6693280044,11.6697708885,11.6702136367,11.6706562491,11.6710987257,11.6715410667,11.6719832721, +11.672425342,11.6728672764,11.6733090756,11.6737507394,11.6741922681,11.6746336618,11.6750749204,11.6755160441,11.6759570329,11.676397887,11.6768386065,11.6772791913,11.6777196416,11.6781599575,11.6786001391,11.6790401864, +11.6794800995,11.6799198785,11.6803595235,11.6807990346,11.6812384118,11.6816776552,11.682116765,11.6825557411,11.6829945837,11.6834332928,11.6838718686,11.6843103111,11.6847486204,11.6851867966,11.6856248397,11.6860627499, +11.6865005272,11.6869381717,11.6873756834,11.6878130626,11.6882503091,11.6886874232,11.6891244049,11.6895612543,11.6899979714,11.6904345564,11.6908710093,11.6913073302,11.6917435192,11.6921795763,11.6926155017,11.6930512954, +11.6934869575,11.6939224881,11.6943578872,11.694793155,11.6952282915,11.6956632968,11.696098171,11.6965329141,11.6969675262,11.6974020075,11.697836358,11.6982705777,11.6987046668,11.6991386253,11.6995724533,11.7000061509, +11.7004397181,11.7008731551,11.701306462,11.7017396387,11.7021726854,11.7026056021,11.703038389,11.7034710461,11.7039035734,11.7043359712,11.7047682394,11.7052003781,11.7056323874,11.7060642673,11.7064960181,11.7069276396, +11.7073591321,11.7077904955,11.70822173,11.7086528357,11.7090838126,11.7095146607,11.7099453802,11.7103759712,11.7108064337,11.7112367678,11.7116669736,11.7120970511,11.7125270004,11.7129568217,11.7133865149,11.7138160802, +11.7142455177,11.7146748273,11.7151040092,11.7155330635,11.7159619903,11.7163907895,11.7168194613,11.7172480058,11.7176764231,11.7181047131,11.7185328761,11.718960912,11.7193888209,11.719816603,11.7202442583,11.7206717868, +11.7210991887,11.721526464,11.7219536128,11.7223806352,11.7228075312,11.7232343009,11.7236609444,11.7240874618,11.7245138531,11.7249401185,11.7253662579,11.7257922715,11.7262181593,11.7266439215,11.727069558,11.727495069, +11.7279204546,11.7283457147,11.7287708495,11.7291958591,11.7296207436,11.7300455029,11.7304701372,11.7308946465,11.731319031,11.7317432907,11.7321674257,11.732591436,11.7330153217,11.7334390829,11.7338627197,11.7342862321, +11.7347096202,11.7351328841,11.7355560239,11.7359790396,11.7364019313,11.7368246991,11.737247343,11.7376698632,11.7380922596,11.7385145324,11.7389366817,11.7393587074,11.7397806098,11.7402023888,11.7406240445,11.741045577, +11.7414669864,11.7418882727,11.7423094361,11.7427304765,11.7431513941,11.7435721889,11.7439928611,11.7444134106,11.7448338375,11.745254142,11.745674324,11.7460943837,11.7465143211,11.7469341364,11.7473538295,11.7477734005, +11.7481928496,11.7486121767,11.749031382,11.7494504656,11.7498694274,11.7502882676,11.7507069862,11.7511255834,11.7515440591,11.7519624135,11.7523806466,11.7527987584,11.7532167492,11.7536346189,11.7540523675,11.7544699953, +11.7548875022,11.7553048883,11.7557221536,11.7561392984,11.7565563225,11.7569732262,11.7573900094,11.7578066722,11.7582232147,11.758639637,11.7590559392,11.7594721212,11.7598881832,11.7603041253,11.7607199475,11.7611356498, +11.7615512324,11.7619666954,11.7623820387,11.7627972625,11.7632123668,11.7636273517,11.7640422173,11.7644569636,11.7648715907,11.7652860987,11.7657004877,11.7661147576,11.7665289086,11.7669429408,11.7673568541,11.7677706488, +11.7681843248,11.7685978822,11.7690113211,11.7694246416,11.7698378436,11.7702509274,11.7706638929,11.7710767403,11.7714894695,11.7719020807,11.7723145739,11.7727269492,11.7731392067,11.7735513464,11.7739633684,11.7743752728, +11.7747870596,11.7751987289,11.7756102808,11.7760217153,11.7764330324,11.7768442324,11.7772553152,11.7776662809,11.7780771295,11.7784878612,11.778898476,11.779308974,11.7797193551,11.7801296196,11.7805397675,11.7809497987, +11.7813597135,11.7817695119,11.7821791938,11.7825887595,11.7829982089,11.7834075422,11.7838167593,11.7842258604,11.7846348456,11.7850437148,11.7854524682,11.7858611058,11.7862696276,11.7866780339,11.7870863246,11.7874944997, +11.7879025594,11.7883105037,11.7887183327,11.7891260464,11.789533645,11.7899411284,11.7903484968,11.7907557501,11.7911628886,11.7915699121,11.7919768209,11.7923836149,11.7927902943,11.7931968591,11.7936033093,11.794009645, +11.7944158664,11.7948219733,11.795227966,11.7956338445,11.7960396088,11.7964452591,11.7968507953,11.7972562175,11.7976615259,11.7980667204,11.7984718011,11.7988767681,11.7992816215,11.7996863613,11.8000909876,11.8004955005, +11.8008998999,11.801304186,11.8017083589,11.8021124186,11.8025163651,11.8029201986,11.803323919,11.8037275266,11.8041310212,11.804534403,11.8049376721,11.8053408284,11.8057438722,11.8061468033,11.806549622,11.8069523282, +11.8073549221,11.8077574036,11.8081597729,11.80856203,11.8089641749,11.8093662078,11.8097681287,11.8101699377,11.8105716347,11.81097322,11.8113746935,11.8117760553,11.8121773055,11.8125784441,11.8129794713,11.8133803869, +11.8137811912,11.8141818842,11.8145824659,11.8149829364,11.8153832958,11.8157835441,11.8161836814,11.8165837078,11.8169836233,11.8173834279,11.8177831218,11.8181827049,11.8185821775,11.8189815394,11.8193807909,11.8197799318, +11.8201789624,11.8205778827,11.8209766926,11.8213753924,11.821773982,11.8221724615,11.822570831,11.8229690905,11.82336724,11.8237652798,11.8241632097,11.82456103,11.8249587405,11.8253563415,11.8257538329,11.8261512148, +11.8265484873,11.8269456504,11.8273427042,11.8277396488,11.8281364842,11.8285332105,11.8289298277,11.8293263358,11.8297227351,11.8301190254,11.830515207,11.8309112797,11.8313072438,11.8317030992,11.832098846,11.8324944843, +11.8328900142,11.8332854356,11.8336807487,11.8340759534,11.83447105,11.8348660384,11.8352609186,11.8356556908,11.8360503551,11.8364449113,11.8368393597,11.8372337003,11.8376279332,11.8380220583,11.8384160758,11.8388099857, +11.8392037881,11.839597483,11.8399910705,11.8403845507,11.8407779236,11.8411711892,11.8415643477,11.8419573991,11.8423503434,11.8427431807,11.8431359111,11.8435285346,11.8439210513,11.8443134612,11.8447057644,11.845097961, +11.8454900509,11.8458820344,11.8462739113,11.8466656819,11.8470573461,11.847448904,11.8478403556,11.8482317011,11.8486229404,11.8490140737,11.8494051009,11.8497960222,11.8501868376,11.8505775472,11.850968151,11.851358649, +11.8517490414,11.8521393282,11.8525295094,11.8529195851,11.8533095554,11.8536994203,11.8540891799,11.8544788342,11.8548683833,11.8552578272,11.855647166,11.8560363998,11.8564255286,11.8568145525,11.8572034715,11.8575922857, +11.8579809951,11.8583695999,11.8587580999,11.8591464954,11.8595347864,11.8599229729,11.8603110549,11.8606990326,11.861086906,11.8614746751,11.8618623401,11.8622499009,11.8626373576,11.8630247102,11.8634119589,11.8637991037, +11.8641861447,11.8645730818,11.8649599151,11.8653466448,11.8657332709,11.8661197933,11.8665062122,11.8668925277,11.8672787397,11.8676648484,11.8680508537,11.8684367559,11.8688225548,11.8692082506,11.8695938432,11.8699793329, +11.8703647196,11.8707500033,11.8711351842,11.8715202623,11.8719052377,11.8722901103,11.8726748803,11.8730595477,11.8734441125,11.8738285749,11.8742129348,11.8745971924,11.8749813477,11.8753654006,11.8757493514,11.8761332, +11.8765169466,11.876900591,11.8772841335,11.8776675741,11.8780509127,11.8784341496,11.8788172846,11.8792003179,11.8795832496,11.8799660797,11.8803488082,11.8807314351,11.8811139607,11.8814963848,11.8818787076,11.8822609291, +11.8826430494,11.8830250684,11.8834069864,11.8837888033,11.8841705191,11.884552134,11.8849336479,11.885315061,11.8856963733,11.8860775849,11.8864586957,11.8868397059,11.8872206155,11.8876014245,11.8879821331,11.8883627412, +11.8887432489,11.8891236563,11.8895039634,11.8898841703,11.890264277,11.8906442836,11.8910241901,11.8914039967,11.8917837032,11.8921633099,11.8925428166,11.8929222236,11.8933015309,11.8936807384,11.8940598463,11.8944388546, +11.8948177633,11.8951965726,11.8955752824,11.8959538928,11.8963324039,11.8967108157,11.8970891283,11.8974673417,11.897845456,11.8982234712,11.8986013874,11.8989792046,11.8993569229,11.8997345424,11.900112063,11.9004894848, +11.900866808,11.9012440325,11.9016211583,11.9019981857,11.9023751145,11.9027519449,11.9031286768,11.9035053104,11.9038818457,11.9042582828,11.9046346217,11.9050108624,11.905387005,11.9057630496,11.9061389962,11.9065148448, +11.9068905956,11.9072662485,11.9076418037,11.9080172611,11.9083926208,11.9087678828,11.9091430473,11.9095181143,11.9098930838,11.9102679558,11.9106427305,11.9110174078,11.9113919878,11.9117664707,11.9121408563,11.9125151448, +11.9128893362,11.9132634306,11.913637428,11.9140113285,11.9143851322,11.9147588389,11.915132449,11.9155059622,11.9158793788,11.9162526988,11.9166259222,11.9169990491,11.9173720795,11.9177450134,11.918117851,11.9184905923, +11.9188632373,11.919235786,11.9196082386,11.919980595,11.9203528554,11.9207250198,11.9210970881,11.9214690605,11.9218409371,11.9222127178,11.9225844027,11.9229559919,11.9233274854,11.9236988833,11.9240701856,11.9244413923, +11.9248125036,11.9251835194,11.9255544399,11.925925265,11.9262959948,11.9266666293,11.9270371687,11.9274076129,11.9277779621,11.9281482162,11.9285183753,11.9288884394,11.9292584086,11.929628283,11.9299980626,11.9303677474, +11.9307373376,11.931106833,11.9314762339,11.9318455402,11.932214752,11.9325838693,11.9329528922,11.9333218207,11.933690655,11.9340593949,11.9344280406,11.9347965922,11.9351650496,11.935533413,11.9359016823,11.9362698576, +11.936637939,11.9370059265,11.9373738202,11.9377416201,11.9381093262,11.9384769387,11.9388444575,11.9392118827,11.9395792143,11.9399464525,11.9403135971,11.9406806484,11.9410476063,11.9414144709,11.9417812423,11.9421479204, +11.9425145053,11.9428809972,11.9432473959,11.9436137016,11.9439799143,11.9443460341,11.944712061,11.9450779951,11.9454438364,11.9458095849,11.9461752407,11.9465408039,11.9469062745,11.9472716525,11.947636938,11.948002131, +11.9483672316,11.9487322398,11.9490971557,11.9494619794,11.9498267108,11.95019135,11.950555897,11.950920352,11.951284715,11.9516489859,11.9520131649,11.952377252,11.9527412472,11.9531051506,11.9534689622,11.9538326821, +11.9541963104,11.954559847,11.954923292,11.9552866455,11.9556499075,11.9560130781,11.9563761572,11.9567391451,11.9571020416,11.9574648468,11.9578275608,11.9581901837,11.9585527154,11.9589151561,11.9592775057,11.9596397644, +11.9600019321,11.9603640089,11.9607259948,11.96108789,11.9614496944,11.9618114081,11.9621730311,11.9625345635,11.9628960053,11.9632573566,11.9636186174,11.9639797878,11.9643408678,11.9647018574,11.9650627567,11.9654235658, +11.9657842847,11.9661449133,11.9665054519,11.9668659004,11.9672262588,11.9675865273,11.9679467058,11.9683067944,11.9686667932,11.9690267022,11.9693865213,11.9697462508,11.9701058906,11.9704654408,11.9708249014,11.9711842724, +11.971543554,11.971902746,11.9722618487,11.9726208621,11.9729797861,11.9733386208,11.9736973663,11.9740560226,11.9744145898,11.9747730679,11.9751314569,11.9754897569,11.975847968,11.9762060901,11.9765641234,11.9769220679, +11.9772799235,11.9776376904,11.9779953686,11.9783529582,11.9787104591,11.9790678715,11.9794251953,11.9797824307,11.9801395776,11.9804966362,11.9808536064,11.9812104883,11.9815672819,11.9819239873,11.9822806046,11.9826371337, +11.9829935747,11.9833499277,11.9837061927,11.9840623697,11.9844184588,11.98477446,11.9851303735,11.9854861991,11.985841937,11.9861975872,11.9865531498,11.9869086247,11.9872640121,11.9876193119,11.9879745243,11.9883296492, +11.9886846868,11.989039637,11.9893944998,11.9897492755,11.9901039639,11.9904585651,11.9908130792,11.9911675061,11.9915218461,11.991876099,11.992230265,11.992584344,11.9929383362,11.9932922415,11.99364606,11.9939997918, +11.9943534369,11.9947069953,11.995060467,11.9954138522,11.9957671509,11.996120363,11.9964734887,11.996826528,11.9971794809,11.9975323475,11.9978851278,11.9982378219,11.9985904297,11.9989429514,11.999295387,11.9996477365, +12.0,12.0003521775,12.000704269,12.0010562746,12.0014081944,12.0017600283,12.0021117765,12.0024634389,12.0028150156,12.0031665067,12.0035179121,12.003869232,12.0042204663,12.0045716152,12.0049226786,12.0052736566, +12.0056245492,12.0059753565,12.0063260785,12.0066767153,12.0070272669,12.0073777333,12.0077281146,12.0080784109,12.0084286221,12.0087787483,12.0091287895,12.0094787459,12.0098286174,12.010178404,12.0105281059,12.010877723, +12.0112272554,12.0115767032,12.0119260663,12.0122753449,12.0126245389,12.0129736484,12.0133226734,12.0136716141,12.0140204703,12.0143692422,12.0147179299,12.0150665332,12.0154150524,12.0157634874,12.0161118382,12.016460105, +12.0168082877,12.0171563864,12.0175044011,12.0178523319,12.0182001788,12.0185479419,12.0188956211,12.0192432166,12.0195907284,12.0199381564,12.0202855008,12.0206327617,12.0209799389,12.0213270326,12.0216740429,12.0220209696, +12.022367813,12.022714573,12.0230612497,12.0234078431,12.0237543533,12.0241007803,12.024447124,12.0247933847,12.0251395623,12.0254856568,12.0258316683,12.0261775969,12.0265234425,12.0268692053,12.0272148852,12.0275604822, +12.0279059966,12.0282514282,12.0285967771,12.0289420433,12.029287227,12.029632328,12.0299773466,12.0303222826,12.0306671362,12.0310119074,12.0313565963,12.0317012027,12.0320457269,12.0323901689,12.0327345286,12.0330788061, +12.0334230015,12.0337671148,12.0341111461,12.0344550953,12.0347989626,12.0351427479,12.0354864513,12.0358300728,12.0361736126,12.0365170705,12.0368604467,12.0372037412,12.037546954,12.0378900851,12.0382331347,12.0385761028, +12.0389189893,12.0392617943,12.039604518,12.0399471602,12.040289721,12.0406322006,12.0409745988,12.0413169158,12.0416591516,12.0420013063,12.0423433798,12.0426853722,12.0430272836,12.043369114,12.0437108633,12.0440525318, +12.0443941194,12.0447356261,12.0450770519,12.045418397,12.0457596614,12.046100845,12.046441948,12.0467829704,12.0471239121,12.0474647733,12.047805554,12.0481462542,12.048486874,12.0488274134,12.0491678724,12.0495082511, +12.0498485495,12.0501887676,12.0505289055,12.0508689633,12.0512089409,12.0515488384,12.0518886559,12.0522283933,12.0525680508,12.0529076283,12.0532471259,12.0535865436,12.0539258815,12.0542651396,12.054604318,12.0549434166, +12.0552824355,12.0556213748,12.0559602345,12.0562990146,12.0566377151,12.0569763362,12.0573148778,12.05765334,12.0579917228,12.0583300262,12.0586682503,12.0590063952,12.0593444608,12.0596824472,12.0600203545,12.0603581826, +12.0606959317,12.0610336017,12.0613711927,12.0617087047,12.0620461377,12.0623834919,12.0627207672,12.0630579636,12.0633950813,12.0637321202,12.0640690804,12.0644059619,12.0647427648,12.065079489,12.0654161347,12.0657527018, +12.0660891905,12.0664256006,12.0667619324,12.0670981857,12.0674343608,12.0677704574,12.0681064759,12.068442416,12.068778278,12.0691140618,12.0694497674,12.069785395,12.0701209445,12.0704564159,12.0707918094,12.0711271249, +12.0714623626,12.0717975223,12.0721326042,12.0724676082,12.0728025345,12.0731373831,12.073472154,12.0738068472,12.0741414628,12.0744760007,12.0748104612,12.0751448441,12.0754791495,12.0758133775,12.076147528,12.0764816012, +12.0768155971,12.0771495156,12.0774833569,12.0778171209,12.0781508077,12.0784844174,12.07881795,12.0791514054,12.0794847838,12.0798180852,12.0801513096,12.0804844571,12.0808175276,12.0811505213,12.0814834381,12.0818162781, +12.0821490414,12.0824817279,12.0828143377,12.0831468708,12.0834793273,12.0838117073,12.0841440106,12.0844762375,12.0848083878,12.0851404617,12.0854724592,12.0858043803,12.086136225,12.0864679935,12.0867996856,12.0871313015, +12.0874628413,12.0877943048,12.0881256922,12.0884570035,12.0887882387,12.0891193979,12.0894504811,12.0897814884,12.0901124197,12.0904432751,12.0907740546,12.0911047584,12.0914353863,12.0917659385,12.092096415,12.0924268158, +12.0927571409,12.0930873904,12.0934175644,12.0937476628,12.0940776857,12.0944076331,12.094737505,12.0950673016,12.0953970228,12.0957266686,12.0960562392,12.0963857345,12.0967151545,12.0970444993,12.097373769,12.0977029635, +12.098032083,12.0983611273,12.0986900967,12.099018991,12.0993478104,12.0996765549,12.1000052244,12.1003338191,12.100662339,12.1009907841,12.1013191544,12.10164745,12.1019756709,12.1023038172,12.1026318889,12.1029598859, +12.1032878084,12.1036156564,12.1039434299,12.1042711289,12.1045987536,12.1049263038,12.1052537797,12.1055811813,12.1059085086,12.1062357616,12.1065629404,12.1068900451,12.1072170756,12.107544032,12.1078709143,12.1081977225, +12.1085244568,12.108851117,12.1091777034,12.1095042158,12.1098306543,12.110157019,12.1104833098,12.1108095269,12.1111356702,12.1114617399,12.1117877358,12.1121136581,12.1124395068,12.1127652819,12.1130909834,12.1134166115, +12.113742166,12.1140676472,12.1143930549,12.1147183892,12.1150436502,12.1153688378,12.1156939522,12.1160189933,12.1163439612,12.116668856,12.1169936775,12.117318426,12.1176431014,12.1179677037,12.118292233,12.1186166894, +12.1189410727,12.1192653832,12.1195896207,12.1199137855,12.1202378773,12.1205618964,12.1208858428,12.1212097164,12.1215335173,12.1218572456,12.1221809013,12.1225044843,12.1228279948,12.1231514328,12.1234747982,12.1237980913, +12.1241213118,12.12444446,12.1247675358,12.1250905393,12.1254134705,12.1257363294,12.1260591161,12.1263818305,12.1267044728,12.127027043,12.1273495411,12.127671967,12.127994321,12.1283166029,12.1286388129,12.1289609509, +12.1292830169,12.1296050112,12.1299269335,12.1302487841,12.1305705628,12.1308922698,12.1312139051,12.1315354687,12.1318569606,12.1321783809,12.1324997296,12.1328210068,12.1331422124,12.1334633465,12.1337844092,12.1341054004, +12.1344263202,12.1347471687,12.1350679458,12.1353886516,12.1357092861,12.1360298494,12.1363503415,12.1366707623,12.1369911121,12.1373113907,12.1376315982,12.1379517347,12.1382718002,12.1385917946,12.1389117181,12.1392315707, +12.1395513524,12.1398710632,12.1401907032,12.1405102724,12.1408297708,12.1411491984,12.1414685554,12.1417878417,12.1421070573,12.1424262023,12.1427452768,12.1430642806,12.143383214,12.1437020769,12.1440208693,12.1443395912, +12.1446582428,12.1449768241,12.1452953349,12.1456137755,12.1459321458,12.1462504459,12.1465686757,12.1468868354,12.1472049249,12.1475229444,12.1478408937,12.1481587729,12.1484765822,12.1487943214,12.1491119907,12.1494295901, +12.1497471195,12.1500645791,12.1503819688,12.1506992887,12.1510165389,12.1513337193,12.15165083,12.151967871,12.1522848423,12.152601744,12.1529185761,12.1532353387,12.1535520317,12.1538686552,12.1541852093,12.1545016939, +12.1548181091,12.1551344549,12.1554507313,12.1557669384,12.1560830763,12.1563991449,12.1567151442,12.1570310744,12.1573469354,12.1576627272,12.1579784499,12.1582941036,12.1586096882,12.1589252038,12.1592406504,12.1595560281, +12.1598713368,12.1601865766,12.1605017476,12.1608168497,12.161131883,12.1614468475,12.1617617433,12.1620765704,12.1623913288,12.1627060185,12.1630206396,12.1633351921,12.163649676,12.1639640914,12.1642784383,12.1645927167, +12.1649069267,12.1652210682,12.1655351414,12.1658491462,12.1661630826,12.1664769508,12.1667907507,12.1671044824,12.1674181458,12.1677317411,12.1680452682,12.1683587272,12.1686721181,12.168985441,12.1692986958,12.1696118826, +12.1699250014,12.1702380523,12.1705510353,12.1708639504,12.1711767977,12.1714895771,12.1718022887,12.1721149325,12.1724275086,12.172740017,12.1730524578,12.1733648308,12.1736771363,12.1739893742,12.1743015445,12.1746136472, +12.1749256825,12.1752376503,12.1755495506,12.1758613836,12.1761731491,12.1764848473,12.1767964781,12.1771080417,12.177419538,12.177730967,12.1780423289,12.1783536235,12.178664851,12.1789760114,12.1792871046,12.1795981308, +12.17990909,12.1802199822,12.1805308073,12.1808415656,12.1811522569,12.1814628813,12.1817734388,12.1820839295,12.1823943534,12.1827047105,12.1830150009,12.1833252245,12.1836353815,12.1839454718,12.1842554954,12.1845654524, +12.1848753429,12.1851851668,12.1854949242,12.1858046151,12.1861142395,12.1864237975,12.1867332891,12.1870427143,12.1873520732,12.1876613657,12.187970592,12.188279752,12.1885888457,12.1888978732,12.1892068346,12.1895157298, +12.1898245589,12.1901333219,12.1904420188,12.1907506497,12.1910592145,12.1913677134,12.1916761464,12.1919845134,12.1922928145,12.1926010497,12.1929092191,12.1932173227,12.1935253605,12.1938333325,12.1941412389,12.1944490795, +12.1947568544,12.1950645637,12.1953722074,12.1956797855,12.195987298,12.196294745,12.1966021265,12.1969094425,12.1972166931,12.1975238783,12.197830998,12.1981380524,12.1984450415,12.1987519652,12.1990588237,12.1993656169, +12.1996723448,12.1999790076,12.2002856052,12.2005921377,12.200898605,12.2012050073,12.2015113445,12.2018176167,12.2021238238,12.202429966,12.2027360433,12.2030420556,12.203348003,12.2036538855,12.2039597032,12.2042654561, +12.2045711442,12.2048767676,12.2051823262,12.2054878202,12.2057932494,12.206098614,12.206403914,12.2067091494,12.2070143202,12.2073194265,12.2076244682,12.2079294455,12.2082343583,12.2085392067,12.2088439907,12.2091487104, +12.2094533656,12.2097579566,12.2100624832,12.2103669456,12.2106713438,12.2109756777,12.2112799475,12.2115841531,12.2118882945,12.2121923719,12.2124963852,12.2128003344,12.2131042196,12.2134080409,12.2137117981,12.2140154914, +12.2143191208,12.2146226863,12.2149261879,12.2152296257,12.2155329997,12.21583631,12.2161395564,12.2164427392,12.2167458582,12.2170489136,12.2173519053,12.2176548334,12.2179576979,12.2182604988,12.2185632362,12.2188659101, +12.2191685205,12.2194710674,12.2197735509,12.220075971,12.2203783277,12.2206806211,12.2209828511,12.2212850178,12.2215871213,12.2218891615,12.2221911385,12.2224930522,12.2227949029,12.2230966903,12.2233984147,12.223700076, +12.2240016742,12.2243032094,12.2246046815,12.2249060907,12.2252074369,12.2255087202,12.2258099406,12.2261110981,12.2264121928,12.2267132246,12.2270141936,12.2273150999,12.2276159434,12.2279167242,12.2282174423,12.2285180977, +12.2288186905,12.2291192207,12.2294196882,12.2297200932,12.2300204357,12.2303207157,12.2306209331,12.2309210881,12.2312211807,12.2315212109,12.2318211787,12.2321210841,12.2324209272,12.232720708,12.2330204265,12.2333200827, +12.2336196768,12.2339192086,12.2342186782,12.2345180857,12.2348174311,12.2351167144,12.2354159356,12.2357150948,12.2360141919,12.236313227,12.2366122002,12.2369111114,12.2372099608,12.2375087482,12.2378074737,12.2381061374, +12.2384047393,12.2387032794,12.2390017578,12.2393001744,12.2395985292,12.2398968224,12.240195054,12.2404932239,12.2407913322,12.2410893789,12.241387364,12.2416852876,12.2419831497,12.2422809503,12.2425786895,12.2428763672, +12.2431739835,12.2434715384,12.243769032,12.2440664642,12.2443638351,12.2446611448,12.2449583932,12.2452555803,12.2455527063,12.245849771,12.2461467746,12.2464437171,12.2467405985,12.2470374188,12.247334178,12.2476308762, +12.2479275134,12.2482240897,12.2485206049,12.2488170593,12.2491134527,12.2494097853,12.249706057,12.2500022678,12.2502984179,12.2505945072,12.2508905357,12.2511865035,12.2514824106,12.251778257,12.2520740428,12.2523697679, +12.2526654325,12.2529610364,12.2532565798,12.2535520626,12.253847485,12.2541428469,12.2544381483,12.2547333892,12.2550285698,12.25532369,12.2556187498,12.2559137493,12.2562086885,12.2565035674,12.2567983861,12.2570931445, +12.2573878427,12.2576824807,12.2579770586,12.2582715763,12.2585660339,12.2588604314,12.2591547689,12.2594490463,12.2597432637,12.2600374211,12.2603315186,12.2606255561,12.2609195337,12.2612134514,12.2615073092,12.2618011072, +12.2620948454,12.2623885238,12.2626821424,12.2629757012,12.2632692004,12.2635626398,12.2638560196,12.2641493397,12.2644426002,12.2647358011,12.2650289425,12.2653220242,12.2656150465,12.2659080092,12.2662009125,12.2664937563, +12.2667865407,12.2670792657,12.2673719313,12.2676645375,12.2679570844,12.268249572,12.2685420003,12.2688343693,12.2691266791,12.2694189297,12.2697111211,12.2700032534,12.2702953265,12.2705873404,12.2708792953,12.2711711911, +12.2714630279,12.2717548056,12.2720465244,12.2723381842,12.272629785,12.2729213269,12.2732128099,12.273504234,12.2737955992,12.2740869056,12.2743781532,12.2746693421,12.2749604721,12.2752515435,12.2755425561,12.27583351, +12.2761244053,12.2764152419,12.2767060199,12.2769967393,12.2772874001,12.2775780024,12.2778685462,12.2781590314,12.2784494582,12.2787398266,12.2790301364,12.2793203879,12.2796105811,12.2799007158,12.2801907922,12.2804808103, +12.2807707701,12.2810606717,12.281350515,12.2816403001,12.281930027,12.2822196957,12.2825093062,12.2827988587,12.283088353,12.2833777893,12.2836671675,12.2839564877,12.2842457498,12.284534954,12.2848241002,12.2851131885, +12.2854022189,12.2856911913,12.2859801059,12.2862689627,12.2865577616,12.2868465027,12.2871351861,12.2874238117,12.2877123795,12.2880008897,12.2882893422,12.288577737,12.2888660742,12.2891543537,12.2894425757,12.2897307401, +12.2900188469,12.2903068963,12.2905948881,12.2908828224,12.2911706993,12.2914585188,12.2917462808,12.2920339855,12.2923216328,12.2926092228,12.2928967554,12.2931842308,12.2934716488,12.2937590097,12.2940463133,12.2943335597, +12.2946207489,12.294907881,12.2951949559,12.2954819737,12.2957689344,12.2960558381,12.2963426847,12.2966294743,12.2969162069,12.2972028825,12.2974895012,12.2977760629,12.2980625677,12.2983490157,12.2986354067,12.298921741, +12.2992080184,12.299494239,12.2997804029,12.30006651,12.3003525603,12.300638554,12.300924491,12.3012103713,12.301496195,12.3017819621,12.3020676725,12.3023533264,12.3026389238,12.3029244646,12.3032099489,12.3034953768, +12.3037807482,12.3040660631,12.3043513217,12.3046365238,12.3049216696,12.305206759,12.3054917921,12.3057767689,12.3060616894,12.3063465537,12.3066313617,12.3069161135,12.3072008091,12.3074854486,12.3077700319,12.3080545591, +12.3083390301,12.3086234451,12.3089078041,12.309192107,12.3094763538,12.3097605447,12.3100446796,12.3103287586,12.3106127817,12.3108967488,12.3111806601,12.3114645154,12.311748315,12.3120320587,12.3123157467,12.3125993789, +12.3128829553,12.313166476,12.313449941,12.3137333503,12.3140167039,12.3143000019,12.3145832443,12.3148664311,12.3151495623,12.3154326379,12.315715658,12.3159986226,12.3162815317,12.3165643854,12.3168471836,12.3171299264, +12.3174126138,12.3176952458,12.3179778224,12.3182603437,12.3185428097,12.3188252204,12.3191075758,12.319389876,12.3196721209,12.3199543107,12.3202364452,12.3205185246,12.3208005489,12.321082518,12.321364432,12.321646291, +12.3219280949,12.3222098437,12.3224915376,12.3227731765,12.3230547603,12.3233362893,12.3236177633,12.3238991824,12.3241805466,12.324461856,12.3247431105,12.3250243102,12.3253054551,12.3255865452,12.3258675806,12.3261485612, +12.3264294871,12.3267103583,12.3269911749,12.3272719368,12.3275526441,12.3278332968,12.3281138948,12.3283944384,12.3286749273,12.3289553618,12.3292357417,12.3295160672,12.3297963382,12.3300765548,12.330356717,12.3306368247, +12.3309168781,12.3311968772,12.3314768219,12.3317567123,12.3320365484,12.3323163302,12.3325960578,12.3328757312,12.3331553503,12.3334349153,12.3337144261,12.3339938828,12.3342732853,12.3345526338,12.3348319281,12.3351111684, +12.3353903547,12.3356694869,12.3359485652,12.3362275895,12.3365065598,12.3367854762,12.3370643387,12.3373431473,12.337621902,12.3379006029,12.3381792499,12.3384578431,12.3387363826,12.3390148683,12.3392933002,12.3395716784, +12.3398500029,12.3401282737,12.3404064909,12.3406846544,12.3409627643,12.3412408205,12.3415188232,12.3417967724,12.342074668,12.3423525101,12.3426302987,12.3429080338,12.3431857154,12.3434633437,12.3437409185,12.3440184399, +12.3442959079,12.3445733226,12.3448506839,12.345127992,12.3454052467,12.3456824482,12.3459595964,12.3462366914,12.3465137332,12.3467907218,12.3470676572,12.3473445394,12.3476213686,12.3478981446,12.3481748675,12.3484515374, +12.3487281542,12.349004718,12.3492812288,12.3495576866,12.3498340915,12.3501104433,12.3503867423,12.3506629884,12.3509391815,12.3512153219,12.3514914093,12.351767444,12.3520434258,12.3523193548,12.3525952311,12.3528710547, +12.3531468255,12.3534225436,12.353698209,12.3539738218,12.3542493819,12.3545248894,12.3548003444,12.3550757467,12.3553510964,12.3556263936,12.3559016383,12.3561768305,12.3564519702,12.3567270575,12.3570020923,12.3572770746, +12.3575520046,12.3578268822,12.3581017074,12.3583764803,12.3586512009,12.3589258692,12.3592004851,12.3594750488,12.3597495603,12.3600240196,12.3602984266,12.3605727815,12.3608470842,12.3611213347,12.3613955332,12.3616696795, +12.3619437737,12.3622178159,12.362491806,12.3627657442,12.3630396303,12.3633134644,12.3635872465,12.3638609767,12.364134655,12.3644082814,12.3646818559,12.3649553785,12.3652288493,12.3655022682,12.3657756353,12.3660489507, +12.3663222142,12.3665954261,12.3668685862,12.3671416946,12.3674147512,12.3676877563,12.3679607096,12.3682336114,12.3685064615,12.36877926,12.369052007,12.3693247024,12.3695973463,12.3698699386,12.3701424795,12.3704149689, +12.3706874068,12.3709597933,12.3712321284,12.371504412,12.3717766443,12.3720488253,12.3723209549,12.3725930331,12.3728650601,12.3731370358,12.3734089602,12.3736808334,12.3739526554,12.3742244261,12.3744961457,12.3747678141, +12.3750394313,12.3753109975,12.3755825125,12.3758539764,12.3761253893,12.3763967511,12.3766680619,12.3769393216,12.3772105304,12.3774816882,12.377752795,12.3780238509,12.3782948559,12.37856581,12.3788367132,12.3791075656, +12.3793783671,12.3796491178,12.3799198176,12.3801904667,12.3804610651,12.3807316127,12.3810021096,12.3812725557,12.3815429512,12.381813296,12.3820835901,12.3823538337,12.3826240266,12.3828941689,12.3831642606,12.3834343018, +12.3837042925,12.3839742326,12.3842441222,12.3845139614,12.3847837501,12.3850534883,12.3853231762,12.3855928136,12.3858624006,12.3861319373,12.3864014236,12.3866708596,12.3869402453,12.3872095807,12.3874788658,12.3877481007, +12.3880172853,12.3882864198,12.388555504,12.388824538,12.3890935219,12.3893624556,12.3896313393,12.3899001728,12.3901689562,12.3904376896,12.3907063729,12.3909750062,12.3912435894,12.3915121227,12.391780606,12.3920490394, +12.3923174228,12.3925857563,12.3928540399,12.3931222736,12.3933904574,12.3936585915,12.3939266756,12.39419471,12.3944626946,12.3947306294,12.3949985145,12.3952663498,12.3955341355,12.3958018714,12.3960695576,12.3963371942, +12.3966047812,12.3968723185,12.3971398062,12.3974072444,12.3976746329,12.397941972,12.3982092615,12.3984765014,12.3987436919,12.399010833,12.3992779245,12.3995449666,12.3998119593,12.4000789026,12.4003457965,12.4006126411, +12.4008794363,12.4011461822,12.4014128787,12.401679526,12.401946124,12.4022126727,12.4024791722,12.4027456225,12.4030120236,12.4032783755,12.4035446782,12.4038109318,12.4040771362,12.4043432916,12.4046093978,12.404875455, +12.4051414631,12.4054074222,12.4056733323,12.4059391933,12.4062050054,12.4064707685,12.4067364827,12.4070021479,12.4072677642,12.4075333317,12.4077988502,12.4080643199,12.4083297408,12.4085951128,12.408860436,12.4091257105, +12.4093909361,12.4096561131,12.4099212412,12.4101863207,12.4104513515,12.4107163336,12.410981267,12.4112461518,12.411510988,12.4117757756,12.4120405146,12.412305205,12.4125698468,12.4128344401,12.4130989849,12.4133634812, +12.413627929,12.4138923284,12.4141566793,12.4144209817,12.4146852358,12.4149494415,12.4152135988,12.4154777077,12.4157417683,12.4160057806,12.4162697445,12.4165336602,12.4167975276,12.4170613468,12.4173251177,12.4175888404, +12.4178525149,12.4181161412,12.4183797194,12.4186432494,12.4189067313,12.419170165,12.4194335507,12.4196968883,12.4199601778,12.4202234193,12.4204866128,12.4207497583,12.4210128558,12.4212759053,12.4215389068,12.4218018605, +12.4220647662,12.422327624,12.4225904339,12.4228531959,12.4231159101,12.4233785765,12.4236411951,12.4239037658,12.4241662888,12.424428764,12.4246911915,12.4249535713,12.4252159033,12.4254781876,12.4257404243,12.4260026133, +12.4262647547,12.4265268485,12.4267888946,12.4270508932,12.4273128441,12.4275747476,12.4278366035,12.4280984118,12.4283601727,12.4286218861,12.428883552,12.4291451705,12.4294067415,12.4296682651,12.4299297414,12.4301911702, +12.4304525517,12.4307138858,12.4309751726,12.4312364121,12.4314976043,12.4317587492,12.4320198468,12.4322808972,12.4325419004,12.4328028564,12.4330637651,12.4333246267,12.4335854412,12.4338462084,12.4341069286,12.4343676017, +12.4346282276,12.4348888065,12.4351493384,12.4354098232,12.4356702609,12.4359306517,12.4361909955,12.4364512923,12.4367115421,12.436971745,12.437231901,12.4374920101,12.4377520723,12.4380120877,12.4382720561,12.4385319778, +12.4387918526,12.4390516806,12.4393114618,12.4395711963,12.439830884,12.440090525,12.4403501192,12.4406096667,12.4408691676,12.4411286218,12.4413880293,12.4416473903,12.4419067045,12.4421659722,12.4424251933,12.4426843679, +12.4429434958,12.4432025773,12.4434616122,12.4437206007,12.4439795426,12.4442384381,12.4444972871,12.4447560897,12.4450148459,12.4452735556,12.445532219,12.445790836,12.4460494067,12.4463079311,12.4465664091,12.4468248408, +12.4470832262,12.4473415654,12.4475998583,12.447858105,12.4481163054,12.4483744597,12.4486325677,12.4488906296,12.4491486454,12.449406615,12.4496645385,12.4499224159,12.4501802472,12.4504380324,12.4506957716,12.4509534647, +12.4512111118,12.4514687129,12.4517262681,12.4519837772,12.4522412404,12.4524986577,12.452756029,12.4530133545,12.453270634,12.4535278677,12.4537850555,12.4540421975,12.4542992936,12.454556344,12.4548133485,12.4550703073, +12.4553272203,12.4555840876,12.4558409091,12.456097685,12.4563544151,12.4566110996,12.4568677384,12.4571243315,12.4573808791,12.457637381,12.4578938373,12.4581502481,12.4584066132,12.4586629329,12.458919207,12.4591754356, +12.4594316186,12.4596877562,12.4599438484,12.4601998951,12.4604558963,12.4607118521,12.4609677626,12.4612236276,12.4614794473,12.4617352216,12.4619909506,12.4622466342,12.4625022726,12.4627578657,12.4630134134,12.463268916, +12.4635243733,12.4637797853,12.4640351522,12.4642904739,12.4645457503,12.4648009817,12.4650561678,12.4653113089,12.4655664048,12.4658214556,12.4660764614,12.4663314221,12.4665863377,12.4668412083,12.4670960339,12.4673508145, +12.4676055501,12.4678602407,12.4681148864,12.4683694871,12.4686240429,12.4688785538,12.4691330198,12.469387441,12.4696418172,12.4698961487,12.4701504353,12.4704046771,12.4706588741,12.4709130263,12.4711671337,12.4714211964, +12.4716752144,12.4719291876,12.4721831162,12.4724370001,12.4726908392,12.4729446338,12.4731983837,12.473452089,12.4737057496,12.4739593657,12.4742129372,12.4744664641,12.4747199465,12.4749733844,12.4752267777,12.4754801266, +12.475733431,12.4759866909,12.4762399063,12.4764930773,12.4767462039,12.4769992861,12.4772523239,12.4775053174,12.4777582664,12.4780111712,12.4782640316,12.4785168477,12.4787696195,12.479022347,12.4792750303,12.4795276693, +12.479780264,12.4800328146,12.4802853209,12.4805377831,12.4807902011,12.4810425749,12.4812949046,12.4815471902,12.4817994317,12.482051629,12.4823037823,12.4825558915,12.4828079567,12.4830599779,12.483311955,12.4835638881, +12.4838157773,12.4840676224,12.4843194236,12.4845711809,12.4848228943,12.4850745637,12.4853261892,12.4855777709,12.4858293087,12.4860808027,12.4863322528,12.4865836591,12.4868350216,12.4870863403,12.4873376152,12.4875888464, +12.4878400338,12.4880911775,12.4883422775,12.4885933338,12.4888443465,12.4890953154,12.4893462407,12.4895971224,12.4898479604,12.4900987549,12.4903495057,12.490600213,12.4908508767,12.4911014969,12.4913520736,12.4916026067, +12.4918530963,12.4921035425,12.4923539452,12.4926043044,12.4928546202,12.4931048925,12.4933551215,12.4936053071,12.4938554492,12.4941055481,12.4943556035,12.4946056157,12.4948555845,12.49510551,12.4953553922,12.4956052312, +12.4958550269,12.4961047793,12.4963544886,12.4966041546,12.4968537774,12.497103357,12.4973528935,12.4976023868,12.497851837,12.498101244,12.4983506079,12.4985999288,12.4988492065,12.4990984412,12.4993476329,12.4995967815, +12.4998458871,12.5000949497,12.5003439693,12.5005929459,12.5008418796,12.5010907703,12.5013396181,12.5015884229,12.5018371849,12.502085904,12.5023345802,12.5025832136,12.5028318041,12.5030803518,12.5033288566,12.5035773187, +12.503825738,12.5040741145,12.5043224483,12.5045707393,12.5048189876,12.5050671932,12.5053153561,12.5055634764,12.5058115539,12.5060595888,12.5063075811,12.5065555308,12.5068034378,12.5070513022,12.5072991241,12.5075469034, +12.5077946402,12.5080423344,12.5082899861,12.5085375953,12.5087851621,12.5090326863,12.5092801681,12.5095276074,12.5097750043,12.5100223588,12.5102696709,12.5105169406,12.5107641679,12.5110113529,12.5112584955,12.5115055958, +12.5117526538,12.5119996694,12.5122466428,12.5124935739,12.5127404628,12.5129873094,12.5132341138,12.513480876,12.513727596,12.5139742737,12.5142209094,12.5144675028,12.5147140541,12.5149605633,12.5152070304,12.5154534554, +12.5156998383,12.5159461791,12.5161924779,12.5164387346,12.5166849493,12.516931122,12.5171772527,12.5174233414,12.5176693881,12.5179153929,12.5181613558,12.5184072767,12.5186531557,12.5188989928,12.519144788,12.5193905413, +12.5196362528,12.5198819225,12.5201275503,12.5203731363,12.5206186806,12.520864183,12.5211096437,12.5213550626,12.5216004397,12.5218457752,12.5220910689,12.5223363209,12.5225815313,12.5228266999,12.5230718269,12.5233169123, +12.5235619561,12.5238069582,12.5240519187,12.5242968377,12.524541715,12.5247865509,12.5250313451,12.5252760979,12.5255208091,12.5257654788,12.5260101071,12.5262546938,12.5264992391,12.526743743,12.5269882054,12.5272326264, +12.5274770061,12.5277213443,12.5279656411,12.5282098966,12.5284541108,12.5286982836,12.5289424151,12.5291865053,12.5294305541,12.5296745618,12.5299185281,12.5301624532,12.5304063371,12.5306501798,12.5308939812,12.5311377414, +12.5313814605,12.5316251384,12.5318687752,12.5321123708,12.5323559253,12.5325994387,12.532842911,12.5330863422,12.5333297323,12.5335730814,12.5338163894,12.5340596565,12.5343028825,12.5345460675,12.5347892115,12.5350323145, +12.5352753766,12.5355183978,12.535761378,12.5360043173,12.5362472157,12.5364900732,12.5367328898,12.5369756656,12.5372184005,12.5374610946,12.5377037479,12.5379463604,12.5381889321,12.538431463,12.5386739531,12.5389164025, +12.5391588111,12.539401179,12.5396435062,12.5398857928,12.5401280386,12.5403702437,12.5406124082,12.5408545321,12.5410966153,12.541338658,12.54158066,12.5418226214,12.5420645423,12.5423064226,12.5425482623,12.5427900616, +12.5430318203,12.5432735384,12.5435152162,12.5437568534,12.5439984501,12.5442400064,12.5444815223,12.5447229978,12.5449644328,12.5452058274,12.5454471817,12.5456884956,12.5459297691,12.5461710023,12.5464121951,12.5466533477, +12.5468944599,12.5471355318,12.5473765635,12.5476175549,12.5478585061,12.548099417,12.5483402877,12.5485811182,12.5488219085,12.5490626586,12.5493033685,12.5495440383,12.5497846679,12.5500252575,12.5502658069,12.5505063162, +12.5507467854,12.5509872145,12.5512276036,12.5514679526,12.5517082616,12.5519485306,12.5521887596,12.5524289485,12.5526690975,12.5529092065,12.5531492756,12.5533893047,12.5536292939,12.5538692432,12.5541091526,12.5543490221, +12.5545888517,12.5548286414,12.5550683913,12.5553081014,12.5555477716,12.5557874021,12.5560269927,12.5562665436,12.5565060547,12.556745526,12.5569849576,12.5572243495,12.5574637016,12.557703014,12.5579422868,12.5581815199, +12.5584207133,12.558659867,12.5588989811,12.5591380556,12.5593770905,12.5596160858,12.5598550415,12.5600939576,12.5603328342,12.5605716712,12.5608104687,12.5610492267,12.5612879452,12.5615266241,12.5617652636,12.5620038637, +12.5622424242,12.5624809453,12.562719427,12.5629578693,12.5631962722,12.5634346357,12.5636729598,12.5639112446,12.56414949,12.5643876961,12.5646258628,12.5648639902,12.5651020784,12.5653401272,12.5655781368,12.5658161071, +12.5660540382,12.56629193,12.5665297826,12.566767596,12.5670053702,12.5672431053,12.5674808011,12.5677184579,12.5679560754,12.5681936539,12.5684311932,12.5686686934,12.5689061545,12.5691435765,12.5693809595,12.5696183034, +12.5698556083,12.5700928742,12.570330101,12.5705672889,12.5708044377,12.5710415476,12.5712786185,12.5715156505,12.5717526435,12.5719895976,12.5722265128,12.5724633891,12.5727002265,12.572937025,12.5731737847,12.5734105055, +12.5736471875,12.5738838307,12.574120435,12.5743570006,12.5745935273,12.5748300153,12.5750664646,12.5753028751,12.5755392468,12.5757755799,12.5760118742,12.5762481298,12.5764843468,12.5767205251,12.5769566647,12.5771927657, +12.577428828,12.5776648518,12.5779008369,12.5781367834,12.5783726914,12.5786085607,12.5788443916,12.5790801838,12.5793159376,12.5795516528,12.5797873295,12.5800229678,12.5802585675,12.5804941288,12.5807296516,12.580965136, +12.5812005819,12.5814359895,12.5816713586,12.5819066893,12.5821419817,12.5823772356,12.5826124513,12.5828476286,12.5830827675,12.5833178681,12.5835529305,12.5837879545,12.5840229403,12.5842578877,12.584492797,12.584727668, +12.5849625007,12.5851972953,12.5854320516,12.5856667697,12.5859014497,12.5861360915,12.5863706951,12.5866052606,12.586839788,12.5870742772,12.5873087283,12.5875431414,12.5877775163,12.5880118532,12.588246152,12.5884804128, +12.5887146356,12.5889488203,12.589182967,12.5894170758,12.5896511465,12.5898851793,12.5901191741,12.590353131,12.5905870499,12.5908209309,12.591054774,12.5912885792,12.5915223466,12.591756076,12.5919897676,12.5922234214, +12.5924570373,12.5926906154,12.5929241556,12.5931576581,12.5933911228,12.5936245497,12.5938579389,12.5940912903,12.5943246039,12.5945578799,12.5947911181,12.5950243186,12.5952574814,12.5954906066,12.5957236941,12.5959567439, +12.5961897561,12.5964227307,12.5966556677,12.596888567,12.5971214288,12.597354253,12.5975870396,12.5978197886,12.5980525002,12.5982851741,12.5985178106,12.5987504096,12.598982971,12.599215495,12.5994479815,12.5996804306, +12.5999128422,12.6001452164,12.6003775531,12.6006098524,12.6008421144,12.6010743389,12.6013065261,12.6015386759,12.6017707884,12.6020028635,12.6022349013,12.6024669018,12.602698865,12.6029307909,12.6031626795,12.6033945309, +12.603626345,12.6038581218,12.6040898615,12.6043215639,12.6045532291,12.6047848571,12.6050164479,12.6052480016,12.6054795181,12.6057109974,12.6059424396,12.6061738447,12.6064052127,12.6066365436,12.6068678374,12.6070990941, +12.6073303137,12.6075614964,12.6077926419,12.6080237505,12.608254822,12.6084858565,12.608716854,12.6089478146,12.6091787381,12.6094096248,12.6096404744,12.6098712872,12.610102063,12.6103328019,12.6105635039,12.6107941691, +12.6110247973,12.6112553887,12.6114859432,12.6117164609,12.6119469418,12.6121773859,12.6124077931,12.6126381636,12.6128684973,12.6130987942,12.6133290544,12.6135592778,12.6137894645,12.6140196144,12.6142497277,12.6144798042, +12.6147098441,12.6149398473,12.6151698138,12.6153997437,12.615629637,12.6158594936,12.6160893136,12.616319097,12.6165488438,12.616778554,12.6170082277,12.6172378647,12.6174674653,12.6176970293,12.6179265568,12.6181560478, +12.6183855023,12.6186149203,12.6188443018,12.6190736468,12.6193029554,12.6195322276,12.6197614633,12.6199906626,12.6202198255,12.620448952,12.6206780421,12.6209070959,12.6211361133,12.6213650943,12.621594039,12.6218229474, +12.6220518195,12.6222806552,12.6225094547,12.6227382179,12.6229669448,12.6231956355,12.6234242899,12.6236529081,12.62388149,12.6241100358,12.6243385453,12.6245670187,12.6247954559,12.6250238569,12.6252522217,12.6254805505, +12.6257088431,12.6259370995,12.6261653199,12.6263935042,12.6266216524,12.6268497645,12.6270778405,12.6273058805,12.6275338845,12.6277618524,12.6279897843,12.6282176802,12.6284455401,12.6286733641,12.628901152,12.629128904, +12.6293566201,12.6295843002,12.6298119444,12.6300395527,12.630267125,12.6304946615,12.6307221621,12.6309496268,12.6311770557,12.6314044487,12.6316318059,12.6318591273,12.6320864128,12.6323136626,12.6325408765,12.6327680547, +12.6329951971,12.6332223038,12.6334493747,12.6336764099,12.6339034093,12.6341303731,12.6343573011,12.6345841935,12.6348110502,12.6350378712,12.6352646565,12.6354914063,12.6357181203,12.6359447988,12.6361714416,12.6363980489, +12.6366246205,12.6368511566,12.6370776571,12.6373041221,12.6375305515,12.6377569454,12.6379833038,12.6382096266,12.638435914,12.6386621659,12.6388883823,12.6391145632,12.6393407087,12.6395668187,12.6397928933,12.6400189325, +12.6402449362,12.6404709046,12.6406968376,12.6409227352,12.6411485974,12.6413744243,12.6416002158,12.641825972,12.6420516929,12.6422773785,12.6425030288,12.6427286438,12.6429542235,12.6431797679,12.6434052771,12.6436307511, +12.6438561898,12.6440815933,12.6443069615,12.6445322946,12.6447575925,12.6449828552,12.6452080828,12.6454332752,12.6456584324,12.6458835545,12.6461086415,12.6463336934,12.6465587102,12.6467836918,12.6470086384,12.64723355, +12.6474584265,12.6476832679,12.6479080743,12.6481328457,12.648357582,12.6485822834,12.6488069497,12.6490315811,12.6492561775,12.649480739,12.6497052655,12.649929757,12.6501542137,12.6503786354,12.6506030222,12.6508273741, +12.6510516912,12.6512759733,12.6515002207,12.6517244331,12.6519486107,12.6521727535,12.6523968615,12.6526209346,12.652844973,12.6530689766,12.6532929454,12.6535168794,12.6537407787,12.6539646432,12.6541884731,12.6544122681, +12.6546360285,12.6548597542,12.6550834452,12.6553071015,12.6555307232,12.6557543101,12.6559778625,12.6562013802,12.6564248633,12.6566483117,12.6568717256,12.6570951049,12.6573184496,12.6575417597,12.6577650353,12.6579882763, +12.6582114828,12.6584346547,12.6586577921,12.658880895,12.6591039635,12.6593269974,12.6595499969,12.6597729619,12.6599958924,12.6602187885,12.6604416502,12.6606644775,12.6608872703,12.6611100287,12.6613327528,12.6615554425, +12.6617780978,12.6620007187,12.6622233053,12.6624458576,12.6626683755,12.6628908591,12.6631133085,12.6633357235,12.6635581042,12.6637804507,12.6640027629,12.6642250408,12.6644472845,12.664669494,12.6648916693,12.6651138103, +12.6653359172,12.6655579898,12.6657800283,12.6660020326,12.6662240028,12.6664459388,12.6666678407,12.6668897084,12.6671115421,12.6673333416,12.667555107,12.6677768384,12.6679985357,12.6682201989,12.6684418281,12.6686634232, +12.6688849843,12.6691065113,12.6693280044,12.6695494635,12.6697708885,12.6699922796,12.6702136367,12.6704349599,12.6706562491,12.6708775044,12.6710987257,12.6713199132,12.6715410667,12.6717621863,12.6719832721,12.672204324, +12.672425342,12.6726463261,12.6728672764,12.6730881929,12.6733090756,12.6735299244,12.6737507394,12.6739715207,12.6741922681,12.6744129818,12.6746336618,12.6748543079,12.6750749204,12.6752954991,12.6755160441,12.6757365554, +12.6759570329,12.6761774768,12.676397887,12.6766182636,12.6768386065,12.6770589157,12.6772791913,12.6774994333,12.6777196416,12.6779398164,12.6781599575,12.6783800651,12.6786001391,12.6788201795,12.6790401864,12.6792601597, +12.6794800995,12.6797000058,12.6799198785,12.6801397178,12.6803595235,12.6805792958,12.6807990346,12.6810187399,12.6812384118,12.6814580502,12.6816776552,12.6818972268,12.682116765,12.6823362697,12.6825557411,12.6827751791, +12.6829945837,12.6832139549,12.6834332928,12.6836525974,12.6838718686,12.6840911065,12.6843103111,12.6845294824,12.6847486204,12.6849677251,12.6851867966,12.6854058348,12.6856248397,12.6858438114,12.6860627499,12.6862816551, +12.6865005272,12.686719366,12.6869381717,12.6871569441,12.6873756834,12.6875943896,12.6878130626,12.6880317024,12.6882503091,12.6884688827,12.6886874232,12.6889059306,12.6891244049,12.6893428461,12.6895612543,12.6897796294, +12.6899979714,12.6902162804,12.6904345564,12.6906527993,12.6908710093,12.6910891862,12.6913073302,12.6915254412,12.6917435192,12.6919615642,12.6921795763,12.6923975555,12.6926155017,12.692833415,12.6930512954,12.6932691429, +12.6934869575,12.6937047392,12.6939224881,12.6941402041,12.6943578872,12.6945755375,12.694793155,12.6950107397,12.6952282915,12.6954458105,12.6956632968,12.6958807503,12.696098171,12.6963155589,12.6965329141,12.6967502365, +12.6969675262,12.6971847832,12.6974020075,12.6976191991,12.697836358,12.6980534842,12.6982705777,12.6984876386,12.6987046668,12.6989216623,12.6991386253,12.6993555556,12.6995724533,12.6997893184,12.7000061509,12.7002229508, +12.7004397181,12.7006564529,12.7008731551,12.7010898248,12.701306462,12.7015230666,12.7017396387,12.7019561783,12.7021726854,12.70238916,12.7026056021,12.7028220118,12.703038389,12.7032547337,12.7034710461,12.703687326, +12.7039035734,12.7041197885,12.7043359712,12.7045521215,12.7047682394,12.7049843249,12.7052003781,12.7054163989,12.7056323874,12.7058483435,12.7060642673,12.7062801588,12.7064960181,12.706711845,12.7069276396,12.707143402, +12.7073591321,12.7075748299,12.7077904955,12.7080061289,12.70822173,12.708437299,12.7086528357,12.7088683402,12.7090838126,12.7092992527,12.7095146607,12.7097300365,12.7099453802,12.7101606918,12.7103759712,12.7105912185, +12.7108064337,12.7110216168,12.7112367678,12.7114518867,12.7116669736,12.7118820284,12.7120970511,12.7123120418,12.7125270004,12.7127419271,12.7129568217,12.7131716843,12.7133865149,12.7136013136,12.7138160802,12.7140308149, +12.7142455177,12.7144601885,12.7146748273,12.7148894342,12.7151040092,12.7153185523,12.7155330635,12.7157475428,12.7159619903,12.7161764058,12.7163907895,12.7166051413,12.7168194613,12.7170337495,12.7172480058,12.7174622303, +12.7176764231,12.717890584,12.7181047131,12.7183188105,12.7185328761,12.7187469099,12.718960912,12.7191748823,12.7193888209,12.7196027278,12.719816603,12.7200304465,12.7202442583,12.7204580384,12.7206717868,12.7208855036, +12.7210991887,12.7213128422,12.721526464,12.7217400542,12.7219536128,12.7221671398,12.7223806352,12.722594099,12.7228075312,12.7230209318,12.7232343009,12.7234476384,12.7236609444,12.7238742189,12.7240874618,12.7243006732, +12.7245138531,12.7247270015,12.7249401185,12.7251532039,12.7253662579,12.7255792804,12.7257922715,12.7260052311,12.7262181593,12.7264310561,12.7266439215,12.7268567555,12.727069558,12.7272823292,12.727495069,12.7277077775, +12.7279204546,12.7281331003,12.7283457147,12.7285582978,12.7287708495,12.72898337,12.7291958591,12.729408317,12.7296207436,12.7298331388,12.7300455029,12.7302578357,12.7304701372,12.7306824075,12.7308946465,12.7311068544, +12.731319031,12.7315311765,12.7317432907,12.7319553738,12.7321674257,12.7323794464,12.732591436,12.7328033944,12.7330153217,12.7332272179,12.7334390829,12.7336509168,12.7338627197,12.7340744914,12.7342862321,12.7344979417, +12.7347096202,12.7349212677,12.7351328841,12.7353444695,12.7355560239,12.7357675473,12.7359790396,12.736190501,12.7364019313,12.7366133307,12.7368246991,12.7370360365,12.737247343,12.7374586186,12.7376698632,12.7378810769, +12.7380922596,12.7383034115,12.7385145324,12.7387256225,12.7389366817,12.73914771,12.7393587074,12.739569674,12.7397806098,12.7399915147,12.7402023888,12.740413232,12.7406240445,12.7408348261,12.741045577,12.7412562971, +12.7414669864,12.7416776449,12.7418882727,12.7420988698,12.7423094361,12.7425199717,12.7427304765,12.7429409507,12.7431513941,12.7433618069,12.7435721889,12.7437825403,12.7439928611,12.7442031511,12.7444134106,12.7446236393, +12.7448338375,12.745044005,12.745254142,12.7454642483,12.745674324,12.7458843691,12.7460943837,12.7463043677,12.7465143211,12.746724244,12.7469341364,12.7471439982,12.7473538295,12.7475636303,12.7477734005,12.7479831403, +12.7481928496,12.7484025284,12.7486121767,12.7488217946,12.749031382,12.749240939,12.7494504656,12.7496599617,12.7498694274,12.7500788627,12.7502882676,12.7504976421,12.7507069862,12.7509163,12.7511255834,12.7513348364, +12.7515440591,12.7517532514,12.7519624135,12.7521715452,12.7523806466,12.7525897176,12.7527987584,12.7530077689,12.7532167492,12.7534256991,12.7536346189,12.7538435083,12.7540523675,12.7542611965,12.7544699953,12.7546787638, +12.7548875022,12.7550962103,12.7553048883,12.755513536,12.7557221536,12.7559307411,12.7561392984,12.7563478255,12.7565563225,12.7567647894,12.7569732262,12.7571816328,12.7573900094,12.7575983558,12.7578066722,12.7580149585, +12.7582232147,12.7584314409,12.758639637,12.7588478031,12.7590559392,12.7592640452,12.7594721212,12.7596801672,12.7598881832,12.7600961692,12.7603041253,12.7605120514,12.7607199475,12.7609278136,12.7611356498,12.7613434561, +12.7615512324,12.7617589789,12.7619666954,12.762174382,12.7623820387,12.7625896655,12.7627972625,12.7630048296,12.7632123668,12.7634198742,12.7636273517,12.7638347994,12.7640422173,12.7642496054,12.7644569636,12.7646642921, +12.7648715907,12.7650788596,12.7652860987,12.7654933081,12.7657004877,12.7659076375,12.7661147576,12.766321848,12.7665289086,12.7667359395,12.7669429408,12.7671499123,12.7673568541,12.7675637663,12.7677706488,12.7679775016, +12.7681843248,12.7683911183,12.7685978822,12.7688046165,12.7690113211,12.7692179961,12.7694246416,12.7696312574,12.7698378436,12.7700444003,12.7702509274,12.7704574249,12.7706638929,12.7708703314,12.7710767403,12.7712831196, +12.7714894695,12.7716957899,12.7719020807,12.7721083421,12.7723145739,12.7725207763,12.7727269492,12.7729330927,12.7731392067,12.7733452913,12.7735513464,12.7737573721,12.7739633684,12.7741693353,12.7743752728,12.7745811809, +12.7747870596,12.7749929089,12.7751987289,12.7754045195,12.7756102808,12.7758160127,12.7760217153,12.7762273885,12.7764330324,12.7766386471,12.7768442324,12.7770497884,12.7772553152,12.7774608127,12.7776662809,12.7778717198, +12.7780771295,12.77828251,12.7784878612,12.7786931832,12.778898476,12.7791037396,12.779308974,12.7795141791,12.7797193551,12.779924502,12.7801296196,12.7803347081,12.7805397675,12.7807447977,12.7809497987,12.7811547707, +12.7813597135,12.7815646272,12.7817695119,12.7819743674,12.7821791938,12.7823839912,12.7825887595,12.7827934987,12.7829982089,12.7832028901,12.7834075422,12.7836121653,12.7838167593,12.7840213244,12.7842258604,12.7844303675, +12.7846348456,12.7848392947,12.7850437148,12.7852481059,12.7854524682,12.7856568014,12.7858611058,12.7860653812,12.7862696276,12.7864738452,12.7866780339,12.7868821937,12.7870863246,12.7872904266,12.7874944997,12.787698544, +12.7879025594,12.788106546,12.7883105037,12.7885144326,12.7887183327,12.788922204,12.7891260464,12.7893298601,12.789533645,12.7897374011,12.7899411284,12.7901448269,12.7903484968,12.7905521378,12.7907557501,12.7909593337, +12.7911628886,12.7913664147,12.7915699121,12.7917733809,12.7919768209,12.7921802323,12.7923836149,12.7925869689,12.7927902943,12.792993591,12.7931968591,12.7934000985,12.7936033093,12.7938064915,12.794009645,12.79421277, +12.7944158664,12.7946189341,12.7948219733,12.795024984,12.795227966,12.7954309195,12.7956338445,12.7958367409,12.7960396088,12.7962424482,12.7964452591,12.7966480414,12.7968507953,12.7970535206,12.7972562175,12.7974588859, +12.7976615259,12.7978641373,12.7980667204,12.7982692749,12.7984718011,12.7986742988,12.7988767681,12.799079209,12.7992816215,12.7994840056,12.7996863613,12.7998886887,12.8000909876,12.8002932582,12.8004955005,12.8006977144, +12.8008998999,12.8011020571,12.801304186,12.8015062866,12.8017083589,12.8019104029,12.8021124186,12.802314406,12.8025163651,12.802718296,12.8029201986,12.8031220729,12.803323919,12.8035257369,12.8037275266,12.803929288, +12.8041310212,12.8043327262,12.804534403,12.8047360516,12.8049376721,12.8051392643,12.8053408284,12.8055423644,12.8057438722,12.8059453518,12.8061468033,12.8063482267,12.806549622,12.8067509891,12.8069523282,12.8071536392, +12.8073549221,12.8075561769,12.8077574036,12.8079586023,12.8081597729,12.8083609154,12.80856203,12.8087631165,12.8089641749,12.8091652054,12.8093662078,12.8095671823,12.8097681287,12.8099690472,12.8101699377,12.8103708002, +12.8105716347,12.8107724413,12.81097322,12.8111739707,12.8113746935,12.8115753884,12.8117760553,12.8119766944,12.8121773055,12.8123778888,12.8125784441,12.8127789716,12.8129794713,12.813179943,12.8133803869,12.813580803, +12.8137811912,12.8139815516,12.8141818842,12.814382189,12.8145824659,12.8147827151,12.8149829364,12.81518313,12.8153832958,12.8155834339,12.8157835441,12.8159836267,12.8161836814,12.8163837085,12.8165837078,12.8167836794, +12.8169836233,12.8171835394,12.8173834279,12.8175832887,12.8177831218,12.8179829272,12.8181827049,12.818382455,12.8185821775,12.8187818723,12.8189815394,12.819181179,12.8193807909,12.8195803752,12.8197799318,12.8199794609, +12.8201789624,12.8203784363,12.8205778827,12.8207773014,12.8209766926,12.8211760563,12.8213753924,12.8215747009,12.821773982,12.8219732355,12.8221724615,12.82237166,12.822570831,12.8227699744,12.8229690905,12.823168179, +12.82336724,12.8235662736,12.8237652798,12.8239642585,12.8241632097,12.8243621336,12.82456103,12.824759899,12.8249587405,12.8251575547,12.8253563415,12.8255551009,12.8257538329,12.8259525375,12.8261512148,12.8263498647, +12.8265484873,12.8267470825,12.8269456504,12.827144191,12.8273427042,12.8275411902,12.8277396488,12.8279380801,12.8281364842,12.828334861,12.8285332105,12.8287315327,12.8289298277,12.8291280954,12.8293263358,12.8295245491, +12.8297227351,12.8299208939,12.8301190254,12.8303171298,12.830515207,12.830713257,12.8309112797,12.8311092754,12.8313072438,12.8315051851,12.8317030992,12.8319009862,12.832098846,12.8322966787,12.8324944843,12.8326922628, +12.8328900142,12.8330877384,12.8332854356,12.8334831057,12.8336807487,12.8338783646,12.8340759534,12.8342735152,12.83447105,12.8346685577,12.8348660384,12.835063492,12.8352609186,12.8354583182,12.8356556908,12.8358530364, +12.8360503551,12.8362476467,12.8364449113,12.836642149,12.8368393597,12.8370365435,12.8372337003,12.8374308302,12.8376279332,12.8378250092,12.8380220583,12.8382190805,12.8384160758,12.8386130442,12.8388099857,12.8390069003, +12.8392037881,12.839400649,12.839597483,12.8397942902,12.8399910705,12.840187824,12.8403845507,12.8405812506,12.8407779236,12.8409745698,12.8411711892,12.8413677819,12.8415643477,12.8417608868,12.8419573991,12.8421538846, +12.8423503434,12.8425467754,12.8427431807,12.8429395593,12.8431359111,12.8433322362,12.8435285346,12.8437248063,12.8439210513,12.8441172696,12.8443134612,12.8445096261,12.8447057644,12.844901876,12.845097961,12.8452940193, +12.8454900509,12.845686056,12.8458820344,12.8460779862,12.8462739113,12.8464698099,12.8466656819,12.8468615273,12.8470573461,12.8472531383,12.847448904,12.8476446431,12.8478403556,12.8480360416,12.8482317011,12.848427334, +12.8486229404,12.8488185203,12.8490140737,12.8492096006,12.8494051009,12.8496005748,12.8497960222,12.8499914432,12.8501868376,12.8503822057,12.8505775472,12.8507728623,12.850968151,12.8511634132,12.851358649,12.8515538584, +12.8517490414,12.851944198,12.8521393282,12.852334432,12.8525295094,12.8527245604,12.8529195851,12.8531145834,12.8533095554,12.853504501,12.8536994203,12.8538943132,12.8540891799,12.8542840202,12.8544788342,12.8546736219, +12.8548683833,12.8550631184,12.8552578272,12.8554525097,12.855647166,12.855841796,12.8560363998,12.8562309773,12.8564255286,12.8566200537,12.8568145525,12.8570090251,12.8572034715,12.8573978917,12.8575922857,12.8577866535, +12.8579809951,12.8581753106,12.8583695999,12.858563863,12.8587580999,12.8589523108,12.8591464954,12.859340654,12.8595347864,12.8597288927,12.8599229729,12.8601170269,12.8603110549,12.8605050568,12.8606990326,12.8608929823, +12.861086906,12.8612808036,12.8614746751,12.8616685206,12.8618623401,12.8620561335,12.8622499009,12.8624436422,12.8626373576,12.8628310469,12.8630247102,12.8632183476,12.8634119589,12.8636055443,12.8637991037,12.8639926372, +12.8641861447,12.8643796262,12.8645730818,12.8647665114,12.8649599151,12.8651532929,12.8653466448,12.8655399708,12.8657332709,12.865926545,12.8661197933,12.8663130157,12.8665062122,12.8666993829,12.8668925277,12.8670856466, +12.8672787397,12.867471807,12.8676648484,12.867857864,12.8680508537,12.8682438177,12.8684367559,12.8686296682,12.8688225548,12.8690154156,12.8692082506,12.8694010598,12.8695938432,12.8697866009,12.8699793329,12.8701720391, +12.8703647196,12.8705573743,12.8707500033,12.8709426066,12.8711351842,12.8713277361,12.8715202623,12.8717127628,12.8719052377,12.8720976868,12.8722901103,12.8724825081,12.8726748803,12.8728672268,12.8730595477,12.8732518429, +12.8734441125,12.8736363565,12.8738285749,12.8740207677,12.8742129348,12.8744050764,12.8745971924,12.8747892828,12.8749813477,12.8751733869,12.8753654006,12.8755573888,12.8757493514,12.8759412885,12.8761332,12.8763250861, +12.8765169466,12.8767087816,12.876900591,12.877092375,12.8772841335,12.8774758665,12.8776675741,12.8778592561,12.8780509127,12.8782425439,12.8784341496,12.8786257298,12.8788172846,12.879008814,12.8792003179,12.8793917965, +12.8795832496,12.8797746773,12.8799660797,12.8801574566,12.8803488082,12.8805401343,12.8807314351,12.8809227106,12.8811139607,12.8813051854,12.8814963848,12.8816875589,12.8818787076,12.882069831,12.8822609291,12.8824520019, +12.8826430494,12.8828340715,12.8830250684,12.8832160401,12.8834069864,12.8835979075,12.8837888033,12.8839796738,12.8841705191,12.8843613392,12.884552134,12.8847429036,12.8849336479,12.8851243671,12.885315061,12.8855057298, +12.8856963733,12.8858869917,12.8860775849,12.8862681529,12.8864586957,12.8866492134,12.8868397059,12.8870301732,12.8872206155,12.8874110326,12.8876014245,12.8877917913,12.8879821331,12.8881724497,12.8883627412,12.8885530076, +12.8887432489,12.8889334651,12.8891236563,12.8893138224,12.8895039634,12.8896940794,12.8898841703,12.8900742362,12.890264277,12.8904542928,12.8906442836,12.8908342494,12.8910241901,12.8912141059,12.8914039967,12.8915938624, +12.8917837032,12.891973519,12.8921633099,12.8923530757,12.8925428166,12.8927325326,12.8929222236,12.8931118897,12.8933015309,12.8934911471,12.8936807384,12.8938703048,12.8940598463,12.8942493629,12.8944388546,12.8946283214, +12.8948177633,12.8950071804,12.8951965726,12.8953859399,12.8955752824,12.8957646,12.8959538928,12.8961431608,12.8963324039,12.8965216222,12.8967108157,12.8968999844,12.8970891283,12.8972782474,12.8974673417,12.8976564113, +12.897845456,12.898034476,12.8982234712,12.8984124417,12.8986013874,12.8987903084,12.8989792046,12.8991680761,12.8993569229,12.899545745,12.8997345424,12.899923315,12.900112063,12.9003007862,12.9004894848,12.9006781587, +12.900866808,12.9010554326,12.9012440325,12.9014326077,12.9016211583,12.9018096843,12.9019981857,12.9021866624,12.9023751145,12.902563542,12.9027519449,12.9029403231,12.9031286768,12.9033170059,12.9035053104,12.9036935904, +12.9038818457,12.9040700765,12.9042582828,12.9044464645,12.9046346217,12.9048227543,12.9050108624,12.905198946,12.905387005,12.9055750396,12.9057630496,12.9059510351,12.9061389962,12.9063269328,12.9065148448,12.9067027325, +12.9068905956,12.9070784343,12.9072662485,12.9074540383,12.9076418037,12.9078295446,12.9080172611,12.9082049531,12.9083926208,12.908580264,12.9087678828,12.9089554773,12.9091430473,12.909330593,12.9095181143,12.9097056112, +12.9098930838,12.910080532,12.9102679558,12.9104553553,12.9106427305,12.9108300813,12.9110174078,12.91120471,12.9113919878,12.9115792414,12.9117664707,12.9119536756,12.9121408563,12.9123280127,12.9125151448,12.9127022526, +12.9128893362,12.9130763956,12.9132634306,12.9134504415,12.913637428,12.9138243904,12.9140113285,12.9141982425,12.9143851322,12.9145719976,12.9147588389,12.914945656,12.915132449,12.9153192177,12.9155059622,12.9156926826, +12.9158793788,12.9160660509,12.9162526988,12.9164393226,12.9166259222,12.9168124977,12.9169990491,12.9171855763,12.9173720795,12.9175585585,12.9177450134,12.9179314443,12.918117851,12.9183042337,12.9184905923,12.9186769268, +12.9188632373,12.9190495237,12.919235786,12.9194220243,12.9196082386,12.9197944288,12.919980595,12.9201667372,12.9203528554,12.9205389496,12.9207250198,12.9209110659,12.9210970881,12.9212830863,12.9214690605,12.9216550108, +12.9218409371,12.9220268394,12.9222127178,12.9223985722,12.9225844027,12.9227702093,12.9229559919,12.9231417506,12.9233274854,12.9235131963,12.9236988833,12.9238845464,12.9240701856,12.9242558009,12.9244413923,12.9246269599, +12.9248125036,12.9249980234,12.9251835194,12.9253689916,12.9255544399,12.9257398643,12.925925265,12.9261106418,12.9262959948,12.926481324,12.9266666293,12.9268519109,12.9270371687,12.9272224027,12.9274076129,12.9275927994, +12.9277779621,12.927963101,12.9281482162,12.9283333076,12.9285183753,12.9287034192,12.9288884394,12.9290734359,12.9292584086,12.9294433577,12.929628283,12.9298131847,12.9299980626,12.9301829169,12.9303677474,12.9305525543, +12.9307373376,12.9309220971,12.931106833,12.9312915453,12.9314762339,12.9316608989,12.9318455402,12.9320301579,12.932214752,12.9323993224,12.9325838693,12.9327683925,12.9329528922,12.9331373683,12.9333218207,12.9335062496, +12.933690655,12.9338750367,12.9340593949,12.9342437295,12.9344280406,12.9346123282,12.9347965922,12.9349808327,12.9351650496,12.935349243,12.935533413,12.9357175594,12.9359016823,12.9360857817,12.9362698576,12.93645391, +12.936637939,12.9368219445,12.9370059265,12.9371898851,12.9373738202,12.9375577319,12.9377416201,12.9379254849,12.9381093262,12.9382931442,12.9384769387,12.9386607098,12.9388444575,12.9390281818,12.9392118827,12.9393955602, +12.9395792143,12.9397628451,12.9399464525,12.9401300365,12.9403135971,12.9404971345,12.9406806484,12.940864139,12.9410476063,12.9412310503,12.9414144709,12.9415978683,12.9417812423,12.941964593,12.9421479204,12.9423312245, +12.9425145053,12.9426977629,12.9428809972,12.9430642082,12.9432473959,12.9434305604,12.9436137016,12.9437968196,12.9439799143,12.9441629859,12.9443460341,12.9445290592,12.944712061,12.9448950397,12.9450779951,12.9452609273, +12.9454438364,12.9456267222,12.9458095849,12.9459924244,12.9461752407,12.9463580339,12.9465408039,12.9467235507,12.9469062745,12.947088975,12.9472716525,12.9474543068,12.947636938,12.947819546,12.948002131,12.9481846928, +12.9483672316,12.9485497472,12.9487322398,12.9489147093,12.9490971557,12.9492795791,12.9494619794,12.9496443566,12.9498267108,12.9500090419,12.95019135,12.950373635,12.950555897,12.950738136,12.950920352,12.951102545, +12.951284715,12.9514668619,12.9516489859,12.9518310869,12.9520131649,12.9521952199,12.952377252,12.9525592611,12.9527412472,12.9529232104,12.9531051506,12.9532870679,12.9534689622,12.9536508336,12.9538326821,12.9540145077, +12.9541963104,12.9543780901,12.954559847,12.954741581,12.954923292,12.9551049802,12.9552866455,12.955468288,12.9556499075,12.9558315042,12.9560130781,12.9561946291,12.9563761572,12.9565576626,12.9567391451,12.9569206047, +12.9571020416,12.9572834556,12.9574648468,12.9576462152,12.9578275608,12.9580088837,12.9581901837,12.9583714609,12.9585527154,12.9587339471,12.9589151561,12.9590963423,12.9592775057,12.9594586464,12.9596397644,12.9598208596, +12.9600019321,12.9601829818,12.9603640089,12.9605450132,12.9607259948,12.9609069538,12.96108789,12.9612688035,12.9614496944,12.9616305626,12.9618114081,12.9619922309,12.9621730311,12.9623538086,12.9625345635,12.9627152957, +12.9628960053,12.9630766923,12.9632573566,12.9634379983,12.9636186174,12.9637992139,12.9639797878,12.9641603391,12.9643408678,12.9645213739,12.9647018574,12.9648823184,12.9650627567,12.9652431726,12.9654235658,12.9656039365, +12.9657842847,12.9659646103,12.9661449133,12.9663251939,12.9665054519,12.9666856874,12.9668659004,12.9670460909,12.9672262588,12.9674064043,12.9675865273,12.9677666278,12.9679467058,12.9681267614,12.9683067944,12.968486805, +12.9686667932,12.9688467589,12.9690267022,12.969206623,12.9693865213,12.9695663973,12.9697462508,12.9699260819,12.9701058906,12.9702856769,12.9704654408,12.9706451823,12.9708249014,12.9710045981,12.9711842724,12.9713639244, +12.971543554,12.9717231612,12.971902746,12.9720823086,12.9722618487,12.9724413666,12.9726208621,12.9728003352,12.9729797861,12.9731592146,12.9733386208,12.9735180047,12.9736973663,12.9738767056,12.9740560226,12.9742353174, +12.9744145898,12.97459384,12.9747730679,12.9749522735,12.9751314569,12.9753106181,12.9754897569,12.9756688736,12.975847968,12.9760270402,12.9762060901,12.9763851179,12.9765641234,12.9767431067,12.9769220679,12.9771010068, +12.9772799235,12.977458818,12.9776376904,12.9778165406,12.9779953686,12.9781741745,12.9783529582,12.9785317197,12.9787104591,12.9788891764,12.9790678715,12.9792465445,12.9794251953,12.9796038241,12.9797824307,12.9799610152, +12.9801395776,12.980318118,12.9804966362,12.9806751323,12.9808536064,12.9810320584,12.9812104883,12.9813888961,12.9815672819,12.9817456456,12.9819239873,12.982102307,12.9822806046,12.9824588801,12.9826371337,12.9828153652, +12.9829935747,12.9831717622,12.9833499277,12.9835280712,12.9837061927,12.9838842922,12.9840623697,12.9842404252,12.9844184588,12.9845964704,12.98477446,12.9849524277,12.9851303735,12.9853082973,12.9854861991,12.985664079, +12.985841937,12.9860197731,12.9861975872,12.9863753794,12.9865531498,12.9867308982,12.9869086247,12.9870863293,12.9872640121,12.9874416729,12.9876193119,12.987796929,12.9879745243,12.9881520977,12.9883296492,12.9885071789, +12.9886846868,12.9888621728,12.989039637,12.9892170793,12.9893944998,12.9895718986,12.9897492755,12.9899266306,12.9901039639,12.9902812754,12.9904585651,12.990635833,12.9908130792,12.9909903035,12.9911675061,12.991344687, +12.9915218461,12.9916989834,12.991876099,12.9920531929,12.992230265,12.9924073153,12.992584344,12.9927613509,12.9929383362,12.9931152997,12.9932922415,12.9934691616,12.99364606,12.9938229367,12.9939997918,12.9941766252, +12.9943534369,12.9945302269,12.9947069953,12.994883742,12.995060467,12.9952371704,12.9954138522,12.9955905124,12.9957671509,12.9959437678,12.996120363,12.9962969367,12.9964734887,12.9966500192,12.996826528,12.9970030153, +12.9971794809,12.997355925,12.9975323475,12.9977087485,12.9978851278,12.9980614856,12.9982378219,12.9984141366,12.9985904297,12.9987667014,12.9989429514,12.99911918,12.999295387,12.9994715725,12.9996477365,12.999823879, +13.0,13.0001760995,13.0003521775,13.000528234,13.000704269,13.0008802826,13.0010562746,13.0012322452,13.0014081944,13.0015841221,13.0017600283,13.0019359131,13.0021117765,13.0022876184,13.0024634389,13.002639238, +13.0028150156,13.0029907718,13.0031665067,13.0033422201,13.0035179121,13.0036935827,13.003869232,13.0040448598,13.0042204663,13.0043960514,13.0045716152,13.0047471575,13.0049226786,13.0050981782,13.0052736566,13.0054491135, +13.0056245492,13.0057999635,13.0059753565,13.0061507282,13.0063260785,13.0065014076,13.0066767153,13.0068520017,13.0070272669,13.0072025107,13.0073777333,13.0075529346,13.0077281146,13.0079032734,13.0080784109,13.0082535271, +13.0084286221,13.0086036958,13.0087787483,13.0089537795,13.0091287895,13.0093037783,13.0094787459,13.0096536922,13.0098286174,13.0100035213,13.010178404,13.0103532655,13.0105281059,13.010702925,13.010877723,13.0110524998, +13.0112272554,13.0114019899,13.0115767032,13.0117513953,13.0119260663,13.0121007162,13.0122753449,13.0124499524,13.0126245389,13.0127991042,13.0129736484,13.0131481715,13.0133226734,13.0134971543,13.0136716141,13.0138460527, +13.0140204703,13.0141948668,13.0143692422,13.0145435966,13.0147179299,13.0148922421,13.0150665332,13.0152408033,13.0154150524,13.0155892804,13.0157634874,13.0159376733,13.0161118382,13.0162859821,13.016460105,13.0166342068, +13.0168082877,13.0169823475,13.0171563864,13.0173304042,13.0175044011,13.017678377,13.0178523319,13.0180262658,13.0182001788,13.0183740708,13.0185479419,13.018721792,13.0188956211,13.0190694293,13.0192432166,13.0194169829, +13.0195907284,13.0197644528,13.0199381564,13.0201118391,13.0202855008,13.0204591417,13.0206327617,13.0208063607,13.0209799389,13.0211534962,13.0213270326,13.0215005482,13.0216740429,13.0218475167,13.0220209696,13.0221944018, +13.022367813,13.0225412035,13.022714573,13.0228879218,13.0230612497,13.0232345568,13.0234078431,13.0235811086,13.0237543533,13.0239275772,13.0241007803,13.0242739625,13.024447124,13.0246202648,13.0247933847,13.0249664839, +13.0251395623,13.0253126199,13.0254856568,13.0256586729,13.0258316683,13.026004643,13.0261775969,13.0263505301,13.0265234425,13.0266963342,13.0268692053,13.0270420556,13.0272148852,13.0273876941,13.0275604822,13.0277332498, +13.0279059966,13.0280787227,13.0282514282,13.0284241129,13.0285967771,13.0287694205,13.0289420433,13.0291146455,13.029287227,13.0294597878,13.029632328,13.0298048476,13.0299773466,13.0301498249,13.0303222826,13.0304947197, +13.0306671362,13.0308395321,13.0310119074,13.0311842621,13.0313565963,13.0315289098,13.0317012027,13.0318734751,13.0320457269,13.0322179582,13.0323901689,13.032562359,13.0327345286,13.0329066776,13.0330788061,13.0332509141, +13.0334230015,13.0335950685,13.0337671148,13.0339391407,13.0341111461,13.034283131,13.0344550953,13.0346270392,13.0347989626,13.0349708655,13.0351427479,13.0353146098,13.0354864513,13.0356582723,13.0358300728,13.0360018529, +13.0361736126,13.0363453517,13.0365170705,13.0366887688,13.0368604467,13.0370321041,13.0372037412,13.0373753578,13.037546954,13.0377185298,13.0378900851,13.0380616201,13.0382331347,13.0384046289,13.0385761028,13.0387475562, +13.0389189893,13.039090402,13.0392617943,13.0394331663,13.039604518,13.0397758492,13.0399471602,13.0401184508,13.040289721,13.040460971,13.0406322006,13.0408034098,13.0409745988,13.0411457675,13.0413169158,13.0414880439, +13.0416591516,13.0418302391,13.0420013063,13.0421723532,13.0423433798,13.0425143861,13.0426853722,13.042856338,13.0430272836,13.0431982089,13.043369114,13.0435399988,13.0437108633,13.0438817077,13.0440525318,13.0442233357, +13.0443941194,13.0445648828,13.0447356261,13.0449063491,13.0450770519,13.0452477346,13.045418397,13.0455890393,13.0457596614,13.0459302633,13.046100845,13.0462714066,13.046441948,13.0466124693,13.0467829704,13.0469534513, +13.0471239121,13.0472943528,13.0474647733,13.0476351737,13.047805554,13.0479759142,13.0481462542,13.0483165742,13.048486874,13.0486571537,13.0488274134,13.0489976529,13.0491678724,13.0493380718,13.0495082511,13.0496784103, +13.0498485495,13.0500186686,13.0501887676,13.0503588466,13.0505289055,13.0506989444,13.0508689633,13.0510389621,13.0512089409,13.0513788997,13.0515488384,13.0517187572,13.0518886559,13.0520585346,13.0522283933,13.0523982321, +13.0525680508,13.0527378495,13.0529076283,13.0530773871,13.0532471259,13.0534168448,13.0535865436,13.0537562226,13.0539258815,13.0540955206,13.0542651396,13.0544347388,13.054604318,13.0547738772,13.0549434166,13.055112936, +13.0552824355,13.0554519151,13.0556213748,13.0557908146,13.0559602345,13.0561296344,13.0562990146,13.0564683748,13.0566377151,13.0568070356,13.0569763362,13.0571456169,13.0573148778,13.0574841188,13.05765334,13.0578225413, +13.0579917228,13.0581608844,13.0583300262,13.0584991482,13.0586682503,13.0588373327,13.0590063952,13.0591754379,13.0593444608,13.0595134639,13.0596824472,13.0598514108,13.0600203545,13.0601892785,13.0603581826,13.060527067, +13.0606959317,13.0608647766,13.0610336017,13.061202407,13.0613711927,13.0615399585,13.0617087047,13.0618774311,13.0620461377,13.0622148247,13.0623834919,13.0625521394,13.0627207672,13.0628893752,13.0630579636,13.0632265323, +13.0633950813,13.0635636106,13.0637321202,13.0639006101,13.0640690804,13.064237531,13.0644059619,13.0645743731,13.0647427648,13.0649111367,13.065079489,13.0652478217,13.0654161347,13.0655844281,13.0657527018,13.0659209559, +13.0660891905,13.0662574054,13.0664256006,13.0665937763,13.0667619324,13.0669300689,13.0670981857,13.067266283,13.0674343608,13.0676024189,13.0677704574,13.0679384764,13.0681064759,13.0682744557,13.068442416,13.0686103568, +13.068778278,13.0689461796,13.0691140618,13.0692819244,13.0694497674,13.069617591,13.069785395,13.0699531795,13.0701209445,13.07028869,13.0704564159,13.0706241224,13.0707918094,13.0709594769,13.0711271249,13.0712947535, +13.0714623626,13.0716299522,13.0717975223,13.071965073,13.0721326042,13.0723001159,13.0724676082,13.0726350811,13.0728025345,13.0729699685,13.0731373831,13.0733047783,13.073472154,13.0736395103,13.0738068472,13.0739741647, +13.0741414628,13.0743087414,13.0744760007,13.0746432406,13.0748104612,13.0749776623,13.0751448441,13.0753120065,13.0754791495,13.0756462732,13.0758133775,13.0759804624,13.076147528,13.0763145743,13.0764816012,13.0766486088, +13.0768155971,13.076982566,13.0771495156,13.0773164459,13.0774833569,13.0776502485,13.0778171209,13.077983974,13.0781508077,13.0783176222,13.0784844174,13.0786511933,13.07881795,13.0789846873,13.0791514054,13.0793181043, +13.0794847838,13.0796514441,13.0798180852,13.079984707,13.0801513096,13.080317893,13.0804844571,13.0806510019,13.0808175276,13.080984034,13.0811505213,13.0813169893,13.0814834381,13.0816498677,13.0818162781,13.0819826693, +13.0821490414,13.0823153942,13.0824817279,13.0826480424,13.0828143377,13.0829806138,13.0831468708,13.0833131087,13.0834793273,13.0836455269,13.0838117073,13.0839778685,13.0841440106,13.0843101336,13.0844762375,13.0846423222, +13.0848083878,13.0849744343,13.0851404617,13.08530647,13.0854724592,13.0856384293,13.0858043803,13.0859703122,13.086136225,13.0863021188,13.0864679935,13.0866338491,13.0867996856,13.0869655031,13.0871313015,13.0872970809, +13.0874628413,13.0876285825,13.0877943048,13.087960008,13.0881256922,13.0882913573,13.0884570035,13.0886226306,13.0887882387,13.0889538278,13.0891193979,13.089284949,13.0894504811,13.0896159942,13.0897814884,13.0899469635, +13.0901124197,13.0902778569,13.0904432751,13.0906086743,13.0907740546,13.090939416,13.0911047584,13.0912700818,13.0914353863,13.0916006719,13.0917659385,13.0919311862,13.092096415,13.0922616248,13.0924268158,13.0925919878, +13.0927571409,13.0929222751,13.0930873904,13.0932524869,13.0934175644,13.093582623,13.0937476628,13.0939126837,13.0940776857,13.0942426688,13.0944076331,13.0945725785,13.094737505,13.0949024128,13.0950673016,13.0952321716, +13.0953970228,13.0955618551,13.0957266686,13.0958914633,13.0960562392,13.0962209962,13.0963857345,13.0965504539,13.0967151545,13.0968798363,13.0970444993,13.0972091436,13.097373769,13.0975383756,13.0977029635,13.0978675326, +13.098032083,13.0981966145,13.0983611273,13.0985256214,13.0986900967,13.0988545532,13.099018991,13.0991834101,13.0993478104,13.099512192,13.0996765549,13.099840899,13.1000052244,13.1001695311,13.1003338191,13.1004980884, +13.100662339,13.1008265709,13.1009907841,13.1011549786,13.1013191544,13.1014833116,13.10164745,13.1018115698,13.1019756709,13.1021397534,13.1023038172,13.1024678624,13.1026318889,13.1027958967,13.1029598859,13.1031238565, +13.1032878084,13.1034517417,13.1036156564,13.1037795525,13.1039434299,13.1041072887,13.1042711289,13.1044349506,13.1045987536,13.104762538,13.1049263038,13.105090051,13.1052537797,13.1054174898,13.1055811813,13.1057448542, +13.1059085086,13.1060721444,13.1062357616,13.1063993603,13.1065629404,13.106726502,13.1068900451,13.1070535696,13.1072170756,13.107380563,13.107544032,13.1077074824,13.1078709143,13.1080343277,13.1081977225,13.1083610989, +13.1085244568,13.1086877962,13.108851117,13.1090144194,13.1091777034,13.1093409688,13.1095042158,13.1096674443,13.1098306543,13.1099938458,13.110157019,13.1103201736,13.1104833098,13.1106464276,13.1108095269,13.1109726078, +13.1111356702,13.1112987143,13.1114617399,13.111624747,13.1117877358,13.1119507062,13.1121136581,13.1122765916,13.1124395068,13.1126024035,13.1127652819,13.1129281419,13.1130909834,13.1132538067,13.1134166115,13.113579398, +13.113742166,13.1139049158,13.1140676472,13.1142303602,13.1143930549,13.1145557312,13.1147183892,13.1148810288,13.1150436502,13.1152062532,13.1153688378,13.1155314042,13.1156939522,13.1158564819,13.1160189933,13.1161814864, +13.1163439612,13.1165064177,13.116668856,13.1168312759,13.1169936775,13.1171560609,13.117318426,13.1174807728,13.1176431014,13.1178054117,13.1179677037,13.1181299775,13.118292233,13.1184544703,13.1186166894,13.1187788902, +13.1189410727,13.1191032371,13.1192653832,13.1194275111,13.1195896207,13.1197517122,13.1199137855,13.1200758405,13.1202378773,13.120399896,13.1205618964,13.1207238787,13.1208858428,13.1210477887,13.1212097164,13.121371626, +13.1215335173,13.1216953906,13.1218572456,13.1220190825,13.1221809013,13.1223427019,13.1225044843,13.1226662486,13.1228279948,13.1229897229,13.1231514328,13.1233131246,13.1234747982,13.1236364538,13.1237980913,13.1239597106, +13.1241213118,13.124282895,13.12444446,13.124606007,13.1247675358,13.1249290466,13.1250905393,13.1252520139,13.1254134705,13.125574909,13.1257363294,13.1258977318,13.1260591161,13.1262204823,13.1263818305,13.1265431607, +13.1267044728,13.1268657669,13.127027043,13.127188301,13.1273495411,13.1275107631,13.127671967,13.127833153,13.127994321,13.1281554709,13.1283166029,13.1284777169,13.1286388129,13.1287998908,13.1289609509,13.1291219929, +13.1292830169,13.129444023,13.1296050112,13.1297659813,13.1299269335,13.1300878678,13.1302487841,13.1304096824,13.1305705628,13.1307314253,13.1308922698,13.1310530964,13.1312139051,13.1313746958,13.1315354687,13.1316962236, +13.1318569606,13.1320176797,13.1321783809,13.1323390642,13.1324997296,13.1326603771,13.1328210068,13.1329816185,13.1331422124,13.1333027884,13.1334633465,13.1336238868,13.1337844092,13.1339449137,13.1341054004,13.1342658692, +13.1344263202,13.1345867534,13.1347471687,13.1349075661,13.1350679458,13.1352283076,13.1353886516,13.1355489777,13.1357092861,13.1358695766,13.1360298494,13.1361901043,13.1363503415,13.1365105608,13.1366707623,13.1368309461, +13.1369911121,13.1371512603,13.1373113907,13.1374715034,13.1376315982,13.1377916754,13.1379517347,13.1381117763,13.1382718002,13.1384318063,13.1385917946,13.1387517653,13.1389117181,13.1390716533,13.1392315707,13.1393914704, +13.1395513524,13.1397112167,13.1398710632,13.1400308921,13.1401907032,13.1403504966,13.1405102724,13.1406700304,13.1408297708,13.1409894934,13.1411491984,13.1413088858,13.1414685554,13.1416282074,13.1417878417,13.1419474583, +13.1421070573,13.1422666386,13.1424262023,13.1425857484,13.1427452768,13.1429047875,13.1430642806,13.1432237561,13.143383214,13.1435426542,13.1437020769,13.1438614819,13.1440208693,13.1441802391,13.1443395912,13.1444989258, +13.1446582428,13.1448175422,13.1449768241,13.1451360883,13.1452953349,13.145454564,13.1456137755,13.1457729694,13.1459321458,13.1460913046,13.1462504459,13.1464095696,13.1465686757,13.1467277643,13.1468868354,13.1470458889, +13.1472049249,13.1473639434,13.1475229444,13.1476819278,13.1478408937,13.1479998421,13.1481587729,13.1483176863,13.1484765822,13.1486354605,13.1487943214,13.1489531648,13.1491119907,13.1492707991,13.1494295901,13.1495883635, +13.1497471195,13.149905858,13.1500645791,13.1502232827,13.1503819688,13.1505406375,13.1506992887,13.1508579225,13.1510165389,13.1511751378,13.1513337193,13.1514922833,13.15165083,13.1518093592,13.151967871,13.1521263653, +13.1522848423,13.1524433019,13.152601744,13.1527601688,13.1529185761,13.1530769661,13.1532353387,13.1533936939,13.1535520317,13.1537103522,13.1538686552,13.1540269409,13.1541852093,13.1543434602,13.1545016939,13.1546599101, +13.1548181091,13.1549762906,13.1551344549,13.1552926018,13.1554507313,13.1556088435,13.1557669384,13.155925016,13.1560830763,13.1562411192,13.1563991449,13.1565571532,13.1567151442,13.1568731179,13.1570310744,13.1571890135, +13.1573469354,13.1575048399,13.1576627272,13.1578205972,13.1579784499,13.1581362854,13.1582941036,13.1584519045,13.1586096882,13.1587674546,13.1589252038,13.1590829357,13.1592406504,13.1593983479,13.1595560281,13.159713691, +13.1598713368,13.1600289653,13.1601865766,13.1603441707,13.1605017476,13.1606593072,13.1608168497,13.1609743749,13.161131883,13.1612893738,13.1614468475,13.161604304,13.1617617433,13.1619191654,13.1620765704,13.1622339581, +13.1623913288,13.1625486822,13.1627060185,13.1628633376,13.1630206396,13.1631779244,13.1633351921,13.1634924426,13.163649676,13.1638068923,13.1639640914,13.1641212734,13.1642784383,13.1644355861,13.1645927167,13.1647498302, +13.1649069267,13.165064006,13.1652210682,13.1653781133,13.1655351414,13.1656921523,13.1658491462,13.166006123,13.1661630826,13.1663200253,13.1664769508,13.1666338593,13.1667907507,13.1669476251,13.1671044824,13.1672613226, +13.1674181458,13.167574952,13.1677317411,13.1678885132,13.1680452682,13.1682020062,13.1683587272,13.1685154312,13.1686721181,13.1688287881,13.168985441,13.1691420769,13.1692986958,13.1694552977,13.1696118826,13.1697684505, +13.1699250014,13.1700815354,13.1702380523,13.1703945523,13.1705510353,13.1707075013,13.1708639504,13.1710203825,13.1711767977,13.1713331958,13.1714895771,13.1716459413,13.1718022887,13.1719586191,13.1721149325,13.1722712291, +13.1724275086,13.1725837713,13.172740017,13.1728962459,13.1730524578,13.1732086528,13.1733648308,13.173520992,13.1736771363,13.1738332637,13.1739893742,13.1741454678,13.1743015445,13.1744576043,13.1746136472,13.1747696733, +13.1749256825,13.1750816748,13.1752376503,13.1753936089,13.1755495506,13.1757054755,13.1758613836,13.1760172748,13.1761731491,13.1763290066,13.1764848473,13.1766406711,13.1767964781,13.1769522683,13.1771080417,13.1772637983, +13.177419538,13.1775752609,13.177730967,13.1778866563,13.1780423289,13.1781979846,13.1783536235,13.1785092457,13.178664851,13.1788204396,13.1789760114,13.1791315664,13.1792871046,13.1794426261,13.1795981308,13.1797536188, +13.17990909,13.1800645445,13.1802199822,13.1803754031,13.1805308073,13.1806861948,13.1808415656,13.1809969196,13.1811522569,13.1813075774,13.1814628813,13.1816181684,13.1817734388,13.1819286925,13.1820839295,13.1822391498, +13.1823943534,13.1825495403,13.1827047105,13.182859864,13.1830150009,13.183170121,13.1833252245,13.1834803113,13.1836353815,13.1837904349,13.1839454718,13.1841004919,13.1842554954,13.1844104822,13.1845654524,13.184720406, +13.1848753429,13.1850302632,13.1851851668,13.1853400538,13.1854949242,13.185649778,13.1858046151,13.1859594356,13.1861142395,13.1862690268,13.1864237975,13.1865785516,13.1867332891,13.18688801,13.1870427143,13.1871974021, +13.1873520732,13.1875067278,13.1876613657,13.1878159871,13.187970592,13.1881251803,13.188279752,13.1884343071,13.1885888457,13.1887433677,13.1888978732,13.1890523622,13.1892068346,13.1893612905,13.1895157298,13.1896701526, +13.1898245589,13.1899789486,13.1901333219,13.1902876786,13.1904420188,13.1905963425,13.1907506497,13.1909049403,13.1910592145,13.1912134722,13.1913677134,13.1915219381,13.1916761464,13.1918303381,13.1919845134,13.1921386722, +13.1922928145,13.1924469403,13.1926010497,13.1927551426,13.1929092191,13.1930632791,13.1932173227,13.1933713498,13.1935253605,13.1936793547,13.1938333325,13.1939872939,13.1941412389,13.1942951674,13.1944490795,13.1946029752, +13.1947568544,13.1949107173,13.1950645637,13.1952183938,13.1953722074,13.1955260046,13.1956797855,13.19583355,13.195987298,13.1961410297,13.196294745,13.196448444,13.1966021265,13.1967557927,13.1969094425,13.197063076, +13.1972166931,13.1973702939,13.1975238783,13.1976774463,13.197830998,13.1979845334,13.1981380524,13.1982915551,13.1984450415,13.1985985115,13.1987519652,13.1989054026,13.1990588237,13.1992122284,13.1993656169,13.199518989, +13.1996723448,13.1998256844,13.1999790076,13.2001323146,13.2002856052,13.2004388796,13.2005921377,13.2007453795,13.200898605,13.2010518143,13.2012050073,13.201358184,13.2015113445,13.2016644887,13.2018176167,13.2019707284, +13.2021238238,13.202276903,13.202429966,13.2025830127,13.2027360433,13.2028890575,13.2030420556,13.2031950374,13.203348003,13.2035009524,13.2036538855,13.2038068025,13.2039597032,13.2041125878,13.2042654561,13.2044183083, +13.2045711442,13.204723964,13.2048767676,13.205029555,13.2051823262,13.2053350813,13.2054878202,13.2056405429,13.2057932494,13.2059459398,13.206098614,13.2062512721,13.206403914,13.2065565397,13.2067091494,13.2068617428, +13.2070143202,13.2071668814,13.2073194265,13.2074719554,13.2076244682,13.2077769649,13.2079294455,13.20808191,13.2082343583,13.2083867906,13.2085392067,13.2086916068,13.2088439907,13.2089963586,13.2091487104,13.209301046, +13.2094533656,13.2096056691,13.2097579566,13.2099102279,13.2100624832,13.2102147225,13.2103669456,13.2105191527,13.2106713438,13.2108235188,13.2109756777,13.2111278206,13.2112799475,13.2114320583,13.2115841531,13.2117362318, +13.2118882945,13.2120403412,13.2121923719,13.2123443866,13.2124963852,13.2126483678,13.2128003344,13.212952285,13.2131042196,13.2132561382,13.2134080409,13.2135599275,13.2137117981,13.2138636527,13.2140154914,13.2141673141, +13.2143191208,13.2144709115,13.2146226863,13.2147744451,13.2149261879,13.2150779148,13.2152296257,13.2153813207,13.2155329997,13.2156846628,13.21583631,13.2159879412,13.2161395564,13.2162911558,13.2164427392,13.2165943066, +13.2167458582,13.2168973938,13.2170489136,13.2172004174,13.2173519053,13.2175033773,13.2176548334,13.2178062736,13.2179576979,13.2181091063,13.2182604988,13.2184118754,13.2185632362,13.2187145811,13.2188659101,13.2190172232, +13.2191685205,13.2193198019,13.2194710674,13.2196223171,13.2197735509,13.2199247689,13.220075971,13.2202271573,13.2203783277,13.2205294823,13.2206806211,13.220831744,13.2209828511,13.2211339424,13.2212850178,13.2214360774, +13.2215871213,13.2217381493,13.2218891615,13.2220401579,13.2221911385,13.2223421032,13.2224930522,13.2226439855,13.2227949029,13.2229458045,13.2230966903,13.2232475604,13.2233984147,13.2235492532,13.223700076,13.223850883, +13.2240016742,13.2241524497,13.2243032094,13.2244539533,13.2246046815,13.224755394,13.2249060907,13.2250567717,13.2252074369,13.2253580865,13.2255087202,13.2256593383,13.2258099406,13.2259605272,13.2261110981,13.2262616533, +13.2264121928,13.2265627166,13.2267132246,13.226863717,13.2270141936,13.2271646546,13.2273150999,13.2274655295,13.2276159434,13.2277663416,13.2279167242,13.2280670911,13.2282174423,13.2283677778,13.2285180977,13.2286684019, +13.2288186905,13.2289689634,13.2291192207,13.2292694623,13.2294196882,13.2295698986,13.2297200932,13.2298702723,13.2300204357,13.2301705835,13.2303207157,13.2304708322,13.2306209331,13.2307710184,13.2309210881,13.2310711422, +13.2312211807,13.2313712036,13.2315212109,13.2316712026,13.2318211787,13.2319711392,13.2321210841,13.2322710134,13.2324209272,13.2325708254,13.232720708,13.232870575,13.2330204265,13.2331702624,13.2333200827,13.2334698875, +13.2336196768,13.2337694504,13.2339192086,13.2340689512,13.2342186782,13.2343683898,13.2345180857,13.2346677662,13.2348174311,13.2349670805,13.2351167144,13.2352663328,13.2354159356,13.2355655229,13.2357150948,13.2358646511, +13.2360141919,13.2361637172,13.236313227,13.2364627214,13.2366122002,13.2367616636,13.2369111114,13.2370605438,13.2372099608,13.2373593622,13.2375087482,13.2376581187,13.2378074737,13.2379568133,13.2381061374,13.2382554461, +13.2384047393,13.2385540171,13.2387032794,13.2388525263,13.2390017578,13.2391509738,13.2393001744,13.2394493595,13.2395985292,13.2397476836,13.2398968224,13.2400459459,13.240195054,13.2403441466,13.2404932239,13.2406422857, +13.2407913322,13.2409403632,13.2410893789,13.2412383791,13.241387364,13.2415363335,13.2416852876,13.2418342263,13.2419831497,13.2421320577,13.2422809503,13.2424298276,13.2425786895,13.242727536,13.2428763672,13.243025183, +13.2431739835,13.2433227686,13.2434715384,13.2436202928,13.243769032,13.2439177557,13.2440664642,13.2442151573,13.2443638351,13.2445124976,13.2446611448,13.2448097766,13.2449583932,13.2451069944,13.2452555803,13.2454041509, +13.2455527063,13.2457012463,13.245849771,13.2459982805,13.2461467746,13.2462952535,13.2464437171,13.2465921654,13.2467405985,13.2468890163,13.2470374188,13.247185806,13.247334178,13.2474825348,13.2476308762,13.2477792025, +13.2479275134,13.2480758092,13.2482240897,13.2483723549,13.2485206049,13.2486688397,13.2488170593,13.2489652636,13.2491134527,13.2492616266,13.2494097853,13.2495579287,13.249706057,13.24985417,13.2500022678,13.2501503505, +13.2502984179,13.2504464701,13.2505945072,13.2507425291,13.2508905357,13.2510385272,13.2511865035,13.2513344647,13.2514824106,13.2516303414,13.251778257,13.2519261575,13.2520740428,13.2522219129,13.2523697679,13.2525176078, +13.2526654325,13.252813242,13.2529610364,13.2531088157,13.2532565798,13.2534043288,13.2535520626,13.2536997814,13.253847485,13.2539951735,13.2541428469,13.2542905051,13.2544381483,13.2545857763,13.2547333892,13.2548809871, +13.2550285698,13.2551761375,13.25532369,13.2554712275,13.2556187498,13.2557662571,13.2559137493,13.2560612265,13.2562086885,13.2563561355,13.2565035674,13.2566509843,13.2567983861,13.2569457728,13.2570931445,13.2572405011, +13.2573878427,13.2575351692,13.2576824807,13.2578297772,13.2579770586,13.2581243249,13.2582715763,13.2584188126,13.2585660339,13.2587132402,13.2588604314,13.2590076076,13.2591547689,13.2593019151,13.2594490463,13.2595961625, +13.2597432637,13.2598903499,13.2600374211,13.2601844773,13.2603315186,13.2604785448,13.2606255561,13.2607725524,13.2609195337,13.2610665,13.2612134514,13.2613603878,13.2615073092,13.2616542157,13.2618011072,13.2619479838, +13.2620948454,13.262241692,13.2623885238,13.2625353405,13.2626821424,13.2628289293,13.2629757012,13.2631224583,13.2632692004,13.2634159276,13.2635626398,13.2637093372,13.2638560196,13.2640026871,13.2641493397,13.2642959774, +13.2644426002,13.2645892081,13.2647358011,13.2648823792,13.2650289425,13.2651754908,13.2653220242,13.2654685428,13.2656150465,13.2657615353,13.2659080092,13.2660544683,13.2662009125,13.2663473418,13.2664937563,13.2666401559, +13.2667865407,13.2669329106,13.2670792657,13.2672256059,13.2673719313,13.2675182418,13.2676645375,13.2678108184,13.2679570844,13.2681033356,13.268249572,13.2683957936,13.2685420003,13.2686881922,13.2688343693,13.2689805316, +13.2691266791,13.2692728118,13.2694189297,13.2695650328,13.2697111211,13.2698571947,13.2700032534,13.2701492973,13.2702953265,13.2704413408,13.2705873404,13.2707333253,13.2708792953,13.2710252506,13.2711711911,13.2713171169, +13.2714630279,13.2716089242,13.2717548056,13.2719006724,13.2720465244,13.2721923616,13.2723381842,13.2724839919,13.272629785,13.2727755633,13.2729213269,13.2730670757,13.2732128099,13.2733585293,13.273504234,13.2736499239, +13.2737955992,13.2739412598,13.2740869056,13.2742325368,13.2743781532,13.274523755,13.2746693421,13.2748149145,13.2749604721,13.2751060151,13.2752515435,13.2753970571,13.2755425561,13.2756880404,13.27583351,13.275978965, +13.2761244053,13.2762698309,13.2764152419,13.2765606382,13.2767060199,13.2768513869,13.2769967393,13.277142077,13.2772874001,13.2774327086,13.2775780024,13.2777232816,13.2778685462,13.2780137961,13.2781590314,13.2783042521, +13.2784494582,13.2785946497,13.2787398266,13.2788849888,13.2790301364,13.2791752695,13.2793203879,13.2794654918,13.2796105811,13.2797556557,13.2799007158,13.2800457613,13.2801907922,13.2803358086,13.2804808103,13.2806257975, +13.2807707701,13.2809157282,13.2810606717,13.2812056006,13.281350515,13.2814954148,13.2816403001,13.2817851708,13.281930027,13.2820748686,13.2822196957,13.2823645082,13.2825093062,13.2826540897,13.2827988587,13.2829436131, +13.283088353,13.2832330784,13.2833777893,13.2835224856,13.2836671675,13.2838118348,13.2839564877,13.284101126,13.2842457498,13.2843903592,13.284534954,13.2846795344,13.2848241002,13.2849686516,13.2851131885,13.2852577109, +13.2854022189,13.2855467123,13.2856911913,13.2858356559,13.2859801059,13.2861245415,13.2862689627,13.2864133694,13.2865577616,13.2867021394,13.2868465027,13.2869908516,13.2871351861,13.2872795061,13.2874238117,13.2875681028, +13.2877123795,13.2878566418,13.2880008897,13.2881451232,13.2882893422,13.2884335468,13.288577737,13.2887219128,13.2888660742,13.2890102211,13.2891543537,13.2892984719,13.2894425757,13.2895866651,13.2897307401,13.2898748007, +13.2900188469,13.2901628788,13.2903068963,13.2904508994,13.2905948881,13.2907388624,13.2908828224,13.2910267681,13.2911706993,13.2913146162,13.2914585188,13.291602407,13.2917462808,13.2918901403,13.2920339855,13.2921778163, +13.2923216328,13.2924654349,13.2926092228,13.2927529962,13.2928967554,13.2930405002,13.2931842308,13.293327947,13.2934716488,13.2936153364,13.2937590097,13.2939026686,13.2940463133,13.2941899436,13.2943335597,13.2944771614, +13.2946207489,13.2947643221,13.294907881,13.2950514256,13.2951949559,13.2953384719,13.2954819737,13.2956254612,13.2957689344,13.2959123934,13.2960558381,13.2961992685,13.2963426847,13.2964860866,13.2966294743,13.2967728477, +13.2969162069,13.2970595518,13.2972028825,13.2973461989,13.2974895012,13.2976327891,13.2977760629,13.2979193224,13.2980625677,13.2982057988,13.2983490157,13.2984922183,13.2986354067,13.298778581,13.298921741,13.2990648868, +13.2992080184,13.2993511358,13.299494239,13.299637328,13.2997804029,13.2999234635,13.30006651,13.3002095422,13.3003525603,13.3004955642,13.300638554,13.3007815296,13.300924491,13.3010674382,13.3012103713,13.3013532902, +13.301496195,13.3016390856,13.3017819621,13.3019248244,13.3020676725,13.3022105065,13.3023533264,13.3024961322,13.3026389238,13.3027817013,13.3029244646,13.3030672138,13.3032099489,13.3033526699,13.3034953768,13.3036380695, +13.3037807482,13.3039234127,13.3040660631,13.3042086994,13.3043513217,13.3044939298,13.3046365238,13.3047791037,13.3049216696,13.3050642213,13.305206759,13.3053492826,13.3054917921,13.3056342875,13.3057767689,13.3059192362, +13.3060616894,13.3062041286,13.3063465537,13.3064889647,13.3066313617,13.3067737446,13.3069161135,13.3070584684,13.3072008091,13.3073431359,13.3074854486,13.3076277473,13.3077700319,13.3079123025,13.3080545591,13.3081968016, +13.3083390301,13.3084812446,13.3086234451,13.3087656316,13.3089078041,13.3090499625,13.309192107,13.3093342374,13.3094763538,13.3096184563,13.3097605447,13.3099026192,13.3100446796,13.3101867261,13.3103287586,13.3104707771, +13.3106127817,13.3107547722,13.3108967488,13.3110387114,13.3111806601,13.3113225947,13.3114645154,13.3116064222,13.311748315,13.3118901939,13.3120320587,13.3121739097,13.3123157467,13.3124575697,13.3125993789,13.312741174, +13.3128829553,13.3130247226,13.313166476,13.3133082154,13.313449941,13.3135916526,13.3137333503,13.313875034,13.3140167039,13.3141583599,13.3143000019,13.31444163,13.3145832443,13.3147248446,13.3148664311,13.3150080036, +13.3151495623,13.315291107,13.3154326379,13.3155741549,13.315715658,13.3158571473,13.3159986226,13.3161400841,13.3162815317,13.3164229655,13.3165643854,13.3167057914,13.3168471836,13.3169885619,13.3171299264,13.317271277, +13.3174126138,13.3175539367,13.3176952458,13.317836541,13.3179778224,13.31811909,13.3182603437,13.3184015836,13.3185428097,13.318684022,13.3188252204,13.318966405,13.3191075758,13.3192487328,13.319389876,13.3195310054, +13.3196721209,13.3198132227,13.3199543107,13.3200953849,13.3202364452,13.3203774918,13.3205185246,13.3206595436,13.3208005489,13.3209415403,13.321082518,13.3212234819,13.321364432,13.3215053684,13.321646291,13.3217871998, +13.3219280949,13.3220689762,13.3222098437,13.3223506975,13.3224915376,13.3226323639,13.3227731765,13.3229139753,13.3230547603,13.3231955317,13.3233362893,13.3234770332,13.3236177633,13.3237584797,13.3238991824,13.3240398714, +13.3241805466,13.3243212082,13.324461856,13.3246024901,13.3247431105,13.3248837172,13.3250243102,13.3251648895,13.3253054551,13.325446007,13.3255865452,13.3257270697,13.3258675806,13.3260080777,13.3261485612,13.326289031, +13.3264294871,13.3265699296,13.3267103583,13.3268507735,13.3269911749,13.3271315627,13.3272719368,13.3274122973,13.3275526441,13.3276929772,13.3278332968,13.3279736026,13.3281138948,13.3282541734,13.3283944384,13.3285346897, +13.3286749273,13.3288151514,13.3289553618,13.3290955586,13.3292357417,13.3293759113,13.3295160672,13.3296562095,13.3297963382,13.3299364533,13.3300765548,13.3302166427,13.330356717,13.3304967776,13.3306368247,13.3307768582, +13.3309168781,13.3310568844,13.3311968772,13.3313368563,13.3314768219,13.3316167738,13.3317567123,13.3318966371,13.3320365484,13.3321764461,13.3323163302,13.3324562008,13.3325960578,13.3327359012,13.3328757312,13.3330155475, +13.3331553503,13.3332951396,13.3334349153,13.3335746775,13.3337144261,13.3338541612,13.3339938828,13.3341335908,13.3342732853,13.3344129663,13.3345526338,13.3346922877,13.3348319281,13.334971555,13.3351111684,13.3352507683, +13.3353903547,13.3355299276,13.3356694869,13.3358090328,13.3359485652,13.3360880841,13.3362275895,13.3363670814,13.3365065598,13.3366460247,13.3367854762,13.3369249142,13.3370643387,13.3372037497,13.3373431473,13.3374825314, +13.337621902,13.3377612592,13.3379006029,13.3380399331,13.3381792499,13.3383185532,13.3384578431,13.3385971196,13.3387363826,13.3388756321,13.3390148683,13.3391540909,13.3392933002,13.339432496,13.3395716784,13.3397108473, +13.3398500029,13.339989145,13.3401282737,13.340267389,13.3404064909,13.3405455793,13.3406846544,13.340823716,13.3409627643,13.3411017991,13.3412408205,13.3413798286,13.3415188232,13.3416578045,13.3417967724,13.3419357269, +13.342074668,13.3422135957,13.3423525101,13.3424914111,13.3426302987,13.3427691729,13.3429080338,13.3430468813,13.3431857154,13.3433245362,13.3434633437,13.3436021377,13.3437409185,13.3438796858,13.3440184399,13.3441571806, +13.3442959079,13.3444346219,13.3445733226,13.3447120099,13.3448506839,13.3449893446,13.345127992,13.345266626,13.3454052467,13.3455438541,13.3456824482,13.345821029,13.3459595964,13.3460981505,13.3462366914,13.3463752189, +13.3465137332,13.3466522341,13.3467907218,13.3469291961,13.3470676572,13.3472061049,13.3473445394,13.3474829606,13.3476213686,13.3477597632,13.3478981446,13.3480365127,13.3481748675,13.3483132091,13.3484515374,13.3485898524, +13.3487281542,13.3488664428,13.349004718,13.34914298,13.3492812288,13.3494194643,13.3495576866,13.3496958957,13.3498340915,13.349972274,13.3501104433,13.3502485994,13.3503867423,13.350524872,13.3506629884,13.3508010916, +13.3509391815,13.3510772583,13.3512153219,13.3513533722,13.3514914093,13.3516294332,13.351767444,13.3519054415,13.3520434258,13.3521813969,13.3523193548,13.3524572996,13.3525952311,13.3527331495,13.3528710547,13.3530089467, +13.3531468255,13.3532846911,13.3534225436,13.3535603829,13.353698209,13.353836022,13.3539738218,13.3541116085,13.3542493819,13.3543871423,13.3545248894,13.3546626235,13.3548003444,13.3549380521,13.3550757467,13.3552134281, +13.3553510964,13.3554887516,13.3556263936,13.3557640225,13.3559016383,13.356039241,13.3561768305,13.3563144069,13.3564519702,13.3565895204,13.3567270575,13.3568645814,13.3570020923,13.35713959,13.3572770746,13.3574145462, +13.3575520046,13.35768945,13.3578268822,13.3579643014,13.3581017074,13.3582391004,13.3583764803,13.3585138471,13.3586512009,13.3587885416,13.3589258692,13.3590631837,13.3592004851,13.3593377735,13.3594750488,13.3596123111, +13.3597495603,13.3598867965,13.3600240196,13.3601612296,13.3602984266,13.3604356106,13.3605727815,13.3607099393,13.3608470842,13.360984216,13.3611213347,13.3612584405,13.3613955332,13.3615326128,13.3616696795,13.3618067331, +13.3619437737,13.3620808013,13.3622178159,13.3623548175,13.362491806,13.3626287816,13.3627657442,13.3629026937,13.3630396303,13.3631765538,13.3633134644,13.3634503619,13.3635872465,13.3637241181,13.3638609767,13.3639978224, +13.364134655,13.3642714747,13.3644082814,13.3645450751,13.3646818559,13.3648186237,13.3649553785,13.3650921203,13.3652288493,13.3653655652,13.3655022682,13.3656389582,13.3657756353,13.3659122995,13.3660489507,13.3661855889, +13.3663222142,13.3664588266,13.3665954261,13.3667320126,13.3668685862,13.3670051468,13.3671416946,13.3672782294,13.3674147512,13.3675512602,13.3676877563,13.3678242394,13.3679607096,13.368097167,13.3682336114,13.3683700429, +13.3685064615,13.3686428672,13.36877926,13.36891564,13.369052007,13.3691883611,13.3693247024,13.3694610308,13.3695973463,13.3697336489,13.3698699386,13.3700062155,13.3701424795,13.3702787306,13.3704149689,13.3705511943, +13.3706874068,13.3708236065,13.3709597933,13.3710959673,13.3712321284,13.3713682766,13.371504412,13.3716405346,13.3717766443,13.3719127412,13.3720488253,13.3721848965,13.3723209549,13.3724570004,13.3725930331,13.372729053, +13.3728650601,13.3730010544,13.3731370358,13.3732730044,13.3734089602,13.3735449032,13.3736808334,13.3738167508,13.3739526554,13.3740885471,13.3742244261,13.3743602923,13.3744961457,13.3746319863,13.3747678141,13.3749036291, +13.3750394313,13.3751752208,13.3753109975,13.3754467614,13.3755825125,13.3757182508,13.3758539764,13.3759896892,13.3761253893,13.3762610766,13.3763967511,13.3765324128,13.3766680619,13.3768036981,13.3769393216,13.3770749324, +13.3772105304,13.3773461157,13.3774816882,13.377617248,13.377752795,13.3778883293,13.3780238509,13.3781593598,13.3782948559,13.3784303393,13.37856581,13.378701268,13.3788367132,13.3789721457,13.3791075656,13.3792429727, +13.3793783671,13.3795137488,13.3796491178,13.3797844741,13.3799198176,13.3800551485,13.3801904667,13.3803257723,13.3804610651,13.3805963452,13.3807316127,13.3808668675,13.3810021096,13.381137339,13.3812725557,13.3814077598, +13.3815429512,13.3816781299,13.381813296,13.3819484494,13.3820835901,13.3822187182,13.3823538337,13.3824889364,13.3826240266,13.3827591041,13.3828941689,13.3830292211,13.3831642606,13.3832992875,13.3834343018,13.3835693035, +13.3837042925,13.3838392689,13.3839742326,13.3841091837,13.3842441222,13.3843790481,13.3845139614,13.3846488621,13.3847837501,13.3849186255,13.3850534883,13.3851883386,13.3853231762,13.3854580012,13.3855928136,13.3857276134, +13.3858624006,13.3859971753,13.3861319373,13.3862666868,13.3864014236,13.3865361479,13.3866708596,13.3868055588,13.3869402453,13.3870749193,13.3872095807,13.3873442296,13.3874788658,13.3876134896,13.3877481007,13.3878826993, +13.3880172853,13.3881518588,13.3882864198,13.3884209681,13.388555504,13.3886900273,13.388824538,13.3889590362,13.3890935219,13.389227995,13.3893624556,13.3894969037,13.3896313393,13.3897657623,13.3899001728,13.3900345707, +13.3901689562,13.3903033291,13.3904376896,13.3905720375,13.3907063729,13.3908406958,13.3909750062,13.391109304,13.3912435894,13.3913778623,13.3915121227,13.3916463706,13.391780606,13.3919148289,13.3920490394,13.3921832373, +13.3923174228,13.3924515958,13.3925857563,13.3927199043,13.3928540399,13.392988163,13.3931222736,13.3932563717,13.3933904574,13.3935245307,13.3936585915,13.3937926398,13.3939266756,13.3940606991,13.39419471,13.3943287085, +13.3944626946,13.3945966682,13.3947306294,13.3948645782,13.3949985145,13.3951324384,13.3952663498,13.3954002489,13.3955341355,13.3956680096,13.3958018714,13.3959357207,13.3960695576,13.3962033821,13.3963371942,13.3964709939, +13.3966047812,13.396738556,13.3968723185,13.3970060686,13.3971398062,13.3972735315,13.3974072444,13.3975409449,13.3976746329,13.3978083087,13.397941972,13.3980756229,13.3982092615,13.3983428876,13.3984765014,13.3986101029, +13.3987436919,13.3988772686,13.399010833,13.3991443849,13.3992779245,13.3994114517,13.3995449666,13.3996784692,13.3998119593,13.3999454371,13.4000789026,13.4002123558,13.4003457965,13.400479225,13.4006126411,13.4007460448, +13.4008794363,13.4010128154,13.4011461822,13.4012795366,13.4014128787,13.4015462085,13.401679526,13.4018128311,13.401946124,13.4020794045,13.4022126727,13.4023459286,13.4024791722,13.4026124035,13.4027456225,13.4028788292, +13.4030120236,13.4031452057,13.4032783755,13.403411533,13.4035446782,13.4036778111,13.4038109318,13.4039440402,13.4040771362,13.4042102201,13.4043432916,13.4044763508,13.4046093978,13.4047424326,13.404875455,13.4050084652, +13.4051414631,13.4052744488,13.4054074222,13.4055403834,13.4056733323,13.4058062689,13.4059391933,13.4060721055,13.4062050054,13.4063378931,13.4064707685,13.4066036317,13.4067364827,13.4068693214,13.4070021479,13.4071349622, +13.4072677642,13.4074005541,13.4075333317,13.4076660971,13.4077988502,13.4079315912,13.4080643199,13.4081970364,13.4083297408,13.4084624329,13.4085951128,13.4087277805,13.408860436,13.4089930793,13.4091257105,13.4092583294, +13.4093909361,13.4095235307,13.4096561131,13.4097886832,13.4099212412,13.4100537871,13.4101863207,13.4103188422,13.4104513515,13.4105838486,13.4107163336,13.4108488064,13.410981267,13.4111137155,13.4112461518,13.411378576, +13.411510988,13.4116433879,13.4117757756,13.4119081511,13.4120405146,13.4121728658,13.412305205,13.4124375319,13.4125698468,13.4127021495,13.4128344401,13.4129667186,13.4130989849,13.4132312391,13.4133634812,13.4134957112, +13.413627929,13.4137601348,13.4138923284,13.4140245099,13.4141566793,13.4142888366,13.4144209817,13.4145531148,13.4146852358,13.4148173447,13.4149494415,13.4150815262,13.4152135988,13.4153456593,13.4154777077,13.415609744, +13.4157417683,13.4158737805,13.4160057806,13.4161377686,13.4162697445,13.4164017084,13.4165336602,13.4166655999,13.4167975276,13.4169294432,13.4170613468,13.4171932382,13.4173251177,13.4174569851,13.4175888404,13.4177206837, +13.4178525149,13.4179843341,13.4181161412,13.4182479363,13.4183797194,13.4185114904,13.4186432494,13.4187749963,13.4189067313,13.4190384542,13.419170165,13.4193018639,13.4194335507,13.4195652255,13.4196968883,13.4198285391, +13.4199601778,13.4200918046,13.4202234193,13.4203550221,13.4204866128,13.4206181916,13.4207497583,13.420881313,13.4210128558,13.4211443865,13.4212759053,13.4214074121,13.4215389068,13.4216703897,13.4218018605,13.4219333193, +13.4220647662,13.4221962011,13.422327624,13.4224590349,13.4225904339,13.4227218209,13.4228531959,13.422984559,13.4231159101,13.4232472493,13.4233785765,13.4235098918,13.4236411951,13.4237724864,13.4239037658,13.4240350333, +13.4241662888,13.4242975324,13.424428764,13.4245599837,13.4246911915,13.4248223874,13.4249535713,13.4250847432,13.4252159033,13.4253470514,13.4254781876,13.4256093119,13.4257404243,13.4258715248,13.4260026133,13.42613369, +13.4262647547,13.4263958075,13.4265268485,13.4266578775,13.4267888946,13.4269198998,13.4270508932,13.4271818746,13.4273128441,13.4274438018,13.4275747476,13.4277056815,13.4278366035,13.4279675136,13.4280984118,13.4282292982, +13.4283601727,13.4284910353,13.4286218861,13.428752725,13.428883552,13.4290143672,13.4291451705,13.4292759619,13.4294067415,13.4295375092,13.4296682651,13.4297990092,13.4299297414,13.4300604617,13.4301911702,13.4303218668, +13.4304525517,13.4305832246,13.4307138858,13.4308445351,13.4309751726,13.4311057982,13.4312364121,13.4313670141,13.4314976043,13.4316281826,13.4317587492,13.4318893039,13.4320198468,13.4321503779,13.4322808972,13.4324114047, +13.4325419004,13.4326723843,13.4328028564,13.4329333166,13.4330637651,13.4331942018,13.4333246267,13.4334550398,13.4335854412,13.4337158307,13.4338462084,13.4339765744,13.4341069286,13.434237271,13.4343676017,13.4344979205, +13.4346282276,13.434758523,13.4348888065,13.4350190783,13.4351493384,13.4352795866,13.4354098232,13.4355400479,13.4356702609,13.4358004622,13.4359306517,13.4360608295,13.4361909955,13.4363211498,13.4364512923,13.4365814231, +13.4367115421,13.4368416495,13.436971745,13.4371018289,13.437231901,13.4373619614,13.4374920101,13.4376220471,13.4377520723,13.4378820858,13.4380120877,13.4381420777,13.4382720561,13.4384020228,13.4385319778,13.438661921, +13.4387918526,13.4389217724,13.4390516806,13.4391815771,13.4393114618,13.4394413349,13.4395711963,13.439701046,13.439830884,13.4399607103,13.440090525,13.4402203279,13.4403501192,13.4404798988,13.4406096667,13.440739423, +13.4408691676,13.4409989005,13.4411286218,13.4412583314,13.4413880293,13.4415177156,13.4416473903,13.4417770532,13.4419067045,13.4420363442,13.4421659722,13.4422955886,13.4424251933,13.4425547864,13.4426843679,13.4428139377, +13.4429434958,13.4430730424,13.4432025773,13.4433321006,13.4434616122,13.4435911123,13.4437206007,13.4438500774,13.4439795426,13.4441089961,13.4442384381,13.4443678684,13.4444972871,13.4446266942,13.4447560897,13.4448854736, +13.4450148459,13.4451442066,13.4452735556,13.4454028931,13.445532219,13.4456615333,13.445790836,13.4459201272,13.4460494067,13.4461786747,13.4463079311,13.4464371758,13.4465664091,13.4466956307,13.4468248408,13.4469540393, +13.4470832262,13.4472124016,13.4473415654,13.4474707176,13.4475998583,13.4477289874,13.447858105,13.447987211,13.4481163054,13.4482453883,13.4483744597,13.4485035195,13.4486325677,13.4487616045,13.4488906296,13.4490196433, +13.4491486454,13.4492776359,13.449406615,13.4495355825,13.4496645385,13.4497934829,13.4499224159,13.4500513373,13.4501802472,13.4503091455,13.4504380324,13.4505669077,13.4506957716,13.4508246239,13.4509534647,13.451082294, +13.4512111118,13.4513399181,13.4514687129,13.4515974963,13.4517262681,13.4518550284,13.4519837772,13.4521125146,13.4522412404,13.4523699548,13.4524986577,13.4526273491,13.452756029,13.4528846975,13.4530133545,13.453142, +13.453270634,13.4533992566,13.4535278677,13.4536564673,13.4537850555,13.4539136322,13.4540421975,13.4541707513,13.4542992936,13.4544278245,13.454556344,13.454684852,13.4548133485,13.4549418336,13.4550703073,13.4551987695, +13.4553272203,13.4554556597,13.4555840876,13.4557125041,13.4558409091,13.4559693028,13.456097685,13.4562260557,13.4563544151,13.4564827631,13.4566110996,13.4567394247,13.4568677384,13.4569960407,13.4571243315,13.457252611, +13.4573808791,13.4575091357,13.457637381,13.4577656149,13.4578938373,13.4580220484,13.4581502481,13.4582784363,13.4584066132,13.4585347787,13.4586629329,13.4587910756,13.458919207,13.4590473269,13.4591754356,13.4593035328, +13.4594316186,13.4595596931,13.4596877562,13.459815808,13.4599438484,13.4600718774,13.4601998951,13.4603279014,13.4604558963,13.4605838799,13.4607118521,13.460839813,13.4609677626,13.4610957008,13.4612236276,13.4613515431, +13.4614794473,13.4616073401,13.4617352216,13.4618630918,13.4619909506,13.4621187981,13.4622466342,13.4623744591,13.4625022726,13.4626300748,13.4627578657,13.4628856452,13.4630134134,13.4631411704,13.463268916,13.4633966503, +13.4635243733,13.463652085,13.4637797853,13.4639074744,13.4640351522,13.4641628187,13.4642904739,13.4644181177,13.4645457503,13.4646733716,13.4648009817,13.4649285804,13.4650561678,13.465183744,13.4653113089,13.4654388625, +13.4655664048,13.4656939359,13.4658214556,13.4659489642,13.4660764614,13.4662039474,13.4663314221,13.4664588855,13.4665863377,13.4667137786,13.4668412083,13.4669686267,13.4670960339,13.4672234298,13.4673508145,13.4674781879, +13.4676055501,13.467732901,13.4678602407,13.4679875692,13.4681148864,13.4682421924,13.4683694871,13.4684967706,13.4686240429,13.468751304,13.4688785538,13.4690057924,13.4691330198,13.469260236,13.469387441,13.4695146347, +13.4696418172,13.4697689886,13.4698961487,13.4700232976,13.4701504353,13.4702775618,13.4704046771,13.4705317812,13.4706588741,13.4707859558,13.4709130263,13.4710400856,13.4711671337,13.4712941707,13.4714211964,13.471548211, +13.4716752144,13.4718022066,13.4719291876,13.4720561575,13.4721831162,13.4723100637,13.4724370001,13.4725639252,13.4726908392,13.4728177421,13.4729446338,13.4730715143,13.4731983837,13.4733252419,13.473452089,13.4735789249, +13.4737057496,13.4738325632,13.4739593657,13.474086157,13.4742129372,13.4743397062,13.4744664641,13.4745932109,13.4747199465,13.474846671,13.4749733844,13.4751000866,13.4752267777,13.4753534577,13.4754801266,13.4756067843, +13.475733431,13.4758600665,13.4759866909,13.4761133042,13.4762399063,13.4763664974,13.4764930773,13.4766196462,13.4767462039,13.4768727506,13.4769992861,13.4771258106,13.4772523239,13.4773788262,13.4775053174,13.4776317975, +13.4777582664,13.4778847244,13.4780111712,13.4781376069,13.4782640316,13.4783904452,13.4785168477,13.4786432391,13.4787696195,13.4788959888,13.479022347,13.4791486942,13.4792750303,13.4794013553,13.4795276693,13.4796539722, +13.479780264,13.4799065448,13.4800328146,13.4801590733,13.4802853209,13.4804115575,13.4805377831,13.4806639976,13.4807902011,13.4809163935,13.4810425749,13.4811687453,13.4812949046,13.4814210529,13.4815471902,13.4816733164, +13.4817994317,13.4819255359,13.482051629,13.4821777112,13.4823037823,13.4824298424,13.4825558915,13.4826819296,13.4828079567,13.4829339728,13.4830599779,13.4831859719,13.483311955,13.4834379271,13.4835638881,13.4836898382, +13.4838157773,13.4839417053,13.4840676224,13.4841935285,13.4843194236,13.4844453078,13.4845711809,13.4846970431,13.4848228943,13.4849487345,13.4850745637,13.485200382,13.4853261892,13.4854519856,13.4855777709,13.4857035453, +13.4858293087,13.4859550612,13.4860808027,13.4862065332,13.4863322528,13.4864579614,13.4865836591,13.4867093458,13.4868350216,13.4869606864,13.4870863403,13.4872119832,13.4873376152,13.4874632363,13.4875888464,13.4877144456, +13.4878400338,13.4879656111,13.4880911775,13.488216733,13.4883422775,13.4884678111,13.4885933338,13.4887188456,13.4888443465,13.4889698364,13.4890953154,13.4892207835,13.4893462407,13.489471687,13.4895971224,13.4897225469, +13.4898479604,13.4899733631,13.4900987549,13.4902241358,13.4903495057,13.4904748648,13.490600213,13.4907255503,13.4908508767,13.4909761923,13.4911014969,13.4912267907,13.4913520736,13.4914773456,13.4916026067,13.4917278569, +13.4918530963,13.4919783248,13.4921035425,13.4922287493,13.4923539452,13.4924791302,13.4926043044,13.4927294677,13.4928546202,13.4929797618,13.4931048925,13.4932300124,13.4933551215,13.4934802197,13.4936053071,13.4937303836, +13.4938554492,13.4939805041,13.4941055481,13.4942305812,13.4943556035,13.494480615,13.4946056157,13.4947306055,13.4948555845,13.4949805527,13.49510551,13.4952304565,13.4953553922,13.4954803171,13.4956052312,13.4957301344, +13.4958550269,13.4959799085,13.4961047793,13.4962296394,13.4963544886,13.496479327,13.4966041546,13.4967289714,13.4968537774,13.4969785726,13.497103357,13.4972281306,13.4973528935,13.4974776455,13.4976023868,13.4977271173, +13.497851837,13.4979765459,13.498101244,13.4982259313,13.4983506079,13.4984752737,13.4985999288,13.498724573,13.4988492065,13.4989738293,13.4990984412,13.4992230424,13.4993476329,13.4994722126,13.4995967815,13.4997213397, +13.4998458871,13.4999704238,13.5000949497,13.5002194648,13.5003439693,13.500468463,13.5005929459,13.5007174181,13.5008418796,13.5009663303,13.5010907703,13.5012151995,13.5013396181,13.5014640259,13.5015884229,13.5017128093, +13.5018371849,13.5019615498,13.502085904,13.5022102474,13.5023345802,13.5024589022,13.5025832136,13.5027075142,13.5028318041,13.5029560833,13.5030803518,13.5032046095,13.5033288566,13.503453093,13.5035773187,13.5037015337, +13.503825738,13.5039499316,13.5040741145,13.5041982867,13.5043224483,13.5044465991,13.5045707393,13.5046948688,13.5048189876,13.5049430958,13.5050671932,13.50519128,13.5053153561,13.5054394216,13.5055634764,13.5056875205, +13.5058115539,13.5059355767,13.5060595888,13.5061835903,13.5063075811,13.5064315613,13.5065555308,13.5066794896,13.5068034378,13.5069273753,13.5070513022,13.5071752185,13.5072991241,13.5074230191,13.5075469034,13.5076707771, +13.5077946402,13.5079184926,13.5080423344,13.5081661656,13.5082899861,13.5084137961,13.5085375953,13.508661384,13.5087851621,13.5089089295,13.5090326863,13.5091564325,13.5092801681,13.5094038931,13.5095276074,13.5096513112, +13.5097750043,13.5098986869,13.5100223588,13.5101460202,13.5102696709,13.510393311,13.5105169406,13.5106405596,13.5107641679,13.5108877657,13.5110113529,13.5111349295,13.5112584955,13.5113820509,13.5115055958,13.5116291301, +13.5117526538,13.5118761669,13.5119996694,13.5121231614,13.5122466428,13.5123701137,13.5124935739,13.5126170237,13.5127404628,13.5128638914,13.5129873094,13.5131107169,13.5132341138,13.5133575002,13.513480876,13.5136042412, +13.513727596,13.5138509401,13.5139742737,13.5140975968,13.5142209094,13.5143442114,13.5144675028,13.5145907837,13.5147140541,13.514837314,13.5149605633,13.5150838021,13.5152070304,13.5153302482,13.5154534554,13.5155766521, +13.5156998383,13.515823014,13.5159461791,13.5160693338,13.5161924779,13.5163156115,13.5164387346,13.5165618472,13.5166849493,13.5168080409,13.516931122,13.5170541926,13.5171772527,13.5173003023,13.5174233414,13.51754637, +13.5176693881,13.5177923958,13.5179153929,13.5180383796,13.5181613558,13.5182843215,13.5184072767,13.5185302214,13.5186531557,13.5187760795,13.5188989928,13.5190218956,13.519144788,13.5192676699,13.5193905413,13.5195134023, +13.5196362528,13.5197590929,13.5198819225,13.5200047416,13.5201275503,13.5202503486,13.5203731363,13.5204959137,13.5206186806,13.520741437,13.520864183,13.5209869185,13.5211096437,13.5212323583,13.5213550626,13.5214777564, +13.5216004397,13.5217231127,13.5218457752,13.5219684272,13.5220910689,13.5222137001,13.5223363209,13.5224589313,13.5225815313,13.5227041208,13.5228266999,13.5229492686,13.5230718269,13.5231943748,13.5233169123,13.5234394394, +13.5235619561,13.5236844623,13.5238069582,13.5239294437,13.5240519187,13.5241743834,13.5242968377,13.5244192815,13.524541715,13.5246641381,13.5247865509,13.5249089532,13.5250313451,13.5251537267,13.5252760979,13.5253984587, +13.5255208091,13.5256431491,13.5257654788,13.5258877981,13.5260101071,13.5261324056,13.5262546938,13.5263769717,13.5264992391,13.5266214962,13.526743743,13.5268659794,13.5269882054,13.5271104211,13.5272326264,13.5273548214, +13.5274770061,13.5275991803,13.5277213443,13.5278434979,13.5279656411,13.528087774,13.5282098966,13.5283320089,13.5284541108,13.5285762023,13.5286982836,13.5288203545,13.5289424151,13.5290644653,13.5291865053,13.5293085349, +13.5294305541,13.5295525631,13.5296745618,13.5297965501,13.5299185281,13.5300404958,13.5301624532,13.5302844003,13.5304063371,13.5305282636,13.5306501798,13.5307720856,13.5308939812,13.5310158665,13.5311377414,13.5312596061, +13.5313814605,13.5315033046,13.5316251384,13.5317469619,13.5318687752,13.5319905781,13.5321123708,13.5322341532,13.5323559253,13.5324776871,13.5325994387,13.53272118,13.532842911,13.5329646317,13.5330863422,13.5332080424, +13.5333297323,13.533451412,13.5335730814,13.5336947405,13.5338163894,13.5339380281,13.5340596565,13.5341812746,13.5343028825,13.5344244801,13.5345460675,13.5346676446,13.5347892115,13.5349107681,13.5350323145,13.5351538507, +13.5352753766,13.5353968923,13.5355183978,13.535639893,13.535761378,13.5358828528,13.5360043173,13.5361257716,13.5362472157,13.5363686496,13.5364900732,13.5366114866,13.5367328898,13.5368542828,13.5369756656,13.5370970382, +13.5372184005,13.5373397527,13.5374610946,13.5375824264,13.5377037479,13.5378250592,13.5379463604,13.5380676513,13.5381889321,13.5383102026,13.538431463,13.5385527131,13.5386739531,13.5387951829,13.5389164025,13.5390376119, +13.5391588111,13.5392800002,13.539401179,13.5395223477,13.5396435062,13.5397646546,13.5398857928,13.5400069208,13.5401280386,13.5402491462,13.5403702437,13.5404913311,13.5406124082,13.5407334753,13.5408545321,13.5409755788, +13.5410966153,13.5412176417,13.541338658,13.5414596641,13.54158066,13.5417016458,13.5418226214,13.5419435869,13.5420645423,13.5421854875,13.5423064226,13.5424273475,13.5425482623,13.542669167,13.5427900616,13.542910946, +13.5430318203,13.5431526844,13.5432735384,13.5433943824,13.5435152162,13.5436360398,13.5437568534,13.5438776568,13.5439984501,13.5441192333,13.5442400064,13.5443607694,13.5444815223,13.5446022651,13.5447229978,13.5448437203, +13.5449644328,13.5450851352,13.5452058274,13.5453265096,13.5454471817,13.5455678437,13.5456884956,13.5458091374,13.5459297691,13.5460503907,13.5461710023,13.5462916037,13.5464121951,13.5465327764,13.5466533477,13.5467739088, +13.5468944599,13.5470150009,13.5471355318,13.5472560527,13.5473765635,13.5474970642,13.5476175549,13.5477380355,13.5478585061,13.5479789665,13.548099417,13.5482198574,13.5483402877,13.5484607079,13.5485811182,13.5487015183, +13.5488219085,13.5489422885,13.5490626586,13.5491830186,13.5493033685,13.5494237084,13.5495440383,13.5496643581,13.5497846679,13.5499049677,13.5500252575,13.5501455372,13.5502658069,13.5503860665,13.5505063162,13.5506265558, +13.5507467854,13.550867005,13.5509872145,13.5511074141,13.5512276036,13.5513477831,13.5514679526,13.5515881121,13.5517082616,13.5518284011,13.5519485306,13.5520686501,13.5521887596,13.552308859,13.5524289485,13.552549028, +13.5526690975,13.552789157,13.5529092065,13.5530292461,13.5531492756,13.5532692952,13.5533893047,13.5535093043,13.5536292939,13.5537492735,13.5538692432,13.5539892029,13.5541091526,13.5542290923,13.5543490221,13.5544689419, +13.5545888517,13.5547087515,13.5548286414,13.5549485214,13.5550683913,13.5551882513,13.5553081014,13.5554279415,13.5555477716,13.5556675918,13.5557874021,13.5559072024,13.5560269927,13.5561467731,13.5562665436,13.5563863041, +13.5565060547,13.5566257953,13.556745526,13.5568652468,13.5569849576,13.5571046585,13.5572243495,13.5573440305,13.5574637016,13.5575833628,13.557703014,13.5578226554,13.5579422868,13.5580619083,13.5581815199,13.5583011215, +13.5584207133,13.5585402951,13.558659867,13.558779429,13.5588989811,13.5590185233,13.5591380556,13.559257578,13.5593770905,13.5594965931,13.5596160858,13.5597355686,13.5598550415,13.5599745045,13.5600939576,13.5602134009, +13.5603328342,13.5604522577,13.5605716712,13.5606910749,13.5608104687,13.5609298527,13.5610492267,13.5611685909,13.5612879452,13.5614072896,13.5615266241,13.5616459488,13.5617652636,13.5618845686,13.5620038637,13.5621231489, +13.5622424242,13.5623616897,13.5624809453,13.5626001911,13.562719427,13.5628386531,13.5629578693,13.5630770757,13.5631962722,13.5633154589,13.5634346357,13.5635538027,13.5636729598,13.5637921071,13.5639112446,13.5640303722, +13.56414949,13.5642685979,13.5643876961,13.5645067843,13.5646258628,13.5647449314,13.5648639902,13.5649830392,13.5651020784,13.5652211077,13.5653401272,13.5654591369,13.5655781368,13.5656971268,13.5658161071,13.5659350775, +13.5660540382,13.566172989,13.56629193,13.5664108612,13.5665297826,13.5666486942,13.566767596,13.566886488,13.5670053702,13.5671242427,13.5672431053,13.5673619581,13.5674808011,13.5675996344,13.5677184579,13.5678372715, +13.5679560754,13.5680748695,13.5681936539,13.5683124284,13.5684311932,13.5685499482,13.5686686934,13.5687874288,13.5689061545,13.5690248704,13.5691435765,13.5692622729,13.5693809595,13.5694996364,13.5696183034,13.5697369608, +13.5698556083,13.5699742461,13.5700928742,13.5702114925,13.570330101,13.5704486998,13.5705672889,13.5706858682,13.5708044377,13.5709229975,13.5710415476,13.5711600879,13.5712786185,13.5713971394,13.5715156505,13.5716341519, +13.5717526435,13.5718711254,13.5719895976,13.5721080601,13.5722265128,13.5723449558,13.5724633891,13.5725818126,13.5727002265,13.5728186306,13.572937025,13.5730554097,13.5731737847,13.57329215,13.5734105055,13.5735288514, +13.5736471875,13.5737655139,13.5738838307,13.5740021377,13.574120435,13.5742387226,13.5743570006,13.5744752688,13.5745935273,13.5747117762,13.5748300153,13.5749482448,13.5750664646,13.5751846747,13.5753028751,13.5754210658, +13.5755392468,13.5756574182,13.5757755799,13.5758937319,13.5760118742,13.5761300069,13.5762481298,13.5763662432,13.5764843468,13.5766024408,13.5767205251,13.5768385997,13.5769566647,13.57707472,13.5771927657,13.5773108017, +13.577428828,13.5775468447,13.5776648518,13.5777828492,13.5779008369,13.578018815,13.5781367834,13.5782547422,13.5783726914,13.5784906309,13.5786085607,13.578726481,13.5788443916,13.5789622925,13.5790801838,13.5791980655, +13.5793159376,13.5794338,13.5795516528,13.579669496,13.5797873295,13.5799051535,13.5800229678,13.5801407724,13.5802585675,13.5803763529,13.5804941288,13.580611895,13.5807296516,13.5808473986,13.580965136,13.5810828638, +13.5812005819,13.5813182905,13.5814359895,13.5815536788,13.5816713586,13.5817890287,13.5819066893,13.5820243403,13.5821419817,13.5822596134,13.5823772356,13.5824948482,13.5826124513,13.5827300447,13.5828476286,13.5829652028, +13.5830827675,13.5832003226,13.5833178681,13.5834354041,13.5835529305,13.5836704473,13.5837879545,13.5839054522,13.5840229403,13.5841404188,13.5842578877,13.5843753471,13.584492797,13.5846102372,13.584727668,13.5848450891, +13.5849625007,13.5850799028,13.5851972953,13.5853146782,13.5854320516,13.5855494154,13.5856667697,13.5857841145,13.5859014497,13.5860187754,13.5861360915,13.5862533981,13.5863706951,13.5864879826,13.5866052606,13.586722529, +13.586839788,13.5869570373,13.5870742772,13.5871915075,13.5873087283,13.5874259396,13.5875431414,13.5876603336,13.5877775163,13.5878946895,13.5880118532,13.5881290074,13.588246152,13.5883632872,13.5884804128,13.588597529, +13.5887146356,13.5888317327,13.5889488203,13.5890658984,13.589182967,13.5893000262,13.5894170758,13.5895341159,13.5896511465,13.5897681676,13.5898851793,13.5900021814,13.5901191741,13.5902361573,13.590353131,13.5904700952, +13.5905870499,13.5907039952,13.5908209309,13.5909378572,13.591054774,13.5911716814,13.5912885792,13.5914054676,13.5915223466,13.591639216,13.591756076,13.5918729266,13.5919897676,13.5921065992,13.5922234214,13.592340234, +13.5924570373,13.592573831,13.5926906154,13.5928073902,13.5929241556,13.5930409116,13.5931576581,13.5932743952,13.5933911228,13.593507841,13.5936245497,13.593741249,13.5938579389,13.5939746193,13.5940912903,13.5942079518, +13.5943246039,13.5944412466,13.5945578799,13.5946745037,13.5947911181,13.5949077231,13.5950243186,13.5951409047,13.5952574814,13.5953740487,13.5954906066,13.5956071551,13.5957236941,13.5958402237,13.5959567439,13.5960732547, +13.5961897561,13.5963062481,13.5964227307,13.5965392039,13.5966556677,13.5967721221,13.596888567,13.5970050026,13.5971214288,13.5972378456,13.597354253,13.597470651,13.5975870396,13.5977034188,13.5978197886,13.5979361491, +13.5980525002,13.5981688418,13.5982851741,13.5984014971,13.5985178106,13.5986341148,13.5987504096,13.598866695,13.598982971,13.5990992377,13.599215495,13.599331743,13.5994479815,13.5995642107,13.5996804306,13.5997966411, +13.5999128422,13.600029034,13.6001452164,13.6002613894,13.6003775531,13.6004937075,13.6006098524,13.6007259881,13.6008421144,13.6009582313,13.6010743389,13.6011904372,13.6013065261,13.6014226057,13.6015386759,13.6016547368, +13.6017707884,13.6018868306,13.6020028635,13.6021188871,13.6022349013,13.6023509062,13.6024669018,13.6025828881,13.602698865,13.6028148326,13.6029307909,13.6030467399,13.6031626795,13.6032786099,13.6033945309,13.6035104426, +13.603626345,13.6037422381,13.6038581218,13.6039739963,13.6040898615,13.6042057173,13.6043215639,13.6044374011,13.6045532291,13.6046690477,13.6047848571,13.6049006571,13.6050164479,13.6051322294,13.6052480016,13.6053637645, +13.6054795181,13.6055952624,13.6057109974,13.6058267232,13.6059424396,13.6060581468,13.6061738447,13.6062895333,13.6064052127,13.6065208828,13.6066365436,13.6067521951,13.6068678374,13.6069834704,13.6070990941,13.6072147086, +13.6073303137,13.6074459097,13.6075614964,13.6076770738,13.6077926419,13.6079082008,13.6080237505,13.6081392908,13.608254822,13.6083703439,13.6084858565,13.6086013599,13.608716854,13.6088323389,13.6089478146,13.609063281, +13.6091787381,13.6092941861,13.6094096248,13.6095250542,13.6096404744,13.6097558854,13.6098712872,13.6099866797,13.610102063,13.6102174371,13.6103328019,13.6104481575,13.6105635039,13.6106788411,13.6107941691,13.6109094878, +13.6110247973,13.6111400976,13.6112553887,13.6113706706,13.6114859432,13.6116012067,13.6117164609,13.611831706,13.6119469418,13.6120621685,13.6121773859,13.6122925941,13.6124077931,13.612522983,13.6126381636,13.612753335, +13.6128684973,13.6129836503,13.6130987942,13.6132139289,13.6133290544,13.6134441707,13.6135592778,13.6136743757,13.6137894645,13.613904544,13.6140196144,13.6141346757,13.6142497277,13.6143647706,13.6144798042,13.6145948288, +13.6147098441,13.6148248503,13.6149398473,13.6150548352,13.6151698138,13.6152847834,13.6153997437,13.6155146949,13.615629637,13.6157445699,13.6158594936,13.6159744082,13.6160893136,13.6162042099,13.616319097,13.616433975, +13.6165488438,13.6166637035,13.616778554,13.6168933954,13.6170082277,13.6171230508,13.6172378647,13.6173526696,13.6174674653,13.6175822519,13.6176970293,13.6178117976,13.6179265568,13.6180413069,13.6181560478,13.6182707796, +13.6183855023,13.6185002158,13.6186149203,13.6187296156,13.6188443018,13.6189589788,13.6190736468,13.6191883057,13.6193029554,13.619417596,13.6195322276,13.61964685,13.6197614633,13.6198760675,13.6199906626,13.6201052486, +13.6202198255,13.6203343933,13.620448952,13.6205635016,13.6206780421,13.6207925736,13.6209070959,13.6210216091,13.6211361133,13.6212506083,13.6213650943,13.6214795712,13.621594039,13.6217084977,13.6218229474,13.621937388, +13.6220518195,13.6221662419,13.6222806552,13.6223950595,13.6225094547,13.6226238408,13.6227382179,13.6228525859,13.6229669448,13.6230812947,13.6231956355,13.6233099672,13.6234242899,13.6235386035,13.6236529081,13.6237672036, +13.62388149,13.6239957674,13.6241100358,13.6242242951,13.6243385453,13.6244527865,13.6245670187,13.6246812418,13.6247954559,13.6249096609,13.6250238569,13.6251380438,13.6252522217,13.6253663906,13.6254805505,13.6255947013, +13.6257088431,13.6258229758,13.6259370995,13.6260512142,13.6261653199,13.6262794166,13.6263935042,13.6265075828,13.6266216524,13.6267357129,13.6268497645,13.626963807,13.6270778405,13.627191865,13.6273058805,13.627419887, +13.6275338845,13.6276478729,13.6277618524,13.6278758229,13.6279897843,13.6281037368,13.6282176802,13.6283316147,13.6284455401,13.6285594566,13.6286733641,13.6287872625,13.628901152,13.6290150325,13.629128904,13.6292427665, +13.6293566201,13.6294704646,13.6295843002,13.6296981268,13.6298119444,13.629925753,13.6300395527,13.6301533433,13.630267125,13.6303808978,13.6304946615,13.6306084163,13.6307221621,13.630835899,13.6309496268,13.6310633457, +13.6311770557,13.6312907567,13.6314044487,13.6315181318,13.6316318059,13.6317454711,13.6318591273,13.6319727745,13.6320864128,13.6322000422,13.6323136626,13.632427274,13.6325408765,13.6326544701,13.6327680547,13.6328816304, +13.6329951971,13.6331087549,13.6332223038,13.6333358437,13.6334493747,13.6335628968,13.6336764099,13.6337899141,13.6339034093,13.6340168957,13.6341303731,13.6342438416,13.6343573011,13.6344707518,13.6345841935,13.6346976263, +13.6348110502,13.6349244651,13.6350378712,13.6351512683,13.6352646565,13.6353780359,13.6354914063,13.6356047677,13.6357181203,13.635831464,13.6359447988,13.6360581247,13.6361714416,13.6362847497,13.6363980489,13.6365113392, +13.6366246205,13.636737893,13.6368511566,13.6369644113,13.6370776571,13.6371908941,13.6373041221,13.6374173413,13.6375305515,13.6376437529,13.6377569454,13.637870129,13.6379833038,13.6380964696,13.6382096266,13.6383227747, +13.638435914,13.6385490444,13.6386621659,13.6387752785,13.6388883823,13.6390014771,13.6391145632,13.6392276403,13.6393407087,13.6394537681,13.6395668187,13.6396798604,13.6397928933,13.6399059173,13.6400189325,13.6401319388, +13.6402449362,13.6403579248,13.6404709046,13.6405838755,13.6406968376,13.6408097908,13.6409227352,13.6410356707,13.6411485974,13.6412615153,13.6413744243,13.6414873245,13.6416002158,13.6417130984,13.641825972,13.6419388369, +13.6420516929,13.6421645401,13.6422773785,13.6423902081,13.6425030288,13.6426158407,13.6427286438,13.642841438,13.6429542235,13.6430670001,13.6431797679,13.6432925269,13.6434052771,13.6435180185,13.6436307511,13.6437434748, +13.6438561898,13.6439688959,13.6440815933,13.6441942818,13.6443069615,13.6444196325,13.6445322946,13.644644948,13.6447575925,13.6448702283,13.6449828552,13.6450954734,13.6452080828,13.6453206834,13.6454332752,13.6455458582, +13.6456584324,13.6457709979,13.6458835545,13.6459961024,13.6461086415,13.6462211718,13.6463336934,13.6464462062,13.6465587102,13.6466712054,13.6467836918,13.6468961695,13.6470086384,13.6471210986,13.64723355,13.6473459926, +13.6474584265,13.6475708516,13.6476832679,13.6477956755,13.6479080743,13.6480204643,13.6481328457,13.6482452182,13.648357582,13.6484699371,13.6485822834,13.6486946209,13.6488069497,13.6489192698,13.6490315811,13.6491438837, +13.6492561775,13.6493684626,13.649480739,13.6495930066,13.6497052655,13.6498175156,13.649929757,13.6500419897,13.6501542137,13.6502664289,13.6503786354,13.6504908332,13.6506030222,13.6507152025,13.6508273741,13.650939537, +13.6510516912,13.6511638366,13.6512759733,13.6513881014,13.6515002207,13.6516123312,13.6517244331,13.6518365263,13.6519486107,13.6520606865,13.6521727535,13.6522848118,13.6523968615,13.6525089024,13.6526209346,13.6527329582, +13.652844973,13.6529569791,13.6530689766,13.6531809653,13.6532929454,13.6534049167,13.6535168794,13.6536288334,13.6537407787,13.6538527153,13.6539646432,13.6540765625,13.6541884731,13.6543003749,13.6544122681,13.6545241527, +13.6546360285,13.6547478957,13.6548597542,13.654971604,13.6550834452,13.6551952777,13.6553071015,13.6554189167,13.6555307232,13.655642521,13.6557543101,13.6558660906,13.6559778625,13.6560896257,13.6562013802,13.6563131261, +13.6564248633,13.6565365918,13.6566483117,13.656760023,13.6568717256,13.6569834196,13.6570951049,13.6572067816,13.6573184496,13.657430109,13.6575417597,13.6576534018,13.6577650353,13.6578766601,13.6579882763,13.6580998838, +13.6582114828,13.658323073,13.6584346547,13.6585462277,13.6586577921,13.6587693479,13.658880895,13.6589924336,13.6591039635,13.6592154848,13.6593269974,13.6594385015,13.6595499969,13.6596614837,13.6597729619,13.6598844315, +13.6599958924,13.6601073448,13.6602187885,13.6603302237,13.6604416502,13.6605530681,13.6606644775,13.6607758782,13.6608872703,13.6609986538,13.6611100287,13.6612213951,13.6613327528,13.6614441019,13.6615554425,13.6616667744, +13.6617780978,13.6618894125,13.6620007187,13.6621120163,13.6622233053,13.6623345857,13.6624458576,13.6625571208,13.6626683755,13.6627796216,13.6628908591,13.6630020881,13.6631133085,13.6632245203,13.6633357235,13.6634469181, +13.6635581042,13.6636692817,13.6637804507,13.6638916111,13.6640027629,13.6641139061,13.6642250408,13.664336167,13.6644472845,13.6645583936,13.664669494,13.6647805859,13.6648916693,13.6650027441,13.6651138103,13.665224868, +13.6653359172,13.6654469578,13.6655579898,13.6656690134,13.6657800283,13.6658910348,13.6660020326,13.666113022,13.6662240028,13.6663349751,13.6664459388,13.666556894,13.6666678407,13.6667787788,13.6668897084,13.6670006295, +13.6671115421,13.6672224461,13.6673333416,13.6674442286,13.667555107,13.667665977,13.6677768384,13.6678876913,13.6679985357,13.6681093715,13.6682201989,13.6683310177,13.6684418281,13.6685526299,13.6686634232,13.668774208, +13.6688849843,13.6689957521,13.6691065113,13.6692172621,13.6693280044,13.6694387382,13.6695494635,13.6696601802,13.6697708885,13.6698815883,13.6699922796,13.6701029624,13.6702136367,13.6703243026,13.6704349599,13.6705456088, +13.6706562491,13.670766881,13.6708775044,13.6709881193,13.6710987257,13.6712093237,13.6713199132,13.6714304942,13.6715410667,13.6716516308,13.6717621863,13.6718727335,13.6719832721,13.6720938023,13.672204324,13.6723148372, +13.672425342,13.6725358383,13.6726463261,13.6727568055,13.6728672764,13.6729777389,13.6730881929,13.6731986385,13.6733090756,13.6734195042,13.6735299244,13.6736403361,13.6737507394,13.6738611343,13.6739715207,13.6740818986, +13.6741922681,13.6743026292,13.6744129818,13.674523326,13.6746336618,13.6747439891,13.6748543079,13.6749646184,13.6750749204,13.675185214,13.6752954991,13.6754057758,13.6755160441,13.6756263039,13.6757365554,13.6758467984, +13.6759570329,13.6760672591,13.6761774768,13.6762876861,13.676397887,13.6765080795,13.6766182636,13.6767284392,13.6768386065,13.6769487653,13.6770589157,13.6771690577,13.6772791913,13.6773893165,13.6774994333,13.6776095417, +13.6777196416,13.6778297332,13.6779398164,13.6780498912,13.6781599575,13.6782700155,13.6783800651,13.6784901063,13.6786001391,13.6787101635,13.6788201795,13.6789301872,13.6790401864,13.6791501772,13.6792601597,13.6793701338, +13.6794800995,13.6795900568,13.6797000058,13.6798099463,13.6799198785,13.6800298023,13.6801397178,13.6802496248,13.6803595235,13.6804694138,13.6805792958,13.6806891694,13.6807990346,13.6809088914,13.6810187399,13.68112858, +13.6812384118,13.6813482352,13.6814580502,13.6815678569,13.6816776552,13.6817874452,13.6818972268,13.682007,13.682116765,13.6822265215,13.6823362697,13.6824460096,13.6825557411,13.6826654642,13.6827751791,13.6828848855, +13.6829945837,13.6831042735,13.6832139549,13.6833236281,13.6834332928,13.6835429493,13.6836525974,13.6837622372,13.6838718686,13.6839814917,13.6840911065,13.684200713,13.6843103111,13.6844199009,13.6845294824,13.6846390556, +13.6847486204,13.6848581769,13.6849677251,13.685077265,13.6851867966,13.6852963198,13.6854058348,13.6855153414,13.6856248397,13.6857343297,13.6858438114,13.6859532848,13.6860627499,13.6861722067,13.6862816551,13.6863910953, +13.6865005272,13.6866099508,13.686719366,13.686828773,13.6869381717,13.6870475621,13.6871569441,13.6872663179,13.6873756834,13.6874850407,13.6875943896,13.6877037302,13.6878130626,13.6879223866,13.6880317024,13.6881410099, +13.6882503091,13.6883596001,13.6884688827,13.6885781571,13.6886874232,13.6887966811,13.6889059306,13.6890151719,13.6891244049,13.6892336297,13.6893428461,13.6894520543,13.6895612543,13.689670446,13.6897796294,13.6898888045, +13.6899979714,13.6901071301,13.6902162804,13.6903254225,13.6904345564,13.690543682,13.6906527993,13.6907619084,13.6908710093,13.6909801019,13.6910891862,13.6911982623,13.6913073302,13.6914163898,13.6915254412,13.6916344843, +13.6917435192,13.6918525458,13.6919615642,13.6920705744,13.6921795763,13.69228857,13.6923975555,13.6925065327,13.6926155017,13.6927244625,13.692833415,13.6929423593,13.6930512954,13.6931602233,13.6932691429,13.6933780543, +13.6934869575,13.6935958525,13.6937047392,13.6938136178,13.6939224881,13.6940313502,13.6941402041,13.6942490498,13.6943578872,13.6944667165,13.6945755375,13.6946843504,13.694793155,13.6949019514,13.6950107397,13.6951195197, +13.6952282915,13.6953370551,13.6954458105,13.6955545578,13.6956632968,13.6957720276,13.6958807503,13.6959894647,13.696098171,13.696206869,13.6963155589,13.6964242406,13.6965329141,13.6966415794,13.6967502365,13.6968588855, +13.6969675262,13.6970761588,13.6971847832,13.6972933995,13.6974020075,13.6975106074,13.6976191991,13.6977277826,13.697836358,13.6979449251,13.6980534842,13.698162035,13.6982705777,13.6983791122,13.6984876386,13.6985961567, +13.6987046668,13.6988131686,13.6989216623,13.6990301479,13.6991386253,13.6992470945,13.6993555556,13.6994640085,13.6995724533,13.6996808899,13.6997893184,13.6998977387,13.7000061509,13.7001145549,13.7002229508,13.7003313385, +13.7004397181,13.7005480896,13.7006564529,13.7007648081,13.7008731551,13.700981494,13.7010898248,13.7011981475,13.701306462,13.7014147683,13.7015230666,13.7016313567,13.7017396387,13.7018479125,13.7019561783,13.7020644359, +13.7021726854,13.7022809267,13.70238916,13.7024973851,13.7026056021,13.702713811,13.7028220118,13.7029302044,13.703038389,13.7031465654,13.7032547337,13.703362894,13.7034710461,13.7035791901,13.703687326,13.7037954538, +13.7039035734,13.704011685,13.7041197885,13.7042278839,13.7043359712,13.7044440504,13.7045521215,13.7046601845,13.7047682394,13.7048762862,13.7049843249,13.7050923555,13.7052003781,13.7053083925,13.7054163989,13.7055243972, +13.7056323874,13.7057403695,13.7058483435,13.7059563095,13.7060642673,13.7061722171,13.7062801588,13.7063880925,13.7064960181,13.7066039356,13.706711845,13.7068197463,13.7069276396,13.7070355248,13.707143402,13.7072512711, +13.7073591321,13.707466985,13.7075748299,13.7076826668,13.7077904955,13.7078983162,13.7080061289,13.7081139335,13.70822173,13.7083295185,13.708437299,13.7085450714,13.7086528357,13.708760592,13.7088683402,13.7089760804, +13.7090838126,13.7091915367,13.7092992527,13.7094069607,13.7095146607,13.7096223526,13.7097300365,13.7098377124,13.7099453802,13.71005304,13.7101606918,13.7102683355,13.7103759712,13.7104835989,13.7105912185,13.7106988301, +13.7108064337,13.7109140293,13.7110216168,13.7111291963,13.7112367678,13.7113443313,13.7114518867,13.7115594341,13.7116669736,13.711774505,13.7118820284,13.7119895437,13.7120970511,13.7122045504,13.7123120418,13.7124195251, +13.7125270004,13.7126344678,13.7127419271,13.7128493784,13.7129568217,13.713064257,13.7131716843,13.7132791036,13.7133865149,13.7134939183,13.7136013136,13.7137087009,13.7138160802,13.7139234516,13.7140308149,13.7141381703, +13.7142455177,13.7143528571,13.7144601885,13.7145675119,13.7146748273,13.7147821348,13.7148894342,13.7149967257,13.7151040092,13.7152112848,13.7153185523,13.7154258119,13.7155330635,13.7156403072,13.7157475428,13.7158547705, +13.7159619903,13.716069202,13.7161764058,13.7162836016,13.7163907895,13.7164979694,13.7166051413,13.7167123053,13.7168194613,13.7169266094,13.7170337495,13.7171408816,13.7172480058,13.7173551221,13.7174622303,13.7175693307, +13.7176764231,13.7177835075,13.717890584,13.7179976525,13.7181047131,13.7182117658,13.7183188105,13.7184258472,13.7185328761,13.718639897,13.7187469099,13.7188539149,13.718960912,13.7190679011,13.7191748823,13.7192818556, +13.7193888209,13.7194957784,13.7196027278,13.7197096694,13.719816603,13.7199235287,13.7200304465,13.7201373564,13.7202442583,13.7203511523,13.7204580384,13.7205649166,13.7206717868,13.7207786492,13.7208855036,13.7209923501, +13.7210991887,13.7212060194,13.7213128422,13.721419657,13.721526464,13.7216332631,13.7217400542,13.7218468375,13.7219536128,13.7220603802,13.7221671398,13.7222738914,13.7223806352,13.722487371,13.722594099,13.722700819, +13.7228075312,13.7229142354,13.7230209318,13.7231276203,13.7232343009,13.7233409736,13.7234476384,13.7235542954,13.7236609444,13.7237675856,13.7238742189,13.7239808443,13.7240874618,13.7241940714,13.7243006732,13.7244072671, +13.7245138531,13.7246204313,13.7247270015,13.7248335639,13.7249401185,13.7250466651,13.7251532039,13.7252597348,13.7253662579,13.7254727731,13.7255792804,13.7256857799,13.7257922715,13.7258987552,13.7260052311,13.7261116992, +13.7262181593,13.7263246117,13.7264310561,13.7265374927,13.7266439215,13.7267503424,13.7268567555,13.7269631607,13.727069558,13.7271759475,13.7272823292,13.727388703,13.727495069,13.7276014272,13.7277077775,13.7278141199, +13.7279204546,13.7280267814,13.7281331003,13.7282394114,13.7283457147,13.7284520102,13.7285582978,13.7286645776,13.7287708495,13.7288771137,13.72898337,13.7290896185,13.7291958591,13.729302092,13.729408317,13.7295145342, +13.7296207436,13.7297269451,13.7298331388,13.7299393248,13.7300455029,13.7301516732,13.7302578357,13.7303639903,13.7304701372,13.7305762762,13.7306824075,13.7307885309,13.7308946465,13.7310007544,13.7311068544,13.7312129466, +13.731319031,13.7314251076,13.7315311765,13.7316372375,13.7317432907,13.7318493361,13.7319553738,13.7320614036,13.7321674257,13.7322734399,13.7323794464,13.7324854451,13.732591436,13.7326974191,13.7328033944,13.7329093619, +13.7330153217,13.7331212737,13.7332272179,13.7333331543,13.7334390829,13.7335450038,13.7336509168,13.7337568221,13.7338627197,13.7339686094,13.7340744914,13.7341803656,13.7342862321,13.7343920908,13.7344979417,13.7346037848, +13.7347096202,13.7348154478,13.7349212677,13.7350270798,13.7351328841,13.7352386807,13.7353444695,13.7354502506,13.7355560239,13.7356617895,13.7357675473,13.7358732973,13.7359790396,13.7360847742,13.736190501,13.73629622, +13.7364019313,13.7365076349,13.7366133307,13.7367190188,13.7368246991,13.7369303717,13.7370360365,13.7371416937,13.737247343,13.7373529847,13.7374586186,13.7375642447,13.7376698632,13.7377754739,13.7378810769,13.7379866721, +13.7380922596,13.7381978394,13.7383034115,13.7384089758,13.7385145324,13.7386200813,13.7387256225,13.7388311559,13.7389366817,13.7390421997,13.73914771,13.7392532126,13.7393587074,13.7394641946,13.739569674,13.7396751458, +13.7397806098,13.7398860661,13.7399915147,13.7400969556,13.7402023888,13.7403078143,13.740413232,13.7405186421,13.7406240445,13.7407294392,13.7408348261,13.7409402054,13.741045577,13.7411509409,13.7412562971,13.7413616456, +13.7414669864,13.7415723195,13.7416776449,13.7417829627,13.7418882727,13.7419935751,13.7420988698,13.7422041568,13.7423094361,13.7424147077,13.7425199717,13.7426252279,13.7427304765,13.7428357174,13.7429409507,13.7430461762, +13.7431513941,13.7432566043,13.7433618069,13.7434670017,13.7435721889,13.7436773685,13.7437825403,13.7438877045,13.7439928611,13.7440980099,13.7442031511,13.7443082847,13.7444134106,13.7445185288,13.7446236393,13.7447287422, +13.7448338375,13.7449389251,13.745044005,13.7451490773,13.745254142,13.7453591989,13.7454642483,13.74556929,13.745674324,13.7457793504,13.7458843691,13.7459893802,13.7460943837,13.7461993795,13.7463043677,13.7464093482, +13.7465143211,13.7466192864,13.746724244,13.746829194,13.7469341364,13.7470390711,13.7471439982,13.7472489176,13.7473538295,13.7474587337,13.7475636303,13.7476685192,13.7477734005,13.7478782742,13.7479831403,13.7480879988, +13.7481928496,13.7482976928,13.7484025284,13.7485073564,13.7486121767,13.7487169895,13.7488217946,13.7489265921,13.749031382,13.7491361643,13.749240939,13.7493457061,13.7494504656,13.7495552174,13.7496599617,13.7497646983, +13.7498694274,13.7499741488,13.7500788627,13.7501835689,13.7502882676,13.7503929586,13.7504976421,13.750602318,13.7507069862,13.7508116469,13.7509163,13.7510209455,13.7511255834,13.7512302137,13.7513348364,13.7514394515, +13.7515440591,13.7516486591,13.7517532514,13.7518578362,13.7519624135,13.7520669831,13.7521715452,13.7522760996,13.7523806466,13.7524851859,13.7525897176,13.7526942418,13.7527987584,13.7529032675,13.7530077689,13.7531122628, +13.7532167492,13.7533212279,13.7534256991,13.7535301628,13.7536346189,13.7537390674,13.7538435083,13.7539479417,13.7540523675,13.7541567858,13.7542611965,13.7543655997,13.7544699953,13.7545743833,13.7546787638,13.7547831368, +13.7548875022,13.75499186,13.7550962103,13.7552005531,13.7553048883,13.7554092159,13.755513536,13.7556178486,13.7557221536,13.7558264511,13.7559307411,13.7560350235,13.7561392984,13.7562435657,13.7563478255,13.7564520778, +13.7565563225,13.7566605597,13.7567647894,13.7568690115,13.7569732262,13.7570774333,13.7571816328,13.7572858249,13.7573900094,13.7574941864,13.7575983558,13.7577025178,13.7578066722,13.7579108191,13.7580149585,13.7581190904, +13.7582232147,13.7583273316,13.7584314409,13.7585355427,13.758639637,13.7587437238,13.7588478031,13.7589518749,13.7590559392,13.7591599959,13.7592640452,13.7593680869,13.7594721212,13.759576148,13.7596801672,13.759784179, +13.7598881832,13.75999218,13.7600961692,13.760200151,13.7603041253,13.7604080921,13.7605120514,13.7606160032,13.7607199475,13.7608238843,13.7609278136,13.7610317355,13.7611356498,13.7612395567,13.7613434561,13.761447348, +13.7615512324,13.7616551094,13.7617589789,13.7618628409,13.7619666954,13.7620705424,13.762174382,13.7622782141,13.7623820387,13.7624858559,13.7625896655,13.7626934678,13.7627972625,13.7629010498,13.7630048296,13.7631086019, +13.7632123668,13.7633161242,13.7634198742,13.7635236167,13.7636273517,13.7637310793,13.7638347994,13.7639385121,13.7640422173,13.7641459151,13.7642496054,13.7643532882,13.7644569636,13.7645606316,13.7646642921,13.7647679451, +13.7648715907,13.7649752289,13.7650788596,13.7651824829,13.7652860987,13.7653897071,13.7654933081,13.7655969016,13.7657004877,13.7658040663,13.7659076375,13.7660112013,13.7661147576,13.7662183065,13.766321848,13.766425382, +13.7665289086,13.7666324278,13.7667359395,13.7668394439,13.7669429408,13.7670464302,13.7671499123,13.7672533869,13.7673568541,13.7674603139,13.7675637663,13.7676672112,13.7677706488,13.7678740789,13.7679775016,13.7680809169, +13.7681843248,13.7682877252,13.7683911183,13.768494504,13.7685978822,13.768701253,13.7688046165,13.7689079725,13.7690113211,13.7691146623,13.7692179961,13.7693213225,13.7694246416,13.7695279532,13.7696312574,13.7697345542, +13.7698378436,13.7699411257,13.7700444003,13.7701476675,13.7702509274,13.7703541799,13.7704574249,13.7705606626,13.7706638929,13.7707671158,13.7708703314,13.7709735395,13.7710767403,13.7711799336,13.7712831196,13.7713862983, +13.7714894695,13.7715926334,13.7716957899,13.771798939,13.7719020807,13.7720052151,13.7721083421,13.7722114617,13.7723145739,13.7724176788,13.7725207763,13.7726238665,13.7727269492,13.7728300247,13.7729330927,13.7730361534, +13.7731392067,13.7732422527,13.7733452913,13.7734483225,13.7735513464,13.773654363,13.7737573721,13.773860374,13.7739633684,13.7740663556,13.7741693353,13.7742723077,13.7743752728,13.7744782305,13.7745811809,13.7746841239, +13.7747870596,13.7748899879,13.7749929089,13.7750958226,13.7751987289,13.7753016279,13.7754045195,13.7755074038,13.7756102808,13.7757131504,13.7758160127,13.7759188676,13.7760217153,13.7761245555,13.7762273885,13.7763302141, +13.7764330324,13.7765358434,13.7766386471,13.7767414434,13.7768442324,13.7769470141,13.7770497884,13.7771525555,13.7772553152,13.7773580676,13.7774608127,13.7775635504,13.7776662809,13.777769004,13.7778717198,13.7779744283, +13.7780771295,13.7781798234,13.77828251,13.7783851893,13.7784878612,13.7785905259,13.7786931832,13.7787958333,13.778898476,13.7790011114,13.7791037396,13.7792063604,13.779308974,13.7794115802,13.7795141791,13.7796167708, +13.7797193551,13.7798219322,13.779924502,13.7800270644,13.7801296196,13.7802321675,13.7803347081,13.7804372414,13.7805397675,13.7806422862,13.7807447977,13.7808473019,13.7809497987,13.7810522884,13.7811547707,13.7812572457, +13.7813597135,13.781462174,13.7815646272,13.7816670732,13.7817695119,13.7818719433,13.7819743674,13.7820767842,13.7821791938,13.7822815961,13.7823839912,13.782486379,13.7825887595,13.7826911327,13.7827934987,13.7828958575, +13.7829982089,13.7831005531,13.7832028901,13.7833052197,13.7834075422,13.7835098573,13.7836121653,13.7837144659,13.7838167593,13.7839190455,13.7840213244,13.784123596,13.7842258604,13.7843281176,13.7844303675,13.7845326101, +13.7846348456,13.7847370737,13.7848392947,13.7849415083,13.7850437148,13.785145914,13.7852481059,13.7853502907,13.7854524682,13.7855546384,13.7856568014,13.7857589572,13.7858611058,13.7859632471,13.7860653812,13.786167508, +13.7862696276,13.78637174,13.7864738452,13.7865759432,13.7866780339,13.7867801174,13.7868821937,13.7869842627,13.7870863246,13.7871883792,13.7872904266,13.7873924667,13.7874944997,13.7875965254,13.787698544,13.7878005553, +13.7879025594,13.7880045563,13.788106546,13.7882085284,13.7883105037,13.7884124718,13.7885144326,13.7886163863,13.7887183327,13.7888202719,13.788922204,13.7890241288,13.7891260464,13.7892279569,13.7893298601,13.7894317561, +13.789533645,13.7896355266,13.7897374011,13.7898392683,13.7899411284,13.7900429813,13.7901448269,13.7902466654,13.7903484968,13.7904503209,13.7905521378,13.7906539476,13.7907557501,13.7908575455,13.7909593337,13.7910611147, +13.7911628886,13.7912646552,13.7913664147,13.791468167,13.7915699121,13.7916716501,13.7917733809,13.7918751045,13.7919768209,13.7920785302,13.7921802323,13.7922819272,13.7923836149,13.7924852955,13.7925869689,13.7926886352, +13.7927902943,13.7928919462,13.792993591,13.7930952286,13.7931968591,13.7932984824,13.7934000985,13.7935017075,13.7936033093,13.7937049039,13.7938064915,13.7939080718,13.794009645,13.7941112111,13.79421277,13.7943143217, +13.7944158664,13.7945174038,13.7946189341,13.7947204573,13.7948219733,13.7949234822,13.795024984,13.7951264786,13.795227966,13.7953294464,13.7954309195,13.7955323856,13.7956338445,13.7957352963,13.7958367409,13.7959381784, +13.7960396088,13.7961410321,13.7962424482,13.7963438572,13.7964452591,13.7965466538,13.7966480414,13.7967494219,13.7968507953,13.7969521615,13.7970535206,13.7971548726,13.7972562175,13.7973575553,13.7974588859,13.7975602094, +13.7976615259,13.7977628352,13.7978641373,13.7979654324,13.7980667204,13.7981680012,13.7982692749,13.7983705416,13.7984718011,13.7985730535,13.7986742988,13.798775537,13.7988767681,13.7989779921,13.799079209,13.7991804188, +13.7992816215,13.7993828171,13.7994840056,13.799585187,13.7996863613,13.7997875285,13.7998886887,13.7999898417,13.8000909876,13.8001921265,13.8002932582,13.8003943829,13.8004955005,13.800596611,13.8006977144,13.8007988107, +13.8008998999,13.8010009821,13.8011020571,13.8012031251,13.801304186,13.8014052399,13.8015062866,13.8016073263,13.8017083589,13.8018093844,13.8019104029,13.8020114143,13.8021124186,13.8022134158,13.802314406,13.8024153891, +13.8025163651,13.8026173341,13.802718296,13.8028192508,13.8029201986,13.8030211393,13.8031220729,13.8032229995,13.803323919,13.8034248315,13.8035257369,13.8036266353,13.8037275266,13.8038284108,13.803929288,13.8040301581, +13.8041310212,13.8042318772,13.8043327262,13.8044335681,13.804534403,13.8046352308,13.8047360516,13.8048368654,13.8049376721,13.8050384717,13.8051392643,13.8052400499,13.8053408284,13.8054415999,13.8055423644,13.8056431218, +13.8057438722,13.8058446155,13.8059453518,13.8060460811,13.8061468033,13.8062475185,13.8063482267,13.8064489279,13.806549622,13.8066503091,13.8067509891,13.8068516622,13.8069523282,13.8070529872,13.8071536392,13.8072542841, +13.8073549221,13.807455553,13.8075561769,13.8076567937,13.8077574036,13.8078580064,13.8079586023,13.8080591911,13.8081597729,13.8082603477,13.8083609154,13.8084614762,13.80856203,13.8086625767,13.8087631165,13.8088636492, +13.8089641749,13.8090646936,13.8091652054,13.8092657101,13.8093662078,13.8094666985,13.8095671823,13.809667659,13.8097681287,13.8098685914,13.8099690472,13.8100694959,13.8101699377,13.8102703724,13.8103708002,13.810471221, +13.8105716347,13.8106720415,13.8107724413,13.8108728342,13.81097322,13.8110735989,13.8111739707,13.8112743356,13.8113746935,13.8114750444,13.8115753884,13.8116757253,13.8117760553,13.8118763783,13.8119766944,13.8120770034, +13.8121773055,13.8122776006,13.8123778888,13.8124781699,13.8125784441,13.8126787114,13.8127789716,13.8128792249,13.8129794713,13.8130797106,13.813179943,13.8132801685,13.8133803869,13.8134805984,13.813580803,13.8136810006, +13.8137811912,13.8138813749,13.8139815516,13.8140817214,13.8141818842,13.81428204,13.814382189,13.8144823309,13.8145824659,13.814682594,13.8147827151,13.8148828292,13.8149829364,13.8150830367,13.81518313,13.8152832164, +13.8153832958,13.8154833683,13.8155834339,13.8156834925,13.8157835441,13.8158835889,13.8159836267,13.8160836575,13.8161836814,13.8162836984,13.8163837085,13.8164837116,13.8165837078,13.816683697,13.8167836794,13.8168836548, +13.8169836233,13.8170835848,13.8171835394,13.8172834871,13.8173834279,13.8174833617,13.8175832887,13.8176832087,13.8177831218,13.8178830279,13.8179829272,13.8180828195,13.8181827049,13.8182825835,13.818382455,13.8184823197, +13.8185821775,13.8186820283,13.8187818723,13.8188817093,13.8189815394,13.8190813626,13.819181179,13.8192809884,13.8193807909,13.8194805865,13.8195803752,13.8196801569,13.8197799318,13.8198796998,13.8199794609,13.8200792151, +13.8201789624,13.8202787028,13.8203784363,13.8204781629,13.8205778827,13.8206775955,13.8207773014,13.8208770005,13.8209766926,13.8210763779,13.8211760563,13.8212757278,13.8213753924,13.8214750501,13.8215747009,13.8216743449, +13.821773982,13.8218736122,13.8219732355,13.8220728519,13.8221724615,13.8222720642,13.82237166,13.8224712489,13.822570831,13.8226704061,13.8227699744,13.8228695359,13.8229690905,13.8230686382,13.823168179,13.8232677129, +13.82336724,13.8234667603,13.8235662736,13.8236657801,13.8237652798,13.8238647726,13.8239642585,13.8240637375,13.8241632097,13.8242626751,13.8243621336,13.8244615852,13.82456103,13.8246604679,13.824759899,13.8248593232, +13.8249587405,13.825058151,13.8251575547,13.8252569515,13.8253563415,13.8254557246,13.8255551009,13.8256544703,13.8257538329,13.8258531886,13.8259525375,13.8260518796,13.8261512148,13.8262505432,13.8263498647,13.8264491794, +13.8265484873,13.8266477883,13.8267470825,13.8268463699,13.8269456504,13.8270449241,13.827144191,13.827243451,13.8273427042,13.8274419506,13.8275411902,13.8276404229,13.8277396488,13.8278388679,13.8279380801,13.8280372856, +13.8281364842,13.828235676,13.828334861,13.8284340391,13.8285332105,13.828632375,13.8287315327,13.8288306836,13.8289298277,13.8290289649,13.8291280954,13.829227219,13.8293263358,13.8294254459,13.8295245491,13.8296236455, +13.8297227351,13.8298218179,13.8299208939,13.8300199631,13.8301190254,13.830218081,13.8303171298,13.8304161718,13.830515207,13.8306142354,13.830713257,13.8308122717,13.8309112797,13.8310102809,13.8311092754,13.831208263, +13.8313072438,13.8314062178,13.8315051851,13.8316041455,13.8317030992,13.8318020461,13.8319009862,13.8319999195,13.832098846,13.8321977658,13.8322966787,13.8323955849,13.8324944843,13.832593377,13.8326922628,13.8327911419, +13.8328900142,13.8329888797,13.8330877384,13.8331865904,13.8332854356,13.833384274,13.8334831057,13.8335819305,13.8336807487,13.83377956,13.8338783646,13.8339771624,13.8340759534,13.8341747377,13.8342735152,13.834372286, +13.83447105,13.8345698072,13.8346685577,13.8347673014,13.8348660384,13.8349647686,13.835063492,13.8351622087,13.8352609186,13.8353596218,13.8354583182,13.8355570079,13.8356556908,13.835754367,13.8358530364,13.8359516991, +13.8360503551,13.8361490042,13.8362476467,13.8363462824,13.8364449113,13.8365435336,13.836642149,13.8367407578,13.8368393597,13.836937955,13.8370365435,13.8371351253,13.8372337003,13.8373322686,13.8374308302,13.8375293851, +13.8376279332,13.8377264745,13.8378250092,13.8379235371,13.8380220583,13.8381205728,13.8382190805,13.8383175815,13.8384160758,13.8385145634,13.8386130442,13.8387115183,13.8388099857,13.8389084464,13.8390069003,13.8391053476, +13.8392037881,13.8393022219,13.839400649,13.8394990694,13.839597483,13.83969589,13.8397942902,13.8398926837,13.8399910705,13.8400894506,13.840187824,13.8402861907,13.8403845507,13.840482904,13.8405812506,13.8406795904, +13.8407779236,13.8408762501,13.8409745698,13.8410728829,13.8411711892,13.8412694889,13.8413677819,13.8414660682,13.8415643477,13.8416626206,13.8417608868,13.8418591463,13.8419573991,13.8420556452,13.8421538846,13.8422521174, +13.8423503434,13.8424485628,13.8425467754,13.8426449814,13.8427431807,13.8428413733,13.8429395593,13.8430377385,13.8431359111,13.843234077,13.8433322362,13.8434303888,13.8435285346,13.8436266738,13.8437248063,13.8438229321, +13.8439210513,13.8440191638,13.8441172696,13.8442153687,13.8443134612,13.844411547,13.8445096261,13.8446076986,13.8447057644,13.8448038235,13.844901876,13.8449999218,13.845097961,13.8451959935,13.8452940193,13.8453920384, +13.8454900509,13.8455880568,13.845686056,13.8457840485,13.8458820344,13.8459800136,13.8460779862,13.8461759521,13.8462739113,13.846371864,13.8464698099,13.8465677492,13.8466656819,13.8467636079,13.8468615273,13.84695944, +13.8470573461,13.8471552455,13.8472531383,13.8473510245,13.847448904,13.8475467769,13.8476446431,13.8477425027,13.8478403556,13.8479382019,13.8480360416,13.8481338747,13.8482317011,13.8483295209,13.848427334,13.8485251405, +13.8486229404,13.8487207337,13.8488185203,13.8489163003,13.8490140737,13.8491118404,13.8492096006,13.8493073541,13.8494051009,13.8495028412,13.8496005748,13.8496983019,13.8497960222,13.849893736,13.8499914432,13.8500891437, +13.8501868376,13.850284525,13.8503822057,13.8504798797,13.8505775472,13.8506752081,13.8507728623,13.85087051,13.850968151,13.8510657854,13.8511634132,13.8512610344,13.851358649,13.851456257,13.8515538584,13.8516514532, +13.8517490414,13.851846623,13.851944198,13.8520417664,13.8521393282,13.8522368834,13.852334432,13.852431974,13.8525295094,13.8526270382,13.8527245604,13.8528220761,13.8529195851,13.8530170876,13.8531145834,13.8532120727, +13.8533095554,13.8534070315,13.853504501,13.853601964,13.8536994203,13.8537968701,13.8538943132,13.8539917498,13.8540891799,13.8541866033,13.8542840202,13.8543814305,13.8544788342,13.8545762313,13.8546736219,13.8547710058, +13.8548683833,13.8549657541,13.8550631184,13.8551604761,13.8552578272,13.8553551718,13.8554525097,13.8555498412,13.855647166,13.8557444843,13.855841796,13.8559391012,13.8560363998,13.8561336919,13.8562309773,13.8563282563, +13.8564255286,13.8565227944,13.8566200537,13.8567173064,13.8568145525,13.8569117921,13.8570090251,13.8571062516,13.8572034715,13.8573006849,13.8573978917,13.857495092,13.8575922857,13.8576894729,13.8577866535,13.8578838276, +13.8579809951,13.8580781561,13.8581753106,13.8582724585,13.8583695999,13.8584667347,13.858563863,13.8586609847,13.8587580999,13.8588552086,13.8589523108,13.8590494064,13.8591464954,13.859243578,13.859340654,13.8594377234, +13.8595347864,13.8596318428,13.8597288927,13.859825936,13.8599229729,13.8600200032,13.8601170269,13.8602140442,13.8603110549,13.8604080591,13.8605050568,13.860602048,13.8606990326,13.8607960107,13.8608929823,13.8609899474, +13.861086906,13.861183858,13.8612808036,13.8613777426,13.8614746751,13.8615716011,13.8616685206,13.8617654336,13.8618623401,13.86195924,13.8620561335,13.8621530204,13.8622499009,13.8623467748,13.8624436422,13.8625405031, +13.8626373576,13.8627342055,13.8628310469,13.8629278818,13.8630247102,13.8631215322,13.8632183476,13.8633151565,13.8634119589,13.8635087549,13.8636055443,13.8637023273,13.8637991037,13.8638958737,13.8639926372,13.8640893942, +13.8641861447,13.8642828887,13.8643796262,13.8644763572,13.8645730818,13.8646697998,13.8647665114,13.8648632165,13.8649599151,13.8650566073,13.8651532929,13.8652499721,13.8653466448,13.865443311,13.8655399708,13.8656366241, +13.8657332709,13.8658299112,13.865926545,13.8660231724,13.8661197933,13.8662164077,13.8663130157,13.8664096172,13.8665062122,13.8666028008,13.8666993829,13.8667959585,13.8668925277,13.8669890904,13.8670856466,13.8671821964, +13.8672787397,13.8673752766,13.867471807,13.8675683309,13.8676648484,13.8677613594,13.867857864,13.8679543621,13.8680508537,13.868147339,13.8682438177,13.86834029,13.8684367559,13.8685332153,13.8686296682,13.8687261147, +13.8688225548,13.8689189884,13.8690154156,13.8691118363,13.8692082506,13.8693046584,13.8694010598,13.8694974547,13.8695938432,13.8696902253,13.8697866009,13.8698829701,13.8699793329,13.8700756892,13.8701720391,13.8702683826, +13.8703647196,13.8704610502,13.8705573743,13.8706536921,13.8707500033,13.8708463082,13.8709426066,13.8710388987,13.8711351842,13.8712314634,13.8713277361,13.8714240024,13.8715202623,13.8716165158,13.8717127628,13.8718090035, +13.8719052377,13.8720014654,13.8720976868,13.8721939018,13.8722901103,13.8723863124,13.8724825081,13.8725786974,13.8726748803,13.8727710567,13.8728672268,13.8729633904,13.8730595477,13.8731556985,13.8732518429,13.8733479809, +13.8734441125,13.8735402377,13.8736363565,13.8737324689,13.8738285749,13.8739246745,13.8740207677,13.8741168544,13.8742129348,13.8743090088,13.8744050764,13.8745011376,13.8745971924,13.8746932408,13.8747892828,13.8748853184, +13.8749813477,13.8750773705,13.8751733869,13.875269397,13.8753654006,13.8754613979,13.8755573888,13.8756533733,13.8757493514,13.8758453232,13.8759412885,13.8760372475,13.8761332,13.8762291462,13.8763250861,13.8764210195, +13.8765169466,13.8766128672,13.8767087816,13.8768046895,13.876900591,13.8769964862,13.877092375,13.8771882575,13.8772841335,13.8773800032,13.8774758665,13.8775717235,13.8776675741,13.8777634183,13.8778592561,13.8779550876, +13.8780509127,13.8781467315,13.8782425439,13.8783383499,13.8784341496,13.8785299429,13.8786257298,13.8787215104,13.8788172846,13.8789130525,13.879008814,13.8791045691,13.8792003179,13.8792960604,13.8793917965,13.8794875262, +13.8795832496,13.8796789666,13.8797746773,13.8798703817,13.8799660797,13.8800617713,13.8801574566,13.8802531356,13.8803488082,13.8804444744,13.8805401343,13.8806357879,13.8807314351,13.880827076,13.8809227106,13.8810183388, +13.8811139607,13.8812095762,13.8813051854,13.8814007883,13.8814963848,13.881591975,13.8816875589,13.8817831364,13.8818787076,13.8819742725,13.882069831,13.8821653832,13.8822609291,13.8823564687,13.8824520019,13.8825475288, +13.8826430494,13.8827385636,13.8828340715,13.8829295732,13.8830250684,13.8831205574,13.8832160401,13.8833115164,13.8834069864,13.8835024501,13.8835979075,13.8836933585,13.8837888033,13.8838842417,13.8839796738,13.8840750996, +13.8841705191,13.8842659323,13.8843613392,13.8844567397,13.884552134,13.8846475219,13.8847429036,13.8848382789,13.8849336479,13.8850290107,13.8851243671,13.8852197172,13.885315061,13.8854103986,13.8855057298,13.8856010547, +13.8856963733,13.8857916857,13.8858869917,13.8859822914,13.8860775849,13.886172872,13.8862681529,13.8863634274,13.8864586957,13.8865539577,13.8866492134,13.8867444628,13.8868397059,13.8869349427,13.8870301732,13.8871253975, +13.8872206155,13.8873158272,13.8874110326,13.8875062317,13.8876014245,13.8876966111,13.8877917913,13.8878869653,13.8879821331,13.8880772945,13.8881724497,13.8882675986,13.8883627412,13.8884578775,13.8885530076,13.8886481314, +13.8887432489,13.8888383602,13.8889334651,13.8890285638,13.8891236563,13.8892187425,13.8893138224,13.889408896,13.8895039634,13.8895990245,13.8896940794,13.889789128,13.8898841703,13.8899792064,13.8900742362,13.8901692597, +13.890264277,13.8903592881,13.8904542928,13.8905492914,13.8906442836,13.8907392696,13.8908342494,13.8909292229,13.8910241901,13.8911191512,13.8912141059,13.8913090544,13.8914039967,13.8914989327,13.8915938624,13.8916887859, +13.8917837032,13.8918786142,13.891973519,13.8920684176,13.8921633099,13.8922581959,13.8923530757,13.8924479493,13.8925428166,13.8926376777,13.8927325326,13.8928273812,13.8929222236,13.8930170598,13.8931118897,13.8932067134, +13.8933015309,13.8933963421,13.8934911471,13.8935859459,13.8936807384,13.8937755247,13.8938703048,13.8939650786,13.8940598463,13.8941546077,13.8942493629,13.8943441118,13.8944388546,13.8945335911,13.8946283214,13.8947230455, +13.8948177633,13.8949124749,13.8950071804,13.8951018796,13.8951965726,13.8952912593,13.8953859399,13.8954806142,13.8955752824,13.8956699443,13.8957646,13.8958592495,13.8959538928,13.8960485299,13.8961431608,13.8962377854, +13.8963324039,13.8964270162,13.8965216222,13.8966162221,13.8967108157,13.8968054032,13.8968999844,13.8969945595,13.8970891283,13.897183691,13.8972782474,13.8973727977,13.8974673417,13.8975618796,13.8976564113,13.8977509367, +13.897845456,13.8979399691,13.898034476,13.8981289767,13.8982234712,13.8983179595,13.8984124417,13.8985069176,13.8986013874,13.898695851,13.8987903084,13.8988847596,13.8989792046,13.8990736435,13.8991680761,13.8992625026, +13.8993569229,13.899451337,13.899545745,13.8996401468,13.8997345424,13.8998289318,13.899923315,13.9000176921,13.900112063,13.9002064277,13.9003007862,13.9003951386,13.9004894848,13.9005838249,13.9006781587,13.9007724864, +13.900866808,13.9009611233,13.9010554326,13.9011497356,13.9012440325,13.9013383232,13.9014326077,13.9015268861,13.9016211583,13.9017154244,13.9018096843,13.9019039381,13.9019981857,13.9020924271,13.9021866624,13.9022808915, +13.9023751145,13.9024693313,13.902563542,13.9026577465,13.9027519449,13.9028461371,13.9029403231,13.903034503,13.9031286768,13.9032228444,13.9033170059,13.9034111612,13.9035053104,13.9035994535,13.9036935904,13.9037877211, +13.9038818457,13.9039759642,13.9040700765,13.9041641827,13.9042582828,13.9043523767,13.9044464645,13.9045405462,13.9046346217,13.904728691,13.9048227543,13.9049168114,13.9050108624,13.9051049072,13.905198946,13.9052929786, +13.905387005,13.9054810254,13.9055750396,13.9056690476,13.9057630496,13.9058570454,13.9059510351,13.9060450187,13.9061389962,13.9062329675,13.9063269328,13.9064208919,13.9065148448,13.9066087917,13.9067027325,13.9067966671, +13.9068905956,13.906984518,13.9070784343,13.9071723445,13.9072662485,13.9073601465,13.9074540383,13.907547924,13.9076418037,13.9077356772,13.9078295446,13.9079234059,13.9080172611,13.9081111101,13.9082049531,13.90829879, +13.9083926208,13.9084864454,13.908580264,13.9086740765,13.9087678828,13.9088616831,13.9089554773,13.9090492654,13.9091430473,13.9092368232,13.909330593,13.9094243567,13.9095181143,13.9096118658,13.9097056112,13.9097993505, +13.9098930838,13.9099868109,13.910080532,13.9101742469,13.9102679558,13.9103616586,13.9104553553,13.9105490459,13.9106427305,13.9107364089,13.9108300813,13.9109237476,13.9110174078,13.9111110619,13.91120471,13.9112983519, +13.9113919878,13.9114856177,13.9115792414,13.9116728591,13.9117664707,13.9118600762,13.9119536756,13.912047269,13.9121408563,13.9122344375,13.9123280127,13.9124215818,13.9125151448,13.9126087018,13.9127022526,13.9127957975, +13.9128893362,13.9129828689,13.9130763956,13.9131699161,13.9132634306,13.9133569391,13.9134504415,13.9135439378,13.913637428,13.9137309123,13.9138243904,13.9139178625,13.9140113285,13.9141047885,13.9141982425,13.9142916903, +13.9143851322,13.9144785679,13.9145719976,13.9146654213,13.9147588389,13.9148522505,13.914945656,13.9150390555,13.915132449,13.9152258363,13.9153192177,13.915412593,13.9155059622,13.9155993254,13.9156926826,13.9157860337, +13.9158793788,13.9159727179,13.9160660509,13.9161593779,13.9162526988,13.9163460137,13.9164393226,13.9165326254,13.9166259222,13.916719213,13.9168124977,13.9169057764,13.9169990491,13.9170923157,13.9171855763,13.9172788309, +13.9173720795,13.917465322,13.9175585585,13.917651789,13.9177450134,13.9178382319,13.9179314443,13.9180246507,13.918117851,13.9182110454,13.9183042337,13.918397416,13.9184905923,13.9185837626,13.9186769268,13.9187700851, +13.9188632373,13.9189563835,13.9190495237,13.9191426579,13.919235786,13.9193289082,13.9194220243,13.9195151345,13.9196082386,13.9197013367,13.9197944288,13.9198875149,13.919980595,13.9200736691,13.9201667372,13.9202597993, +13.9203528554,13.9204459055,13.9205389496,13.9206319877,13.9207250198,13.9208180458,13.9209110659,13.92100408,13.9210970881,13.9211900902,13.9212830863,13.9213760764,13.9214690605,13.9215620387,13.9216550108,13.9217479769, +13.9218409371,13.9219338912,13.9220268394,13.9221197816,13.9222127178,13.922305648,13.9223985722,13.9224914905,13.9225844027,13.922677309,13.9227702093,13.9228631036,13.9229559919,13.9230488743,13.9231417506,13.923234621, +13.9233274854,13.9234203439,13.9235131963,13.9236060428,13.9236988833,13.9237917178,13.9238845464,13.923977369,13.9240701856,13.9241629962,13.9242558009,13.9243485996,13.9244413923,13.9245341791,13.9246269599,13.9247197347, +13.9248125036,13.9249052665,13.9249980234,13.9250907744,13.9251835194,13.9252762585,13.9253689916,13.9254617187,13.9255544399,13.9256471551,13.9257398643,13.9258325676,13.925925265,13.9260179564,13.9261106418,13.9262033213, +13.9262959948,13.9263886623,13.926481324,13.9265739796,13.9266666293,13.9267592731,13.9268519109,13.9269445428,13.9270371687,13.9271297887,13.9272224027,13.9273150108,13.9274076129,13.9275002091,13.9275927994,13.9276853837, +13.9277779621,13.9278705345,13.927963101,13.9280556616,13.9281482162,13.9282407648,13.9283333076,13.9284258444,13.9285183753,13.9286109002,13.9287034192,13.9287959323,13.9288884394,13.9289809406,13.9290734359,13.9291659252, +13.9292584086,13.9293508861,13.9294433577,13.9295358233,13.929628283,13.9297207368,13.9298131847,13.9299056266,13.9299980626,13.9300904927,13.9301829169,13.9302753351,13.9303677474,13.9304601538,13.9305525543,13.9306449489, +13.9307373376,13.9308297203,13.9309220971,13.931014468,13.931106833,13.9311991921,13.9312915453,13.9313838925,13.9314762339,13.9315685693,13.9316608989,13.9317532225,13.9318455402,13.931937852,13.9320301579,13.9321224579, +13.932214752,13.9323070402,13.9323993224,13.9324915988,13.9325838693,13.9326761339,13.9327683925,13.9328606453,13.9329528922,13.9330451332,13.9331373683,13.9332295974,13.9333218207,13.9334140381,13.9335062496,13.9335984552, +13.933690655,13.9337828488,13.9338750367,13.9339672187,13.9340593949,13.9341515652,13.9342437295,13.934335888,13.9344280406,13.9345201873,13.9346123282,13.9347044631,13.9347965922,13.9348887154,13.9349808327,13.9350729441, +13.9351650496,13.9352571493,13.935349243,13.9354413309,13.935533413,13.9356254891,13.9357175594,13.9358096238,13.9359016823,13.9359937349,13.9360857817,13.9361778226,13.9362698576,13.9363618868,13.93645391,13.9365459275, +13.936637939,13.9367299447,13.9368219445,13.9369139384,13.9370059265,13.9370979087,13.9371898851,13.9372818556,13.9373738202,13.937465779,13.9375577319,13.9376496789,13.9377416201,13.9378335554,13.9379254849,13.9380174085, +13.9381093262,13.9382012381,13.9382931442,13.9383850443,13.9384769387,13.9385688271,13.9386607098,13.9387525865,13.9388444575,13.9389363225,13.9390281818,13.9391200351,13.9392118827,13.9393037243,13.9393955602,13.9394873902, +13.9395792143,13.9396710326,13.9397628451,13.9398546517,13.9399464525,13.9400382474,13.9401300365,13.9402218197,13.9403135971,13.9404053687,13.9404971345,13.9405888944,13.9406806484,13.9407723967,13.940864139,13.9409558756, +13.9410476063,13.9411393312,13.9412310503,13.9413227635,13.9414144709,13.9415061725,13.9415978683,13.9416895582,13.9417812423,13.9418729205,13.941964593,13.9420562596,13.9421479204,13.9422395754,13.9423312245,13.9424228678, +13.9425145053,13.942606137,13.9426977629,13.9427893829,13.9428809972,13.9429726056,13.9430642082,13.9431558049,13.9432473959,13.943338981,13.9434305604,13.9435221339,13.9436137016,13.9437052635,13.9437968196,13.9438883699, +13.9439799143,13.944071453,13.9441629859,13.9442545129,13.9443460341,13.9444375496,13.9445290592,13.944620563,13.944712061,13.9448035533,13.9448950397,13.9449865203,13.9450779951,13.9451694641,13.9452609273,13.9453523848, +13.9454438364,13.9455352822,13.9456267222,13.9457181565,13.9458095849,13.9459010075,13.9459924244,13.9460838355,13.9461752407,13.9462666402,13.9463580339,13.9464494218,13.9465408039,13.9466321802,13.9467235507,13.9468149155, +13.9469062745,13.9469976276,13.947088975,13.9471803166,13.9472716525,13.9473629825,13.9474543068,13.9475456252,13.947636938,13.9477282449,13.947819546,13.9479108414,13.948002131,13.9480934148,13.9481846928,13.9482759651, +13.9483672316,13.9484584923,13.9485497472,13.9486409964,13.9487322398,13.9488234775,13.9489147093,13.9490059354,13.9490971557,13.9491883703,13.9492795791,13.9493707821,13.9494619794,13.9495531709,13.9496443566,13.9497355366, +13.9498267108,13.9499178792,13.9500090419,13.9501001988,13.95019135,13.9502824954,13.950373635,13.9504647689,13.950555897,13.9506470194,13.950738136,13.9508292469,13.950920352,13.9510114514,13.951102545,13.9511936329, +13.951284715,13.9513757913,13.9514668619,13.9515579268,13.9516489859,13.9517400393,13.9518310869,13.9519221288,13.9520131649,13.9521041953,13.9521952199,13.9522862388,13.952377252,13.9524682594,13.9525592611,13.952650257, +13.9527412472,13.9528322316,13.9529232104,13.9530141833,13.9531051506,13.9531961121,13.9532870679,13.9533780179,13.9534689622,13.9535599008,13.9536508336,13.9537417608,13.9538326821,13.9539235978,13.9540145077,13.9541054119, +13.9541963104,13.9542872031,13.9543780901,13.9544689714,13.954559847,13.9546507168,13.954741581,13.9548324394,13.954923292,13.955014139,13.9551049802,13.9551958157,13.9552866455,13.9553774696,13.955468288,13.9555591006, +13.9556499075,13.9557407087,13.9558315042,13.955922294,13.9560130781,13.9561038564,13.9561946291,13.956285396,13.9563761572,13.9564669128,13.9565576626,13.9566484067,13.9567391451,13.9568298777,13.9569206047,13.957011326, +13.9571020416,13.9571927514,13.9572834556,13.957374154,13.9574648468,13.9575555339,13.9576462152,13.9577368909,13.9578275608,13.9579182251,13.9580088837,13.9580995365,13.9581901837,13.9582808252,13.9583714609,13.958462091, +13.9585527154,13.9586433341,13.9587339471,13.9588245545,13.9589151561,13.959005752,13.9590963423,13.9591869268,13.9592775057,13.9593680789,13.9594586464,13.9595492082,13.9596397644,13.9597303148,13.9598208596,13.9599113987, +13.9600019321,13.9600924598,13.9601829818,13.9602734982,13.9603640089,13.9604545139,13.9605450132,13.9606355069,13.9607259948,13.9608164771,13.9609069538,13.9609974247,13.96108789,13.9611783496,13.9612688035,13.9613592518, +13.9614496944,13.9615401313,13.9616305626,13.9617209882,13.9618114081,13.9619018223,13.9619922309,13.9620826339,13.9621730311,13.9622634227,13.9623538086,13.9624441889,13.9625345635,13.9626249325,13.9627152957,13.9628056534, +13.9628960053,13.9629863516,13.9630766923,13.9631670273,13.9632573566,13.9633476803,13.9634379983,13.9635283107,13.9636186174,13.9637089185,13.9637992139,13.9638895037,13.9639797878,13.9640700663,13.9641603391,13.9642506063, +13.9643408678,13.9644311237,13.9645213739,13.9646116185,13.9647018574,13.9647920907,13.9648823184,13.9649725404,13.9650627567,13.9651529675,13.9652431726,13.965333372,13.9654235658,13.965513754,13.9656039365,13.9656941134, +13.9657842847,13.9658744503,13.9659646103,13.9660547646,13.9661449133,13.9662350564,13.9663251939,13.9664153257,13.9665054519,13.9665955725,13.9666856874,13.9667757967,13.9668659004,13.9669559984,13.9670460909,13.9671361777, +13.9672262588,13.9673163344,13.9674064043,13.9674964686,13.9675865273,13.9676765804,13.9677666278,13.9678566696,13.9679467058,13.9680367364,13.9681267614,13.9682167807,13.9683067944,13.9683968025,13.968486805,13.9685768019, +13.9686667932,13.9687567789,13.9688467589,13.9689367333,13.9690267022,13.9691166654,13.969206623,13.969296575,13.9693865213,13.9694764621,13.9695663973,13.9696563269,13.9697462508,13.9698361692,13.9699260819,13.9700159891, +13.9701058906,13.9701957866,13.9702856769,13.9703755616,13.9704654408,13.9705553143,13.9706451823,13.9707350446,13.9708249014,13.9709147525,13.9710045981,13.971094438,13.9711842724,13.9712741012,13.9713639244,13.971453742, +13.971543554,13.9716333604,13.9717231612,13.9718129564,13.971902746,13.9719925301,13.9720823086,13.9721720814,13.9722618487,13.9723516104,13.9724413666,13.9725311171,13.9726208621,13.9727106014,13.9728003352,13.9728900634, +13.9729797861,13.9730695031,13.9731592146,13.9732489205,13.9733386208,13.9734283155,13.9735180047,13.9736076883,13.9736973663,13.9737870387,13.9738767056,13.9739663669,13.9740560226,13.9741456728,13.9742353174,13.9743249564, +13.9744145898,13.9745042177,13.97459384,13.9746834567,13.9747730679,13.9748626735,13.9749522735,13.975041868,13.9751314569,13.9752210403,13.9753106181,13.9754001903,13.9754897569,13.975579318,13.9756688736,13.9757584236, +13.975847968,13.9759375069,13.9760270402,13.9761165679,13.9762060901,13.9762956068,13.9763851179,13.9764746234,13.9765641234,13.9766536179,13.9767431067,13.9768325901,13.9769220679,13.9770115401,13.9771010068,13.9771904679, +13.9772799235,13.9773693735,13.977458818,13.977548257,13.9776376904,13.9777271183,13.9778165406,13.9779059574,13.9779953686,13.9780847743,13.9781741745,13.9782635691,13.9783529582,13.9784423417,13.9785317197,13.9786210922, +13.9787104591,13.9787998205,13.9788891764,13.9789785267,13.9790678715,13.9791572107,13.9792465445,13.9793358727,13.9794251953,13.9795145125,13.9796038241,13.9796931302,13.9797824307,13.9798717257,13.9799610152,13.9800502992, +13.9801395776,13.9802288506,13.980318118,13.9804073798,13.9804966362,13.980585887,13.9806751323,13.9807643721,13.9808536064,13.9809428351,13.9810320584,13.9811212761,13.9812104883,13.981299695,13.9813888961,13.9814780918, +13.9815672819,13.9816564665,13.9817456456,13.9818348192,13.9819239873,13.9820131499,13.982102307,13.9821914585,13.9822806046,13.9823697451,13.9824588801,13.9825480097,13.9826371337,13.9827262522,13.9828153652,13.9829044727, +13.9829935747,13.9830826712,13.9831717622,13.9832608477,13.9833499277,13.9834390022,13.9835280712,13.9836171347,13.9837061927,13.9837952452,13.9838842922,13.9839733337,13.9840623697,13.9841514002,13.9842404252,13.9843294448, +13.9844184588,13.9845074673,13.9845964704,13.984685468,13.98477446,13.9848634466,13.9849524277,13.9850414033,13.9851303735,13.9852193381,13.9853082973,13.9853972509,13.9854861991,13.9855751418,13.985664079,13.9857530108, +13.985841937,13.9859308578,13.9860197731,13.9861086829,13.9861975872,13.9862864861,13.9863753794,13.9864642673,13.9865531498,13.9866420267,13.9867308982,13.9868197642,13.9869086247,13.9869974797,13.9870863293,13.9871751734, +13.9872640121,13.9873528452,13.9874416729,13.9875304952,13.9876193119,13.9877081232,13.987796929,13.9878857294,13.9879745243,13.9880633137,13.9881520977,13.9882408762,13.9883296492,13.9884184168,13.9885071789,13.9885959356, +13.9886846868,13.9887734325,13.9888621728,13.9889509076,13.989039637,13.9891283609,13.9892170793,13.9893057923,13.9893944998,13.9894832019,13.9895718986,13.9896605897,13.9897492755,13.9898379557,13.9899266306,13.9900152999, +13.9901039639,13.9901926223,13.9902812754,13.9903699229,13.9904585651,13.9905472018,13.990635833,13.9907244588,13.9908130792,13.9909016941,13.9909903035,13.9910789076,13.9911675061,13.9912560993,13.991344687,13.9914332693, +13.9915218461,13.9916104175,13.9916989834,13.9917875439,13.991876099,13.9919646486,13.9920531929,13.9921417316,13.992230265,13.9923187929,13.9924073153,13.9924958324,13.992584344,13.9926728502,13.9927613509,13.9928498463, +13.9929383362,13.9930268206,13.9931152997,13.9932037733,13.9932922415,13.9933807043,13.9934691616,13.9935576135,13.99364606,13.9937345011,13.9938229367,13.993911367,13.9939997918,13.9940882112,13.9941766252,13.9942650337, +13.9943534369,13.9944418346,13.9945302269,13.9946186138,13.9947069953,13.9947953713,13.994883742,13.9949721072,13.995060467,13.9951488214,13.9952371704,13.995325514,13.9954138522,13.995502185,13.9955905124,13.9956788343, +13.9957671509,13.995855462,13.9959437678,13.9960320681,13.996120363,13.9962086526,13.9962969367,13.9963852154,13.9964734887,13.9965617567,13.9966500192,13.9967382763,13.996826528,13.9969147743,13.9970030153,13.9970912508, +13.9971794809,13.9972677057,13.997355925,13.997444139,13.9975323475,13.9976205507,13.9977087485,13.9977969408,13.9978851278,13.9979733094,13.9980614856,13.9981496565,13.9982378219,13.9983259819,13.9984141366,13.9985022859, +13.9985904297,13.9986785682,13.9987667014,13.9988548291,13.9989429514,13.9990310684,13.99911918,13.9992072862,13.999295387,13.9993834825,13.9994715725,13.9995596572,13.9996477365,13.9997358105,13.999823879,13.9999119422, +14.0,14.0000880524,14.0001760995,14.0002641412,14.0003521775,14.0004402084,14.000528234,14.0006162542,14.000704269,14.0007922785,14.0008802826,14.0009682813,14.0010562746,14.0011442626,14.0012322452,14.0013202225, +14.0014081944,14.0014961609,14.0015841221,14.0016720779,14.0017600283,14.0018479734,14.0019359131,14.0020238475,14.0021117765,14.0021997001,14.0022876184,14.0023755313,14.0024634389,14.0025513411,14.002639238,14.0027271295, +14.0028150156,14.0029028964,14.0029907718,14.0030786419,14.0031665067,14.0032543661,14.0033422201,14.0034300688,14.0035179121,14.0036057501,14.0036935827,14.00378141,14.003869232,14.0039570486,14.0040448598,14.0041326657, +14.0042204663,14.0043082615,14.0043960514,14.004483836,14.0045716152,14.004659389,14.0047471575,14.0048349207,14.0049226786,14.0050104311,14.0050981782,14.0051859201,14.0052736566,14.0053613877,14.0054491135,14.005536834, +14.0056245492,14.005712259,14.0057999635,14.0058876627,14.0059753565,14.006063045,14.0061507282,14.006238406,14.0063260785,14.0064137457,14.0065014076,14.0065890641,14.0066767153,14.0067643612,14.0068520017,14.006939637, +14.0070272669,14.0071148915,14.0072025107,14.0072901247,14.0073777333,14.0074653366,14.0075529346,14.0076405273,14.0077281146,14.0078156967,14.0079032734,14.0079908448,14.0080784109,14.0081659716,14.0082535271,14.0083410772, +14.0084286221,14.0085161616,14.0086036958,14.0086912247,14.0087787483,14.0088662666,14.0089537795,14.0090412872,14.0091287895,14.0092162866,14.0093037783,14.0093912648,14.0094787459,14.0095662217,14.0096536922,14.0097411575, +14.0098286174,14.009916072,14.0100035213,14.0100909653,14.010178404,14.0102658374,14.0103532655,14.0104406884,14.0105281059,14.0106155181,14.010702925,14.0107903267,14.010877723,14.0109651141,14.0110524998,14.0111398803, +14.0112272554,14.0113146253,14.0114019899,14.0114893492,14.0115767032,14.0116640519,14.0117513953,14.0118387335,14.0119260663,14.0120133939,14.0121007162,14.0121880331,14.0122753449,14.0123626513,14.0124499524,14.0125372483, +14.0126245389,14.0127118242,14.0127991042,14.0128863789,14.0129736484,14.0130609126,14.0131481715,14.0132354251,14.0133226734,14.0134099165,14.0134971543,14.0135843868,14.0136716141,14.013758836,14.0138460527,14.0139332642, +14.0140204703,14.0141076712,14.0141948668,14.0142820572,14.0143692422,14.014456422,14.0145435966,14.0146307659,14.0147179299,14.0148050886,14.0148922421,14.0149793903,14.0150665332,14.0151536709,14.0152408033,14.0153279305, +14.0154150524,14.015502169,14.0155892804,14.0156763865,14.0157634874,14.015850583,14.0159376733,14.0160247584,14.0161118382,14.0161989128,14.0162859821,14.0163730462,14.016460105,14.0165471585,14.0166342068,14.0167212499, +14.0168082877,14.0168953202,14.0169823475,14.0170693696,14.0171563864,14.0172433979,14.0173304042,14.0174174053,14.0175044011,14.0175913917,14.017678377,14.0177653571,14.0178523319,14.0179393015,14.0180262658,14.0181132249, +14.0182001788,14.0182871274,14.0183740708,14.018461009,14.0185479419,14.0186348695,14.018721792,14.0188087092,14.0188956211,14.0189825278,14.0190694293,14.0191563256,14.0192432166,14.0193301024,14.0194169829,14.0195038583, +14.0195907284,14.0196775932,14.0197644528,14.0198513073,14.0199381564,14.0200250004,14.0201118391,14.0201986726,14.0202855008,14.0203723239,14.0204591417,14.0205459543,14.0206327617,14.0207195638,14.0208063607,14.0208931524, +14.0209799389,14.0210667202,14.0211534962,14.021240267,14.0213270326,14.021413793,14.0215005482,14.0215872981,14.0216740429,14.0217607824,14.0218475167,14.0219342458,14.0220209696,14.0221076883,14.0221944018,14.02228111, +14.022367813,14.0224545108,14.0225412035,14.0226278909,14.022714573,14.02280125,14.0228879218,14.0229745884,14.0230612497,14.0231479059,14.0232345568,14.0233212026,14.0234078431,14.0234944785,14.0235811086,14.0236677336, +14.0237543533,14.0238409678,14.0239275772,14.0240141813,14.0241007803,14.024187374,14.0242739625,14.0243605459,14.024447124,14.024533697,14.0246202648,14.0247068273,14.0247933847,14.0248799369,14.0249664839,14.0250530257, +14.0251395623,14.0252260937,14.0253126199,14.025399141,14.0254856568,14.0255721675,14.0256586729,14.0257451732,14.0258316683,14.0259181582,14.026004643,14.0260911225,14.0261775969,14.0262640661,14.0263505301,14.0264369889, +14.0265234425,14.026609891,14.0266963342,14.0267827723,14.0268692053,14.026955633,14.0270420556,14.027128473,14.0272148852,14.0273012922,14.0273876941,14.0274740907,14.0275604822,14.0276468686,14.0277332498,14.0278196257, +14.0279059966,14.0279923622,14.0280787227,14.028165078,14.0282514282,14.0283377731,14.0284241129,14.0285104476,14.0285967771,14.0286831014,14.0287694205,14.0288557345,14.0289420433,14.029028347,14.0291146455,14.0292009388, +14.029287227,14.02937351,14.0294597878,14.0295460605,14.029632328,14.0297185904,14.0298048476,14.0298910997,14.0299773466,14.0300635883,14.0301498249,14.0302360564,14.0303222826,14.0304085038,14.0304947197,14.0305809306, +14.0306671362,14.0307533368,14.0308395321,14.0309257224,14.0310119074,14.0310980874,14.0311842621,14.0312704318,14.0313565963,14.0314427556,14.0315289098,14.0316150588,14.0317012027,14.0317873415,14.0318734751,14.0319596036, +14.0320457269,14.0321318451,14.0322179582,14.0323040661,14.0323901689,14.0324762665,14.032562359,14.0326484464,14.0327345286,14.0328206057,14.0329066776,14.0329927444,14.0330788061,14.0331648627,14.0332509141,14.0333369604, +14.0334230015,14.0335090376,14.0335950685,14.0336810942,14.0337671148,14.0338531304,14.0339391407,14.034025146,14.0341111461,14.0341971411,14.034283131,14.0343691157,14.0344550953,14.0345410698,14.0346270392,14.0347130034, +14.0347989626,14.0348849166,14.0349708655,14.0350568092,14.0351427479,14.0352286814,14.0353146098,14.0354005331,14.0354864513,14.0355723644,14.0356582723,14.0357441751,14.0358300728,14.0359159654,14.0360018529,14.0360877353, +14.0361736126,14.0362594847,14.0363453517,14.0364312137,14.0365170705,14.0366029222,14.0366887688,14.0367746103,14.0368604467,14.036946278,14.0370321041,14.0371179252,14.0372037412,14.037289552,14.0373753578,14.0374611584, +14.037546954,14.0376327444,14.0377185298,14.03780431,14.0378900851,14.0379758552,14.0380616201,14.03814738,14.0382331347,14.0383188844,14.0384046289,14.0384903684,14.0385761028,14.038661832,14.0387475562,14.0388332753, +14.0389189893,14.0390046982,14.039090402,14.0391761007,14.0392617943,14.0393474829,14.0394331663,14.0395188447,14.039604518,14.0396901861,14.0397758492,14.0398615072,14.0399471602,14.040032808,14.0401184508,14.0402040884, +14.040289721,14.0403753485,14.040460971,14.0405465883,14.0406322006,14.0407178077,14.0408034098,14.0408890069,14.0409745988,14.0410601857,14.0411457675,14.0412313442,14.0413169158,14.0414024824,14.0414880439,14.0415736003, +14.0416591516,14.0417446979,14.0418302391,14.0419157752,14.0420013063,14.0420868323,14.0421723532,14.042257869,14.0423433798,14.0424288855,14.0425143861,14.0425998817,14.0426853722,14.0427708577,14.042856338,14.0429418133, +14.0430272836,14.0431127488,14.0431982089,14.043283664,14.043369114,14.0434545589,14.0435399988,14.0436254336,14.0437108633,14.043796288,14.0438817077,14.0439671223,14.0440525318,14.0441379363,14.0442233357,14.0443087301, +14.0443941194,14.0444795036,14.0445648828,14.044650257,14.0447356261,14.0448209901,14.0449063491,14.044991703,14.0450770519,14.0451623958,14.0452477346,14.0453330683,14.045418397,14.0455037207,14.0455890393,14.0456743529, +14.0457596614,14.0458449649,14.0459302633,14.0460155567,14.046100845,14.0461861283,14.0462714066,14.0463566798,14.046441948,14.0465272112,14.0466124693,14.0466977223,14.0467829704,14.0468682133,14.0469534513,14.0470386842, +14.0471239121,14.047209135,14.0472943528,14.0473795656,14.0474647733,14.047549976,14.0476351737,14.0477203664,14.047805554,14.0478907366,14.0479759142,14.0480610867,14.0481462542,14.0482314167,14.0483165742,14.0484017266, +14.048486874,14.0485720164,14.0486571537,14.0487422861,14.0488274134,14.0489125356,14.0489976529,14.0490827652,14.0491678724,14.0492529746,14.0493380718,14.0494231639,14.0495082511,14.0495933332,14.0496784103,14.0497634824, +14.0498485495,14.0499336115,14.0500186686,14.0501037206,14.0501887676,14.0502738096,14.0503588466,14.0504438786,14.0505289055,14.0506139275,14.0506989444,14.0507839564,14.0508689633,14.0509539652,14.0510389621,14.051123954, +14.0512089409,14.0512939228,14.0513788997,14.0514638716,14.0515488384,14.0516338003,14.0517187572,14.051803709,14.0518886559,14.0519735978,14.0520585346,14.0521434665,14.0522283933,14.0523133152,14.0523982321,14.0524831439, +14.0525680508,14.0526529527,14.0527378495,14.0528227414,14.0529076283,14.0529925102,14.0530773871,14.053162259,14.0532471259,14.0533319878,14.0534168448,14.0535016967,14.0535865436,14.0536713856,14.0537562226,14.0538410545, +14.0539258815,14.0540107035,14.0540955206,14.0541803326,14.0542651396,14.0543499417,14.0544347388,14.0545195309,14.054604318,14.0546891001,14.0547738772,14.0548586494,14.0549434166,14.0550281788,14.055112936,14.0551976882, +14.0552824355,14.0553671778,14.0554519151,14.0555366474,14.0556213748,14.0557060972,14.0557908146,14.055875527,14.0559602345,14.0560449369,14.0561296344,14.056214327,14.0562990146,14.0563836971,14.0564683748,14.0565530474, +14.0566377151,14.0567223778,14.0568070356,14.0568916884,14.0569763362,14.057060979,14.0571456169,14.0572302498,14.0573148778,14.0573995008,14.0574841188,14.0575687319,14.05765334,14.0577379431,14.0578225413,14.0579071345, +14.0579917228,14.0580763061,14.0581608844,14.0582454578,14.0583300262,14.0584145897,14.0584991482,14.0585837017,14.0586682503,14.058752794,14.0588373327,14.0589218664,14.0590063952,14.059090919,14.0591754379,14.0592599518, +14.0593444608,14.0594289649,14.0595134639,14.0595979581,14.0596824472,14.0597669315,14.0598514108,14.0599358851,14.0600203545,14.060104819,14.0601892785,14.060273733,14.0603581826,14.0604426273,14.060527067,14.0606115018, +14.0606959317,14.0607803566,14.0608647766,14.0609491916,14.0610336017,14.0611180068,14.061202407,14.0612868023,14.0613711927,14.0614555781,14.0615399585,14.0616243341,14.0617087047,14.0617930703,14.0618774311,14.0619617869, +14.0620461377,14.0621304837,14.0622148247,14.0622991607,14.0623834919,14.0624678181,14.0625521394,14.0626364557,14.0627207672,14.0628050737,14.0628893752,14.0629736719,14.0630579636,14.0631422504,14.0632265323,14.0633108093, +14.0633950813,14.0634793484,14.0635636106,14.0636478679,14.0637321202,14.0638163676,14.0639006101,14.0639848477,14.0640690804,14.0641533081,14.064237531,14.0643217489,14.0644059619,14.06449017,14.0645743731,14.0646585714, +14.0647427648,14.0648269532,14.0649111367,14.0649953153,14.065079489,14.0651636578,14.0652478217,14.0653319806,14.0654161347,14.0655002838,14.0655844281,14.0656685674,14.0657527018,14.0658368313,14.0659209559,14.0660050757, +14.0660891905,14.0661733004,14.0662574054,14.0663415054,14.0664256006,14.0665096909,14.0665937763,14.0666778568,14.0667619324,14.0668460031,14.0669300689,14.0670141298,14.0670981857,14.0671822368,14.067266283,14.0673503243, +14.0674343608,14.0675183923,14.0676024189,14.0676864406,14.0677704574,14.0678544694,14.0679384764,14.0680224786,14.0681064759,14.0681904682,14.0682744557,14.0683584383,14.068442416,14.0685263888,14.0686103568,14.0686943198, +14.068778278,14.0688622313,14.0689461796,14.0690301232,14.0691140618,14.0691979955,14.0692819244,14.0693658483,14.0694497674,14.0695336816,14.069617591,14.0697014954,14.069785395,14.0698692897,14.0699531795,14.0700370644, +14.0701209445,14.0702048197,14.07028869,14.0703725554,14.0704564159,14.0705402716,14.0706241224,14.0707079684,14.0707918094,14.0708756456,14.0709594769,14.0710433034,14.0711271249,14.0712109417,14.0712947535,14.0713785605, +14.0714623626,14.0715461598,14.0716299522,14.0717137397,14.0717975223,14.0718813001,14.071965073,14.072048841,14.0721326042,14.0722163625,14.0723001159,14.0723838645,14.0724676082,14.0725513471,14.0726350811,14.0727188103, +14.0728025345,14.072886254,14.0729699685,14.0730536783,14.0731373831,14.0732210831,14.0733047783,14.0733884685,14.073472154,14.0735558346,14.0736395103,14.0737231812,14.0738068472,14.0738905083,14.0739741647,14.0740578161, +14.0741414628,14.0742251045,14.0743087414,14.0743923735,14.0744760007,14.0745596231,14.0746432406,14.0747268533,14.0748104612,14.0748940642,14.0749776623,14.0750612556,14.0751448441,14.0752284277,14.0753120065,14.0753955804, +14.0754791495,14.0755627137,14.0756462732,14.0757298277,14.0758133775,14.0758969224,14.0759804624,14.0760639976,14.076147528,14.0762310536,14.0763145743,14.0763980902,14.0764816012,14.0765651074,14.0766486088,14.0767321053, +14.0768155971,14.0768990839,14.076982566,14.0770660432,14.0771495156,14.0772329831,14.0773164459,14.0773999038,14.0774833569,14.0775668051,14.0776502485,14.0777336871,14.0778171209,14.0779005498,14.077983974,14.0780673933, +14.0781508077,14.0782342174,14.0783176222,14.0784010222,14.0784844174,14.0785678078,14.0786511933,14.0787345741,14.07881795,14.0789013211,14.0789846873,14.0790680488,14.0791514054,14.0792347572,14.0793181043,14.0794014464, +14.0794847838,14.0795681164,14.0796514441,14.0797347671,14.0798180852,14.0799013985,14.079984707,14.0800680107,14.0801513096,14.0802346037,14.080317893,14.0804011774,14.0804844571,14.0805677319,14.0806510019,14.0807342672, +14.0808175276,14.0809007832,14.080984034,14.0810672801,14.0811505213,14.0812337577,14.0813169893,14.0814002161,14.0814834381,14.0815666553,14.0816498677,14.0817330753,14.0818162781,14.0818994761,14.0819826693,14.0820658577, +14.0821490414,14.0822322202,14.0823153942,14.0823985634,14.0824817279,14.0825648875,14.0826480424,14.0827311924,14.0828143377,14.0828974781,14.0829806138,14.0830637447,14.0831468708,14.0832299921,14.0833131087,14.0833962204, +14.0834793273,14.0835624295,14.0836455269,14.0837286195,14.0838117073,14.0838947903,14.0839778685,14.084060942,14.0841440106,14.0842270745,14.0843101336,14.0843931879,14.0844762375,14.0845592822,14.0846423222,14.0847253574, +14.0848083878,14.0848914134,14.0849744343,14.0850574504,14.0851404617,14.0852234682,14.08530647,14.085389467,14.0854724592,14.0855554466,14.0856384293,14.0857214072,14.0858043803,14.0858873486,14.0859703122,14.086053271, +14.086136225,14.0862191743,14.0863021188,14.0863850585,14.0864679935,14.0865509237,14.0866338491,14.0867167697,14.0867996856,14.0868825967,14.0869655031,14.0870484047,14.0871313015,14.0872141936,14.0872970809,14.0873799635, +14.0874628413,14.0875457143,14.0876285825,14.087711446,14.0877943048,14.0878771588,14.087960008,14.0880428525,14.0881256922,14.0882085271,14.0882913573,14.0883741828,14.0884570035,14.0885398194,14.0886226306,14.088705437, +14.0887882387,14.0888710356,14.0889538278,14.0890366152,14.0891193979,14.0892021758,14.089284949,14.0893677174,14.0894504811,14.08953324,14.0896159942,14.0896987437,14.0897814884,14.0898642283,14.0899469635,14.090029694, +14.0901124197,14.0901951406,14.0902778569,14.0903605683,14.0904432751,14.0905259771,14.0906086743,14.0906913669,14.0907740546,14.0908567377,14.090939416,14.0910220895,14.0911047584,14.0911874225,14.0912700818,14.0913527364, +14.0914353863,14.0915180315,14.0916006719,14.0916833076,14.0917659385,14.0918485647,14.0919311862,14.092013803,14.092096415,14.0921790223,14.0922616248,14.0923442227,14.0924268158,14.0925094042,14.0925919878,14.0926745667, +14.0927571409,14.0928397104,14.0929222751,14.0930048352,14.0930873904,14.093169941,14.0932524869,14.093335028,14.0934175644,14.0935000961,14.093582623,14.0936651453,14.0937476628,14.0938301756,14.0939126837,14.093995187, +14.0940776857,14.0941601796,14.0942426688,14.0943251533,14.0944076331,14.0944901081,14.0945725785,14.0946550441,14.094737505,14.0948199613,14.0949024128,14.0949848595,14.0950673016,14.095149739,14.0952321716,14.0953145996, +14.0953970228,14.0954794413,14.0955618551,14.0956442642,14.0957266686,14.0958090683,14.0958914633,14.0959738536,14.0960562392,14.0961386201,14.0962209962,14.0963033677,14.0963857345,14.0964680965,14.0965504539,14.0966328065, +14.0967151545,14.0967974977,14.0968798363,14.0969621702,14.0970444993,14.0971268238,14.0972091436,14.0972914586,14.097373769,14.0974560747,14.0975383756,14.0976206719,14.0977029635,14.0977852504,14.0978675326,14.0979498101, +14.098032083,14.0981143511,14.0981966145,14.0982788733,14.0983611273,14.0984433767,14.0985256214,14.0986078614,14.0986900967,14.0987723273,14.0988545532,14.0989367745,14.099018991,14.0991012029,14.0991834101,14.0992656126, +14.0993478104,14.0994300035,14.099512192,14.0995943758,14.0996765549,14.0997587293,14.099840899,14.0999230641,14.1000052244,14.1000873801,14.1001695311,14.1002516775,14.1003338191,14.1004159561,14.1004980884,14.100580216, +14.100662339,14.1007444573,14.1008265709,14.1009086798,14.1009907841,14.1010728837,14.1011549786,14.1012370688,14.1013191544,14.1014012353,14.1014833116,14.1015653831,14.10164745,14.1017295123,14.1018115698,14.1018936227, +14.1019756709,14.1020577145,14.1021397534,14.1022217876,14.1023038172,14.1023858421,14.1024678624,14.1025498779,14.1026318889,14.1027138951,14.1027958967,14.1028778936,14.1029598859,14.1030418735,14.1031238565,14.1032058348, +14.1032878084,14.1033697774,14.1034517417,14.1035337014,14.1036156564,14.1036976068,14.1037795525,14.1038614935,14.1039434299,14.1040253616,14.1041072887,14.1041892112,14.1042711289,14.1043530421,14.1044349506,14.1045168544, +14.1045987536,14.1046806481,14.104762538,14.1048444232,14.1049263038,14.1050081798,14.105090051,14.1051719177,14.1052537797,14.1053356371,14.1054174898,14.1054993378,14.1055811813,14.1056630201,14.1057448542,14.1058266837, +14.1059085086,14.1059903288,14.1060721444,14.1061539553,14.1062357616,14.1063175633,14.1063993603,14.1064811527,14.1065629404,14.1066447236,14.106726502,14.1068082759,14.1068900451,14.1069718097,14.1070535696,14.1071353249, +14.1072170756,14.1072988216,14.107380563,14.1074622998,14.107544032,14.1076257595,14.1077074824,14.1077892006,14.1078709143,14.1079526233,14.1080343277,14.1081160274,14.1081977225,14.108279413,14.1083610989,14.1084427802, +14.1085244568,14.1086061288,14.1086877962,14.1087694589,14.108851117,14.1089327706,14.1090144194,14.1090960637,14.1091777034,14.1092593384,14.1093409688,14.1094225946,14.1095042158,14.1095858323,14.1096674443,14.1097490516, +14.1098306543,14.1099122524,14.1099938458,14.1100754347,14.110157019,14.1102385986,14.1103201736,14.110401744,14.1104833098,14.110564871,14.1106464276,14.1107279795,14.1108095269,14.1108910696,14.1109726078,14.1110541413, +14.1111356702,14.1112171945,14.1112987143,14.1113802294,14.1114617399,14.1115432457,14.111624747,14.1117062437,14.1117877358,14.1118692233,14.1119507062,14.1120321844,14.1121136581,14.1121951272,14.1122765916,14.1123580515, +14.1124395068,14.1125209575,14.1126024035,14.112683845,14.1127652819,14.1128467142,14.1129281419,14.1130095649,14.1130909834,14.1131723973,14.1132538067,14.1133352114,14.1134166115,14.113498007,14.113579398,14.1136607843, +14.113742166,14.1138235432,14.1139049158,14.1139862838,14.1140676472,14.114149006,14.1142303602,14.1143117098,14.1143930549,14.1144743953,14.1145557312,14.1146370625,14.1147183892,14.1147997113,14.1148810288,14.1149623418, +14.1150436502,14.1151249539,14.1152062532,14.1152875478,14.1153688378,14.1154501233,14.1155314042,14.1156126805,14.1156939522,14.1157752193,14.1158564819,14.1159377399,14.1160189933,14.1161002422,14.1161814864,14.1162627261, +14.1163439612,14.1164251918,14.1165064177,14.1165876391,14.116668856,14.1167500682,14.1168312759,14.116912479,14.1169936775,14.1170748715,14.1171560609,14.1172372457,14.117318426,14.1173996017,14.1174807728,14.1175619394, +14.1176431014,14.1177242588,14.1178054117,14.11788656,14.1179677037,14.1180488429,14.1181299775,14.1182111075,14.118292233,14.1183733539,14.1184544703,14.1185355821,14.1186166894,14.118697792,14.1187788902,14.1188599837, +14.1189410727,14.1190221572,14.1191032371,14.1191843124,14.1192653832,14.1193464494,14.1194275111,14.1195085682,14.1195896207,14.1196706687,14.1197517122,14.1198327511,14.1199137855,14.1199948153,14.1200758405,14.1201568612, +14.1202378773,14.1203188889,14.120399896,14.1204808985,14.1205618964,14.1206428898,14.1207238787,14.120804863,14.1208858428,14.120966818,14.1210477887,14.1211287548,14.1212097164,14.1212906735,14.121371626,14.1214525739, +14.1215335173,14.1216144562,14.1216953906,14.1217763204,14.1218572456,14.1219381663,14.1220190825,14.1220999942,14.1221809013,14.1222618038,14.1223427019,14.1224235954,14.1225044843,14.1225853687,14.1226662486,14.122747124, +14.1228279948,14.1229088611,14.1229897229,14.1230705801,14.1231514328,14.1232322809,14.1233131246,14.1233939637,14.1234747982,14.1235556283,14.1236364538,14.1237172748,14.1237980913,14.1238789032,14.1239597106,14.1240405135, +14.1241213118,14.1242021057,14.124282895,14.1243636797,14.12444446,14.1245252357,14.124606007,14.1246867737,14.1247675358,14.1248482935,14.1249290466,14.1250097952,14.1250905393,14.1251712789,14.1252520139,14.1253327445, +14.1254134705,14.125494192,14.125574909,14.1256556214,14.1257363294,14.1258170328,14.1258977318,14.1259784262,14.1260591161,14.1261398015,14.1262204823,14.1263011587,14.1263818305,14.1264624979,14.1265431607,14.126623819, +14.1267044728,14.1267851221,14.1268657669,14.1269464072,14.127027043,14.1271076743,14.127188301,14.1272689233,14.1273495411,14.1274301543,14.1275107631,14.1275913673,14.127671967,14.1277525623,14.127833153,14.1279137392, +14.127994321,14.1280748982,14.1281554709,14.1282360392,14.1283166029,14.1283971621,14.1284777169,14.1285582671,14.1286388129,14.1287193541,14.1287998908,14.1288804231,14.1289609509,14.1290414741,14.1291219929,14.1292025072, +14.1292830169,14.1293635222,14.129444023,14.1295245193,14.1296050112,14.1296854985,14.1297659813,14.1298464597,14.1299269335,14.1300074029,14.1300878678,14.1301683281,14.1302487841,14.1303292355,14.1304096824,14.1304901248, +14.1305705628,14.1306509963,14.1307314253,14.1308118498,14.1308922698,14.1309726853,14.1310530964,14.131133503,14.1312139051,14.1312943027,14.1313746958,14.1314550845,14.1315354687,14.1316158484,14.1316962236,14.1317765943, +14.1318569606,14.1319373224,14.1320176797,14.1320980326,14.1321783809,14.1322587248,14.1323390642,14.1324193992,14.1324997296,14.1325800556,14.1326603771,14.1327406942,14.1328210068,14.1329013149,14.1329816185,14.1330619177, +14.1331422124,14.1332225026,14.1333027884,14.1333830697,14.1334633465,14.1335436189,14.1336238868,14.1337041502,14.1337844092,14.1338646637,14.1339449137,14.1340251593,14.1341054004,14.134185637,14.1342658692,14.134346097, +14.1344263202,14.134506539,14.1345867534,14.1346669632,14.1347471687,14.1348273696,14.1349075661,14.1349877582,14.1350679458,14.1351481289,14.1352283076,14.1353084818,14.1353886516,14.1354688169,14.1355489777,14.1356291342, +14.1357092861,14.1357894336,14.1358695766,14.1359497152,14.1360298494,14.1361099791,14.1361901043,14.1362702251,14.1363503415,14.1364304533,14.1365105608,14.1365906638,14.1366707623,14.1367508564,14.1368309461,14.1369110313, +14.1369911121,14.1370711884,14.1371512603,14.1372313277,14.1373113907,14.1373914492,14.1374715034,14.137551553,14.1376315982,14.137711639,14.1377916754,14.1378717073,14.1379517347,14.1380317577,14.1381117763,14.1381917905, +14.1382718002,14.1383518054,14.1384318063,14.1385118027,14.1385917946,14.1386717822,14.1387517653,14.1388317439,14.1389117181,14.1389916879,14.1390716533,14.1391516142,14.1392315707,14.1393115228,14.1393914704,14.1394714136, +14.1395513524,14.1396312867,14.1397112167,14.1397911422,14.1398710632,14.1399509798,14.1400308921,14.1401107998,14.1401907032,14.1402706021,14.1403504966,14.1404303867,14.1405102724,14.1405901536,14.1406700304,14.1407499028, +14.1408297708,14.1409096343,14.1409894934,14.1410693482,14.1411491984,14.1412290443,14.1413088858,14.1413887228,14.1414685554,14.1415483836,14.1416282074,14.1417080267,14.1417878417,14.1418676522,14.1419474583,14.14202726, +14.1421070573,14.1421868502,14.1422666386,14.1423464227,14.1424262023,14.1425059775,14.1425857484,14.1426655148,14.1427452768,14.1428250343,14.1429047875,14.1429845363,14.1430642806,14.1431440206,14.1432237561,14.1433034873, +14.143383214,14.1434629363,14.1435426542,14.1436223677,14.1437020769,14.1437817816,14.1438614819,14.1439411778,14.1440208693,14.1441005564,14.1441802391,14.1442599174,14.1443395912,14.1444192607,14.1444989258,14.1445785865, +14.1446582428,14.1447378947,14.1448175422,14.1448971853,14.1449768241,14.1450564584,14.1451360883,14.1452157138,14.1452953349,14.1453749517,14.145454564,14.145534172,14.1456137755,14.1456933747,14.1457729694,14.1458525598, +14.1459321458,14.1460117274,14.1460913046,14.1461708775,14.1462504459,14.1463300099,14.1464095696,14.1464891249,14.1465686757,14.1466482222,14.1467277643,14.1468073021,14.1468868354,14.1469663644,14.1470458889,14.1471254091, +14.1472049249,14.1472844364,14.1473639434,14.1474434461,14.1475229444,14.1476024383,14.1476819278,14.1477614129,14.1478408937,14.1479203701,14.1479998421,14.1480793097,14.1481587729,14.1482382318,14.1483176863,14.1483971364, +14.1484765822,14.1485560236,14.1486354605,14.1487148932,14.1487943214,14.1488737453,14.1489531648,14.1490325799,14.1491119907,14.1491913971,14.1492707991,14.1493501968,14.1494295901,14.149508979,14.1495883635,14.1496677437, +14.1497471195,14.1498264909,14.149905858,14.1499852207,14.1500645791,14.1501439331,14.1502232827,14.1503026279,14.1503819688,14.1504613053,14.1505406375,14.1506199653,14.1506992887,14.1507786078,14.1508579225,14.1509372329, +14.1510165389,14.1510958405,14.1511751378,14.1512544307,14.1513337193,14.1514130035,14.1514922833,14.1515715588,14.15165083,14.1517300968,14.1518093592,14.1518886173,14.151967871,14.1520471203,14.1521263653,14.152205606, +14.1522848423,14.1523640743,14.1524433019,14.1525225251,14.152601744,14.1526809586,14.1527601688,14.1528393746,14.1529185761,14.1529977733,14.1530769661,14.1531561546,14.1532353387,14.1533145185,14.1533936939,14.153472865, +14.1535520317,14.1536311941,14.1537103522,14.1537895059,14.1538686552,14.1539478002,14.1540269409,14.1541060773,14.1541852093,14.1542643369,14.1543434602,14.1544225792,14.1545016939,14.1545808042,14.1546599101,14.1547390118, +14.1548181091,14.154897202,14.1549762906,14.1550553749,14.1551344549,14.1552135305,14.1552926018,14.1553716687,14.1554507313,14.1555297896,14.1556088435,14.1556878932,14.1557669384,14.1558459794,14.155925016,14.1560040483, +14.1560830763,14.1561620999,14.1562411192,14.1563201342,14.1563991449,14.1564781512,14.1565571532,14.1566361509,14.1567151442,14.1567941332,14.1568731179,14.1569520983,14.1570310744,14.1571100461,14.1571890135,14.1572679766, +14.1573469354,14.1574258898,14.1575048399,14.1575837857,14.1576627272,14.1577416644,14.1578205972,14.1578995257,14.1579784499,14.1580573698,14.1581362854,14.1582151967,14.1582941036,14.1583730062,14.1584519045,14.1585307985, +14.1586096882,14.1586885736,14.1587674546,14.1588463314,14.1589252038,14.1590040719,14.1590829357,14.1591617952,14.1592406504,14.1593195013,14.1593983479,14.1594771901,14.1595560281,14.1596348617,14.159713691,14.1597925161, +14.1598713368,14.1599501532,14.1600289653,14.1601077731,14.1601865766,14.1602653758,14.1603441707,14.1604229613,14.1605017476,14.1605805295,14.1606593072,14.1607380806,14.1608168497,14.1608956145,14.1609743749,14.1610531311, +14.161131883,14.1612106306,14.1612893738,14.1613681128,14.1614468475,14.1615255779,14.161604304,14.1616830258,14.1617617433,14.1618404565,14.1619191654,14.16199787,14.1620765704,14.1621552664,14.1622339581,14.1623126456, +14.1623913288,14.1624700076,14.1625486822,14.1626273525,14.1627060185,14.1627846802,14.1628633376,14.1629419907,14.1630206396,14.1630992841,14.1631779244,14.1632565604,14.1633351921,14.1634138195,14.1634924426,14.1635710615, +14.163649676,14.1637282863,14.1638068923,14.163885494,14.1639640914,14.1640426846,14.1641212734,14.164199858,14.1642784383,14.1643570143,14.1644355861,14.1645141535,14.1645927167,14.1646712756,14.1647498302,14.1648283806, +14.1649069267,14.1649854685,14.165064006,14.1651425392,14.1652210682,14.1652995929,14.1653781133,14.1654566295,14.1655351414,14.165613649,14.1656921523,14.1657706514,14.1658491462,14.1659276367,14.166006123,14.1660846049, +14.1661630826,14.1662415561,14.1663200253,14.1663984902,14.1664769508,14.1665554072,14.1666338593,14.1667123071,14.1667907507,14.16686919,14.1669476251,14.1670260559,14.1671044824,14.1671829046,14.1672613226,14.1673397364, +14.1674181458,14.167496551,14.167574952,14.1676533487,14.1677317411,14.1678101293,14.1678885132,14.1679668928,14.1680452682,14.1681236394,14.1682020062,14.1682803689,14.1683587272,14.1684370813,14.1685154312,14.1685937768, +14.1686721181,14.1687504552,14.1688287881,14.1689071166,14.168985441,14.1690637611,14.1691420769,14.1692203885,14.1692986958,14.1693769989,14.1694552977,14.1695335923,14.1696118826,14.1696901687,14.1697684505,14.1698467281, +14.1699250014,14.1700032705,14.1700815354,14.170159796,14.1702380523,14.1703163044,14.1703945523,14.1704727959,14.1705510353,14.1706292705,14.1707075013,14.170785728,14.1708639504,14.1709421686,14.1710203825,14.1710985922, +14.1711767977,14.1712549989,14.1713331958,14.1714113886,14.1714895771,14.1715677613,14.1716459413,14.1717241171,14.1718022887,14.171880456,14.1719586191,14.1720367779,14.1721149325,14.1721930829,14.1722712291,14.172349371, +14.1724275086,14.1725056421,14.1725837713,14.1726618963,14.172740017,14.1728181336,14.1728962459,14.1729743539,14.1730524578,14.1731305574,14.1732086528,14.1732867439,14.1733648308,14.1734429136,14.173520992,14.1735990663, +14.1736771363,14.1737552021,14.1738332637,14.173911321,14.1739893742,14.1740674231,14.1741454678,14.1742235082,14.1743015445,14.1743795765,14.1744576043,14.1745356279,14.1746136472,14.1746916624,14.1747696733,14.17484768, +14.1749256825,14.1750036808,14.1750816748,14.1751596647,14.1752376503,14.1753156317,14.1753936089,14.1754715819,14.1755495506,14.1756275152,14.1757054755,14.1757834317,14.1758613836,14.1759393313,14.1760172748,14.176095214, +14.1761731491,14.17625108,14.1763290066,14.1764069291,14.1764848473,14.1765627613,14.1766406711,14.1767185767,14.1767964781,14.1768743753,14.1769522683,14.1770301571,14.1771080417,14.1771859221,14.1772637983,14.1773416702, +14.177419538,14.1774974016,14.1775752609,14.1776531161,14.177730967,14.1778088138,14.1778866563,14.1779644947,14.1780423289,14.1781201588,14.1781979846,14.1782758061,14.1783536235,14.1784314367,14.1785092457,14.1785870504, +14.178664851,14.1787426474,14.1788204396,14.1788982276,14.1789760114,14.179053791,14.1791315664,14.1792093376,14.1792871046,14.1793648675,14.1794426261,14.1795203806,14.1795981308,14.1796758769,14.1797536188,14.1798313565, +14.17990909,14.1799868193,14.1800645445,14.1801422654,14.1802199822,14.1802976947,14.1803754031,14.1804531073,14.1805308073,14.1806085032,14.1806861948,14.1807638823,14.1808415656,14.1809192447,14.1809969196,14.1810745903, +14.1811522569,14.1812299192,14.1813075774,14.1813852314,14.1814628813,14.1815405269,14.1816181684,14.1816958057,14.1817734388,14.1818510677,14.1819286925,14.1820063131,14.1820839295,14.1821615417,14.1822391498,14.1823167537, +14.1823943534,14.1824719489,14.1825495403,14.1826271275,14.1827047105,14.1827822894,14.182859864,14.1829374345,14.1830150009,14.183092563,14.183170121,14.1832476749,14.1833252245,14.18340277,14.1834803113,14.1835578485, +14.1836353815,14.1837129103,14.1837904349,14.1838679554,14.1839454718,14.1840229839,14.1841004919,14.1841779957,14.1842554954,14.1843329909,14.1844104822,14.1844879694,14.1845654524,14.1846429313,14.184720406,14.1847978765, +14.1848753429,14.1849528051,14.1850302632,14.1851077171,14.1851851668,14.1852626124,14.1853400538,14.1854174911,14.1854949242,14.1855723532,14.185649778,14.1857271986,14.1858046151,14.1858820274,14.1859594356,14.1860368397, +14.1861142395,14.1861916353,14.1862690268,14.1863464143,14.1864237975,14.1865011767,14.1865785516,14.1866559225,14.1867332891,14.1868106517,14.18688801,14.1869653643,14.1870427143,14.1871200603,14.1871974021,14.1872747397, +14.1873520732,14.1874294026,14.1875067278,14.1875840488,14.1876613657,14.1877386785,14.1878159871,14.1878932916,14.187970592,14.1880478882,14.1881251803,14.1882024682,14.188279752,14.1883570316,14.1884343071,14.1885115785, +14.1885888457,14.1886661088,14.1887433677,14.1888206226,14.1888978732,14.1889751198,14.1890523622,14.1891296005,14.1892068346,14.1892840646,14.1893612905,14.1894385122,14.1895157298,14.1895929433,14.1896701526,14.1897473578, +14.1898245589,14.1899017558,14.1899789486,14.1900561373,14.1901333219,14.1902105023,14.1902876786,14.1903648507,14.1904420188,14.1905191827,14.1905963425,14.1906734981,14.1907506497,14.1908277971,14.1909049403,14.1909820795, +14.1910592145,14.1911363454,14.1912134722,14.1912905949,14.1913677134,14.1914448278,14.1915219381,14.1915990443,14.1916761464,14.1917532443,14.1918303381,14.1919074278,14.1919845134,14.1920615948,14.1921386722,14.1922157454, +14.1922928145,14.1923698795,14.1924469403,14.1925239971,14.1926010497,14.1926780982,14.1927551426,14.1928321829,14.1929092191,14.1929862512,14.1930632791,14.193140303,14.1932173227,14.1932943383,14.1933713498,14.1934483572, +14.1935253605,14.1936023597,14.1936793547,14.1937563457,14.1938333325,14.1939103153,14.1939872939,14.1940642684,14.1941412389,14.1942182052,14.1942951674,14.1943721255,14.1944490795,14.1945260294,14.1946029752,14.1946799168, +14.1947568544,14.1948337879,14.1949107173,14.1949876425,14.1950645637,14.1951414808,14.1952183938,14.1952953026,14.1953722074,14.1954491081,14.1955260046,14.1956028971,14.1956797855,14.1957566698,14.19583355,14.195910426, +14.195987298,14.1960641659,14.1961410297,14.1962178894,14.196294745,14.1963715965,14.196448444,14.1965252873,14.1966021265,14.1966789617,14.1967557927,14.1968326197,14.1969094425,14.1969862613,14.197063076,14.1971398866, +14.1972166931,14.1972934955,14.1973702939,14.1974470881,14.1975238783,14.1976006643,14.1976774463,14.1977542242,14.197830998,14.1979077677,14.1979845334,14.1980612949,14.1981380524,14.1982148058,14.1982915551,14.1983683003, +14.1984450415,14.1985217785,14.1985985115,14.1986752404,14.1987519652,14.1988286859,14.1989054026,14.1989821152,14.1990588237,14.1991355281,14.1992122284,14.1992889247,14.1993656169,14.199442305,14.199518989,14.199595669, +14.1996723448,14.1997490166,14.1998256844,14.199902348,14.1999790076,14.2000556631,14.2001323146,14.2002089619,14.2002856052,14.2003622444,14.2004388796,14.2005155107,14.2005921377,14.2006687606,14.2007453795,14.2008219943, +14.200898605,14.2009752117,14.2010518143,14.2011284128,14.2012050073,14.2012815977,14.201358184,14.2014347663,14.2015113445,14.2015879186,14.2016644887,14.2017410547,14.2018176167,14.2018941746,14.2019707284,14.2020472781, +14.2021238238,14.2022003655,14.202276903,14.2023534366,14.202429966,14.2025064914,14.2025830127,14.20265953,14.2027360433,14.2028125524,14.2028890575,14.2029655586,14.2030420556,14.2031185485,14.2031950374,14.2032715222, +14.203348003,14.2034244797,14.2035009524,14.203577421,14.2036538855,14.203730346,14.2038068025,14.2038832549,14.2039597032,14.2040361475,14.2041125878,14.204189024,14.2042654561,14.2043418842,14.2044183083,14.2044947283, +14.2045711442,14.2046475562,14.204723964,14.2048003678,14.2048767676,14.2049531633,14.205029555,14.2051059426,14.2051823262,14.2052587058,14.2053350813,14.2054114527,14.2054878202,14.2055641835,14.2056405429,14.2057168981, +14.2057932494,14.2058695966,14.2059459398,14.2060222789,14.206098614,14.206174945,14.2062512721,14.206327595,14.206403914,14.2064802289,14.2065565397,14.2066328466,14.2067091494,14.2067854481,14.2068617428,14.2069380335, +14.2070143202,14.2070906028,14.2071668814,14.2072431559,14.2073194265,14.2073956929,14.2074719554,14.2075482138,14.2076244682,14.2077007186,14.2077769649,14.2078532072,14.2079294455,14.2080056798,14.20808191,14.2081581362, +14.2082343583,14.2083105765,14.2083867906,14.2084630007,14.2085392067,14.2086154088,14.2086916068,14.2087678008,14.2088439907,14.2089201767,14.2089963586,14.2090725365,14.2091487104,14.2092248802,14.209301046,14.2093772078, +14.2094533656,14.2095295194,14.2096056691,14.2096818149,14.2097579566,14.2098340943,14.2099102279,14.2099863576,14.2100624832,14.2101386049,14.2102147225,14.2102908361,14.2103669456,14.2104430512,14.2105191527,14.2105952503, +14.2106713438,14.2107474333,14.2108235188,14.2108996003,14.2109756777,14.2110517512,14.2111278206,14.2112038861,14.2112799475,14.2113560049,14.2114320583,14.2115081077,14.2115841531,14.2116601945,14.2117362318,14.2118122652, +14.2118882945,14.2119643199,14.2120403412,14.2121163586,14.2121923719,14.2122683812,14.2123443866,14.2124203879,14.2124963852,14.2125723785,14.2126483678,14.2127243531,14.2128003344,14.2128763117,14.212952285,14.2130282543, +14.2131042196,14.2131801809,14.2132561382,14.2133320916,14.2134080409,14.2134839862,14.2135599275,14.2136358648,14.2137117981,14.2137877274,14.2138636527,14.2139395741,14.2140154914,14.2140914047,14.2141673141,14.2142432194, +14.2143191208,14.2143950182,14.2144709115,14.2145468009,14.2146226863,14.2146985677,14.2147744451,14.2148503185,14.2149261879,14.2150020534,14.2150779148,14.2151537723,14.2152296257,14.2153054752,14.2153813207,14.2154571622, +14.2155329997,14.2156088333,14.2156846628,14.2157604884,14.21583631,14.2159121276,14.2159879412,14.2160637508,14.2161395564,14.2162153581,14.2162911558,14.2163669494,14.2164427392,14.2165185249,14.2165943066,14.2166700844, +14.2167458582,14.216821628,14.2168973938,14.2169731557,14.2170489136,14.2171246675,14.2172004174,14.2172761633,14.2173519053,14.2174276433,14.2175033773,14.2175791073,14.2176548334,14.2177305554,14.2178062736,14.2178819877, +14.2179576979,14.2180334041,14.2181091063,14.2181848045,14.2182604988,14.2183361891,14.2184118754,14.2184875578,14.2185632362,14.2186389106,14.2187145811,14.2187902476,14.2188659101,14.2189415686,14.2190172232,14.2190928738, +14.2191685205,14.2192441631,14.2193198019,14.2193954366,14.2194710674,14.2195466942,14.2196223171,14.219697936,14.2197735509,14.2198491619,14.2199247689,14.2200003719,14.220075971,14.2201515661,14.2202271573,14.2203027445, +14.2203783277,14.220453907,14.2205294823,14.2206050537,14.2206806211,14.2207561845,14.220831744,14.2209072995,14.2209828511,14.2210583987,14.2211339424,14.2212094821,14.2212850178,14.2213605496,14.2214360774,14.2215116013, +14.2215871213,14.2216626372,14.2217381493,14.2218136573,14.2218891615,14.2219646616,14.2220401579,14.2221156501,14.2221911385,14.2222666228,14.2223421032,14.2224175797,14.2224930522,14.2225685208,14.2226439855,14.2227194461, +14.2227949029,14.2228703557,14.2229458045,14.2230212494,14.2230966903,14.2231721274,14.2232475604,14.2233229895,14.2233984147,14.2234738359,14.2235492532,14.2236246666,14.223700076,14.2237754815,14.223850883,14.2239262806, +14.2240016742,14.2240770639,14.2241524497,14.2242278315,14.2243032094,14.2243785833,14.2244539533,14.2245293194,14.2246046815,14.2246800397,14.224755394,14.2248307443,14.2249060907,14.2249814332,14.2250567717,14.2251321063, +14.2252074369,14.2252827637,14.2253580865,14.2254334053,14.2255087202,14.2255840312,14.2256593383,14.2257346414,14.2258099406,14.2258852359,14.2259605272,14.2260358146,14.2261110981,14.2261863777,14.2262616533,14.226336925, +14.2264121928,14.2264874566,14.2265627166,14.2266379725,14.2267132246,14.2267884728,14.226863717,14.2269389573,14.2270141936,14.2270894261,14.2271646546,14.2272398792,14.2273150999,14.2273903167,14.2274655295,14.2275407384, +14.2276159434,14.2276911445,14.2277663416,14.2278415349,14.2279167242,14.2279919096,14.2280670911,14.2281422686,14.2282174423,14.228292612,14.2283677778,14.2284429397,14.2285180977,14.2285932518,14.2286684019,14.2287435482, +14.2288186905,14.2288938289,14.2289689634,14.229044094,14.2291192207,14.2291943434,14.2292694623,14.2293445772,14.2294196882,14.2294947953,14.2295698986,14.2296449978,14.2297200932,14.2297951847,14.2298702723,14.229945356, +14.2300204357,14.2300955116,14.2301705835,14.2302456515,14.2303207157,14.2303957759,14.2304708322,14.2305458846,14.2306209331,14.2306959777,14.2307710184,14.2308460552,14.2309210881,14.2309961171,14.2310711422,14.2311461634, +14.2312211807,14.2312961941,14.2313712036,14.2314462092,14.2315212109,14.2315962087,14.2316712026,14.2317461926,14.2318211787,14.2318961609,14.2319711392,14.2320461136,14.2321210841,14.2321960507,14.2322710134,14.2323459722, +14.2324209272,14.2324958782,14.2325708254,14.2326457686,14.232720708,14.2327956434,14.232870575,14.2329455027,14.2330204265,14.2330953464,14.2331702624,14.2332451745,14.2333200827,14.2333949871,14.2334698875,14.2335447841, +14.2336196768,14.2336945655,14.2337694504,14.2338443315,14.2339192086,14.2339940818,14.2340689512,14.2341438167,14.2342186782,14.2342935359,14.2343683898,14.2344432397,14.2345180857,14.2345929279,14.2346677662,14.2347426006, +14.2348174311,14.2348922578,14.2349670805,14.2350418994,14.2351167144,14.2351915255,14.2352663328,14.2353411361,14.2354159356,14.2354907312,14.2355655229,14.2356403108,14.2357150948,14.2357898749,14.2358646511,14.2359394234, +14.2360141919,14.2360889565,14.2361637172,14.2362384741,14.236313227,14.2363879761,14.2364627214,14.2365374627,14.2366122002,14.2366869338,14.2367616636,14.2368363894,14.2369111114,14.2369858296,14.2370605438,14.2371352542, +14.2372099608,14.2372846634,14.2373593622,14.2374340571,14.2375087482,14.2375834354,14.2376581187,14.2377327981,14.2378074737,14.2378821454,14.2379568133,14.2380314773,14.2381061374,14.2381807937,14.2382554461,14.2383300946, +14.2384047393,14.2384793801,14.2385540171,14.2386286502,14.2387032794,14.2387779048,14.2388525263,14.238927144,14.2390017578,14.2390763677,14.2391509738,14.239225576,14.2393001744,14.2393747689,14.2394493595,14.2395239463, +14.2395985292,14.2396731083,14.2397476836,14.2398222549,14.2398968224,14.2399713861,14.2400459459,14.2401205019,14.240195054,14.2402696022,14.2403441466,14.2404186872,14.2404932239,14.2405677567,14.2406422857,14.2407168109, +14.2407913322,14.2408658496,14.2409403632,14.241014873,14.2410893789,14.2411638809,14.2412383791,14.2413128735,14.241387364,14.2414618507,14.2415363335,14.2416108125,14.2416852876,14.2417597589,14.2418342263,14.2419086899, +14.2419831497,14.2420576056,14.2421320577,14.2422065059,14.2422809503,14.2423553909,14.2424298276,14.2425042604,14.2425786895,14.2426531146,14.242727536,14.2428019535,14.2428763672,14.242950777,14.243025183,14.2430995852, +14.2431739835,14.243248378,14.2433227686,14.2433971554,14.2434715384,14.2435459175,14.2436202928,14.2436946643,14.243769032,14.2438433958,14.2439177557,14.2439921119,14.2440664642,14.2441408127,14.2442151573,14.2442894981, +14.2443638351,14.2444381683,14.2445124976,14.2445868231,14.2446611448,14.2447354626,14.2448097766,14.2448840868,14.2449583932,14.2450326957,14.2451069944,14.2451812893,14.2452555803,14.2453298675,14.2454041509,14.2454784305, +14.2455527063,14.2456269782,14.2457012463,14.2457755106,14.245849771,14.2459240277,14.2459982805,14.2460725295,14.2461467746,14.246221016,14.2462952535,14.2463694872,14.2464437171,14.2465179432,14.2465921654,14.2466663839, +14.2467405985,14.2468148093,14.2468890163,14.2469632194,14.2470374188,14.2471116143,14.247185806,14.2472599939,14.247334178,14.2474083583,14.2474825348,14.2475567074,14.2476308762,14.2477050413,14.2477792025,14.2478533599, +14.2479275134,14.2480016632,14.2480758092,14.2481499513,14.2482240897,14.2482982242,14.2483723549,14.2484464818,14.2485206049,14.2485947242,14.2486688397,14.2487429514,14.2488170593,14.2488911633,14.2489652636,14.2490393601, +14.2491134527,14.2491875416,14.2492616266,14.2493357078,14.2494097853,14.2494838589,14.2495579287,14.2496319947,14.249706057,14.2497801154,14.24985417,14.2499282208,14.2500022678,14.2500763111,14.2501503505,14.2502243861, +14.2502984179,14.2503724459,14.2504464701,14.2505204906,14.2505945072,14.25066852,14.2507425291,14.2508165343,14.2508905357,14.2509645334,14.2510385272,14.2511125173,14.2511865035,14.251260486,14.2513344647,14.2514084395, +14.2514824106,14.2515563779,14.2516303414,14.2517043011,14.251778257,14.2518522092,14.2519261575,14.252000102,14.2520740428,14.2521479798,14.2522219129,14.2522958423,14.2523697679,14.2524436897,14.2525176078,14.252591522, +14.2526654325,14.2527393391,14.252813242,14.2528871411,14.2529610364,14.2530349279,14.2531088157,14.2531826996,14.2532565798,14.2533304562,14.2534043288,14.2534781976,14.2535520626,14.2536259239,14.2536997814,14.2537736351, +14.253847485,14.2539213311,14.2539951735,14.2540690121,14.2541428469,14.2542166779,14.2542905051,14.2543643286,14.2544381483,14.2545119642,14.2545857763,14.2546595847,14.2547333892,14.2548071901,14.2548809871,14.2549547803, +14.2550285698,14.2551023555,14.2551761375,14.2552499156,14.25532369,14.2553974606,14.2554712275,14.2555449905,14.2556187498,14.2556925054,14.2557662571,14.2558400051,14.2559137493,14.2559874898,14.2560612265,14.2561349594, +14.2562086885,14.2562824139,14.2563561355,14.2564298534,14.2565035674,14.2565772777,14.2566509843,14.2567246871,14.2567983861,14.2568720813,14.2569457728,14.2570194605,14.2570931445,14.2571668247,14.2572405011,14.2573141738, +14.2573878427,14.2574615078,14.2575351692,14.2576088268,14.2576824807,14.2577561308,14.2578297772,14.2579034197,14.2579770586,14.2580506936,14.2581243249,14.2581979525,14.2582715763,14.2583451963,14.2584188126,14.2584924251, +14.2585660339,14.2586396389,14.2587132402,14.2587868377,14.2588604314,14.2589340214,14.2590076076,14.2590811901,14.2591547689,14.2592283438,14.2593019151,14.2593754826,14.2594490463,14.2595226063,14.2595961625,14.259669715, +14.2597432637,14.2598168087,14.2598903499,14.2599638874,14.2600374211,14.2601109511,14.2601844773,14.2602579998,14.2603315186,14.2604050336,14.2604785448,14.2605520523,14.2606255561,14.2606990561,14.2607725524,14.2608460449, +14.2609195337,14.2609930187,14.2610665,14.2611399776,14.2612134514,14.2612869214,14.2613603878,14.2614338504,14.2615073092,14.2615807643,14.2616542157,14.2617276633,14.2618011072,14.2618745473,14.2619479838,14.2620214164, +14.2620948454,14.2621682706,14.262241692,14.2623151098,14.2623885238,14.262461934,14.2625353405,14.2626087433,14.2626821424,14.2627555377,14.2628289293,14.2629023171,14.2629757012,14.2630490816,14.2631224583,14.2631958312, +14.2632692004,14.2633425658,14.2634159276,14.2634892856,14.2635626398,14.2636359904,14.2637093372,14.2637826802,14.2638560196,14.2639293552,14.2640026871,14.2640760153,14.2641493397,14.2642226604,14.2642959774,14.2643692907, +14.2644426002,14.264515906,14.2645892081,14.2646625065,14.2647358011,14.264809092,14.2648823792,14.2649556627,14.2650289425,14.2651022185,14.2651754908,14.2652487594,14.2653220242,14.2653952854,14.2654685428,14.2655417965, +14.2656150465,14.2656882927,14.2657615353,14.2658347741,14.2659080092,14.2659812406,14.2660544683,14.2661276923,14.2662009125,14.266274129,14.2663473418,14.2664205509,14.2664937563,14.266566958,14.2666401559,14.2667133502, +14.2667865407,14.2668597275,14.2669329106,14.26700609,14.2670792657,14.2671524376,14.2672256059,14.2672987704,14.2673719313,14.2674450884,14.2675182418,14.2675913915,14.2676645375,14.2677376798,14.2678108184,14.2678839532, +14.2679570844,14.2680302119,14.2681033356,14.2681764557,14.268249572,14.2683226846,14.2683957936,14.2684688988,14.2685420003,14.2686150981,14.2686881922,14.2687612826,14.2688343693,14.2689074523,14.2689805316,14.2690536073, +14.2691266791,14.2691997473,14.2692728118,14.2693458726,14.2694189297,14.2694919831,14.2695650328,14.2696380788,14.2697111211,14.2697841597,14.2698571947,14.2699302259,14.2700032534,14.2700762772,14.2701492973,14.2702223137, +14.2702953265,14.2703683355,14.2704413408,14.2705143425,14.2705873404,14.2706603347,14.2707333253,14.2708063121,14.2708792953,14.2709522748,14.2710252506,14.2710982227,14.2711711911,14.2712441559,14.2713171169,14.2713900742, +14.2714630279,14.2715359779,14.2716089242,14.2716818667,14.2717548056,14.2718277409,14.2719006724,14.2719736002,14.2720465244,14.2721194449,14.2721923616,14.2722652747,14.2723381842,14.2724110899,14.2724839919,14.2725568903, +14.272629785,14.272702676,14.2727755633,14.2728484469,14.2729213269,14.2729942031,14.2730670757,14.2731399446,14.2732128099,14.2732856714,14.2733585293,14.2734313835,14.273504234,14.2735770808,14.2736499239,14.2737227634, +14.2737955992,14.2738684313,14.2739412598,14.2740140845,14.2740869056,14.274159723,14.2742325368,14.2743053469,14.2743781532,14.274450956,14.274523755,14.2745965504,14.2746693421,14.2747421301,14.2748149145,14.2748876951, +14.2749604721,14.2750332455,14.2751060151,14.2751787811,14.2752515435,14.2753243021,14.2753970571,14.2754698084,14.2755425561,14.2756153001,14.2756880404,14.275760777,14.27583351,14.2759062393,14.275978965,14.276051687, +14.2761244053,14.2761971199,14.2762698309,14.2763425382,14.2764152419,14.2764879419,14.2765606382,14.2766333309,14.2767060199,14.2767787052,14.2768513869,14.2769240649,14.2769967393,14.27706941,14.277142077,14.2772147404, +14.2772874001,14.2773600562,14.2774327086,14.2775053573,14.2775780024,14.2776506438,14.2777232816,14.2777959157,14.2778685462,14.277941173,14.2780137961,14.2780864156,14.2781590314,14.2782316436,14.2783042521,14.278376857, +14.2784494582,14.2785220558,14.2785946497,14.2786672399,14.2787398266,14.2788124095,14.2788849888,14.2789575645,14.2790301364,14.2791027048,14.2791752695,14.2792478305,14.2793203879,14.2793929417,14.2794654918,14.2795380382, +14.2796105811,14.2796831202,14.2797556557,14.2798281876,14.2799007158,14.2799732404,14.2800457613,14.2801182786,14.2801907922,14.2802633022,14.2803358086,14.2804083113,14.2804808103,14.2805533057,14.2806257975,14.2806982856, +14.2807707701,14.280843251,14.2809157282,14.2809882018,14.2810606717,14.281133138,14.2812056006,14.2812780596,14.281350515,14.2814229667,14.2814954148,14.2815678593,14.2816403001,14.2817127372,14.2817851708,14.2818576007, +14.281930027,14.2820024496,14.2820748686,14.2821472839,14.2822196957,14.2822921038,14.2823645082,14.282436909,14.2825093062,14.2825816998,14.2826540897,14.282726476,14.2827988587,14.2828712377,14.2829436131,14.2830159849, +14.283088353,14.2831607175,14.2832330784,14.2833054357,14.2833777893,14.2834501393,14.2835224856,14.2835948284,14.2836671675,14.283739503,14.2838118348,14.2838841631,14.2839564877,14.2840288086,14.284101126,14.2841734397, +14.2842457498,14.2843180563,14.2843903592,14.2844626584,14.284534954,14.284607246,14.2846795344,14.2847518191,14.2848241002,14.2848963777,14.2849686516,14.2850409219,14.2851131885,14.2851854515,14.2852577109,14.2853299667, +14.2854022189,14.2854744674,14.2855467123,14.2856189536,14.2856911913,14.2857634254,14.2858356559,14.2859078827,14.2859801059,14.2860523255,14.2861245415,14.2861967539,14.2862689627,14.2863411678,14.2864133694,14.2864855673, +14.2865577616,14.2866299523,14.2867021394,14.2867743229,14.2868465027,14.286918679,14.2869908516,14.2870630207,14.2871351861,14.2872073479,14.2872795061,14.2873516607,14.2874238117,14.2874959591,14.2875681028,14.287640243, +14.2877123795,14.2877845125,14.2878566418,14.2879287676,14.2880008897,14.2880730082,14.2881451232,14.2882172345,14.2882893422,14.2883614463,14.2884335468,14.2885056437,14.288577737,14.2886498267,14.2887219128,14.2887939953, +14.2888660742,14.2889381495,14.2890102211,14.2890822892,14.2891543537,14.2892264146,14.2892984719,14.2893705256,14.2894425757,14.2895146222,14.2895866651,14.2896587044,14.2897307401,14.2898027722,14.2898748007,14.2899468256, +14.2900188469,14.2900908647,14.2901628788,14.2902348893,14.2903068963,14.2903788996,14.2904508994,14.2905228955,14.2905948881,14.2906668771,14.2907388624,14.2908108442,14.2908828224,14.290954797,14.2910267681,14.2910987355, +14.2911706993,14.2912426596,14.2913146162,14.2913865693,14.2914585188,14.2915304647,14.291602407,14.2916743457,14.2917462808,14.2918182124,14.2918901403,14.2919620647,14.2920339855,14.2921059027,14.2921778163,14.2922497264, +14.2923216328,14.2923935357,14.2924654349,14.2925373306,14.2926092228,14.2926811113,14.2927529962,14.2928248776,14.2928967554,14.2929686296,14.2930405002,14.2931123673,14.2931842308,14.2932560906,14.293327947,14.2933997997, +14.2934716488,14.2935434944,14.2936153364,14.2936871748,14.2937590097,14.2938308409,14.2939026686,14.2939744927,14.2940463133,14.2941181302,14.2941899436,14.2942617534,14.2943335597,14.2944053623,14.2944771614,14.2945489569, +14.2946207489,14.2946925373,14.2947643221,14.2948361033,14.294907881,14.294979655,14.2950514256,14.2951231925,14.2951949559,14.2952667157,14.2953384719,14.2954102246,14.2954819737,14.2955537192,14.2956254612,14.2956971996, +14.2957689344,14.2958406657,14.2959123934,14.2959841175,14.2960558381,14.2961275551,14.2961992685,14.2962709784,14.2963426847,14.2964143874,14.2964860866,14.2965577822,14.2966294743,14.2967011628,14.2967728477,14.2968445291, +14.2969162069,14.2969878811,14.2970595518,14.2971312189,14.2972028825,14.2972745425,14.2973461989,14.2974178518,14.2974895012,14.2975611469,14.2976327891,14.2977044278,14.2977760629,14.2978476944,14.2979193224,14.2979909468, +14.2980625677,14.298134185,14.2982057988,14.298277409,14.2983490157,14.2984206188,14.2984922183,14.2985638143,14.2986354067,14.2987069956,14.298778581,14.2988501627,14.298921741,14.2989933156,14.2990648868,14.2991364544, +14.2992080184,14.2992795789,14.2993511358,14.2994226892,14.299494239,14.2995657853,14.299637328,14.2997088672,14.2997804029,14.299851935,14.2999234635,14.2999949885,14.30006651,14.3001380279,14.3002095422,14.3002810531, +14.3003525603,14.3004240641,14.3004955642,14.3005670609,14.300638554,14.3007100436,14.3007815296,14.300853012,14.300924491,14.3009959664,14.3010674382,14.3011389065,14.3012103713,14.3012818325,14.3013532902,14.3014247444, +14.301496195,14.3015676421,14.3016390856,14.3017105256,14.3017819621,14.301853395,14.3019248244,14.3019962502,14.3020676725,14.3021390913,14.3022105065,14.3022819183,14.3023533264,14.3024247311,14.3024961322,14.3025675297, +14.3026389238,14.3027103143,14.3027817013,14.3028530847,14.3029244646,14.302995841,14.3030672138,14.3031385832,14.3032099489,14.3032813112,14.3033526699,14.3034240251,14.3034953768,14.3035667249,14.3036380695,14.3037094106, +14.3037807482,14.3038520822,14.3039234127,14.3039947397,14.3040660631,14.304137383,14.3042086994,14.3042800123,14.3043513217,14.3044226275,14.3044939298,14.3045652286,14.3046365238,14.3047078155,14.3047791037,14.3048503884, +14.3049216696,14.3049929472,14.3050642213,14.3051354919,14.305206759,14.3052780226,14.3053492826,14.3054205391,14.3054917921,14.3055630416,14.3056342875,14.30570553,14.3057767689,14.3058480043,14.3059192362,14.3059904646, +14.3060616894,14.3061329108,14.3062041286,14.3062753429,14.3063465537,14.306417761,14.3064889647,14.306560165,14.3066313617,14.3067025549,14.3067737446,14.3068449308,14.3069161135,14.3069872927,14.3070584684,14.3071296405, +14.3072008091,14.3072719743,14.3073431359,14.307414294,14.3074854486,14.3075565997,14.3076277473,14.3076988913,14.3077700319,14.3078411689,14.3079123025,14.3079834325,14.3080545591,14.3081256821,14.3081968016,14.3082679176, +14.3083390301,14.3084101391,14.3084812446,14.3085523466,14.3086234451,14.3086945401,14.3087656316,14.3088367196,14.3089078041,14.308978885,14.3090499625,14.3091210365,14.309192107,14.3092631739,14.3093342374,14.3094052974, +14.3094763538,14.3095474068,14.3096184563,14.3096895023,14.3097605447,14.3098315837,14.3099026192,14.3099736512,14.3100446796,14.3101157046,14.3101867261,14.3102577441,14.3103287586,14.3103997696,14.3104707771,14.3105417811, +14.3106127817,14.3106837787,14.3107547722,14.3108257623,14.3108967488,14.3109677318,14.3110387114,14.3111096875,14.3111806601,14.3112516291,14.3113225947,14.3113935568,14.3114645154,14.3115354706,14.3116064222,14.3116773703, +14.311748315,14.3118192562,14.3118901939,14.311961128,14.3120320587,14.312102986,14.3121739097,14.3122448299,14.3123157467,14.31238666,14.3124575697,14.312528476,14.3125993789,14.3126702782,14.312741174,14.3128120664, +14.3128829553,14.3129538407,14.3130247226,14.313095601,14.313166476,14.3132373474,14.3133082154,14.3133790799,14.313449941,14.3135207985,14.3135916526,14.3136625032,14.3137333503,14.3138041939,14.313875034,14.3139458707, +14.3140167039,14.3140875336,14.3141583599,14.3142291826,14.3143000019,14.3143708177,14.31444163,14.3145124389,14.3145832443,14.3146540462,14.3147248446,14.3147956396,14.3148664311,14.3149372191,14.3150080036,14.3150787847, +14.3151495623,14.3152203364,14.315291107,14.3153618742,14.3154326379,14.3155033981,14.3155741549,14.3156449082,14.315715658,14.3157864044,14.3158571473,14.3159278867,14.3159986226,14.3160693551,14.3161400841,14.3162108097, +14.3162815317,14.3163522504,14.3164229655,14.3164936772,14.3165643854,14.3166350901,14.3167057914,14.3167764892,14.3168471836,14.3169178745,14.3169885619,14.3170592459,14.3171299264,14.3172006034,14.317271277,14.3173419471, +14.3174126138,14.317483277,14.3175539367,14.317624593,14.3176952458,14.3177658951,14.317836541,14.3179071834,14.3179778224,14.3180484579,14.31811909,14.3181897186,14.3182603437,14.3183309654,14.3184015836,14.3184721984, +14.3185428097,14.3186134176,14.318684022,14.3187546229,14.3188252204,14.3188958144,14.318966405,14.3190369921,14.3191075758,14.319178156,14.3192487328,14.3193193061,14.319389876,14.3194604424,14.3195310054,14.3196015649, +14.3196721209,14.3197426736,14.3198132227,14.3198837684,14.3199543107,14.3200248495,14.3200953849,14.3201659168,14.3202364452,14.3203069703,14.3203774918,14.32044801,14.3205185246,14.3205890359,14.3206595436,14.320730048, +14.3208005489,14.3208710463,14.3209415403,14.3210120309,14.321082518,14.3211530017,14.3212234819,14.3212939587,14.321364432,14.3214349019,14.3215053684,14.3215758314,14.321646291,14.3217167471,14.3217871998,14.3218576491, +14.3219280949,14.3219985373,14.3220689762,14.3221394117,14.3222098437,14.3222802724,14.3223506975,14.3224211193,14.3224915376,14.3225619525,14.3226323639,14.3227027719,14.3227731765,14.3228435776,14.3229139753,14.3229843695, +14.3230547603,14.3231251477,14.3231955317,14.3232659122,14.3233362893,14.3234066629,14.3234770332,14.3235473999,14.3236177633,14.3236881232,14.3237584797,14.3238288328,14.3238991824,14.3239695286,14.3240398714,14.3241102107, +14.3241805466,14.3242508791,14.3243212082,14.3243915338,14.324461856,14.3245321747,14.3246024901,14.324672802,14.3247431105,14.3248134156,14.3248837172,14.3249540154,14.3250243102,14.3250946016,14.3251648895,14.325235174, +14.3253054551,14.3253757328,14.325446007,14.3255162778,14.3255865452,14.3256568092,14.3257270697,14.3257973269,14.3258675806,14.3259378309,14.3260080777,14.3260783212,14.3261485612,14.3262187978,14.326289031,14.3263592608, +14.3264294871,14.3264997101,14.3265699296,14.3266401457,14.3267103583,14.3267805676,14.3268507735,14.3269209759,14.3269911749,14.3270613705,14.3271315627,14.3272017515,14.3272719368,14.3273421187,14.3274122973,14.3274824724, +14.3275526441,14.3276228124,14.3276929772,14.3277631387,14.3278332968,14.3279034514,14.3279736026,14.3280437504,14.3281138948,14.3281840358,14.3282541734,14.3283243076,14.3283944384,14.3284645657,14.3285346897,14.3286048102, +14.3286749273,14.3287450411,14.3288151514,14.3288852583,14.3289553618,14.3290254619,14.3290955586,14.3291656519,14.3292357417,14.3293058282,14.3293759113,14.3294459909,14.3295160672,14.3295861401,14.3296562095,14.3297262756, +14.3297963382,14.3298663975,14.3299364533,14.3300065058,14.3300765548,14.3301466004,14.3302166427,14.3302866815,14.330356717,14.330426749,14.3304967776,14.3305668029,14.3306368247,14.3307068432,14.3307768582,14.3308468699, +14.3309168781,14.330986883,14.3310568844,14.3311268825,14.3311968772,14.3312668684,14.3313368563,14.3314068408,14.3314768219,14.3315467995,14.3316167738,14.3316867447,14.3317567123,14.3318266764,14.3318966371,14.3319665944, +14.3320365484,14.3321064989,14.3321764461,14.3322463898,14.3323163302,14.3323862672,14.3324562008,14.332526131,14.3325960578,14.3326659812,14.3327359012,14.3328058179,14.3328757312,14.332945641,14.3330155475,14.3330854506, +14.3331553503,14.3332252466,14.3332951396,14.3333650291,14.3334349153,14.3335047981,14.3335746775,14.3336445535,14.3337144261,14.3337842953,14.3338541612,14.3339240237,14.3339938828,14.3340637385,14.3341335908,14.3342034397, +14.3342732853,14.3343431275,14.3344129663,14.3344828017,14.3345526338,14.3346224624,14.3346922877,14.3347621096,14.3348319281,14.3349017433,14.334971555,14.3350413634,14.3351111684,14.3351809701,14.3352507683,14.3353205632, +14.3353903547,14.3354601428,14.3355299276,14.3355997089,14.3356694869,14.3357392616,14.3358090328,14.3358788007,14.3359485652,14.3360183263,14.3360880841,14.3361578385,14.3362275895,14.3362973371,14.3363670814,14.3364368223, +14.3365065598,14.336576294,14.3366460247,14.3367157522,14.3367854762,14.3368551969,14.3369249142,14.3369946281,14.3370643387,14.3371340459,14.3372037497,14.3372734502,14.3373431473,14.337412841,14.3374825314,14.3375522184, +14.337621902,14.3376915823,14.3377612592,14.3378309327,14.3379006029,14.3379702697,14.3380399331,14.3381095932,14.3381792499,14.3382489033,14.3383185532,14.3383881999,14.3384578431,14.338527483,14.3385971196,14.3386667528, +14.3387363826,14.338806009,14.3388756321,14.3389452519,14.3390148683,14.3390844813,14.3391540909,14.3392236972,14.3392933002,14.3393628998,14.339432496,14.3395020889,14.3395716784,14.3396412645,14.3397108473,14.3397804268, +14.3398500029,14.3399195756,14.339989145,14.340058711,14.3401282737,14.340197833,14.340267389,14.3403369416,14.3404064909,14.3404760368,14.3405455793,14.3406151185,14.3406846544,14.3407541869,14.340823716,14.3408932418, +14.3409627643,14.3410322833,14.3411017991,14.3411713115,14.3412408205,14.3413103262,14.3413798286,14.3414493276,14.3415188232,14.3415883156,14.3416578045,14.3417272901,14.3417967724,14.3418662513,14.3419357269,14.3420051991, +14.342074668,14.3421441335,14.3422135957,14.3422830546,14.3423525101,14.3424219623,14.3424914111,14.3425608565,14.3426302987,14.3426997375,14.3427691729,14.342838605,14.3429080338,14.3429774592,14.3430468813,14.3431163, +14.3431857154,14.3432551275,14.3433245362,14.3433939416,14.3434633437,14.3435327424,14.3436021377,14.3436715298,14.3437409185,14.3438103038,14.3438796858,14.3439490645,14.3440184399,14.3440878119,14.3441571806,14.3442265459, +14.3442959079,14.3443652666,14.3444346219,14.3445039739,14.3445733226,14.3446426679,14.3447120099,14.3447813486,14.3448506839,14.3449200159,14.3449893446,14.34505867,14.345127992,14.3451973107,14.345266626,14.345335938, +14.3454052467,14.3454745521,14.3455438541,14.3456131528,14.3456824482,14.3457517402,14.345821029,14.3458903143,14.3459595964,14.3460288751,14.3460981505,14.3461674226,14.3462366914,14.3463059568,14.3463752189,14.3464444777, +14.3465137332,14.3465829853,14.3466522341,14.3467214796,14.3467907218,14.3468599606,14.3469291961,14.3469984283,14.3470676572,14.3471368827,14.3472061049,14.3472753238,14.3473445394,14.3474137517,14.3474829606,14.3475521663, +14.3476213686,14.3476905676,14.3477597632,14.3478289556,14.3478981446,14.3479673303,14.3480365127,14.3481056918,14.3481748675,14.34824404,14.3483132091,14.3483823749,14.3484515374,14.3485206966,14.3485898524,14.348659005, +14.3487281542,14.3487973002,14.3488664428,14.348935582,14.349004718,14.3490738507,14.34914298,14.3492121061,14.3492812288,14.3493503482,14.3494194643,14.3494885771,14.3495576866,14.3496267928,14.3496958957,14.3497649952, +14.3498340915,14.3499031844,14.349972274,14.3500413603,14.3501104433,14.3501795231,14.3502485994,14.3503176725,14.3503867423,14.3504558088,14.350524872,14.3505939318,14.3506629884,14.3507320416,14.3508010916,14.3508701382, +14.3509391815,14.3510082216,14.3510772583,14.3511462917,14.3512153219,14.3512843487,14.3513533722,14.3514223924,14.3514914093,14.3515604229,14.3516294332,14.3516984403,14.351767444,14.3518364444,14.3519054415,14.3519744353, +14.3520434258,14.352112413,14.3521813969,14.3522503775,14.3523193548,14.3523883289,14.3524572996,14.352526267,14.3525952311,14.352664192,14.3527331495,14.3528021037,14.3528710547,14.3529400023,14.3530089467,14.3530778877, +14.3531468255,14.35321576,14.3532846911,14.353353619,14.3534225436,14.3534914649,14.3535603829,14.3536292976,14.353698209,14.3537671172,14.353836022,14.3539049236,14.3539738218,14.3540427168,14.3541116085,14.3541804968, +14.3542493819,14.3543182638,14.3543871423,14.3544560175,14.3545248894,14.3545937581,14.3546626235,14.3547314856,14.3548003444,14.3548691999,14.3549380521,14.355006901,14.3550757467,14.355144589,14.3552134281,14.3552822639, +14.3553510964,14.3554199257,14.3554887516,14.3555575743,14.3556263936,14.3556952097,14.3557640225,14.3558328321,14.3559016383,14.3559704413,14.356039241,14.3561080374,14.3561768305,14.3562456204,14.3563144069,14.3563831902, +14.3564519702,14.356520747,14.3565895204,14.3566582906,14.3567270575,14.3567958211,14.3568645814,14.3569333385,14.3570020923,14.3570708428,14.35713959,14.357208334,14.3572770746,14.357345812,14.3574145462,14.357483277, +14.3575520046,14.3576207289,14.35768945,14.3577581677,14.3578268822,14.3578955934,14.3579643014,14.358033006,14.3581017074,14.3581704056,14.3582391004,14.358307792,14.3583764803,14.3584451654,14.3585138471,14.3585825257, +14.3586512009,14.3587198729,14.3587885416,14.358857207,14.3589258692,14.3589945281,14.3590631837,14.359131836,14.3592004851,14.359269131,14.3593377735,14.3594064128,14.3594750488,14.3595436816,14.3596123111,14.3596809374, +14.3597495603,14.35981818,14.3598867965,14.3599554097,14.3600240196,14.3600926262,14.3601612296,14.3602298297,14.3602984266,14.3603670202,14.3604356106,14.3605041977,14.3605727815,14.360641362,14.3607099393,14.3607785134, +14.3608470842,14.3609156517,14.360984216,14.361052777,14.3611213347,14.3611898892,14.3612584405,14.3613269884,14.3613955332,14.3614640746,14.3615326128,14.3616011478,14.3616696795,14.3617382079,14.3618067331,14.3618752551, +14.3619437737,14.3620122892,14.3620808013,14.3621493102,14.3622178159,14.3622863183,14.3623548175,14.3624233134,14.362491806,14.3625602954,14.3626287816,14.3626972645,14.3627657442,14.3628342206,14.3629026937,14.3629711636, +14.3630396303,14.3631080937,14.3631765538,14.3632450107,14.3633134644,14.3633819148,14.3634503619,14.3635188059,14.3635872465,14.3636556839,14.3637241181,14.363792549,14.3638609767,14.3639294012,14.3639978224,14.3640662403, +14.364134655,14.3642030665,14.3642714747,14.3643398797,14.3644082814,14.3644766799,14.3645450751,14.3646134671,14.3646818559,14.3647502414,14.3648186237,14.3648870027,14.3649553785,14.365023751,14.3650921203,14.3651604864, +14.3652288493,14.3652972088,14.3653655652,14.3654339183,14.3655022682,14.3655706148,14.3656389582,14.3657072984,14.3657756353,14.365843969,14.3659122995,14.3659806267,14.3660489507,14.3661172714,14.3661855889,14.3662539032, +14.3663222142,14.3663905221,14.3664588266,14.366527128,14.3665954261,14.3666637209,14.3667320126,14.366800301,14.3668685862,14.3669368681,14.3670051468,14.3670734223,14.3671416946,14.3672099636,14.3672782294,14.3673464919, +14.3674147512,14.3674830073,14.3675512602,14.3676195099,14.3676877563,14.3677559995,14.3678242394,14.3678924761,14.3679607096,14.3680289399,14.368097167,14.3681653908,14.3682336114,14.3683018288,14.3683700429,14.3684382538, +14.3685064615,14.368574666,14.3686428672,14.3687110652,14.36877926,14.3688474516,14.36891564,14.3689838251,14.369052007,14.3691201857,14.3691883611,14.3692565334,14.3693247024,14.3693928682,14.3694610308,14.3695291901, +14.3695973463,14.3696654992,14.3697336489,14.3698017954,14.3698699386,14.3699380787,14.3700062155,14.3700743491,14.3701424795,14.3702106067,14.3702787306,14.3703468514,14.3704149689,14.3704830832,14.3705511943,14.3706193021, +14.3706874068,14.3707555083,14.3708236065,14.3708917015,14.3709597933,14.3710278819,14.3710959673,14.3711640494,14.3712321284,14.3713002041,14.3713682766,14.3714363459,14.371504412,14.3715724749,14.3716405346,14.3717085911, +14.3717766443,14.3718446944,14.3719127412,14.3719807849,14.3720488253,14.3721168625,14.3721848965,14.3722529273,14.3723209549,14.3723889792,14.3724570004,14.3725250184,14.3725930331,14.3726610447,14.372729053,14.3727970582, +14.3728650601,14.3729330588,14.3730010544,14.3730690467,14.3731370358,14.3732050217,14.3732730044,14.3733409839,14.3734089602,14.3734769333,14.3735449032,14.3736128699,14.3736808334,14.3737487937,14.3738167508,14.3738847047, +14.3739526554,14.3740206029,14.3740885471,14.3741564882,14.3742244261,14.3742923608,14.3743602923,14.3744282206,14.3744961457,14.3745640676,14.3746319863,14.3746999018,14.3747678141,14.3748357232,14.3749036291,14.3749715318, +14.3750394313,14.3751073277,14.3751752208,14.3752431107,14.3753109975,14.375378881,14.3754467614,14.3755146385,14.3755825125,14.3756503833,14.3757182508,14.3757861152,14.3758539764,14.3759218344,14.3759896892,14.3760575408, +14.3761253893,14.3761932345,14.3762610766,14.3763289154,14.3763967511,14.3764645836,14.3765324128,14.3766002389,14.3766680619,14.3767358816,14.3768036981,14.3768715115,14.3769393216,14.3770071286,14.3770749324,14.377142733, +14.3772105304,14.3772783246,14.3773461157,14.3774139035,14.3774816882,14.3775494697,14.377617248,14.3776850231,14.377752795,14.3778205638,14.3778883293,14.3779560917,14.3780238509,14.3780916069,14.3781593598,14.3782271094, +14.3782948559,14.3783625992,14.3784303393,14.3784980762,14.37856581,14.3786335406,14.378701268,14.3787689922,14.3788367132,14.3789044311,14.3789721457,14.3790398572,14.3791075656,14.3791752707,14.3792429727,14.3793106715, +14.3793783671,14.3794460595,14.3795137488,14.3795814349,14.3796491178,14.3797167975,14.3797844741,14.3798521474,14.3799198176,14.3799874847,14.3800551485,14.3801228092,14.3801904667,14.3802581211,14.3803257723,14.3803934203, +14.3804610651,14.3805287067,14.3805963452,14.3806639805,14.3807316127,14.3807992417,14.3808668675,14.3809344901,14.3810021096,14.3810697258,14.381137339,14.3812049489,14.3812725557,14.3813401593,14.3814077598,14.3814753571, +14.3815429512,14.3816105421,14.3816781299,14.3817457145,14.381813296,14.3818808743,14.3819484494,14.3820160214,14.3820835901,14.3821511558,14.3822187182,14.3822862775,14.3823538337,14.3824213866,14.3824889364,14.3825564831, +14.3826240266,14.3826915669,14.3827591041,14.3828266381,14.3828941689,14.3829616966,14.3830292211,14.3830967424,14.3831642606,14.3832317757,14.3832992875,14.3833667963,14.3834343018,14.3835018042,14.3835693035,14.3836367995, +14.3837042925,14.3837717822,14.3838392689,14.3839067523,14.3839742326,14.3840417098,14.3841091837,14.3841766546,14.3842441222,14.3843115868,14.3843790481,14.3844465063,14.3845139614,14.3845814133,14.3846488621,14.3847163076, +14.3847837501,14.3848511894,14.3849186255,14.3849860585,14.3850534883,14.385120915,14.3851883386,14.3852557589,14.3853231762,14.3853905903,14.3854580012,14.385525409,14.3855928136,14.3856602151,14.3857276134,14.3857950086, +14.3858624006,14.3859297895,14.3859971753,14.3860645579,14.3861319373,14.3861993136,14.3862666868,14.3863340568,14.3864014236,14.3864687874,14.3865361479,14.3866035054,14.3866708596,14.3867382108,14.3868055588,14.3868729036, +14.3869402453,14.3870075839,14.3870749193,14.3871422516,14.3872095807,14.3872769067,14.3873442296,14.3874115493,14.3874788658,14.3875461793,14.3876134896,14.3876807967,14.3877481007,14.3878154016,14.3878826993,14.3879499939, +14.3880172853,14.3880845737,14.3881518588,14.3882191409,14.3882864198,14.3883536955,14.3884209681,14.3884882376,14.388555504,14.3886227672,14.3886900273,14.3887572842,14.388824538,14.3888917887,14.3889590362,14.3890262806, +14.3890935219,14.38916076,14.389227995,14.3892952269,14.3893624556,14.3894296812,14.3894969037,14.3895641231,14.3896313393,14.3896985523,14.3897657623,14.3898329691,14.3899001728,14.3899673733,14.3900345707,14.390101765, +14.3901689562,14.3902361442,14.3903033291,14.3903705109,14.3904376896,14.3905048651,14.3905720375,14.3906392067,14.3907063729,14.3907735359,14.3908406958,14.3909078525,14.3909750062,14.3910421567,14.391109304,14.3911764483, +14.3912435894,14.3913107274,14.3913778623,14.3914449941,14.3915121227,14.3915792482,14.3916463706,14.3917134899,14.391780606,14.391847719,14.3919148289,14.3919819357,14.3920490394,14.3921161399,14.3921832373,14.3922503316, +14.3923174228,14.3923845108,14.3924515958,14.3925186776,14.3925857563,14.3926528319,14.3927199043,14.3927869737,14.3928540399,14.392921103,14.392988163,14.3930552198,14.3931222736,14.3931893242,14.3932563717,14.3933234162, +14.3933904574,14.3934574956,14.3935245307,14.3935915626,14.3936585915,14.3937256172,14.3937926398,14.3938596593,14.3939266756,14.3939936889,14.3940606991,14.3941277061,14.39419471,14.3942617108,14.3943287085,14.3943957031, +14.3944626946,14.394529683,14.3945966682,14.3946636504,14.3947306294,14.3947976054,14.3948645782,14.3949315479,14.3949985145,14.395065478,14.3951324384,14.3951993957,14.3952663498,14.3953333009,14.3954002489,14.3954671937, +14.3955341355,14.3956010741,14.3956680096,14.3957349421,14.3958018714,14.3958687976,14.3959357207,14.3960026407,14.3960695576,14.3961364714,14.3962033821,14.3962702897,14.3963371942,14.3964040956,14.3964709939,14.3965378891, +14.3966047812,14.3966716702,14.396738556,14.3968054388,14.3968723185,14.3969391951,14.3970060686,14.397072939,14.3971398062,14.3972066704,14.3972735315,14.3973403895,14.3974072444,14.3974740962,14.3975409449,14.3976077905, +14.3976746329,14.3977414723,14.3978083087,14.3978751419,14.397941972,14.398008799,14.3980756229,14.3981424437,14.3982092615,14.3982760761,14.3983428876,14.3984096961,14.3984765014,14.3985433037,14.3986101029,14.398676899, +14.3987436919,14.3988104818,14.3988772686,14.3989440523,14.399010833,14.3990776105,14.3991443849,14.3992111563,14.3992779245,14.3993446897,14.3994114517,14.3994782107,14.3995449666,14.3996117194,14.3996784692,14.3997452158, +14.3998119593,14.3998786998,14.3999454371,14.4000121714,14.4000789026,14.4001456307,14.4002123558,14.4002790777,14.4003457965,14.4004125123,14.400479225,14.4005459346,14.4006126411,14.4006793445,14.4007460448,14.4008127421, +14.4008794363,14.4009461274,14.4010128154,14.4010795003,14.4011461822,14.4012128609,14.4012795366,14.4013462092,14.4014128787,14.4014795452,14.4015462085,14.4016128688,14.401679526,14.4017461801,14.4018128311,14.4018794791, +14.401946124,14.4020127658,14.4020794045,14.4021460401,14.4022126727,14.4022793022,14.4023459286,14.402412552,14.4024791722,14.4025457894,14.4026124035,14.4026790145,14.4027456225,14.4028122274,14.4028788292,14.4029454279, +14.4030120236,14.4030786162,14.4031452057,14.4032117921,14.4032783755,14.4033449558,14.403411533,14.4034781071,14.4035446782,14.4036112462,14.4036778111,14.403744373,14.4038109318,14.4038774875,14.4039440402,14.4040105897, +14.4040771362,14.4041436797,14.4042102201,14.4042767574,14.4043432916,14.4044098228,14.4044763508,14.4045428759,14.4046093978,14.4046759167,14.4047424326,14.4048089453,14.404875455,14.4049419616,14.4050084652,14.4050749657, +14.4051414631,14.4052079575,14.4052744488,14.405340937,14.4054074222,14.4054739043,14.4055403834,14.4056068594,14.4056733323,14.4057398021,14.4058062689,14.4058727327,14.4059391933,14.406005651,14.4060721055,14.406138557, +14.4062050054,14.4062714508,14.4063378931,14.4064043323,14.4064707685,14.4065372017,14.4066036317,14.4066700587,14.4067364827,14.4068029036,14.4068693214,14.4069357362,14.4070021479,14.4070685566,14.4071349622,14.4072013647, +14.4072677642,14.4073341607,14.4074005541,14.4074669444,14.4075333317,14.4075997159,14.4076660971,14.4077324752,14.4077988502,14.4078652222,14.4079315912,14.4079979571,14.4080643199,14.4081306797,14.4081970364,14.4082633901, +14.4083297408,14.4083960884,14.4084624329,14.4085287744,14.4085951128,14.4086614482,14.4087277805,14.4087941098,14.408860436,14.4089267592,14.4089930793,14.4090593964,14.4091257105,14.4091920215,14.4092583294,14.4093246343, +14.4093909361,14.4094572349,14.4095235307,14.4095898234,14.4096561131,14.4097223997,14.4097886832,14.4098549638,14.4099212412,14.4099875157,14.4100537871,14.4101200554,14.4101863207,14.410252583,14.4103188422,14.4103850984, +14.4104513515,14.4105176016,14.4105838486,14.4106500926,14.4107163336,14.4107825715,14.4108488064,14.4109150382,14.410981267,14.4110474928,14.4111137155,14.4111799352,14.4112461518,14.4113123654,14.411378576,14.4114447835, +14.411510988,14.4115771895,14.4116433879,14.4117095832,14.4117757756,14.4118419649,14.4119081511,14.4119743344,14.4120405146,14.4121066917,14.4121728658,14.4122390369,14.412305205,14.41237137,14.4124375319,14.4125036909, +14.4125698468,14.4126359997,14.4127021495,14.4127682963,14.4128344401,14.4129005809,14.4129667186,14.4130328533,14.4130989849,14.4131651135,14.4132312391,14.4132973617,14.4133634812,14.4134295977,14.4134957112,14.4135618216, +14.413627929,14.4136940334,14.4137601348,14.4138262331,14.4138923284,14.4139584206,14.4140245099,14.4140905961,14.4141566793,14.4142227594,14.4142888366,14.4143549107,14.4144209817,14.4144870498,14.4145531148,14.4146191768, +14.4146852358,14.4147512918,14.4148173447,14.4148833946,14.4149494415,14.4150154853,14.4150815262,14.415147564,14.4152135988,14.4152796305,14.4153456593,14.415411685,14.4154777077,14.4155437274,14.415609744,14.4156757577, +14.4157417683,14.4158077759,14.4158737805,14.415939782,14.4160057806,14.4160717761,14.4161377686,14.4162037581,14.4162697445,14.416335728,14.4164017084,14.4164676858,14.4165336602,14.4165996316,14.4166655999,14.4167315653, +14.4167975276,14.4168634869,14.4169294432,14.4169953965,14.4170613468,14.417127294,14.4171932382,14.4172591795,14.4173251177,14.4173910529,14.4174569851,14.4175229142,14.4175888404,14.4176547635,14.4177206837,14.4177866008, +14.4178525149,14.417918426,14.4179843341,14.4180502391,14.4181161412,14.4181820403,14.4182479363,14.4183138293,14.4183797194,14.4184456064,14.4185114904,14.4185773714,14.4186432494,14.4187091244,14.4187749963,14.4188408653, +14.4189067313,14.4189725942,14.4190384542,14.4191043111,14.419170165,14.419236016,14.4193018639,14.4193677088,14.4194335507,14.4194993896,14.4195652255,14.4196310584,14.4196968883,14.4197627152,14.4198285391,14.41989436, +14.4199601778,14.4200259927,14.4200918046,14.4201576135,14.4202234193,14.4202892222,14.4203550221,14.420420819,14.4204866128,14.4205524037,14.4206181916,14.4206839764,14.4207497583,14.4208155372,14.420881313,14.4209470859, +14.4210128558,14.4210786227,14.4211443865,14.4212101474,14.4212759053,14.4213416602,14.4214074121,14.421473161,14.4215389068,14.4216046497,14.4216703897,14.4217361266,14.4218018605,14.4218675914,14.4219333193,14.4219990442, +14.4220647662,14.4221304851,14.4221962011,14.422261914,14.422327624,14.4223933309,14.4224590349,14.4225247359,14.4225904339,14.4226561289,14.4227218209,14.4227875099,14.4228531959,14.422918879,14.422984559,14.4230502361, +14.4231159101,14.4231815812,14.4232472493,14.4233129144,14.4233785765,14.4234442356,14.4235098918,14.4235755449,14.4236411951,14.4237068422,14.4237724864,14.4238381276,14.4239037658,14.4239694011,14.4240350333,14.4241006626, +14.4241662888,14.4242319121,14.4242975324,14.4243631497,14.424428764,14.4244943754,14.4245599837,14.4246255891,14.4246911915,14.4247567909,14.4248223874,14.4248879808,14.4249535713,14.4250191587,14.4250847432,14.4251503248, +14.4252159033,14.4252814789,14.4253470514,14.425412621,14.4254781876,14.4255437513,14.4256093119,14.4256748696,14.4257404243,14.425805976,14.4258715248,14.4259370705,14.4260026133,14.4260681531,14.42613369,14.4261992238, +14.4262647547,14.4263302826,14.4263958075,14.4264613295,14.4265268485,14.4265923645,14.4266578775,14.4267233875,14.4267888946,14.4268543987,14.4269198998,14.426985398,14.4270508932,14.4271163854,14.4271818746,14.4272473608, +14.4273128441,14.4273783245,14.4274438018,14.4275092762,14.4275747476,14.427640216,14.4277056815,14.4277711439,14.4278366035,14.42790206,14.4279675136,14.4280329642,14.4280984118,14.4281638565,14.4282292982,14.4282947369, +14.4283601727,14.4284256055,14.4284910353,14.4285564622,14.4286218861,14.428687307,14.428752725,14.42881814,14.428883552,14.4289489611,14.4290143672,14.4290797703,14.4291451705,14.4292105677,14.4292759619,14.4293413532, +14.4294067415,14.4294721269,14.4295375092,14.4296028887,14.4296682651,14.4297336386,14.4297990092,14.4298643767,14.4299297414,14.429995103,14.4300604617,14.4301258174,14.4301911702,14.43025652,14.4303218668,14.4303872107, +14.4304525517,14.4305178896,14.4305832246,14.4306485567,14.4307138858,14.4307792119,14.4308445351,14.4309098553,14.4309751726,14.4310404869,14.4311057982,14.4311711066,14.4312364121,14.4313017146,14.4313670141,14.4314323106, +14.4314976043,14.4315628949,14.4316281826,14.4316934674,14.4317587492,14.431824028,14.4318893039,14.4319545768,14.4320198468,14.4320851138,14.4321503779,14.432215639,14.4322808972,14.4323461524,14.4324114047,14.432476654, +14.4325419004,14.4326071438,14.4326723843,14.4327376218,14.4328028564,14.432868088,14.4329333166,14.4329985424,14.4330637651,14.4331289849,14.4331942018,14.4332594157,14.4333246267,14.4333898347,14.4334550398,14.433520242, +14.4335854412,14.4336506374,14.4337158307,14.433781021,14.4338462084,14.4339113929,14.4339765744,14.434041753,14.4341069286,14.4341721013,14.434237271,14.4343024378,14.4343676017,14.4344327626,14.4344979205,14.4345630756, +14.4346282276,14.4346933768,14.434758523,14.4348236662,14.4348888065,14.4349539439,14.4350190783,14.4350842098,14.4351493384,14.435214464,14.4352795866,14.4353447064,14.4354098232,14.435474937,14.4355400479,14.4356051559, +14.4356702609,14.435735363,14.4358004622,14.4358655584,14.4359306517,14.4359957421,14.4360608295,14.4361259139,14.4361909955,14.4362560741,14.4363211498,14.4363862225,14.4364512923,14.4365163592,14.4365814231,14.4366464841, +14.4367115421,14.4367765973,14.4368416495,14.4369066987,14.436971745,14.4370367884,14.4371018289,14.4371668664,14.437231901,14.4372969327,14.4373619614,14.4374269873,14.4374920101,14.4375570301,14.4376220471,14.4376870612, +14.4377520723,14.4378170805,14.4378820858,14.4379470882,14.4380120877,14.4380770842,14.4381420777,14.4382070684,14.4382720561,14.4383370409,14.4384020228,14.4384670017,14.4385319778,14.4385969509,14.438661921,14.4387268883, +14.4387918526,14.438856814,14.4389217724,14.438986728,14.4390516806,14.4391166303,14.4391815771,14.4392465209,14.4393114618,14.4393763998,14.4394413349,14.439506267,14.4395711963,14.4396361226,14.439701046,14.4397659664, +14.439830884,14.4398957986,14.4399607103,14.4400256191,14.440090525,14.4401554279,14.4402203279,14.440285225,14.4403501192,14.4404150105,14.4404798988,14.4405447842,14.4406096667,14.4406745463,14.440739423,14.4408042968, +14.4408691676,14.4409340355,14.4409989005,14.4410637626,14.4411286218,14.4411934781,14.4412583314,14.4413231818,14.4413880293,14.4414528739,14.4415177156,14.4415825544,14.4416473903,14.4417122232,14.4417770532,14.4418418803, +14.4419067045,14.4419715258,14.4420363442,14.4421011597,14.4421659722,14.4422307819,14.4422955886,14.4423603924,14.4424251933,14.4424899913,14.4425547864,14.4426195786,14.4426843679,14.4427491542,14.4428139377,14.4428787182, +14.4429434958,14.4430082706,14.4430730424,14.4431378113,14.4432025773,14.4432673404,14.4433321006,14.4433968579,14.4434616122,14.4435263637,14.4435911123,14.4436558579,14.4437206007,14.4437853405,14.4438500774,14.4439148115, +14.4439795426,14.4440442708,14.4441089961,14.4441737186,14.4442384381,14.4443031547,14.4443678684,14.4444325792,14.4444972871,14.4445619921,14.4446266942,14.4446913934,14.4447560897,14.4448207831,14.4448854736,14.4449501612, +14.4450148459,14.4450795277,14.4451442066,14.4452088825,14.4452735556,14.4453382258,14.4454028931,14.4454675575,14.445532219,14.4455968776,14.4456615333,14.4457261861,14.445790836,14.4458554831,14.4459201272,14.4459847684, +14.4460494067,14.4461140421,14.4461786747,14.4462433043,14.4463079311,14.4463725549,14.4464371758,14.4465017939,14.4465664091,14.4466310213,14.4466956307,14.4467602372,14.4468248408,14.4468894415,14.4469540393,14.4470186342, +14.4470832262,14.4471478153,14.4472124016,14.4472769849,14.4473415654,14.4474061429,14.4474707176,14.4475352894,14.4475998583,14.4476644243,14.4477289874,14.4477935476,14.447858105,14.4479226594,14.447987211,14.4480517596, +14.4481163054,14.4481808483,14.4482453883,14.4483099254,14.4483744597,14.448438991,14.4485035195,14.448568045,14.4486325677,14.4486970875,14.4487616045,14.4488261185,14.4488906296,14.4489551379,14.4490196433,14.4490841458, +14.4491486454,14.4492131421,14.4492776359,14.4493421269,14.449406615,14.4494711002,14.4495355825,14.4496000619,14.4496645385,14.4497290121,14.4497934829,14.4498579508,14.4499224159,14.449986878,14.4500513373,14.4501157937, +14.4501802472,14.4502446978,14.4503091455,14.4503735904,14.4504380324,14.4505024715,14.4505669077,14.4506313411,14.4506957716,14.4507601992,14.4508246239,14.4508890457,14.4509534647,14.4510178808,14.451082294,14.4511467044, +14.4512111118,14.4512755164,14.4513399181,14.451404317,14.4514687129,14.451533106,14.4515974963,14.4516618836,14.4517262681,14.4517906497,14.4518550284,14.4519194043,14.4519837772,14.4520481473,14.4521125146,14.4521768789, +14.4522412404,14.4523055991,14.4523699548,14.4524343077,14.4524986577,14.4525630048,14.4526273491,14.4526916905,14.452756029,14.4528203647,14.4528846975,14.4529490274,14.4530133545,14.4530776787,14.453142,14.4532063184, +14.453270634,14.4533349467,14.4533992566,14.4534635636,14.4535278677,14.4535921689,14.4536564673,14.4537207628,14.4537850555,14.4538493453,14.4539136322,14.4539779163,14.4540421975,14.4541064758,14.4541707513,14.4542350239, +14.4542992936,14.4543635605,14.4544278245,14.4544920857,14.454556344,14.4546205994,14.454684852,14.4547491017,14.4548133485,14.4548775925,14.4549418336,14.4550060719,14.4550703073,14.4551345398,14.4551987695,14.4552629963, +14.4553272203,14.4553914414,14.4554556597,14.455519875,14.4555840876,14.4556482973,14.4557125041,14.455776708,14.4558409091,14.4559051074,14.4559693028,14.4560334953,14.456097685,14.4561618718,14.4562260557,14.4562902369, +14.4563544151,14.4564185905,14.4564827631,14.4565469327,14.4566110996,14.4566752636,14.4567394247,14.456803583,14.4568677384,14.4569318909,14.4569960407,14.4570601875,14.4571243315,14.4571884727,14.457252611,14.4573167465, +14.4573808791,14.4574450088,14.4575091357,14.4575732598,14.457637381,14.4577014993,14.4577656149,14.4578297275,14.4578938373,14.4579579443,14.4580220484,14.4580861496,14.4581502481,14.4582143436,14.4582784363,14.4583425262, +14.4584066132,14.4584706974,14.4585347787,14.4585988572,14.4586629329,14.4587270057,14.4587910756,14.4588551427,14.458919207,14.4589832684,14.4590473269,14.4591113827,14.4591754356,14.4592394856,14.4593035328,14.4593675771, +14.4594316186,14.4594956573,14.4595596931,14.4596237261,14.4596877562,14.4597517835,14.459815808,14.4598798296,14.4599438484,14.4600078643,14.4600718774,14.4601358876,14.4601998951,14.4602638996,14.4603279014,14.4603919003, +14.4604558963,14.4605198895,14.4605838799,14.4606478674,14.4607118521,14.460775834,14.460839813,14.4609037892,14.4609677626,14.4610317331,14.4610957008,14.4611596656,14.4612236276,14.4612875868,14.4613515431,14.4614154966, +14.4614794473,14.4615433951,14.4616073401,14.4616712823,14.4617352216,14.4617991581,14.4618630918,14.4619270226,14.4619909506,14.4620548757,14.4621187981,14.4621827176,14.4622466342,14.4623105481,14.4623744591,14.4624383673, +14.4625022726,14.4625661751,14.4626300748,14.4626939716,14.4627578657,14.4628217569,14.4628856452,14.4629495307,14.4630134134,14.4630772933,14.4631411704,14.4632050446,14.463268916,14.4633327845,14.4633966503,14.4634605132, +14.4635243733,14.4635882305,14.463652085,14.4637159366,14.4637797853,14.4638436313,14.4639074744,14.4639713147,14.4640351522,14.4640989868,14.4641628187,14.4642266477,14.4642904739,14.4643542972,14.4644181177,14.4644819354, +14.4645457503,14.4646095624,14.4646733716,14.4647371781,14.4648009817,14.4648647824,14.4649285804,14.4649923755,14.4650561678,14.4651199573,14.465183744,14.4652475278,14.4653113089,14.4653750871,14.4654388625,14.4655026351, +14.4655664048,14.4656301717,14.4656939359,14.4657576972,14.4658214556,14.4658852113,14.4659489642,14.4660127142,14.4660764614,14.4661402058,14.4662039474,14.4662676861,14.4663314221,14.4663951552,14.4664588855,14.466522613, +14.4665863377,14.4666500596,14.4667137786,14.4667774949,14.4668412083,14.4669049189,14.4669686267,14.4670323317,14.4670960339,14.4671597333,14.4672234298,14.4672871236,14.4673508145,14.4674145026,14.4674781879,14.4675418704, +14.4676055501,14.467669227,14.467732901,14.4677965723,14.4678602407,14.4679239063,14.4679875692,14.4680512292,14.4681148864,14.4681785408,14.4682421924,14.4683058411,14.4683694871,14.4684331303,14.4684967706,14.4685604082, +14.4686240429,14.4686876749,14.468751304,14.4688149303,14.4688785538,14.4689421745,14.4690057924,14.4690694075,14.4691330198,14.4691966293,14.469260236,14.4693238399,14.469387441,14.4694510392,14.4695146347,14.4695782274, +14.4696418172,14.4697054043,14.4697689886,14.46983257,14.4698961487,14.4699597245,14.4700232976,14.4700868678,14.4701504353,14.4702139999,14.4702775618,14.4703411208,14.4704046771,14.4704682305,14.4705317812,14.470595329, +14.4706588741,14.4707224163,14.4707859558,14.4708494924,14.4709130263,14.4709765573,14.4710400856,14.4711036111,14.4711671337,14.4712306536,14.4712941707,14.4713576849,14.4714211964,14.4714847051,14.471548211,14.4716117141, +14.4716752144,14.4717387119,14.4718022066,14.4718656985,14.4719291876,14.471992674,14.4720561575,14.4721196382,14.4721831162,14.4722465913,14.4723100637,14.4723735333,14.4724370001,14.472500464,14.4725639252,14.4726273836, +14.4726908392,14.4727542921,14.4728177421,14.4728811893,14.4729446338,14.4730080754,14.4730715143,14.4731349504,14.4731983837,14.4732618142,14.4733252419,14.4733886668,14.473452089,14.4735155083,14.4735789249,14.4736423386, +14.4737057496,14.4737691578,14.4738325632,14.4738959659,14.4739593657,14.4740227627,14.474086157,14.4741495485,14.4742129372,14.4742763231,14.4743397062,14.4744030866,14.4744664641,14.4745298389,14.4745932109,14.4746565801, +14.4747199465,14.4747833102,14.474846671,14.4749100291,14.4749733844,14.4750367369,14.4751000866,14.4751634336,14.4752267777,14.4752901191,14.4753534577,14.4754167936,14.4754801266,14.4755434569,14.4756067843,14.475670109, +14.475733431,14.4757967501,14.4758600665,14.4759233801,14.4759866909,14.4760499989,14.4761133042,14.4761766066,14.4762399063,14.4763032032,14.4763664974,14.4764297888,14.4764930773,14.4765563632,14.4766196462,14.4766829265, +14.4767462039,14.4768094787,14.4768727506,14.4769360197,14.4769992861,14.4770625497,14.4771258106,14.4771890686,14.4772523239,14.4773155765,14.4773788262,14.4774420732,14.4775053174,14.4775685588,14.4776317975,14.4776950333, +14.4777582664,14.4778214968,14.4778847244,14.4779479491,14.4780111712,14.4780743904,14.4781376069,14.4782008206,14.4782640316,14.4783272398,14.4783904452,14.4784536478,14.4785168477,14.4785800448,14.4786432391,14.4787064307, +14.4787696195,14.4788328055,14.4788959888,14.4789591693,14.479022347,14.479085522,14.4791486942,14.4792118636,14.4792750303,14.4793381941,14.4794013553,14.4794645137,14.4795276693,14.4795908221,14.4796539722,14.4797171195, +14.479780264,14.4798434058,14.4799065448,14.4799696811,14.4800328146,14.4800959453,14.4801590733,14.4802221985,14.4802853209,14.4803484406,14.4804115575,14.4804746717,14.4805377831,14.4806008917,14.4806639976,14.4807271007, +14.4807902011,14.4808532987,14.4809163935,14.4809794856,14.4810425749,14.4811056615,14.4811687453,14.4812318263,14.4812949046,14.4813579802,14.4814210529,14.4814841229,14.4815471902,14.4816102547,14.4816733164,14.4817363754, +14.4817994317,14.4818624851,14.4819255359,14.4819885838,14.482051629,14.4821146715,14.4821777112,14.4822407481,14.4823037823,14.4823668138,14.4824298424,14.4824928684,14.4825558915,14.482618912,14.4826819296,14.4827449446, +14.4828079567,14.4828709661,14.4829339728,14.4829969767,14.4830599779,14.4831229763,14.4831859719,14.4832489648,14.483311955,14.4833749424,14.4834379271,14.483500909,14.4835638881,14.4836268645,14.4836898382,14.4837528091, +14.4838157773,14.4838787427,14.4839417053,14.4840046653,14.4840676224,14.4841305769,14.4841935285,14.4842564775,14.4843194236,14.4843823671,14.4844453078,14.4845082457,14.4845711809,14.4846341134,14.4846970431,14.48475997, +14.4848228943,14.4848858157,14.4849487345,14.4850116505,14.4850745637,14.4851374742,14.485200382,14.485263287,14.4853261892,14.4853890888,14.4854519856,14.4855148796,14.4855777709,14.4856406595,14.4857035453,14.4857664284, +14.4858293087,14.4858921863,14.4859550612,14.4860179333,14.4860808027,14.4861436693,14.4862065332,14.4862693943,14.4863322528,14.4863951085,14.4864579614,14.4865208116,14.4865836591,14.4866465038,14.4867093458,14.486772185, +14.4868350216,14.4868978553,14.4869606864,14.4870235147,14.4870863403,14.4871491631,14.4872119832,14.4872748006,14.4873376152,14.4874004271,14.4874632363,14.4875260427,14.4875888464,14.4876516473,14.4877144456,14.4877772411, +14.4878400338,14.4879028238,14.4879656111,14.4880283957,14.4880911775,14.4881539566,14.488216733,14.4882795066,14.4883422775,14.4884050457,14.4884678111,14.4885305739,14.4885933338,14.4886560911,14.4887188456,14.4887815974, +14.4888443465,14.4889070928,14.4889698364,14.4890325773,14.4890953154,14.4891580508,14.4892207835,14.4892835135,14.4893462407,14.4894089652,14.489471687,14.4895344061,14.4895971224,14.489659836,14.4897225469,14.489785255, +14.4898479604,14.4899106631,14.4899733631,14.4900360604,14.4900987549,14.4901614467,14.4902241358,14.4902868221,14.4903495057,14.4904121866,14.4904748648,14.4905375403,14.490600213,14.490662883,14.4907255503,14.4907882149, +14.4908508767,14.4909135359,14.4909761923,14.491038846,14.4911014969,14.4911641452,14.4912267907,14.4912894335,14.4913520736,14.4914147109,14.4914773456,14.4915399775,14.4916026067,14.4916652332,14.4917278569,14.491790478, +14.4918530963,14.4919157119,14.4919783248,14.492040935,14.4921035425,14.4921661472,14.4922287493,14.4922913486,14.4923539452,14.492416539,14.4924791302,14.4925417187,14.4926043044,14.4926668874,14.4927294677,14.4927920453, +14.4928546202,14.4929171923,14.4929797618,14.4930423285,14.4931048925,14.4931674538,14.4932300124,14.4932925683,14.4933551215,14.493417672,14.4934802197,14.4935427647,14.4936053071,14.4936678467,14.4937303836,14.4937929178, +14.4938554492,14.493917978,14.4939805041,14.4940430274,14.4941055481,14.494168066,14.4942305812,14.4942930937,14.4943556035,14.4944181106,14.494480615,14.4945431167,14.4946056157,14.4946681119,14.4947306055,14.4947930963, +14.4948555845,14.4949180699,14.4949805527,14.4950430327,14.49510551,14.4951679846,14.4952304565,14.4952929257,14.4953553922,14.495417856,14.4954803171,14.4955427755,14.4956052312,14.4956676842,14.4957301344,14.495792582, +14.4958550269,14.4959174691,14.4959799085,14.4960423453,14.4961047793,14.4961672107,14.4962296394,14.4962920653,14.4963544886,14.4964169091,14.496479327,14.4965417421,14.4966041546,14.4966665643,14.4967289714,14.4967913757, +14.4968537774,14.4969161763,14.4969785726,14.4970409662,14.497103357,14.4971657452,14.4972281306,14.4972905134,14.4973528935,14.4974152708,14.4974776455,14.4975400175,14.4976023868,14.4976647534,14.4977271173,14.4977894785, +14.497851837,14.4979141928,14.4979765459,14.4980388963,14.498101244,14.498163589,14.4982259313,14.498288271,14.4983506079,14.4984129422,14.4984752737,14.4985376026,14.4985999288,14.4986622522,14.498724573,14.4987868911, +14.4988492065,14.4989115192,14.4989738293,14.4990361366,14.4990984412,14.4991607432,14.4992230424,14.499285339,14.4993476329,14.4994099241,14.4994722126,14.4995344984,14.4995967815,14.4996590619,14.4997213397,14.4997836147, +14.4998458871,14.4999081568,14.4999704238,14.5000326881,14.5000949497,14.5001572086,14.5002194648,14.5002817184,14.5003439693,14.5004062175,14.500468463,14.5005307058,14.5005929459,14.5006551833,14.5007174181,14.5007796502, +14.5008418796,14.5009041063,14.5009663303,14.5010285516,14.5010907703,14.5011529862,14.5012151995,14.5012774101,14.5013396181,14.5014018233,14.5014640259,14.5015262257,14.5015884229,14.5016506174,14.5017128093,14.5017749984, +14.5018371849,14.5018993687,14.5019615498,14.5020237282,14.502085904,14.5021480771,14.5022102474,14.5022724152,14.5023345802,14.5023967426,14.5024589022,14.5025210592,14.5025832136,14.5026453652,14.5027075142,14.5027696605, +14.5028318041,14.502893945,14.5029560833,14.5030182188,14.5030803518,14.503142482,14.5032046095,14.5032667344,14.5033288566,14.5033909762,14.503453093,14.5035152072,14.5035773187,14.5036394275,14.5037015337,14.5037636372, +14.503825738,14.5038878361,14.5039499316,14.5040120244,14.5040741145,14.504136202,14.5041982867,14.5042603689,14.5043224483,14.5043845251,14.5044465991,14.5045086706,14.5045707393,14.5046328054,14.5046948688,14.5047569296, +14.5048189876,14.504881043,14.5049430958,14.5050051458,14.5050671932,14.505129238,14.50519128,14.5052533194,14.5053153561,14.5053773902,14.5054394216,14.5055014503,14.5055634764,14.5056254997,14.5056875205,14.5057495385, +14.5058115539,14.5058735666,14.5059355767,14.5059975841,14.5060595888,14.5061215909,14.5061835903,14.506245587,14.5063075811,14.5063695725,14.5064315613,14.5064935473,14.5065555308,14.5066175115,14.5066794896,14.506741465, +14.5068034378,14.5068654079,14.5069273753,14.5069893401,14.5070513022,14.5071132617,14.5071752185,14.5072371726,14.5072991241,14.5073610729,14.5074230191,14.5074849626,14.5075469034,14.5076088416,14.5076707771,14.50773271, +14.5077946402,14.5078565677,14.5079184926,14.5079804149,14.5080423344,14.5081042513,14.5081661656,14.5082280772,14.5082899861,14.5083518924,14.5084137961,14.508475697,14.5085375953,14.508599491,14.508661384,14.5087232744, +14.5087851621,14.5088470471,14.5089089295,14.5089708092,14.5090326863,14.5090945607,14.5091564325,14.5092183016,14.5092801681,14.5093420319,14.5094038931,14.5094657516,14.5095276074,14.5095894606,14.5096513112,14.5097131591, +14.5097750043,14.5098368469,14.5098986869,14.5099605242,14.5100223588,14.5100841908,14.5101460202,14.5102078469,14.5102696709,14.5103314923,14.510393311,14.5104551271,14.5105169406,14.5105787514,14.5106405596,14.5107023651, +14.5107641679,14.5108259681,14.5108877657,14.5109495606,14.5110113529,14.5110731425,14.5111349295,14.5111967138,14.5112584955,14.5113202745,14.5113820509,14.5114438247,14.5115055958,14.5115673643,14.5116291301,14.5116908932, +14.5117526538,14.5118144117,14.5118761669,14.5119379195,14.5119996694,14.5120614168,14.5121231614,14.5121849034,14.5122466428,14.5123083796,14.5123701137,14.5124318451,14.5124935739,14.5125553001,14.5126170237,14.5126787445, +14.5127404628,14.5128021784,14.5128638914,14.5129256017,14.5129873094,14.5130490145,14.5131107169,14.5131724167,14.5132341138,14.5132958083,14.5133575002,14.5134191894,14.513480876,14.5135425599,14.5136042412,14.5136659199, +14.513727596,14.5137892694,14.5138509401,14.5139126082,14.5139742737,14.5140359366,14.5140975968,14.5141592544,14.5142209094,14.5142825617,14.5143442114,14.5144058584,14.5144675028,14.5145291446,14.5145907837,14.5146524203, +14.5147140541,14.5147756854,14.514837314,14.51489894,14.5149605633,14.515022184,14.5150838021,14.5151454176,14.5152070304,14.5152686406,14.5153302482,14.5153918531,14.5154534554,14.5155150551,14.5155766521,14.5156382465, +14.5156998383,14.5157614274,14.515823014,14.5158845978,14.5159461791,14.5160077577,14.5160693338,14.5161309071,14.5161924779,14.516254046,14.5163156115,14.5163771744,14.5164387346,14.5165002922,14.5165618472,14.5166233996, +14.5166849493,14.5167464964,14.5168080409,14.5168695828,14.516931122,14.5169926586,14.5170541926,14.517115724,14.5171772527,14.5172387788,14.5173003023,14.5173618232,14.5174233414,14.517484857,14.51754637,14.5176078804, +14.5176693881,14.5177308933,14.5177923958,14.5178538957,14.5179153929,14.5179768876,14.5180383796,14.518099869,14.5181613558,14.5182228399,14.5182843215,14.5183458004,14.5184072767,14.5184687504,14.5185302214,14.5185916899, +14.5186531557,14.5187146189,14.5187760795,14.5188375374,14.5188989928,14.5189604455,14.5190218956,14.5190833431,14.519144788,14.5192062303,14.5192676699,14.5193291069,14.5193905413,14.5194519731,14.5195134023,14.5195748289, +14.5196362528,14.5196976742,14.5197590929,14.519820509,14.5198819225,14.5199433334,14.5200047416,14.5200661473,14.5201275503,14.5201889507,14.5202503486,14.5203117438,14.5203731363,14.5204345263,14.5204959137,14.5205572984, +14.5206186806,14.5206800601,14.520741437,14.5208028113,14.520864183,14.5209255521,14.5209869185,14.5210482824,14.5211096437,14.5211710023,14.5212323583,14.5212937117,14.5213550626,14.5214164108,14.5214777564,14.5215390993, +14.5216004397,14.5216617775,14.5217231127,14.5217844452,14.5218457752,14.5219071025,14.5219684272,14.5220297494,14.5220910689,14.5221523858,14.5222137001,14.5222750118,14.5223363209,14.5223976274,14.5224589313,14.5225202326, +14.5225815313,14.5226428273,14.5227041208,14.5227654117,14.5228266999,14.5228879856,14.5229492686,14.5230105491,14.5230718269,14.5231331022,14.5231943748,14.5232556449,14.5233169123,14.5233781772,14.5234394394,14.523500699, +14.5235619561,14.5236232105,14.5236844623,14.5237457116,14.5238069582,14.5238682022,14.5239294437,14.5239906825,14.5240519187,14.5241131524,14.5241743834,14.5242356118,14.5242968377,14.5243580609,14.5244192815,14.5244804996, +14.524541715,14.5246029279,14.5246641381,14.5247253458,14.5247865509,14.5248477533,14.5249089532,14.5249701504,14.5250313451,14.5250925372,14.5251537267,14.5252149136,14.5252760979,14.5253372796,14.5253984587,14.5254596352, +14.5255208091,14.5255819804,14.5256431491,14.5257043153,14.5257654788,14.5258266398,14.5258877981,14.5259489539,14.5260101071,14.5260712576,14.5261324056,14.526193551,14.5262546938,14.526315834,14.5263769717,14.5264381067, +14.5264992391,14.526560369,14.5266214962,14.5266826209,14.526743743,14.5268048625,14.5268659794,14.5269270937,14.5269882054,14.5270493146,14.5271104211,14.5271715251,14.5272326264,14.5272937252,14.5273548214,14.527415915, +14.5274770061,14.5275380945,14.5275991803,14.5276602636,14.5277213443,14.5277824224,14.5278434979,14.5279045708,14.5279656411,14.5280267089,14.528087774,14.5281488366,14.5282098966,14.528270954,14.5283320089,14.5283930611, +14.5284541108,14.5285151578,14.5285762023,14.5286372442,14.5286982836,14.5287593203,14.5288203545,14.5288813861,14.5289424151,14.5290034415,14.5290644653,14.5291254866,14.5291865053,14.5292475213,14.5293085349,14.5293695458, +14.5294305541,14.5294915599,14.5295525631,14.5296135637,14.5296745618,14.5297355572,14.5297965501,14.5298575404,14.5299185281,14.5299795133,14.5300404958,14.5301014758,14.5301624532,14.5302234281,14.5302844003,14.53034537, +14.5304063371,14.5304673016,14.5305282636,14.530589223,14.5306501798,14.530711134,14.5307720856,14.5308330347,14.5308939812,14.5309549251,14.5310158665,14.5310768052,14.5311377414,14.5311986751,14.5312596061,14.5313205346, +14.5313814605,14.5314423839,14.5315033046,14.5315642228,14.5316251384,14.5316860515,14.5317469619,14.5318078698,14.5318687752,14.5319296779,14.5319905781,14.5320514757,14.5321123708,14.5321732633,14.5322341532,14.5322950405, +14.5323559253,14.5324168075,14.5324776871,14.5325385642,14.5325994387,14.5326603106,14.53272118,14.5327820467,14.532842911,14.5329037726,14.5329646317,14.5330254882,14.5330863422,14.5331471936,14.5332080424,14.5332688886, +14.5333297323,14.5333905734,14.533451412,14.533512248,14.5335730814,14.5336339122,14.5336947405,14.5337555663,14.5338163894,14.53387721,14.5339380281,14.5339988435,14.5340596565,14.5341204668,14.5341812746,14.5342420798, +14.5343028825,14.5343636825,14.5344244801,14.5344852751,14.5345460675,14.5346068573,14.5346676446,14.5347284293,14.5347892115,14.5348499911,14.5349107681,14.5349715426,14.5350323145,14.5350930839,14.5351538507,14.5352146149, +14.5352753766,14.5353361357,14.5353968923,14.5354576463,14.5355183978,14.5355791467,14.535639893,14.5357006368,14.535761378,14.5358221166,14.5358828528,14.5359435863,14.5360043173,14.5360650457,14.5361257716,14.5361864949, +14.5362472157,14.5363079339,14.5363686496,14.5364293627,14.5364900732,14.5365507812,14.5366114866,14.5366721895,14.5367328898,14.5367935876,14.5368542828,14.5369149755,14.5369756656,14.5370363532,14.5370970382,14.5371577206, +14.5372184005,14.5372790779,14.5373397527,14.5374004249,14.5374610946,14.5375217618,14.5375824264,14.5376430884,14.5377037479,14.5377644048,14.5378250592,14.5378857111,14.5379463604,14.5380070071,14.5380676513,14.538128293, +14.5381889321,14.5382495686,14.5383102026,14.538370834,14.538431463,14.5384920893,14.5385527131,14.5386133344,14.5386739531,14.5387345692,14.5387951829,14.5388557939,14.5389164025,14.5389770084,14.5390376119,14.5390982128, +14.5391588111,14.5392194069,14.5392800002,14.5393405909,14.539401179,14.5394617646,14.5395223477,14.5395829283,14.5396435062,14.5397040817,14.5397646546,14.5398252249,14.5398857928,14.539946358,14.5400069208,14.5400674809, +14.5401280386,14.5401885937,14.5402491462,14.5403096963,14.5403702437,14.5404307887,14.5404913311,14.5405518709,14.5406124082,14.540672943,14.5407334753,14.540794005,14.5408545321,14.5409150567,14.5409755788,14.5410360983, +14.5410966153,14.5411571298,14.5412176417,14.5412781511,14.541338658,14.5413991623,14.5414596641,14.5415201633,14.54158066,14.5416411542,14.5417016458,14.5417621349,14.5418226214,14.5418831054,14.5419435869,14.5420040659, +14.5420645423,14.5421250162,14.5421854875,14.5422459563,14.5423064226,14.5423668863,14.5424273475,14.5424878062,14.5425482623,14.5426087159,14.542669167,14.5427296155,14.5427900616,14.542850505,14.542910946,14.5429713844, +14.5430318203,14.5430922536,14.5431526844,14.5432131127,14.5432735384,14.5433339617,14.5433943824,14.5434548005,14.5435152162,14.5435756293,14.5436360398,14.5436964479,14.5437568534,14.5438172564,14.5438776568,14.5439380547, +14.5439984501,14.544058843,14.5441192333,14.5441796212,14.5442400064,14.5443003892,14.5443607694,14.5444211471,14.5444815223,14.544541895,14.5446022651,14.5446626327,14.5447229978,14.5447833603,14.5448437203,14.5449040778, +14.5449644328,14.5450247852,14.5450851352,14.5451454826,14.5452058274,14.5452661698,14.5453265096,14.5453868469,14.5454471817,14.5455075139,14.5455678437,14.5456281709,14.5456884956,14.5457488177,14.5458091374,14.5458694545, +14.5459297691,14.5459900812,14.5460503907,14.5461106978,14.5461710023,14.5462313043,14.5462916037,14.5463519007,14.5464121951,14.546472487,14.5465327764,14.5465930633,14.5466533477,14.5467136295,14.5467739088,14.5468341856, +14.5468944599,14.5469547317,14.5470150009,14.5470752676,14.5471355318,14.5471957935,14.5472560527,14.5473163094,14.5473765635,14.5474368151,14.5474970642,14.5475573108,14.5476175549,14.5476777965,14.5477380355,14.547798272, +14.5478585061,14.5479187376,14.5479789665,14.548039193,14.548099417,14.5481596384,14.5482198574,14.5482800738,14.5483402877,14.5484004991,14.5484607079,14.5485209143,14.5485811182,14.5486413195,14.5487015183,14.5487617147, +14.5488219085,14.5488820998,14.5489422885,14.5490024748,14.5490626586,14.5491228398,14.5491830186,14.5492431948,14.5493033685,14.5493635397,14.5494237084,14.5494838746,14.5495440383,14.5496041995,14.5496643581,14.5497245143, +14.5497846679,14.5498448191,14.5499049677,14.5499651138,14.5500252575,14.5500853986,14.5501455372,14.5502056733,14.5502658069,14.550325938,14.5503860665,14.5504461926,14.5505063162,14.5505664372,14.5506265558,14.5506866718, +14.5507467854,14.5508068964,14.550867005,14.550927111,14.5509872145,14.5510473155,14.5511074141,14.5511675101,14.5512276036,14.5512876946,14.5513477831,14.5514078691,14.5514679526,14.5515280336,14.5515881121,14.5516481881, +14.5517082616,14.5517683326,14.5518284011,14.5518884671,14.5519485306,14.5520085916,14.5520686501,14.5521287061,14.5521887596,14.5522488105,14.552308859,14.552368905,14.5524289485,14.5524889895,14.552549028,14.552609064, +14.5526690975,14.5527291285,14.552789157,14.552849183,14.5529092065,14.5529692275,14.5530292461,14.5530892621,14.5531492756,14.5532092866,14.5532692952,14.5533293012,14.5533893047,14.5534493058,14.5535093043,14.5535693004, +14.5536292939,14.553689285,14.5537492735,14.5538092596,14.5538692432,14.5539292243,14.5539892029,14.554049179,14.5541091526,14.5541691237,14.5542290923,14.5542890584,14.5543490221,14.5544089832,14.5544689419,14.554528898, +14.5545888517,14.5546488029,14.5547087515,14.5547686977,14.5548286414,14.5548885826,14.5549485214,14.5550084576,14.5550683913,14.5551283226,14.5551882513,14.5552481776,14.5553081014,14.5553680227,14.5554279415,14.5554878578, +14.5555477716,14.555607683,14.5556675918,14.5557274982,14.5557874021,14.5558473035,14.5559072024,14.5559670988,14.5560269927,14.5560868842,14.5561467731,14.5562066596,14.5562665436,14.5563264251,14.5563863041,14.5564461806, +14.5565060547,14.5565659262,14.5566257953,14.5566856619,14.556745526,14.5568053876,14.5568652468,14.5569251034,14.5569849576,14.5570448093,14.5571046585,14.5571645052,14.5572243495,14.5572841912,14.5573440305,14.5574038673, +14.5574637016,14.5575235334,14.5575833628,14.5576431896,14.557703014,14.5577628359,14.5578226554,14.5578824723,14.5579422868,14.5580020988,14.5580619083,14.5581217153,14.5581815199,14.5582413219,14.5583011215,14.5583609186, +14.5584207133,14.5584805054,14.5585402951,14.5586000823,14.558659867,14.5587196493,14.558779429,14.5588392063,14.5588989811,14.5589587535,14.5590185233,14.5590782907,14.5591380556,14.5591978181,14.559257578,14.5593173355, +14.5593770905,14.5594368431,14.5594965931,14.5595563407,14.5596160858,14.5596758284,14.5597355686,14.5597953063,14.5598550415,14.5599147743,14.5599745045,14.5600342323,14.5600939576,14.5601536805,14.5602134009,14.5602731188, +14.5603328342,14.5603925472,14.5604522577,14.5605119657,14.5605716712,14.5606313743,14.5606910749,14.5607507731,14.5608104687,14.5608701619,14.5609298527,14.5609895409,14.5610492267,14.56110891,14.5611685909,14.5612282693, +14.5612879452,14.5613476186,14.5614072896,14.5614669581,14.5615266241,14.5615862877,14.5616459488,14.5617056075,14.5617652636,14.5618249173,14.5618845686,14.5619442173,14.5620038637,14.5620635075,14.5621231489,14.5621827878, +14.5622424242,14.5623020582,14.5623616897,14.5624213188,14.5624809453,14.5625405695,14.5626001911,14.5626598103,14.562719427,14.5627790413,14.5628386531,14.5628982625,14.5629578693,14.5630174737,14.5630770757,14.5631366752, +14.5631962722,14.5632558668,14.5633154589,14.5633750485,14.5634346357,14.5634942204,14.5635538027,14.5636133825,14.5636729598,14.5637325347,14.5637921071,14.5638516771,14.5639112446,14.5639708096,14.5640303722,14.5640899323, +14.56414949,14.5642090452,14.5642685979,14.5643281482,14.5643876961,14.5644472414,14.5645067843,14.5645663248,14.5646258628,14.5646853983,14.5647449314,14.5648044621,14.5648639902,14.5649235159,14.5649830392,14.56504256, +14.5651020784,14.5651615943,14.5652211077,14.5652806187,14.5653401272,14.5653996333,14.5654591369,14.5655186381,14.5655781368,14.565637633,14.5656971268,14.5657566182,14.5658161071,14.5658755935,14.5659350775,14.5659945591, +14.5660540382,14.5661135148,14.566172989,14.5662324607,14.56629193,14.5663513968,14.5664108612,14.5664703231,14.5665297826,14.5665892397,14.5666486942,14.5667081464,14.566767596,14.5668270433,14.566886488,14.5669459304, +14.5670053702,14.5670648077,14.5671242427,14.5671836752,14.5672431053,14.5673025329,14.5673619581,14.5674213808,14.5674808011,14.567540219,14.5675996344,14.5676590473,14.5677184579,14.5677778659,14.5678372715,14.5678966747, +14.5679560754,14.5680154737,14.5680748695,14.5681342629,14.5681936539,14.5682530423,14.5683124284,14.568371812,14.5684311932,14.5684905719,14.5685499482,14.568609322,14.5686686934,14.5687280623,14.5687874288,14.5688467929, +14.5689061545,14.5689655137,14.5690248704,14.5690842247,14.5691435765,14.569202926,14.5692622729,14.5693216174,14.5693809595,14.5694402992,14.5694996364,14.5695589711,14.5696183034,14.5696776333,14.5697369608,14.5697962858, +14.5698556083,14.5699149285,14.5699742461,14.5700335614,14.5700928742,14.5701521846,14.5702114925,14.570270798,14.570330101,14.5703894016,14.5704486998,14.5705079956,14.5705672889,14.5706265797,14.5706858682,14.5707451542, +14.5708044377,14.5708637188,14.5709229975,14.5709822738,14.5710415476,14.571100819,14.5711600879,14.5712193544,14.5712786185,14.5713378802,14.5713971394,14.5714563961,14.5715156505,14.5715749024,14.5716341519,14.5716933989, +14.5717526435,14.5718118857,14.5718711254,14.5719303627,14.5719895976,14.57204883,14.5721080601,14.5721672876,14.5722265128,14.5722857355,14.5723449558,14.5724041737,14.5724633891,14.5725226021,14.5725818126,14.5726410208, +14.5727002265,14.5727594298,14.5728186306,14.572877829,14.572937025,14.5729962186,14.5730554097,14.5731145984,14.5731737847,14.5732329685,14.57329215,14.5733513289,14.5734105055,14.5734696796,14.5735288514,14.5735880206, +14.5736471875,14.5737063519,14.5737655139,14.5738246735,14.5738838307,14.5739429854,14.5740021377,14.5740612876,14.574120435,14.57417958,14.5742387226,14.5742978628,14.5743570006,14.5744161359,14.5744752688,14.5745343993, +14.5745935273,14.574652653,14.5747117762,14.574770897,14.5748300153,14.5748891313,14.5749482448,14.5750073559,14.5750664646,14.5751255708,14.5751846747,14.5752437761,14.5753028751,14.5753619716,14.5754210658,14.5754801575, +14.5755392468,14.5755983337,14.5756574182,14.5757165002,14.5757755799,14.5758346571,14.5758937319,14.5759528043,14.5760118742,14.5760709417,14.5761300069,14.5761890696,14.5762481298,14.5763071877,14.5763662432,14.5764252962, +14.5764843468,14.576543395,14.5766024408,14.5766614841,14.5767205251,14.5767795636,14.5768385997,14.5768976334,14.5769566647,14.5770156936,14.57707472,14.5771337441,14.5771927657,14.5772517849,14.5773108017,14.5773698161, +14.577428828,14.5774878376,14.5775468447,14.5776058495,14.5776648518,14.5777238517,14.5777828492,14.5778418442,14.5779008369,14.5779598271,14.578018815,14.5780778004,14.5781367834,14.578195764,14.5782547422,14.578313718, +14.5783726914,14.5784316623,14.5784906309,14.578549597,14.5786085607,14.5786675221,14.578726481,14.5787854375,14.5788443916,14.5789033432,14.5789622925,14.5790212394,14.5790801838,14.5791391259,14.5791980655,14.5792570028, +14.5793159376,14.57937487,14.5794338,14.5794927276,14.5795516528,14.5796105756,14.579669496,14.579728414,14.5797873295,14.5798462427,14.5799051535,14.5799640618,14.5800229678,14.5800818713,14.5801407724,14.5801996712, +14.5802585675,14.5803174614,14.5803763529,14.5804352421,14.5804941288,14.5805530131,14.580611895,14.5806707745,14.5807296516,14.5807885263,14.5808473986,14.5809062685,14.580965136,14.5810240011,14.5810828638,14.581141724, +14.5812005819,14.5812594374,14.5813182905,14.5813771412,14.5814359895,14.5814948353,14.5815536788,14.5816125199,14.5816713586,14.5817301949,14.5817890287,14.5818478602,14.5819066893,14.581965516,14.5820243403,14.5820831622, +14.5821419817,14.5822007988,14.5822596134,14.5823184257,14.5823772356,14.5824360431,14.5824948482,14.582553651,14.5826124513,14.5826712492,14.5827300447,14.5827888378,14.5828476286,14.5829064169,14.5829652028,14.5830239864, +14.5830827675,14.5831415463,14.5832003226,14.5832590966,14.5833178681,14.5833766373,14.5834354041,14.5834941685,14.5835529305,14.5836116901,14.5836704473,14.5837292021,14.5837879545,14.5838467045,14.5839054522,14.5839641974, +14.5840229403,14.5840816807,14.5841404188,14.5841991545,14.5842578877,14.5843166186,14.5843753471,14.5844340733,14.584492797,14.5845515183,14.5846102372,14.5846689538,14.584727668,14.5847863797,14.5848450891,14.5849037961, +14.5849625007,14.5850212029,14.5850799028,14.5851386002,14.5851972953,14.5852559879,14.5853146782,14.5853733661,14.5854320516,14.5854907347,14.5855494154,14.5856080938,14.5856667697,14.5857254433,14.5857841145,14.5858427833, +14.5859014497,14.5859601137,14.5860187754,14.5860774346,14.5861360915,14.586194746,14.5862533981,14.5863120478,14.5863706951,14.5864293401,14.5864879826,14.5865466228,14.5866052606,14.586663896,14.586722529,14.5867811597, +14.586839788,14.5868984138,14.5869570373,14.5870156585,14.5870742772,14.5871328936,14.5871915075,14.5872501191,14.5873087283,14.5873673352,14.5874259396,14.5874845417,14.5875431414,14.5876017387,14.5876603336,14.5877189262, +14.5877775163,14.5878361041,14.5878946895,14.5879532726,14.5880118532,14.5880704315,14.5881290074,14.5881875809,14.588246152,14.5883047208,14.5883632872,14.5884218512,14.5884804128,14.5885389721,14.588597529,14.5886560835, +14.5887146356,14.5887731853,14.5888317327,14.5888902777,14.5889488203,14.5890073606,14.5890658984,14.5891244339,14.589182967,14.5892414978,14.5893000262,14.5893585521,14.5894170758,14.589475597,14.5895341159,14.5895926324, +14.5896511465,14.5897096583,14.5897681676,14.5898266747,14.5898851793,14.5899436816,14.5900021814,14.590060679,14.5901191741,14.5901776669,14.5902361573,14.5902946453,14.590353131,14.5904116143,14.5904700952,14.5905285737, +14.5905870499,14.5906455237,14.5907039952,14.5907624642,14.5908209309,14.5908793953,14.5909378572,14.5909963168,14.591054774,14.5911132289,14.5911716814,14.5912301315,14.5912885792,14.5913470246,14.5914054676,14.5914639083, +14.5915223466,14.5915807825,14.591639216,14.5916976472,14.591756076,14.5918145025,14.5918729266,14.5919313483,14.5919897676,14.5920481846,14.5921065992,14.5921650115,14.5922234214,14.5922818289,14.592340234,14.5923986368, +14.5924570373,14.5925154353,14.592573831,14.5926322244,14.5926906154,14.592749004,14.5928073902,14.5928657741,14.5929241556,14.5929825348,14.5930409116,14.593099286,14.5931576581,14.5932160278,14.5932743952,14.5933327602, +14.5933911228,14.5934494831,14.593507841,14.5935661965,14.5936245497,14.5936829005,14.593741249,14.5937995951,14.5938579389,14.5939162802,14.5939746193,14.5940329559,14.5940912903,14.5941496222,14.5942079518,14.594266279, +14.5943246039,14.5943829264,14.5944412466,14.5944995644,14.5945578799,14.594616193,14.5946745037,14.5947328121,14.5947911181,14.5948494218,14.5949077231,14.594966022,14.5950243186,14.5950826129,14.5951409047,14.5951991943, +14.5952574814,14.5953157663,14.5953740487,14.5954323288,14.5954906066,14.595548882,14.5956071551,14.5956654258,14.5957236941,14.5957819601,14.5958402237,14.595898485,14.5959567439,14.5960150005,14.5960732547,14.5961315066, +14.5961897561,14.5962480033,14.5963062481,14.5963644906,14.5964227307,14.5964809685,14.5965392039,14.596597437,14.5966556677,14.596713896,14.5967721221,14.5968303457,14.596888567,14.596946786,14.5970050026,14.5970632169, +14.5971214288,14.5971796384,14.5972378456,14.5972960504,14.597354253,14.5974124531,14.597470651,14.5975288465,14.5975870396,14.5976452304,14.5977034188,14.5977616049,14.5978197886,14.59787797,14.5979361491,14.5979943258, +14.5980525002,14.5981106722,14.5981688418,14.5982270092,14.5982851741,14.5983433368,14.5984014971,14.598459655,14.5985178106,14.5985759639,14.5986341148,14.5986922633,14.5987504096,14.5988085535,14.598866695,14.5989248342, +14.598982971,14.5990411055,14.5990992377,14.5991573675,14.599215495,14.5992736202,14.599331743,14.5993898634,14.5994479815,14.5995060973,14.5995642107,14.5996223218,14.5996804306,14.599738537,14.5997966411,14.5998547428, +14.5999128422,14.5999709392,14.600029034,14.6000871263,14.6001452164,14.6002033041,14.6002613894,14.6003194724,14.6003775531,14.6004356314,14.6004937075,14.6005517811,14.6006098524,14.6006679214,14.6007259881,14.6007840524, +14.6008421144,14.600900174,14.6009582313,14.6010162863,14.6010743389,14.6011323892,14.6011904372,14.6012484828,14.6013065261,14.6013645671,14.6014226057,14.601480642,14.6015386759,14.6015967076,14.6016547368,14.6017127638, +14.6017707884,14.6018288107,14.6018868306,14.6019448483,14.6020028635,14.6020608765,14.6021188871,14.6021768954,14.6022349013,14.602292905,14.6023509062,14.6024089052,14.6024669018,14.6025248961,14.6025828881,14.6026408777, +14.602698865,14.60275685,14.6028148326,14.6028728129,14.6029307909,14.6029887666,14.6030467399,14.6031047109,14.6031626795,14.6032206459,14.6032786099,14.6033365715,14.6033945309,14.6034524879,14.6035104426,14.603568395, +14.603626345,14.6036842927,14.6037422381,14.6038001811,14.6038581218,14.6039160602,14.6039739963,14.6040319301,14.6040898615,14.6041477906,14.6042057173,14.6042636418,14.6043215639,14.6043794837,14.6044374011,14.6044953163, +14.6045532291,14.6046111396,14.6046690477,14.6047269536,14.6047848571,14.6048427583,14.6049006571,14.6049585537,14.6050164479,14.6050743398,14.6051322294,14.6051901166,14.6052480016,14.6053058842,14.6053637645,14.6054216424, +14.6054795181,14.6055373914,14.6055952624,14.6056531311,14.6057109974,14.6057688614,14.6058267232,14.6058845826,14.6059424396,14.6060002944,14.6060581468,14.6061159969,14.6061738447,14.6062316902,14.6062895333,14.6063473742, +14.6064052127,14.6064630489,14.6065208828,14.6065787143,14.6066365436,14.6066943705,14.6067521951,14.6068100174,14.6068678374,14.606925655,14.6069834704,14.6070412834,14.6070990941,14.6071569025,14.6072147086,14.6072725123, +14.6073303137,14.6073881129,14.6074459097,14.6075037042,14.6075614964,14.6076192862,14.6076770738,14.607734859,14.6077926419,14.6078504225,14.6079082008,14.6079659768,14.6080237505,14.6080815218,14.6081392908,14.6081970576, +14.608254822,14.6083125841,14.6083703439,14.6084281013,14.6084858565,14.6085436093,14.6086013599,14.6086591081,14.608716854,14.6087745976,14.6088323389,14.6088900779,14.6089478146,14.6090055489,14.609063281,14.6091210107, +14.6091787381,14.6092364633,14.6092941861,14.6093519066,14.6094096248,14.6094673406,14.6095250542,14.6095827655,14.6096404744,14.6096981811,14.6097558854,14.6098135875,14.6098712872,14.6099289846,14.6099866797,14.6100443725, +14.610102063,14.6101597512,14.6102174371,14.6102751206,14.6103328019,14.6103904809,14.6104481575,14.6105058319,14.6105635039,14.6106211737,14.6106788411,14.6107365062,14.6107941691,14.6108518296,14.6109094878,14.6109671437, +14.6110247973,14.6110824486,14.6111400976,14.6111977443,14.6112553887,14.6113130308,14.6113706706,14.6114283081,14.6114859432,14.6115435761,14.6116012067,14.611658835,14.6117164609,14.6117740846,14.611831706,14.6118893251, +14.6119469418,14.6120045563,14.6120621685,14.6121197783,14.6121773859,14.6122349911,14.6122925941,14.6123501948,14.6124077931,14.6124653892,14.612522983,14.6125805744,14.6126381636,14.6126957505,14.612753335,14.6128109173, +14.6128684973,14.612926075,14.6129836503,14.6130412234,14.6130987942,14.6131563627,14.6132139289,14.6132714928,14.6133290544,14.6133866137,14.6134441707,14.6135017254,14.6135592778,14.6136168279,14.6136743757,14.6137319212, +14.6137894645,14.6138470054,14.613904544,14.6139620804,14.6140196144,14.6140771462,14.6141346757,14.6141922028,14.6142497277,14.6143072503,14.6143647706,14.6144222885,14.6144798042,14.6145373177,14.6145948288,14.6146523376, +14.6147098441,14.6147673484,14.6148248503,14.6148823499,14.6149398473,14.6149973424,14.6150548352,14.6151123256,14.6151698138,14.6152272997,14.6152847834,14.6153422647,14.6153997437,14.6154572205,14.6155146949,14.6155721671, +14.615629637,14.6156871046,14.6157445699,14.6158020329,14.6158594936,14.615916952,14.6159744082,14.616031862,14.6160893136,14.6161467629,14.6162042099,14.6162616546,14.616319097,14.6163765371,14.616433975,14.6164914105, +14.6165488438,14.6166062748,14.6166637035,14.6167211299,14.616778554,14.6168359758,14.6168933954,14.6169508127,14.6170082277,14.6170656404,14.6171230508,14.6171804589,14.6172378647,14.6172952683,14.6173526696,14.6174100686, +14.6174674653,14.6175248597,14.6175822519,14.6176396417,14.6176970293,14.6177544146,14.6178117976,14.6178691783,14.6179265568,14.617983933,14.6180413069,14.6180986785,14.6181560478,14.6182134148,14.6182707796,14.6183281421, +14.6183855023,14.6184428602,14.6185002158,14.6185575692,14.6186149203,14.618672269,14.6187296156,14.6187869598,14.6188443018,14.6189016414,14.6189589788,14.619016314,14.6190736468,14.6191309774,14.6191883057,14.6192456317, +14.6193029554,14.6193602769,14.619417596,14.6194749129,14.6195322276,14.6195895399,14.61964685,14.6197041578,14.6197614633,14.6198187665,14.6198760675,14.6199333662,14.6199906626,14.6200479567,14.6201052486,14.6201625382, +14.6202198255,14.6202771105,14.6203343933,14.6203916738,14.620448952,14.620506228,14.6205635016,14.620620773,14.6206780421,14.620735309,14.6207925736,14.6208498359,14.6209070959,14.6209643536,14.6210216091,14.6210788623, +14.6211361133,14.6211933619,14.6212506083,14.6213078525,14.6213650943,14.6214223339,14.6214795712,14.6215368062,14.621594039,14.6216512695,14.6217084977,14.6217657237,14.6218229474,14.6218801688,14.621937388,14.6219946048, +14.6220518195,14.6221090318,14.6221662419,14.6222234497,14.6222806552,14.6223378585,14.6223950595,14.6224522582,14.6225094547,14.6225666489,14.6226238408,14.6226810305,14.6227382179,14.622795403,14.6228525859,14.6229097665, +14.6229669448,14.6230241209,14.6230812947,14.6231384662,14.6231956355,14.6232528025,14.6233099672,14.6233671297,14.6234242899,14.6234814478,14.6235386035,14.6235957569,14.6236529081,14.6237100569,14.6237672036,14.6238243479, +14.62388149,14.6239386298,14.6239957674,14.6240529027,14.6241100358,14.6241671665,14.6242242951,14.6242814213,14.6243385453,14.624395667,14.6244527865,14.6245099037,14.6245670187,14.6246241314,14.6246812418,14.62473835, +14.6247954559,14.6248525595,14.6249096609,14.62496676,14.6250238569,14.6250809515,14.6251380438,14.6251951339,14.6252522217,14.6253093073,14.6253663906,14.6254234717,14.6254805505,14.625537627,14.6255947013,14.6256517733, +14.6257088431,14.6257659106,14.6258229758,14.6258800388,14.6259370995,14.625994158,14.6260512142,14.6261082682,14.6261653199,14.6262223694,14.6262794166,14.6263364615,14.6263935042,14.6264505446,14.6265075828,14.6265646187, +14.6266216524,14.6266786838,14.6267357129,14.6267927398,14.6268497645,14.6269067869,14.626963807,14.6270208249,14.6270778405,14.6271348539,14.627191865,14.6272488739,14.6273058805,14.6273628849,14.627419887,14.6274768869, +14.6275338845,14.6275908798,14.6276478729,14.6277048638,14.6277618524,14.6278188388,14.6278758229,14.6279328047,14.6279897843,14.6280467617,14.6281037368,14.6281607096,14.6282176802,14.6282746486,14.6283316147,14.6283885785, +14.6284455401,14.6285024995,14.6285594566,14.6286164115,14.6286733641,14.6287303144,14.6287872625,14.6288442084,14.628901152,14.6289580934,14.6290150325,14.6290719694,14.629128904,14.6291858364,14.6292427665,14.6292996944, +14.6293566201,14.6294135435,14.6294704646,14.6295273835,14.6295843002,14.6296412146,14.6296981268,14.6297550367,14.6298119444,14.6298688498,14.629925753,14.629982654,14.6300395527,14.6300964491,14.6301533433,14.6302102353, +14.630267125,14.6303240125,14.6303808978,14.6304377808,14.6304946615,14.63055154,14.6306084163,14.6306652903,14.6307221621,14.6307790316,14.630835899,14.630892764,14.6309496268,14.6310064874,14.6310633457,14.6311202018, +14.6311770557,14.6312339073,14.6312907567,14.6313476038,14.6314044487,14.6314612914,14.6315181318,14.63157497,14.6316318059,14.6316886396,14.6317454711,14.6318023003,14.6318591273,14.631915952,14.6319727745,14.6320295948, +14.6320864128,14.6321432286,14.6322000422,14.6322568535,14.6323136626,14.6323704694,14.632427274,14.6324840764,14.6325408765,14.6325976744,14.6326544701,14.6327112635,14.6327680547,14.6328248437,14.6328816304,14.6329384149, +14.6329951971,14.6330519772,14.6331087549,14.6331655305,14.6332223038,14.6332790749,14.6333358437,14.6333926103,14.6334493747,14.6335061369,14.6335628968,14.6336196544,14.6336764099,14.6337331631,14.6337899141,14.6338466628, +14.6339034093,14.6339601536,14.6340168957,14.6340736355,14.6341303731,14.6341871085,14.6342438416,14.6343005725,14.6343573011,14.6344140276,14.6344707518,14.6345274737,14.6345841935,14.634640911,14.6346976263,14.6347543393, +14.6348110502,14.6348677588,14.6349244651,14.6349811693,14.6350378712,14.6350945709,14.6351512683,14.6352079635,14.6352646565,14.6353213473,14.6353780359,14.6354347222,14.6354914063,14.6355480881,14.6356047677,14.6356614452, +14.6357181203,14.6357747933,14.635831464,14.6358881325,14.6359447988,14.6360014628,14.6360581247,14.6361147843,14.6361714416,14.6362280968,14.6362847497,14.6363414004,14.6363980489,14.6364546951,14.6365113392,14.636567981, +14.6366246205,14.6366812579,14.636737893,14.6367945259,14.6368511566,14.6369077851,14.6369644113,14.6370210353,14.6370776571,14.6371342767,14.6371908941,14.6372475092,14.6373041221,14.6373607328,14.6374173413,14.6374739475, +14.6375305515,14.6375871533,14.6376437529,14.6377003503,14.6377569454,14.6378135383,14.637870129,14.6379267175,14.6379833038,14.6380398878,14.6380964696,14.6381530492,14.6382096266,14.6382662018,14.6383227747,14.6383793455, +14.638435914,14.6384924803,14.6385490444,14.6386056062,14.6386621659,14.6387187233,14.6387752785,14.6388318315,14.6388883823,14.6389449308,14.6390014771,14.6390580213,14.6391145632,14.6391711029,14.6392276403,14.6392841756, +14.6393407087,14.6393972395,14.6394537681,14.6395102945,14.6395668187,14.6396233407,14.6396798604,14.639736378,14.6397928933,14.6398494064,14.6399059173,14.639962426,14.6400189325,14.6400754367,14.6401319388,14.6401884386, +14.6402449362,14.6403014316,14.6403579248,14.6404144158,14.6404709046,14.6405273912,14.6405838755,14.6406403576,14.6406968376,14.6407533153,14.6408097908,14.6408662641,14.6409227352,14.640979204,14.6410356707,14.6410921352, +14.6411485974,14.6412050574,14.6412615153,14.6413179709,14.6413744243,14.6414308755,14.6414873245,14.6415437713,14.6416002158,14.6416566582,14.6417130984,14.6417695363,14.641825972,14.6418824056,14.6419388369,14.641995266, +14.6420516929,14.6421081176,14.6421645401,14.6422209604,14.6422773785,14.6423337944,14.6423902081,14.6424466195,14.6425030288,14.6425594358,14.6426158407,14.6426722433,14.6427286438,14.642785042,14.642841438,14.6428978319, +14.6429542235,14.6430106129,14.6430670001,14.6431233851,14.6431797679,14.6432361485,14.6432925269,14.6433489031,14.6434052771,14.6434616489,14.6435180185,14.6435743859,14.6436307511,14.643687114,14.6437434748,14.6437998334, +14.6438561898,14.6439125439,14.6439688959,14.6440252457,14.6440815933,14.6441379386,14.6441942818,14.6442506228,14.6443069615,14.6443632981,14.6444196325,14.6444759647,14.6445322946,14.6445886224,14.644644948,14.6447012713, +14.6447575925,14.6448139115,14.6448702283,14.6449265428,14.6449828552,14.6450391654,14.6450954734,14.6451517792,14.6452080828,14.6452643842,14.6453206834,14.6453769804,14.6454332752,14.6454895678,14.6455458582,14.6456021464, +14.6456584324,14.6457147162,14.6457709979,14.6458272773,14.6458835545,14.6459398296,14.6459961024,14.6460523731,14.6461086415,14.6461649078,14.6462211718,14.6462774337,14.6463336934,14.6463899509,14.6464462062,14.6465024593, +14.6465587102,14.6466149589,14.6466712054,14.6467274497,14.6467836918,14.6468399318,14.6468961695,14.6469524051,14.6470086384,14.6470648696,14.6471210986,14.6471773254,14.64723355,14.6472897724,14.6473459926,14.6474022106, +14.6474584265,14.6475146401,14.6475708516,14.6476270608,14.6476832679,14.6477394728,14.6477956755,14.647851876,14.6479080743,14.6479642704,14.6480204643,14.6480766561,14.6481328457,14.648189033,14.6482452182,14.6483014012, +14.648357582,14.6484137606,14.6484699371,14.6485261113,14.6485822834,14.6486384532,14.6486946209,14.6487507864,14.6488069497,14.6488631109,14.6489192698,14.6489754265,14.6490315811,14.6490877335,14.6491438837,14.6492000317, +14.6492561775,14.6493123212,14.6493684626,14.6494246019,14.649480739,14.6495368739,14.6495930066,14.6496491371,14.6497052655,14.6497613916,14.6498175156,14.6498736374,14.649929757,14.6499858745,14.6500419897,14.6500981028, +14.6501542137,14.6502103224,14.6502664289,14.6503225332,14.6503786354,14.6504347354,14.6504908332,14.6505469288,14.6506030222,14.6506591135,14.6507152025,14.6507712894,14.6508273741,14.6508834567,14.650939537,14.6509956152, +14.6510516912,14.651107765,14.6511638366,14.6512199061,14.6512759733,14.6513320384,14.6513881014,14.6514441621,14.6515002207,14.651556277,14.6516123312,14.6516683833,14.6517244331,14.6517804808,14.6518365263,14.6518925696, +14.6519486107,14.6520046497,14.6520606865,14.6521167211,14.6521727535,14.6522287838,14.6522848118,14.6523408377,14.6523968615,14.652452883,14.6525089024,14.6525649196,14.6526209346,14.6526769475,14.6527329582,14.6527889667, +14.652844973,14.6529009772,14.6529569791,14.6530129789,14.6530689766,14.653124972,14.6531809653,14.6532369564,14.6532929454,14.6533489322,14.6534049167,14.6534608992,14.6535168794,14.6535728575,14.6536288334,14.6536848071, +14.6537407787,14.6537967481,14.6538527153,14.6539086804,14.6539646432,14.654020604,14.6540765625,14.6541325189,14.6541884731,14.6542444251,14.6543003749,14.6543563226,14.6544122681,14.6544682115,14.6545241527,14.6545800917, +14.6546360285,14.6546919632,14.6547478957,14.654803826,14.6548597542,14.6549156802,14.654971604,14.6550275257,14.6550834452,14.6551393625,14.6551952777,14.6552511907,14.6553071015,14.6553630102,14.6554189167,14.655474821, +14.6555307232,14.6555866232,14.655642521,14.6556984166,14.6557543101,14.6558102015,14.6558660906,14.6559219776,14.6559778625,14.6560337452,14.6560896257,14.656145504,14.6562013802,14.6562572542,14.6563131261,14.6563689958, +14.6564248633,14.6564807286,14.6565365918,14.6565924529,14.6566483117,14.6567041685,14.656760023,14.6568158754,14.6568717256,14.6569275737,14.6569834196,14.6570392633,14.6570951049,14.6571509443,14.6572067816,14.6572626166, +14.6573184496,14.6573742804,14.657430109,14.6574859354,14.6575417597,14.6575975818,14.6576534018,14.6577092196,14.6577650353,14.6578208488,14.6578766601,14.6579324693,14.6579882763,14.6580440811,14.6580998838,14.6581556844, +14.6582114828,14.658267279,14.658323073,14.6583788649,14.6584346547,14.6584904423,14.6585462277,14.658602011,14.6586577921,14.6587135711,14.6587693479,14.6588251226,14.658880895,14.6589366654,14.6589924336,14.6590481996, +14.6591039635,14.6591597252,14.6592154848,14.6592712422,14.6593269974,14.6593827505,14.6594385015,14.6594942502,14.6595499969,14.6596057414,14.6596614837,14.6597172239,14.6597729619,14.6598286977,14.6598844315,14.659940163, +14.6599958924,14.6600516197,14.6601073448,14.6601630677,14.6602187885,14.6602745072,14.6603302237,14.660385938,14.6604416502,14.6604973602,14.6605530681,14.6606087739,14.6606644775,14.6607201789,14.6607758782,14.6608315753, +14.6608872703,14.6609429631,14.6609986538,14.6610543424,14.6611100287,14.661165713,14.6612213951,14.661277075,14.6613327528,14.6613884284,14.6614441019,14.6614997733,14.6615554425,14.6616111095,14.6616667744,14.6617224372, +14.6617780978,14.6618337562,14.6618894125,14.6619450667,14.6620007187,14.6620563686,14.6621120163,14.6621676619,14.6622233053,14.6622789466,14.6623345857,14.6623902227,14.6624458576,14.6625014903,14.6625571208,14.6626127493, +14.6626683755,14.6627239996,14.6627796216,14.6628352415,14.6628908591,14.6629464747,14.6630020881,14.6630576993,14.6631133085,14.6631689154,14.6632245203,14.6632801229,14.6633357235,14.6633913219,14.6634469181,14.6635025122, +14.6635581042,14.663613694,14.6636692817,14.6637248673,14.6637804507,14.6638360319,14.6638916111,14.663947188,14.6640027629,14.6640583356,14.6641139061,14.6641694746,14.6642250408,14.664280605,14.664336167,14.6643917268, +14.6644472845,14.6645028401,14.6645583936,14.6646139449,14.664669494,14.664725041,14.6647805859,14.6648361287,14.6648916693,14.6649472078,14.6650027441,14.6650582783,14.6651138103,14.6651693403,14.665224868,14.6652803937, +14.6653359172,14.6653914386,14.6654469578,14.6655024749,14.6655579898,14.6656135027,14.6656690134,14.6657245219,14.6657800283,14.6658355326,14.6658910348,14.6659465348,14.6660020326,14.6660575284,14.666113022,14.6661685135, +14.6662240028,14.66627949,14.6663349751,14.666390458,14.6664459388,14.6665014175,14.666556894,14.6666123684,14.6666678407,14.6667233108,14.6667787788,14.6668342447,14.6668897084,14.66694517,14.6670006295,14.6670560869, +14.6671115421,14.6671669952,14.6672224461,14.6672778949,14.6673333416,14.6673887862,14.6674442286,14.6674996689,14.667555107,14.6676105431,14.667665977,14.6677214088,14.6677768384,14.6678322659,14.6678876913,14.6679431145, +14.6679985357,14.6680539547,14.6681093715,14.6681647863,14.6682201989,14.6682756094,14.6683310177,14.668386424,14.6684418281,14.66849723,14.6685526299,14.6686080276,14.6686634232,14.6687188166,14.668774208,14.6688295972, +14.6688849843,14.6689403692,14.6689957521,14.6690511328,14.6691065113,14.6691618878,14.6692172621,14.6692726343,14.6693280044,14.6693833723,14.6694387382,14.6694941019,14.6695494635,14.6696048229,14.6696601802,14.6697155354, +14.6697708885,14.6698262395,14.6698815883,14.669936935,14.6699922796,14.6700476221,14.6701029624,14.6701583006,14.6702136367,14.6702689707,14.6703243026,14.6703796323,14.6704349599,14.6704902854,14.6705456088,14.67060093, +14.6706562491,14.6707115661,14.670766881,14.6708221938,14.6708775044,14.6709328129,14.6709881193,14.6710434236,14.6710987257,14.6711540258,14.6712093237,14.6712646195,14.6713199132,14.6713752047,14.6714304942,14.6714857815, +14.6715410667,14.6715963498,14.6716516308,14.6717069096,14.6717621863,14.671817461,14.6718727335,14.6719280038,14.6719832721,14.6720385382,14.6720938023,14.6721490642,14.672204324,14.6722595816,14.6723148372,14.6723700906, +14.672425342,14.6724805912,14.6725358383,14.6725910833,14.6726463261,14.6727015669,14.6727568055,14.672812042,14.6728672764,14.6729225087,14.6729777389,14.673032967,14.6730881929,14.6731434167,14.6731986385,14.6732538581, +14.6733090756,14.6733642909,14.6734195042,14.6734747154,14.6735299244,14.6735851313,14.6736403361,14.6736955388,14.6737507394,14.6738059379,14.6738611343,14.6739163285,14.6739715207,14.6740267107,14.6740818986,14.6741370844, +14.6741922681,14.6742474497,14.6743026292,14.6743578066,14.6744129818,14.674468155,14.674523326,14.6745784949,14.6746336618,14.6746888265,14.6747439891,14.6747991496,14.6748543079,14.6749094642,14.6749646184,14.6750197704, +14.6750749204,14.6751300682,14.675185214,14.6752403576,14.6752954991,14.6753506385,14.6754057758,14.675460911,14.6755160441,14.6755711751,14.6756263039,14.6756814307,14.6757365554,14.6757916779,14.6758467984,14.6759019167, +14.6759570329,14.6760121471,14.6760672591,14.676122369,14.6761774768,14.6762325825,14.6762876861,14.6763427876,14.676397887,14.6764529843,14.6765080795,14.6765631726,14.6766182636,14.6766733525,14.6767284392,14.6767835239, +14.6768386065,14.6768936869,14.6769487653,14.6770038416,14.6770589157,14.6771139878,14.6771690577,14.6772241256,14.6772791913,14.677334255,14.6773893165,14.6774443759,14.6774994333,14.6775544885,14.6776095417,14.6776645927, +14.6777196416,14.6777746885,14.6778297332,14.6778847759,14.6779398164,14.6779948548,14.6780498912,14.6781049254,14.6781599575,14.6782149876,14.6782700155,14.6783250414,14.6783800651,14.6784350868,14.6784901063,14.6785451237, +14.6786001391,14.6786551524,14.6787101635,14.6787651726,14.6788201795,14.6788751844,14.6789301872,14.6789851878,14.6790401864,14.6790951829,14.6791501772,14.6792051695,14.6792601597,14.6793151478,14.6793701338,14.6794251177, +14.6794800995,14.6795350792,14.6795900568,14.6796450323,14.6797000058,14.6797549771,14.6798099463,14.6798649135,14.6799198785,14.6799748415,14.6800298023,14.6800847611,14.6801397178,14.6801946723,14.6802496248,14.6803045752, +14.6803595235,14.6804144697,14.6804694138,14.6805243559,14.6805792958,14.6806342336,14.6806891694,14.680744103,14.6807990346,14.680853964,14.6809088914,14.6809638167,14.6810187399,14.681073661,14.68112858,14.6811834969, +14.6812384118,14.6812933245,14.6813482352,14.6814031437,14.6814580502,14.6815129546,14.6815678569,14.6816227571,14.6816776552,14.6817325512,14.6817874452,14.681842337,14.6818972268,14.6819521145,14.682007,14.6820618835, +14.682116765,14.6821716443,14.6822265215,14.6822813967,14.6823362697,14.6823911407,14.6824460096,14.6825008764,14.6825557411,14.6826106037,14.6826654642,14.6827203227,14.6827751791,14.6828300333,14.6828848855,14.6829397357, +14.6829945837,14.6830494296,14.6831042735,14.6831591152,14.6832139549,14.6832687925,14.6833236281,14.6833784615,14.6834332928,14.6834881221,14.6835429493,14.6835977744,14.6836525974,14.6837074183,14.6837622372,14.6838170539, +14.6838718686,14.6839266812,14.6839814917,14.6840363002,14.6840911065,14.6841459108,14.684200713,14.6842555131,14.6843103111,14.6843651071,14.6844199009,14.6844746927,14.6845294824,14.68458427,14.6846390556,14.684693839, +14.6847486204,14.6848033997,14.6848581769,14.6849129521,14.6849677251,14.6850224961,14.685077265,14.6851320319,14.6851867966,14.6852415593,14.6852963198,14.6853510784,14.6854058348,14.6854605891,14.6855153414,14.6855700916, +14.6856248397,14.6856795858,14.6857343297,14.6857890716,14.6858438114,14.6858985492,14.6859532848,14.6860080184,14.6860627499,14.6861174793,14.6861722067,14.6862269319,14.6862816551,14.6863363763,14.6863910953,14.6864458123, +14.6865005272,14.68655524,14.6866099508,14.6866646594,14.686719366,14.6867740705,14.686828773,14.6868834734,14.6869381717,14.6869928679,14.6870475621,14.6871022541,14.6871569441,14.6872116321,14.6872663179,14.6873210017, +14.6873756834,14.6874303631,14.6874850407,14.6875397161,14.6875943896,14.6876490609,14.6877037302,14.6877583974,14.6878130626,14.6878677256,14.6879223866,14.6879770456,14.6880317024,14.6880863572,14.6881410099,14.6881956606, +14.6882503091,14.6883049556,14.6883596001,14.6884142424,14.6884688827,14.688523521,14.6885781571,14.6886327912,14.6886874232,14.6887420532,14.6887966811,14.6888513069,14.6889059306,14.6889605523,14.6890151719,14.6890697894, +14.6891244049,14.6891790183,14.6892336297,14.6892882389,14.6893428461,14.6893974513,14.6894520543,14.6895066553,14.6895612543,14.6896158512,14.689670446,14.6897250387,14.6897796294,14.689834218,14.6898888045,14.689943389, +14.6899979714,14.6900525518,14.6901071301,14.6901617063,14.6902162804,14.6902708525,14.6903254225,14.6903799905,14.6904345564,14.6904891202,14.690543682,14.6905982417,14.6906527993,14.6907073549,14.6907619084,14.6908164599, +14.6908710093,14.6909255566,14.6909801019,14.6910346451,14.6910891862,14.6911437253,14.6911982623,14.6912527973,14.6913073302,14.691361861,14.6914163898,14.6914709165,14.6915254412,14.6915799638,14.6916344843,14.6916890028, +14.6917435192,14.6917980335,14.6918525458,14.691907056,14.6919615642,14.6920160703,14.6920705744,14.6921250764,14.6921795763,14.6922340742,14.69228857,14.6923430638,14.6923975555,14.6924520451,14.6925065327,14.6925610182, +14.6926155017,14.6926699831,14.6927244625,14.6927789398,14.692833415,14.6928878882,14.6929423593,14.6929968284,14.6930512954,14.6931057604,14.6931602233,14.6932146841,14.6932691429,14.6933235996,14.6933780543,14.6934325069, +14.6934869575,14.693541406,14.6935958525,14.6936502969,14.6937047392,14.6937591795,14.6938136178,14.6938680539,14.6939224881,14.6939769202,14.6940313502,14.6940857782,14.6941402041,14.6941946279,14.6942490498,14.6943034695, +14.6943578872,14.6944123029,14.6944667165,14.694521128,14.6945755375,14.694629945,14.6946843504,14.6947387537,14.694793155,14.6948475542,14.6949019514,14.6949563466,14.6950107397,14.6950651307,14.6951195197,14.6951739066, +14.6952282915,14.6952826743,14.6953370551,14.6953914339,14.6954458105,14.6955001852,14.6955545578,14.6956089283,14.6956632968,14.6957176632,14.6957720276,14.69582639,14.6958807503,14.6959351085,14.6959894647,14.6960438189, +14.696098171,14.696152521,14.696206869,14.696261215,14.6963155589,14.6963699008,14.6964242406,14.6964785784,14.6965329141,14.6965872478,14.6966415794,14.696695909,14.6967502365,14.696804562,14.6968588855,14.6969132069, +14.6969675262,14.6970218435,14.6970761588,14.697130472,14.6971847832,14.6972390924,14.6972933995,14.6973477045,14.6974020075,14.6974563085,14.6975106074,14.6975649043,14.6976191991,14.6976734919,14.6977277826,14.6977820713, +14.697836358,14.6978906426,14.6979449251,14.6979992057,14.6980534842,14.6981077606,14.698162035,14.6982163074,14.6982705777,14.698324846,14.6983791122,14.6984333764,14.6984876386,14.6985418987,14.6985961567,14.6986504128, +14.6987046668,14.6987589187,14.6988131686,14.6988674165,14.6989216623,14.6989759061,14.6990301479,14.6990843876,14.6991386253,14.6991928609,14.6992470945,14.6993013261,14.6993555556,14.6994097831,14.6994640085,14.6995182319, +14.6995724533,14.6996266726,14.6996808899,14.6997351052,14.6997893184,14.6998435296,14.6998977387,14.6999519458,14.7000061509,14.7000603539,14.7001145549,14.7001687539,14.7002229508,14.7002771457,14.7003313385,14.7003855294, +14.7004397181,14.7004939049,14.7005480896,14.7006022723,14.7006564529,14.7007106315,14.7007648081,14.7008189826,14.7008731551,14.7009273256,14.700981494,14.7010356604,14.7010898248,14.7011439872,14.7011981475,14.7012523057, +14.701306462,14.7013606162,14.7014147683,14.7014689185,14.7015230666,14.7015772126,14.7016313567,14.7016854987,14.7017396387,14.7017937766,14.7018479125,14.7019020464,14.7019561783,14.7020103081,14.7020644359,14.7021185616, +14.7021726854,14.7022268071,14.7022809267,14.7023350444,14.70238916,14.7024432736,14.7024973851,14.7025514946,14.7026056021,14.7026597076,14.702713811,14.7027679124,14.7028220118,14.7028761091,14.7029302044,14.7029842977, +14.703038389,14.7030924782,14.7031465654,14.7032006506,14.7032547337,14.7033088149,14.703362894,14.703416971,14.7034710461,14.7035251191,14.7035791901,14.703633259,14.703687326,14.7037413909,14.7037954538,14.7038495146, +14.7039035734,14.7039576302,14.704011685,14.7040657378,14.7041197885,14.7041738372,14.7042278839,14.7042819286,14.7043359712,14.7043900118,14.7044440504,14.7044980869,14.7045521215,14.704606154,14.7046601845,14.7047142129, +14.7047682394,14.7048222638,14.7048762862,14.7049303065,14.7049843249,14.7050383412,14.7050923555,14.7051463678,14.7052003781,14.7052543863,14.7053083925,14.7053623967,14.7054163989,14.705470399,14.7055243972,14.7055783933, +14.7056323874,14.7056863794,14.7057403695,14.7057943575,14.7058483435,14.7059023275,14.7059563095,14.7060102894,14.7060642673,14.7061182432,14.7061722171,14.706226189,14.7062801588,14.7063341267,14.7063880925,14.7064420563, +14.7064960181,14.7065499778,14.7066039356,14.7066578913,14.706711845,14.7067657967,14.7068197463,14.706873694,14.7069276396,14.7069815832,14.7070355248,14.7070894644,14.707143402,14.7071973375,14.7072512711,14.7073052026, +14.7073591321,14.7074130596,14.707466985,14.7075209085,14.7075748299,14.7076287493,14.7076826668,14.7077365822,14.7077904955,14.7078444069,14.7078983162,14.7079522236,14.7080061289,14.7080600322,14.7081139335,14.7081678328, +14.70822173,14.7082756253,14.7083295185,14.7083834098,14.708437299,14.7084911862,14.7085450714,14.7085989545,14.7086528357,14.7087067148,14.708760592,14.7088144671,14.7088683402,14.7089222113,14.7089760804,14.7090299475, +14.7090838126,14.7091376756,14.7091915367,14.7092453957,14.7092992527,14.7093531077,14.7094069607,14.7094608117,14.7095146607,14.7095685077,14.7096223526,14.7096761956,14.7097300365,14.7097838755,14.7098377124,14.7098915473, +14.7099453802,14.7099992111,14.71005304,14.7101068669,14.7101606918,14.7102145147,14.7102683355,14.7103221544,14.7103759712,14.710429786,14.7104835989,14.7105374097,14.7105912185,14.7106450253,14.7106988301,14.7107526329, +14.7108064337,14.7108602325,14.7109140293,14.710967824,14.7110216168,14.7110754076,14.7111291963,14.7111829831,14.7112367678,14.7112905505,14.7113443313,14.71139811,14.7114518867,14.7115056614,14.7115594341,14.7116132049, +14.7116669736,14.7117207403,14.711774505,14.7118282677,14.7118820284,14.711935787,14.7119895437,14.7120432984,14.7120970511,14.7121508018,14.7122045504,14.7122582971,14.7123120418,14.7123657844,14.7124195251,14.7124732638, +14.7125270004,14.7125807351,14.7126344678,14.7126881984,14.7127419271,14.7127956537,14.7128493784,14.712903101,14.7129568217,14.7130105404,14.713064257,14.7131179717,14.7131716843,14.713225395,14.7132791036,14.7133328103, +14.7133865149,14.7134402176,14.7134939183,14.7135476169,14.7136013136,14.7136550082,14.7137087009,14.7137623916,14.7138160802,14.7138697669,14.7139234516,14.7139771343,14.7140308149,14.7140844936,14.7141381703,14.714191845, +14.7142455177,14.7142991884,14.7143528571,14.7144065238,14.7144601885,14.7145138512,14.7145675119,14.7146211706,14.7146748273,14.714728482,14.7147821348,14.7148357855,14.7148894342,14.714943081,14.7149967257,14.7150503685, +14.7151040092,14.715157648,14.7152112848,14.7152649195,14.7153185523,14.7153721831,14.7154258119,14.7154794387,14.7155330635,14.7155866863,14.7156403072,14.715693926,14.7157475428,14.7158011577,14.7158547705,14.7159083814, +14.7159619903,14.7160155971,14.716069202,14.7161228049,14.7161764058,14.7162300047,14.7162836016,14.7163371966,14.7163907895,14.7164443804,14.7164979694,14.7165515564,14.7166051413,14.7166587243,14.7167123053,14.7167658843, +14.7168194613,14.7168730364,14.7169266094,14.7169801804,14.7170337495,14.7170873166,14.7171408816,14.7171944447,14.7172480058,14.7173015649,14.7173551221,14.7174086772,14.7174622303,14.7175157815,14.7175693307,14.7176228779, +14.7176764231,14.7177299663,14.7177835075,14.7178370467,14.717890584,14.7179441193,14.7179976525,14.7180511838,14.7181047131,14.7181582404,14.7182117658,14.7182652891,14.7183188105,14.7183723299,14.7184258472,14.7184793626, +14.7185328761,14.7185863875,14.718639897,14.7186934044,14.7187469099,14.7188004134,14.7188539149,14.7189074144,14.718960912,14.7190144075,14.7190679011,14.7191213927,14.7191748823,14.71922837,14.7192818556,14.7193353393, +14.7193888209,14.7194423006,14.7194957784,14.7195492541,14.7196027278,14.7196561996,14.7197096694,14.7197631372,14.719816603,14.7198700669,14.7199235287,14.7199769886,14.7200304465,14.7200839024,14.7201373564,14.7201908083, +14.7202442583,14.7202977063,14.7203511523,14.7204045963,14.7204580384,14.7205114785,14.7205649166,14.7206183527,14.7206717868,14.720725219,14.7207786492,14.7208320774,14.7208855036,14.7209389278,14.7209923501,14.7210457704, +14.7210991887,14.721152605,14.7212060194,14.7212594318,14.7213128422,14.7213662506,14.721419657,14.7214730615,14.721526464,14.7215798645,14.7216332631,14.7216866596,14.7217400542,14.7217934468,14.7218468375,14.7219002261, +14.7219536128,14.7220069975,14.7220603802,14.722113761,14.7221671398,14.7222205166,14.7222738914,14.7223272643,14.7223806352,14.7224340041,14.722487371,14.722540736,14.722594099,14.72264746,14.722700819,14.7227541761, +14.7228075312,14.7228608843,14.7229142354,14.7229675846,14.7230209318,14.723074277,14.7231276203,14.7231809616,14.7232343009,14.7232876382,14.7233409736,14.723394307,14.7234476384,14.7235009679,14.7235542954,14.7236076209, +14.7236609444,14.723714266,14.7237675856,14.7238209032,14.7238742189,14.7239275326,14.7239808443,14.724034154,14.7240874618,14.7241407676,14.7241940714,14.7242473733,14.7243006732,14.7243539711,14.7244072671,14.7244605611, +14.7245138531,14.7245671432,14.7246204313,14.7246737174,14.7247270015,14.7247802837,14.7248335639,14.7248868422,14.7249401185,14.7249933928,14.7250466651,14.7250999355,14.7251532039,14.7252064704,14.7252597348,14.7253129973, +14.7253662579,14.7254195165,14.7254727731,14.7255260277,14.7255792804,14.7256325311,14.7256857799,14.7257390267,14.7257922715,14.7258455143,14.7258987552,14.7259519942,14.7260052311,14.7260584661,14.7261116992,14.7261649302, +14.7262181593,14.7262713865,14.7263246117,14.7263778349,14.7264310561,14.7264842754,14.7265374927,14.7265907081,14.7266439215,14.7266971329,14.7267503424,14.7268035499,14.7268567555,14.726909959,14.7269631607,14.7270163603, +14.727069558,14.7271227538,14.7271759475,14.7272291394,14.7272823292,14.7273355171,14.727388703,14.727441887,14.727495069,14.7275482491,14.7276014272,14.7276546033,14.7277077775,14.7277609497,14.7278141199,14.7278672882, +14.7279204546,14.7279736189,14.7280267814,14.7280799418,14.7281331003,14.7281862568,14.7282394114,14.728292564,14.7283457147,14.7283988634,14.7284520102,14.728505155,14.7285582978,14.7286114387,14.7286645776,14.7287177145, +14.7287708495,14.7288239826,14.7288771137,14.7289302428,14.72898337,14.7290364952,14.7290896185,14.7291427398,14.7291958591,14.7292489765,14.729302092,14.7293552055,14.729408317,14.7294614266,14.7295145342,14.7295676398, +14.7296207436,14.7296738453,14.7297269451,14.729780043,14.7298331388,14.7298862328,14.7299393248,14.7299924148,14.7300455029,14.730098589,14.7301516732,14.7302047554,14.7302578357,14.730310914,14.7303639903,14.7304170647, +14.7304701372,14.7305232077,14.7305762762,14.7306293428,14.7306824075,14.7307354702,14.7307885309,14.7308415897,14.7308946465,14.7309477014,14.7310007544,14.7310538054,14.7311068544,14.7311599015,14.7312129466,14.7312659898, +14.731319031,14.7313720703,14.7314251076,14.731478143,14.7315311765,14.7315842079,14.7316372375,14.7316902651,14.7317432907,14.7317963144,14.7318493361,14.7319023559,14.7319553738,14.7320083897,14.7320614036,14.7321144156, +14.7321674257,14.7322204338,14.7322734399,14.7323264441,14.7323794464,14.7324324467,14.7324854451,14.7325384415,14.732591436,14.7326444285,14.7326974191,14.7327504077,14.7328033944,14.7328563791,14.7329093619,14.7329623428, +14.7330153217,14.7330682986,14.7331212737,14.7331742467,14.7332272179,14.733280187,14.7333331543,14.7333861196,14.7334390829,14.7334920443,14.7335450038,14.7335979613,14.7336509168,14.7337038705,14.7337568221,14.7338097719, +14.7338627197,14.7339156655,14.7339686094,14.7340215514,14.7340744914,14.7341274295,14.7341803656,14.7342332998,14.7342862321,14.7343391624,14.7343920908,14.7344450172,14.7344979417,14.7345508642,14.7346037848,14.7346567035, +14.7347096202,14.734762535,14.7348154478,14.7348683587,14.7349212677,14.7349741747,14.7350270798,14.7350799829,14.7351328841,14.7351857834,14.7352386807,14.7352915761,14.7353444695,14.735397361,14.7354502506,14.7355031382, +14.7355560239,14.7356089077,14.7356617895,14.7357146693,14.7357675473,14.7358204233,14.7358732973,14.7359261694,14.7359790396,14.7360319079,14.7360847742,14.7361376385,14.736190501,14.7362433615,14.73629622,14.7363490766, +14.7364019313,14.7364547841,14.7365076349,14.7365604838,14.7366133307,14.7366661757,14.7367190188,14.7367718599,14.7368246991,14.7368775364,14.7369303717,14.7369832051,14.7370360365,14.7370888661,14.7371416937,14.7371945193, +14.737247343,14.7373001648,14.7373529847,14.7374058026,14.7374586186,14.7375114326,14.7375642447,14.7376170549,14.7376698632,14.7377226695,14.7377754739,14.7378282763,14.7378810769,14.7379338754,14.7379866721,14.7380394668, +14.7380922596,14.7381450505,14.7381978394,14.7382506264,14.7383034115,14.7383561946,14.7384089758,14.7384617551,14.7385145324,14.7385673078,14.7386200813,14.7386728529,14.7387256225,14.7387783902,14.7388311559,14.7388839198, +14.7389366817,14.7389894416,14.7390421997,14.7390949558,14.73914771,14.7392004622,14.7392532126,14.739305961,14.7393587074,14.739411452,14.7394641946,14.7395169353,14.739569674,14.7396224109,14.7396751458,14.7397278787, +14.7397806098,14.7398333389,14.7398860661,14.7399387913,14.7399915147,14.7400442361,14.7400969556,14.7401496731,14.7402023888,14.7402551025,14.7403078143,14.7403605241,14.740413232,14.740465938,14.7405186421,14.7405713443, +14.7406240445,14.7406767428,14.7407294392,14.7407821336,14.7408348261,14.7408875167,14.7409402054,14.7409928922,14.741045577,14.7410982599,14.7411509409,14.74120362,14.7412562971,14.7413089723,14.7413616456,14.741414317, +14.7414669864,14.7415196539,14.7415723195,14.7416249832,14.7416776449,14.7417303048,14.7417829627,14.7418356187,14.7418882727,14.7419409249,14.7419935751,14.7420462234,14.7420988698,14.7421515142,14.7422041568,14.7422567974, +14.7423094361,14.7423620729,14.7424147077,14.7424673406,14.7425199717,14.7425726008,14.7426252279,14.7426778532,14.7427304765,14.7427830979,14.7428357174,14.742888335,14.7429409507,14.7429935644,14.7430461762,14.7430987861, +14.7431513941,14.7432040002,14.7432566043,14.7433092066,14.7433618069,14.7434144053,14.7434670017,14.7435195963,14.7435721889,14.7436247797,14.7436773685,14.7437299554,14.7437825403,14.7438351234,14.7438877045,14.7439402838, +14.7439928611,14.7440454365,14.7440980099,14.7441505815,14.7442031511,14.7442557189,14.7443082847,14.7443608486,14.7444134106,14.7444659706,14.7445185288,14.744571085,14.7446236393,14.7446761918,14.7447287422,14.7447812908, +14.7448338375,14.7448863823,14.7449389251,14.744991466,14.745044005,14.7450965421,14.7451490773,14.7452016106,14.745254142,14.7453066714,14.7453591989,14.7454117246,14.7454642483,14.7455167701,14.74556929,14.7456218079, +14.745674324,14.7457268382,14.7457793504,14.7458318607,14.7458843691,14.7459368756,14.7459893802,14.7460418829,14.7460943837,14.7461468826,14.7461993795,14.7462518746,14.7463043677,14.7463568589,14.7464093482,14.7464618356, +14.7465143211,14.7465668047,14.7466192864,14.7466717662,14.746724244,14.74677672,14.746829194,14.7468816661,14.7469341364,14.7469866047,14.7470390711,14.7470915356,14.7471439982,14.7471964589,14.7472489176,14.7473013745, +14.7473538295,14.7474062825,14.7474587337,14.7475111829,14.7475636303,14.7476160757,14.7476685192,14.7477209608,14.7477734005,14.7478258383,14.7478782742,14.7479307082,14.7479831403,14.7480355705,14.7480879988,14.7481404251, +14.7481928496,14.7482452721,14.7482976928,14.7483501116,14.7484025284,14.7484549433,14.7485073564,14.7485597675,14.7486121767,14.7486645841,14.7487169895,14.748769393,14.7488217946,14.7488741943,14.7489265921,14.748978988, +14.749031382,14.7490837741,14.7491361643,14.7491885526,14.749240939,14.7492933235,14.7493457061,14.7493980868,14.7494504656,14.7495028425,14.7495552174,14.7496075905,14.7496599617,14.749712331,14.7497646983,14.7498170638, +14.7498694274,14.7499217891,14.7499741488,14.7500265067,14.7500788627,14.7501312168,14.7501835689,14.7502359192,14.7502882676,14.7503406141,14.7503929586,14.7504453013,14.7504976421,14.750549981,14.750602318,14.750654653, +14.7507069862,14.7507593175,14.7508116469,14.7508639744,14.7509163,14.7509686237,14.7510209455,14.7510732654,14.7511255834,14.7511778995,14.7512302137,14.751282526,14.7513348364,14.7513871449,14.7514394515,14.7514917563, +14.7515440591,14.75159636,14.7516486591,14.7517009562,14.7517532514,14.7518055448,14.7518578362,14.7519101258,14.7519624135,14.7520146992,14.7520669831,14.7521192651,14.7521715452,14.7522238234,14.7522760996,14.752328374, +14.7523806466,14.7524329172,14.7524851859,14.7525374527,14.7525897176,14.7526419807,14.7526942418,14.7527465011,14.7527987584,14.7528510139,14.7529032675,14.7529555192,14.7530077689,14.7530600168,14.7531122628,14.753164507, +14.7532167492,14.7532689895,14.7533212279,14.7533734645,14.7534256991,14.7534779319,14.7535301628,14.7535823918,14.7536346189,14.7536868441,14.7537390674,14.7537912888,14.7538435083,14.753895726,14.7539479417,14.7540001556, +14.7540523675,14.7541045776,14.7541567858,14.7542089921,14.7542611965,14.754313399,14.7543655997,14.7544177984,14.7544699953,14.7545221902,14.7545743833,14.7546265745,14.7546787638,14.7547309512,14.7547831368,14.7548353204, +14.7548875022,14.754939682,14.75499186,14.7550440361,14.7550962103,14.7551483826,14.7552005531,14.7552527216,14.7553048883,14.755357053,14.7554092159,14.7554613769,14.755513536,14.7555656933,14.7556178486,14.7556700021, +14.7557221536,14.7557743033,14.7558264511,14.7558785971,14.7559307411,14.7559828832,14.7560350235,14.7560871619,14.7561392984,14.756191433,14.7562435657,14.7562956966,14.7563478255,14.7563999526,14.7564520778,14.7565042011, +14.7565563225,14.7566084421,14.7566605597,14.7567126755,14.7567647894,14.7568169014,14.7568690115,14.7569211198,14.7569732262,14.7570253307,14.7570774333,14.757129534,14.7571816328,14.7572337298,14.7572858249,14.7573379181, +14.7573900094,14.7574420988,14.7574941864,14.757546272,14.7575983558,14.7576504377,14.7577025178,14.7577545959,14.7578066722,14.7578587466,14.7579108191,14.7579628897,14.7580149585,14.7580670254,14.7581190904,14.7581711535, +14.7582232147,14.7582752741,14.7583273316,14.7583793872,14.7584314409,14.7584834927,14.7585355427,14.7585875908,14.758639637,14.7586916814,14.7587437238,14.7587957644,14.7588478031,14.7588998399,14.7589518749,14.759003908, +14.7590559392,14.7591079685,14.7591599959,14.7592120215,14.7592640452,14.759316067,14.7593680869,14.759420105,14.7594721212,14.7595241355,14.759576148,14.7596281585,14.7596801672,14.759732174,14.759784179,14.759836182, +14.7598881832,14.7599401825,14.75999218,14.7600441755,14.7600961692,14.7601481611,14.760200151,14.7602521391,14.7603041253,14.7603561096,14.7604080921,14.7604600726,14.7605120514,14.7605640282,14.7606160032,14.7606679762, +14.7607199475,14.7607719168,14.7608238843,14.7608758499,14.7609278136,14.7609797755,14.7610317355,14.7610836936,14.7611356498,14.7611876042,14.7612395567,14.7612915073,14.7613434561,14.761395403,14.761447348,14.7614992912, +14.7615512324,14.7616031719,14.7616551094,14.7617070451,14.7617589789,14.7618109108,14.7618628409,14.7619147691,14.7619666954,14.7620186198,14.7620705424,14.7621224631,14.762174382,14.762226299,14.7622782141,14.7623301273, +14.7623820387,14.7624339482,14.7624858559,14.7625377616,14.7625896655,14.7626415676,14.7626934678,14.7627453661,14.7627972625,14.7628491571,14.7629010498,14.7629529406,14.7630048296,14.7630567167,14.7631086019,14.7631604853, +14.7632123668,14.7632642465,14.7633161242,14.7633680001,14.7634198742,14.7634717464,14.7635236167,14.7635754851,14.7636273517,14.7636792164,14.7637310793,14.7637829403,14.7638347994,14.7638866567,14.7639385121,14.7639903656, +14.7640422173,14.7640940671,14.7641459151,14.7641977611,14.7642496054,14.7643014477,14.7643532882,14.7644051269,14.7644569636,14.7645087985,14.7645606316,14.7646124628,14.7646642921,14.7647161195,14.7647679451,14.7648197689, +14.7648715907,14.7649234107,14.7649752289,14.7650270452,14.7650788596,14.7651306722,14.7651824829,14.7652342917,14.7652860987,14.7653379038,14.7653897071,14.7654415085,14.7654933081,14.7655451058,14.7655969016,14.7656486955, +14.7657004877,14.7657522779,14.7658040663,14.7658558528,14.7659076375,14.7659594203,14.7660112013,14.7660629803,14.7661147576,14.766166533,14.7662183065,14.7662700781,14.766321848,14.7663736159,14.766425382,14.7664771462, +14.7665289086,14.7665806691,14.7666324278,14.7666841846,14.7667359395,14.7667876926,14.7668394439,14.7668911932,14.7669429408,14.7669946864,14.7670464302,14.7670981722,14.7671499123,14.7672016505,14.7672533869,14.7673051214, +14.7673568541,14.7674085849,14.7674603139,14.767512041,14.7675637663,14.7676154897,14.7676672112,14.7677189309,14.7677706488,14.7678223648,14.7678740789,14.7679257912,14.7679775016,14.7680292102,14.7680809169,14.7681326218, +14.7681843248,14.7682360259,14.7682877252,14.7683394227,14.7683911183,14.7684428121,14.768494504,14.768546194,14.7685978822,14.7686495685,14.768701253,14.7687529357,14.7688046165,14.7688562954,14.7689079725,14.7689596477, +14.7690113211,14.7690629926,14.7691146623,14.7691663301,14.7692179961,14.7692696603,14.7693213225,14.769372983,14.7694246416,14.7694762983,14.7695279532,14.7695796062,14.7696312574,14.7696829067,14.7697345542,14.7697861998, +14.7698378436,14.7698894856,14.7699411257,14.7699927639,14.7700444003,14.7700960348,14.7701476675,14.7701992984,14.7702509274,14.7703025546,14.7703541799,14.7704058033,14.7704574249,14.7705090447,14.7705606626,14.7706122787, +14.7706638929,14.7707155053,14.7707671158,14.7708187245,14.7708703314,14.7709219364,14.7709735395,14.7710251408,14.7710767403,14.7711283379,14.7711799336,14.7712315276,14.7712831196,14.7713347099,14.7713862983,14.7714378848, +14.7714894695,14.7715410524,14.7715926334,14.7716442125,14.7716957899,14.7717473653,14.771798939,14.7718505108,14.7719020807,14.7719536488,14.7720052151,14.7720567795,14.7721083421,14.7721599028,14.7722114617,14.7722630187, +14.7723145739,14.7723661273,14.7724176788,14.7724692285,14.7725207763,14.7725723223,14.7726238665,14.7726754088,14.7727269492,14.7727784879,14.7728300247,14.7728815596,14.7729330927,14.772984624,14.7730361534,14.773087681, +14.7731392067,14.7731907306,14.7732422527,14.7732937729,14.7733452913,14.7733968078,14.7734483225,14.7734998354,14.7735513464,14.7736028556,14.773654363,14.7737058685,14.7737573721,14.773808874,14.773860374,14.7739118721, +14.7739633684,14.7740148629,14.7740663556,14.7741178464,14.7741693353,14.7742208224,14.7742723077,14.7743237912,14.7743752728,14.7744267526,14.7744782305,14.7745297066,14.7745811809,14.7746326533,14.7746841239,14.7747355927, +14.7747870596,14.7748385247,14.7748899879,14.7749414494,14.7749929089,14.7750443667,14.7750958226,14.7751472767,14.7751987289,14.7752501793,14.7753016279,14.7753530746,14.7754045195,14.7754559626,14.7755074038,14.7755588432, +14.7756102808,14.7756617165,14.7757131504,14.7757645824,14.7758160127,14.7758674411,14.7759188676,14.7759702924,14.7760217153,14.7760731363,14.7761245555,14.7761759729,14.7762273885,14.7762788022,14.7763302141,14.7763816242, +14.7764330324,14.7764844388,14.7765358434,14.7765872462,14.7766386471,14.7766900462,14.7767414434,14.7767928388,14.7768442324,14.7768956242,14.7769470141,14.7769984022,14.7770497884,14.7771011729,14.7771525555,14.7772039362, +14.7772553152,14.7773066923,14.7773580676,14.777409441,14.7774608127,14.7775121825,14.7775635504,14.7776149166,14.7776662809,14.7777176434,14.777769004,14.7778203628,14.7778717198,14.777923075,14.7779744283,14.7780257799, +14.7780771295,14.7781284774,14.7781798234,14.7782311676,14.77828251,14.7783338505,14.7783851893,14.7784365262,14.7784878612,14.7785391945,14.7785905259,14.7786418555,14.7786931832,14.7787445092,14.7787958333,14.7788471556, +14.778898476,14.7789497946,14.7790011114,14.7790524264,14.7791037396,14.7791550509,14.7792063604,14.7792576681,14.779308974,14.779360278,14.7794115802,14.7794628806,14.7795141791,14.7795654759,14.7796167708,14.7796680639, +14.7797193551,14.7797706446,14.7798219322,14.779873218,14.779924502,14.7799757841,14.7800270644,14.7800783429,14.7801296196,14.7801808945,14.7802321675,14.7802834387,14.7803347081,14.7803859757,14.7804372414,14.7804885054, +14.7805397675,14.7805910278,14.7806422862,14.7806935429,14.7807447977,14.7807960507,14.7808473019,14.7808985512,14.7809497987,14.7810010445,14.7810522884,14.7811035304,14.7811547707,14.7812060091,14.7812572457,14.7813084805, +14.7813597135,14.7814109447,14.781462174,14.7815134015,14.7815646272,14.7816158511,14.7816670732,14.7817182934,14.7817695119,14.7818207285,14.7818719433,14.7819231562,14.7819743674,14.7820255767,14.7820767842,14.7821279899, +14.7821791938,14.7822303959,14.7822815961,14.7823327946,14.7823839912,14.782435186,14.782486379,14.7825375701,14.7825887595,14.782639947,14.7826911327,14.7827423166,14.7827934987,14.782844679,14.7828958575,14.7829470341, +14.7829982089,14.7830493819,14.7831005531,14.7831517225,14.7832028901,14.7832540558,14.7833052197,14.7833563819,14.7834075422,14.7834587007,14.7835098573,14.7835610122,14.7836121653,14.7836633165,14.7837144659,14.7837656135, +14.7838167593,14.7838679033,14.7839190455,14.7839701858,14.7840213244,14.7840724611,14.784123596,14.7841747291,14.7842258604,14.7842769899,14.7843281176,14.7843792434,14.7844303675,14.7844814897,14.7845326101,14.7845837288, +14.7846348456,14.7846859605,14.7847370737,14.7847881851,14.7848392947,14.7848904024,14.7849415083,14.7849926125,14.7850437148,14.7850948153,14.785145914,14.7851970109,14.7852481059,14.7852991992,14.7853502907,14.7854013803, +14.7854524682,14.7855035542,14.7855546384,14.7856057208,14.7856568014,14.7857078802,14.7857589572,14.7858100324,14.7858611058,14.7859121773,14.7859632471,14.786014315,14.7860653812,14.7861164455,14.786167508,14.7862185687, +14.7862696276,14.7863206848,14.78637174,14.7864227935,14.7864738452,14.7865248951,14.7865759432,14.7866269894,14.7866780339,14.7867290765,14.7867801174,14.7868311564,14.7868821937,14.7869332291,14.7869842627,14.7870352945, +14.7870863246,14.7871373528,14.7871883792,14.7872394038,14.7872904266,14.7873414476,14.7873924667,14.7874434841,14.7874944997,14.7875455135,14.7875965254,14.7876475356,14.787698544,14.7877495505,14.7878005553,14.7878515582, +14.7879025594,14.7879535587,14.7880045563,14.788055552,14.788106546,14.7881575381,14.7882085284,14.788259517,14.7883105037,14.7883614886,14.7884124718,14.7884634531,14.7885144326,14.7885654103,14.7886163863,14.7886673604, +14.7887183327,14.7887693032,14.7888202719,14.7888712388,14.788922204,14.7889731673,14.7890241288,14.7890750885,14.7891260464,14.7891770025,14.7892279569,14.7892789094,14.7893298601,14.789380809,14.7894317561,14.7894827014, +14.789533645,14.7895845867,14.7896355266,14.7896864647,14.7897374011,14.7897883356,14.7898392683,14.7898901993,14.7899411284,14.7899920557,14.7900429813,14.790093905,14.7901448269,14.7901957471,14.7902466654,14.790297582, +14.7903484968,14.7903994097,14.7904503209,14.7905012302,14.7905521378,14.7906030436,14.7906539476,14.7907048497,14.7907557501,14.7908066487,14.7908575455,14.7909084405,14.7909593337,14.7910102251,14.7910611147,14.7911120025, +14.7911628886,14.7912137728,14.7912646552,14.7913155359,14.7913664147,14.7914172917,14.791468167,14.7915190405,14.7915699121,14.791620782,14.7916716501,14.7917225164,14.7917733809,14.7918242436,14.7918751045,14.7919259636, +14.7919768209,14.7920276764,14.7920785302,14.7921293821,14.7921802323,14.7922310806,14.7922819272,14.792332772,14.7923836149,14.7924344561,14.7924852955,14.7925361331,14.7925869689,14.792637803,14.7926886352,14.7927394656, +14.7927902943,14.7928411212,14.7928919462,14.7929427695,14.792993591,14.7930444107,14.7930952286,14.7931460447,14.7931968591,14.7932476716,14.7932984824,14.7933492913,14.7934000985,14.7934509039,14.7935017075,14.7935525093, +14.7936033093,14.7936541075,14.7937049039,14.7937556986,14.7938064915,14.7938572825,14.7939080718,14.7939588593,14.794009645,14.7940604289,14.7941112111,14.7941619914,14.79421277,14.7942635468,14.7943143217,14.7943650949, +14.7944158664,14.794466636,14.7945174038,14.7945681699,14.7946189341,14.7946696966,14.7947204573,14.7947712162,14.7948219733,14.7948727287,14.7949234822,14.794974234,14.795024984,14.7950757322,14.7951264786,14.7951772232, +14.795227966,14.7952787071,14.7953294464,14.7953801838,14.7954309195,14.7954816535,14.7955323856,14.7955831159,14.7956338445,14.7956845713,14.7957352963,14.7957860195,14.7958367409,14.7958874606,14.7959381784,14.7959888945, +14.7960396088,14.7960903213,14.7961410321,14.796191741,14.7962424482,14.7962931536,14.7963438572,14.796394559,14.7964452591,14.7964959573,14.7965466538,14.7965973485,14.7966480414,14.7966987325,14.7967494219,14.7968001095, +14.7968507953,14.7969014793,14.7969521615,14.797002842,14.7970535206,14.7971041975,14.7971548726,14.797205546,14.7972562175,14.7973068873,14.7973575553,14.7974082215,14.7974588859,14.7975095486,14.7975602094,14.7976108685, +14.7976615259,14.7977121814,14.7977628352,14.7978134871,14.7978641373,14.7979147858,14.7979654324,14.7980160773,14.7980667204,14.7981173617,14.7981680012,14.798218639,14.7982692749,14.7983199092,14.7983705416,14.7984211722, +14.7984718011,14.7985224282,14.7985730535,14.7986236771,14.7986742988,14.7987249188,14.798775537,14.7988261535,14.7988767681,14.798927381,14.7989779921,14.7990286015,14.799079209,14.7991298148,14.7991804188,14.7992310211, +14.7992816215,14.7993322202,14.7993828171,14.7994334123,14.7994840056,14.7995345972,14.799585187,14.7996357751,14.7996863613,14.7997369458,14.7997875285,14.7998381095,14.7998886887,14.7999392661,14.7999898417,14.8000404155, +14.8000909876,14.8001415579,14.8001921265,14.8002426932,14.8002932582,14.8003438214,14.8003943829,14.8004449426,14.8004955005,14.8005460566,14.800596611,14.8006471635,14.8006977144,14.8007482634,14.8007988107,14.8008493562, +14.8008998999,14.8009504419,14.8010009821,14.8010515205,14.8011020571,14.801152592,14.8012031251,14.8012536565,14.801304186,14.8013547139,14.8014052399,14.8014557641,14.8015062866,14.8015568074,14.8016073263,14.8016578435, +14.8017083589,14.8017588726,14.8018093844,14.8018598946,14.8019104029,14.8019609095,14.8020114143,14.8020619173,14.8021124186,14.8021629181,14.8022134158,14.8022639118,14.802314406,14.8023648984,14.8024153891,14.802465878, +14.8025163651,14.8025668505,14.8026173341,14.8026678159,14.802718296,14.8027687743,14.8028192508,14.8028697256,14.8029201986,14.8029706698,14.8030211393,14.803071607,14.8031220729,14.8031725371,14.8032229995,14.8032734602, +14.803323919,14.8033743762,14.8034248315,14.8034752851,14.8035257369,14.803576187,14.8036266353,14.8036770818,14.8037275266,14.8037779696,14.8038284108,14.8038788503,14.803929288,14.8039797239,14.8040301581,14.8040805905, +14.8041310212,14.8041814501,14.8042318772,14.8042823026,14.8043327262,14.804383148,14.8044335681,14.8044839864,14.804534403,14.8045848178,14.8046352308,14.8046856421,14.8047360516,14.8047864594,14.8048368654,14.8048872696, +14.8049376721,14.8049880728,14.8050384717,14.8050888689,14.8051392643,14.805189658,14.8052400499,14.80529044,14.8053408284,14.805391215,14.8054415999,14.805491983,14.8055423644,14.8055927439,14.8056431218,14.8056934978, +14.8057438722,14.8057942447,14.8058446155,14.8058949845,14.8059453518,14.8059957173,14.8060460811,14.8060964431,14.8061468033,14.8061971618,14.8062475185,14.8062978735,14.8063482267,14.8063985782,14.8064489279,14.8064992758, +14.806549622,14.8065999664,14.8066503091,14.80670065,14.8067509891,14.8068013265,14.8068516622,14.8069019961,14.8069523282,14.8070026586,14.8070529872,14.8071033141,14.8071536392,14.8072039625,14.8072542841,14.807304604, +14.8073549221,14.8074052384,14.807455553,14.8075058658,14.8075561769,14.8076064862,14.8076567937,14.8077070995,14.8077574036,14.8078077059,14.8078580064,14.8079083052,14.8079586023,14.8080088975,14.8080591911,14.8081094828, +14.8081597729,14.8082100611,14.8082603477,14.8083106324,14.8083609154,14.8084111967,14.8084614762,14.808511754,14.80856203,14.8086123042,14.8086625767,14.8087128475,14.8087631165,14.8088133837,14.8088636492,14.8089139129, +14.8089641749,14.8090144352,14.8090646936,14.8091149504,14.8091652054,14.8092154586,14.8092657101,14.8093159598,14.8093662078,14.8094164541,14.8094666985,14.8095169413,14.8095671823,14.8096174215,14.809667659,14.8097178947, +14.8097681287,14.809818361,14.8098685914,14.8099188202,14.8099690472,14.8100192724,14.8100694959,14.8101197177,14.8101699377,14.8102201559,14.8102703724,14.8103205872,14.8103708002,14.8104210114,14.810471221,14.8105214287, +14.8105716347,14.810621839,14.8106720415,14.8107222423,14.8107724413,14.8108226386,14.8108728342,14.810923028,14.81097322,14.8110234103,14.8110735989,14.8111237857,14.8111739707,14.811224154,14.8112743356,14.8113245154, +14.8113746935,14.8114248698,14.8114750444,14.8115252173,14.8115753884,14.8116255577,14.8116757253,14.8117258912,14.8117760553,14.8118262177,14.8118763783,14.8119265372,14.8119766944,14.8120268498,14.8120770034,14.8121271553, +14.8121773055,14.8122274539,14.8122776006,14.8123277456,14.8123778888,14.8124280302,14.8124781699,14.8125283079,14.8125784441,14.8126285786,14.8126787114,14.8127288424,14.8127789716,14.8128290991,14.8128792249,14.812929349, +14.8129794713,14.8130295918,14.8130797106,14.8131298277,14.813179943,14.8132300566,14.8132801685,14.8133302786,14.8133803869,14.8134304936,14.8134805984,14.8135307016,14.813580803,14.8136309027,14.8136810006,14.8137310968, +14.8137811912,14.8138312839,14.8138813749,14.8139314641,14.8139815516,14.8140316374,14.8140817214,14.8141318037,14.8141818842,14.814231963,14.81428204,14.8143321154,14.814382189,14.8144322608,14.8144823309,14.8145323993, +14.8145824659,14.8146325308,14.814682594,14.8147326554,14.8147827151,14.814832773,14.8148828292,14.8149328837,14.8149829364,14.8150329874,14.8150830367,14.8151330842,14.81518313,14.8152331741,14.8152832164,14.815333257, +14.8153832958,14.8154333329,14.8154833683,14.8155334019,14.8155834339,14.815633464,14.8156834925,14.8157335192,14.8157835441,14.8158335674,14.8158835889,14.8159336086,14.8159836267,14.8160336429,14.8160836575,14.8161336703, +14.8161836814,14.8162336908,14.8162836984,14.8163337043,14.8163837085,14.8164337109,14.8164837116,14.8165337106,14.8165837078,14.8166337033,14.816683697,14.8167336891,14.8167836794,14.8168336679,14.8168836548,14.8169336399, +14.8169836233,14.8170336049,14.8170835848,14.817133563,14.8171835394,14.8172335141,14.8172834871,14.8173334584,14.8173834279,14.8174333957,14.8174833617,14.8175333261,14.8175832887,14.8176332495,14.8176832087,14.8177331661, +14.8177831218,14.8178330757,14.8178830279,14.8179329784,14.8179829272,14.8180328742,14.8180828195,14.8181327631,14.8181827049,14.8182326451,14.8182825835,14.8183325201,14.818382455,14.8184323882,14.8184823197,14.8185322495, +14.8185821775,14.8186321038,14.8186820283,14.8187319512,14.8187818723,14.8188317917,14.8188817093,14.8189316252,14.8189815394,14.8190314519,14.8190813626,14.8191312717,14.819181179,14.8192310845,14.8192809884,14.8193308905, +14.8193807909,14.8194306895,14.8194805865,14.8195304817,14.8195803752,14.8196302669,14.8196801569,14.8197300453,14.8197799318,14.8198298167,14.8198796998,14.8199295812,14.8199794609,14.8200293389,14.8200792151,14.8201290896, +14.8201789624,14.8202288335,14.8202787028,14.8203285704,14.8203784363,14.8204283005,14.8204781629,14.8205280237,14.8205778827,14.8206277399,14.8206775955,14.8207274493,14.8207773014,14.8208271518,14.8208770005,14.8209268474, +14.8209766926,14.8210265361,14.8210763779,14.8211262179,14.8211760563,14.8212258929,14.8212757278,14.8213255609,14.8213753924,14.8214252221,14.8214750501,14.8215248764,14.8215747009,14.8216245238,14.8216743449,14.8217241643, +14.821773982,14.8218237979,14.8218736122,14.8219234247,14.8219732355,14.8220230446,14.8220728519,14.8221226576,14.8221724615,14.8222222637,14.8222720642,14.8223218629,14.82237166,14.8224214553,14.8224712489,14.8225210408, +14.822570831,14.8226206194,14.8226704061,14.8227201911,14.8227699744,14.822819756,14.8228695359,14.822919314,14.8229690905,14.8230188652,14.8230686382,14.8231184094,14.823168179,14.8232179468,14.8232677129,14.8233174774, +14.82336724,14.823417001,14.8234667603,14.8235165178,14.8235662736,14.8236160278,14.8236657801,14.8237155308,14.8237652798,14.823815027,14.8238647726,14.8239145164,14.8239642585,14.8240139989,14.8240637375,14.8241134745, +14.8241632097,14.8242129433,14.8242626751,14.8243124052,14.8243621336,14.8244118602,14.8244615852,14.8245113084,14.82456103,14.8246107498,14.8246604679,14.8247101843,14.824759899,14.8248096119,14.8248593232,14.8249090327, +14.8249587405,14.8250084466,14.825058151,14.8251078537,14.8251575547,14.825207254,14.8252569515,14.8253066474,14.8253563415,14.8254060339,14.8254557246,14.8255054136,14.8255551009,14.8256047864,14.8256544703,14.8257041524, +14.8257538329,14.8258035116,14.8258531886,14.8259028639,14.8259525375,14.8260022094,14.8260518796,14.826101548,14.8261512148,14.8262008798,14.8262505432,14.8263002048,14.8263498647,14.8263995229,14.8264491794,14.8264988342, +14.8265484873,14.8265981387,14.8266477883,14.8266974363,14.8267470825,14.8267967271,14.8268463699,14.826896011,14.8269456504,14.8269952881,14.8270449241,14.8270945584,14.827144191,14.8271938219,14.827243451,14.8272930785, +14.8273427042,14.8273923283,14.8274419506,14.8274915712,14.8275411902,14.8275908074,14.8276404229,14.8276900367,14.8277396488,14.8277892592,14.8278388679,14.8278884749,14.8279380801,14.8279876837,14.8280372856,14.8280868857, +14.8281364842,14.8281860809,14.828235676,14.8282852693,14.828334861,14.8283844509,14.8284340391,14.8284836256,14.8285332105,14.8285827936,14.828632375,14.8286819547,14.8287315327,14.828781109,14.8288306836,14.8288802565, +14.8289298277,14.8289793971,14.8290289649,14.829078531,14.8291280954,14.829177658,14.829227219,14.8292767783,14.8293263358,14.8293758917,14.8294254459,14.8294749983,14.8295245491,14.8295740981,14.8296236455,14.8296731911, +14.8297227351,14.8297722773,14.8298218179,14.8298713567,14.8299208939,14.8299704293,14.8300199631,14.8300694951,14.8301190254,14.8301685541,14.830218081,14.8302676063,14.8303171298,14.8303666517,14.8304161718,14.8304656902, +14.830515207,14.830564722,14.8306142354,14.830663747,14.830713257,14.8307627652,14.8308122717,14.8308617766,14.8309112797,14.8309607812,14.8310102809,14.831059779,14.8311092754,14.83115877,14.831208263,14.8312577542, +14.8313072438,14.8313567317,14.8314062178,14.8314557023,14.8315051851,14.8315546662,14.8316041455,14.8316536232,14.8317030992,14.8317525735,14.8318020461,14.831851517,14.8319009862,14.8319504537,14.8319999195,14.8320493836, +14.832098846,14.8321483068,14.8321977658,14.8322472231,14.8322966787,14.8323461327,14.8323955849,14.8324450355,14.8324944843,14.8325439315,14.832593377,14.8326428207,14.8326922628,14.8327417032,14.8327911419,14.8328405789, +14.8328900142,14.8329394478,14.8329888797,14.8330383099,14.8330877384,14.8331371653,14.8331865904,14.8332360138,14.8332854356,14.8333348556,14.833384274,14.8334336907,14.8334831057,14.8335325189,14.8335819305,14.8336313404, +14.8336807487,14.8337301552,14.83377956,14.8338289631,14.8338783646,14.8339277643,14.8339771624,14.8340265588,14.8340759534,14.8341253464,14.8341747377,14.8342241273,14.8342735152,14.8343229015,14.834372286,14.8344216688, +14.83447105,14.8345204294,14.8345698072,14.8346191833,14.8346685577,14.8347179304,14.8347673014,14.8348166707,14.8348660384,14.8349154043,14.8349647686,14.8350141311,14.835063492,14.8351128512,14.8351622087,14.8352115645, +14.8352609186,14.8353102711,14.8353596218,14.8354089709,14.8354583182,14.8355076639,14.8355570079,14.8356063502,14.8356556908,14.8357050298,14.835754367,14.8358037026,14.8358530364,14.8359023686,14.8359516991,14.8360010279, +14.8360503551,14.8360996805,14.8361490042,14.8361983263,14.8362476467,14.8362969654,14.8363462824,14.8363955977,14.8364449113,14.8364942233,14.8365435336,14.8365928421,14.836642149,14.8366914542,14.8367407578,14.8367900596, +14.8368393597,14.8368886582,14.836937955,14.8369872501,14.8370365435,14.8370858352,14.8371351253,14.8371844137,14.8372337003,14.8372829853,14.8373322686,14.8373815503,14.8374308302,14.8374801085,14.8375293851,14.83757866, +14.8376279332,14.8376772047,14.8377264745,14.8377757427,14.8378250092,14.837874274,14.8379235371,14.8379727986,14.8380220583,14.8380713164,14.8381205728,14.8381698275,14.8382190805,14.8382683318,14.8383175815,14.8383668295, +14.8384160758,14.8384653204,14.8385145634,14.8385638046,14.8386130442,14.8386622821,14.8387115183,14.8387607529,14.8388099857,14.8388592169,14.8389084464,14.8389576742,14.8390069003,14.8390561248,14.8391053476,14.8391545687, +14.8392037881,14.8392530058,14.8393022219,14.8393514363,14.839400649,14.83944986,14.8394990694,14.839548277,14.839597483,14.8396466873,14.83969589,14.8397450909,14.8397942902,14.8398434878,14.8398926837,14.839941878, +14.8399910705,14.8400402614,14.8400894506,14.8401386382,14.840187824,14.8402370082,14.8402861907,14.8403353716,14.8403845507,14.8404337282,14.840482904,14.8405320781,14.8405812506,14.8406304213,14.8406795904,14.8407287578, +14.8407779236,14.8408270877,14.8408762501,14.8409254108,14.8409745698,14.8410237272,14.8410728829,14.8411220369,14.8411711892,14.8412203399,14.8412694889,14.8413186362,14.8413677819,14.8414169259,14.8414660682,14.8415152088, +14.8415643477,14.841613485,14.8416626206,14.8417117545,14.8417608868,14.8418100174,14.8418591463,14.8419082735,14.8419573991,14.842006523,14.8420556452,14.8421047658,14.8421538846,14.8422030018,14.8422521174,14.8423012312, +14.8423503434,14.8423994539,14.8424485628,14.8424976699,14.8425467754,14.8425958793,14.8426449814,14.8426940819,14.8427431807,14.8427922779,14.8428413733,14.8428904672,14.8429395593,14.8429886497,14.8430377385,14.8430868257, +14.8431359111,14.8431849949,14.843234077,14.8432831574,14.8433322362,14.8433813133,14.8434303888,14.8434794625,14.8435285346,14.843577605,14.8436266738,14.8436757409,14.8437248063,14.84377387,14.8438229321,14.8438719925, +14.8439210513,14.8439701084,14.8440191638,14.8440682175,14.8441172696,14.84416632,14.8442153687,14.8442644158,14.8443134612,14.8443625049,14.844411547,14.8444605874,14.8445096261,14.8445586632,14.8446076986,14.8446567323, +14.8447057644,14.8447547948,14.8448038235,14.8448528506,14.844901876,14.8449508998,14.8449999218,14.8450489422,14.845097961,14.845146978,14.8451959935,14.8452450072,14.8452940193,14.8453430297,14.8453920384,14.8454410455, +14.8454900509,14.8455390547,14.8455880568,14.8456370572,14.845686056,14.8457350531,14.8457840485,14.8458330423,14.8458820344,14.8459310248,14.8459800136,14.8460290007,14.8460779862,14.84612697,14.8461759521,14.8462249325, +14.8462739113,14.8463228885,14.846371864,14.8464208378,14.8464698099,14.8465187804,14.8465677492,14.8466167164,14.8466656819,14.8467146457,14.8467636079,14.8468125684,14.8468615273,14.8469104845,14.84695944,14.8470083939, +14.8470573461,14.8471062966,14.8471552455,14.8472041928,14.8472531383,14.8473020822,14.8473510245,14.8473999651,14.847448904,14.8474978412,14.8475467769,14.8475957108,14.8476446431,14.8476935737,14.8477425027,14.84779143, +14.8478403556,14.8478892796,14.8479382019,14.8479871226,14.8480360416,14.848084959,14.8481338747,14.8481827887,14.8482317011,14.8482806118,14.8483295209,14.8483784283,14.848427334,14.8484762381,14.8485251405,14.8485740413, +14.8486229404,14.8486718379,14.8487207337,14.8487696278,14.8488185203,14.8488674111,14.8489163003,14.8489651878,14.8490140737,14.8490629579,14.8491118404,14.8491607213,14.8492096006,14.8492584781,14.8493073541,14.8493562283, +14.8494051009,14.8494539719,14.8495028412,14.8495517088,14.8496005748,14.8496494392,14.8496983019,14.8497471629,14.8497960222,14.84984488,14.849893736,14.8499425904,14.8499914432,14.8500402943,14.8500891437,14.8501379915, +14.8501868376,14.8502356821,14.850284525,14.8503333661,14.8503822057,14.8504310435,14.8504798797,14.8505287143,14.8505775472,14.8506263785,14.8506752081,14.850724036,14.8507728623,14.850821687,14.85087051,14.8509193313, +14.850968151,14.851016969,14.8510657854,14.8511146001,14.8511634132,14.8512122247,14.8512610344,14.8513098426,14.851358649,14.8514074539,14.851456257,14.8515050586,14.8515538584,14.8516026567,14.8516514532,14.8517002481, +14.8517490414,14.851797833,14.851846623,14.8518954113,14.851944198,14.851992983,14.8520417664,14.8520905481,14.8521393282,14.8521881066,14.8522368834,14.8522856585,14.852334432,14.8523832038,14.852431974,14.8524807425, +14.8525295094,14.8525782746,14.8526270382,14.8526758002,14.8527245604,14.8527733191,14.8528220761,14.8528708314,14.8529195851,14.8529683372,14.8530170876,14.8530658363,14.8531145834,14.8531633289,14.8532120727,14.8532608149, +14.8533095554,14.8533582943,14.8534070315,14.8534557671,14.853504501,14.8535532333,14.853601964,14.8536506929,14.8536994203,14.853748146,14.8537968701,14.8538455925,14.8538943132,14.8539430324,14.8539917498,14.8540404657, +14.8540891799,14.8541378924,14.8541866033,14.8542353126,14.8542840202,14.8543327261,14.8543814305,14.8544301331,14.8544788342,14.8545275336,14.8545762313,14.8546249274,14.8546736219,14.8547223147,14.8547710058,14.8548196954, +14.8548683833,14.8549170695,14.8549657541,14.8550144371,14.8550631184,14.855111798,14.8551604761,14.8552091525,14.8552578272,14.8553065003,14.8553551718,14.8554038416,14.8554525097,14.8555011763,14.8555498412,14.8555985044, +14.855647166,14.855695826,14.8557444843,14.855793141,14.855841796,14.8558904495,14.8559391012,14.8559877513,14.8560363998,14.8560850467,14.8561336919,14.8561823354,14.8562309773,14.8562796176,14.8563282563,14.8563768933, +14.8564255286,14.8564741623,14.8565227944,14.8565714249,14.8566200537,14.8566686808,14.8567173064,14.8567659303,14.8568145525,14.8568631731,14.8569117921,14.8569604094,14.8570090251,14.8570576392,14.8571062516,14.8571548624, +14.8572034715,14.857252079,14.8573006849,14.8573492891,14.8573978917,14.8574464927,14.857495092,14.8575436897,14.8575922857,14.8576408801,14.8576894729,14.857738064,14.8577866535,14.8578352414,14.8578838276,14.8579324122, +14.8579809951,14.8580295764,14.8580781561,14.8581267342,14.8581753106,14.8582238853,14.8582724585,14.85832103,14.8583695999,14.8584181681,14.8584667347,14.8585152996,14.858563863,14.8586124247,14.8586609847,14.8587095431, +14.8587580999,14.8588066551,14.8588552086,14.8589037605,14.8589523108,14.8590008594,14.8590494064,14.8590979517,14.8591464954,14.8591950375,14.859243578,14.8592921168,14.859340654,14.8593891895,14.8594377234,14.8594862557, +14.8595347864,14.8595833154,14.8596318428,14.8596803686,14.8597288927,14.8597774152,14.859825936,14.8598744553,14.8599229729,14.8599714888,14.8600200032,14.8600685159,14.8601170269,14.8601655364,14.8602140442,14.8602625504, +14.8603110549,14.8603595578,14.8604080591,14.8604565588,14.8605050568,14.8605535532,14.860602048,14.8606505411,14.8606990326,14.8607475225,14.8607960107,14.8608444974,14.8608929823,14.8609414657,14.8609899474,14.8610384275, +14.861086906,14.8611353828,14.861183858,14.8612323316,14.8612808036,14.8613292739,14.8613777426,14.8614262097,14.8614746751,14.8615231389,14.8615716011,14.8616200617,14.8616685206,14.8617169779,14.8617654336,14.8618138876, +14.8618623401,14.8619107909,14.86195924,14.8620076876,14.8620561335,14.8621045778,14.8621530204,14.8622014614,14.8622499009,14.8622983386,14.8623467748,14.8623952093,14.8624436422,14.8624920735,14.8625405031,14.8625889312, +14.8626373576,14.8626857823,14.8627342055,14.862782627,14.8628310469,14.8628794652,14.8629278818,14.8629762968,14.8630247102,14.863073122,14.8631215322,14.8631699407,14.8632183476,14.8632667529,14.8633151565,14.8633635585, +14.8634119589,14.8634603577,14.8635087549,14.8635571504,14.8636055443,14.8636539366,14.8637023273,14.8637507163,14.8637991037,14.8638474895,14.8638958737,14.8639442562,14.8639926372,14.8640410165,14.8640893942,14.8641377702, +14.8641861447,14.8642345175,14.8642828887,14.8643312582,14.8643796262,14.8644279925,14.8644763572,14.8645247203,14.8645730818,14.8646214416,14.8646697998,14.8647181564,14.8647665114,14.8648148648,14.8648632165,14.8649115666, +14.8649599151,14.865008262,14.8650566073,14.8651049509,14.8651532929,14.8652016333,14.8652499721,14.8652983093,14.8653466448,14.8653949787,14.865443311,14.8654916417,14.8655399708,14.8655882982,14.8656366241,14.8656849483, +14.8657332709,14.8657815918,14.8658299112,14.8658782289,14.865926545,14.8659748595,14.8660231724,14.8660714837,14.8661197933,14.8661681013,14.8662164077,14.8662647125,14.8663130157,14.8663613173,14.8664096172,14.8664579155, +14.8665062122,14.8665545073,14.8666028008,14.8666510926,14.8666993829,14.8667476715,14.8667959585,14.8668442439,14.8668925277,14.8669408098,14.8669890904,14.8670373693,14.8670856466,14.8671339223,14.8671821964,14.8672304689, +14.8672787397,14.8673270089,14.8673752766,14.8674235426,14.867471807,14.8675200697,14.8675683309,14.8676165904,14.8676648484,14.8677131047,14.8677613594,14.8678096125,14.867857864,14.8679061138,14.8679543621,14.8680026087, +14.8680508537,14.8680990972,14.868147339,14.8681955791,14.8682438177,14.8682920547,14.86834029,14.8683885237,14.8684367559,14.8684849864,14.8685332153,14.8685814425,14.8686296682,14.8686778923,14.8687261147,14.8687743356, +14.8688225548,14.8688707724,14.8689189884,14.8689672028,14.8690154156,14.8690636267,14.8691118363,14.8691600442,14.8692082506,14.8692564553,14.8693046584,14.8693528599,14.8694010598,14.8694492581,14.8694974547,14.8695456498, +14.8695938432,14.8696420351,14.8696902253,14.8697384139,14.8697866009,14.8698347863,14.8698829701,14.8699311523,14.8699793329,14.8700275119,14.8700756892,14.870123865,14.8701720391,14.8702202116,14.8702683826,14.8703165519, +14.8703647196,14.8704128857,14.8704610502,14.8705092131,14.8705573743,14.870605534,14.8706536921,14.8707018485,14.8707500033,14.8707981566,14.8708463082,14.8708944582,14.8709426066,14.8709907535,14.8710388987,14.8710870423, +14.8711351842,14.8711833246,14.8712314634,14.8712796006,14.8713277361,14.8713758701,14.8714240024,14.8714721332,14.8715202623,14.8715683899,14.8716165158,14.8716646401,14.8717127628,14.8717608839,14.8718090035,14.8718571214, +14.8719052377,14.8719533524,14.8720014654,14.8720495769,14.8720976868,14.8721457951,14.8721939018,14.8722420068,14.8722901103,14.8723382121,14.8723863124,14.8724344111,14.8724825081,14.8725306036,14.8725786974,14.8726267896, +14.8726748803,14.8727229693,14.8727710567,14.8728191426,14.8728672268,14.8729153094,14.8729633904,14.8730114698,14.8730595477,14.8731076239,14.8731556985,14.8732037715,14.8732518429,14.8732999127,14.8733479809,14.8733960475, +14.8734441125,14.8734921759,14.8735402377,14.8735882979,14.8736363565,14.8736844135,14.8737324689,14.8737805227,14.8738285749,14.8738766255,14.8739246745,14.8739727219,14.8740207677,14.8740688119,14.8741168544,14.8741648954, +14.8742129348,14.8742609726,14.8743090088,14.8743570434,14.8744050764,14.8744531078,14.8745011376,14.8745491658,14.8745971924,14.8746452174,14.8746932408,14.8747412626,14.8747892828,14.8748373014,14.8748853184,14.8749333338, +14.8749813477,14.8750293599,14.8750773705,14.8751253795,14.8751733869,14.8752213928,14.875269397,14.8753173996,14.8753654006,14.8754134001,14.8754613979,14.8755093942,14.8755573888,14.8756053819,14.8756533733,14.8757013632, +14.8757493514,14.8757973381,14.8758453232,14.8758933066,14.8759412885,14.8759892688,14.8760372475,14.8760852245,14.8761332,14.8761811739,14.8762291462,14.876277117,14.8763250861,14.8763730536,14.8764210195,14.8764689838, +14.8765169466,14.8765649077,14.8766128672,14.8766608252,14.8767087816,14.8767567363,14.8768046895,14.8768526411,14.876900591,14.8769485394,14.8769964862,14.8770444314,14.877092375,14.877140317,14.8771882575,14.8772361963, +14.8772841335,14.8773320692,14.8773800032,14.8774279357,14.8774758665,14.8775237958,14.8775717235,14.8776196496,14.8776675741,14.877715497,14.8777634183,14.877811338,14.8778592561,14.8779071727,14.8779550876,14.878003001, +14.8780509127,14.8780988229,14.8781467315,14.8781946385,14.8782425439,14.8782904477,14.8783383499,14.8783862505,14.8784341496,14.878482047,14.8785299429,14.8785778371,14.8786257298,14.8786736209,14.8787215104,14.8787693983, +14.8788172846,14.8788651693,14.8789130525,14.878960934,14.879008814,14.8790566924,14.8791045691,14.8791524443,14.8792003179,14.87924819,14.8792960604,14.8793439292,14.8793917965,14.8794396621,14.8794875262,14.8795353887, +14.8795832496,14.8796311089,14.8796789666,14.8797268228,14.8797746773,14.8798225303,14.8798703817,14.8799182315,14.8799660797,14.8800139263,14.8800617713,14.8801096147,14.8801574566,14.8802052969,14.8802531356,14.8803009726, +14.8803488082,14.8803966421,14.8804444744,14.8804923052,14.8805401343,14.8805879619,14.8806357879,14.8806836123,14.8807314351,14.8807792564,14.880827076,14.8808748941,14.8809227106,14.8809705255,14.8810183388,14.8810661505, +14.8811139607,14.8811617692,14.8812095762,14.8812573816,14.8813051854,14.8813529876,14.8814007883,14.8814485873,14.8814963848,14.8815441807,14.881591975,14.8816397677,14.8816875589,14.8817353484,14.8817831364,14.8818309228, +14.8818787076,14.8819264908,14.8819742725,14.8820220525,14.882069831,14.8821176079,14.8821653832,14.8822131569,14.8822609291,14.8823086997,14.8823564687,14.8824042361,14.8824520019,14.8824997661,14.8825475288,14.8825952899, +14.8826430494,14.8826908073,14.8827385636,14.8827863184,14.8828340715,14.8828818231,14.8829295732,14.8829773216,14.8830250684,14.8830728137,14.8831205574,14.8831682995,14.8832160401,14.883263779,14.8833115164,14.8833592522, +14.8834069864,14.883454719,14.8835024501,14.8835501796,14.8835979075,14.8836456338,14.8836933585,14.8837410817,14.8837888033,14.8838365233,14.8838842417,14.8839319585,14.8839796738,14.8840273875,14.8840750996,14.8841228102, +14.8841705191,14.8842182265,14.8842659323,14.8843136365,14.8843613392,14.8844090402,14.8844567397,14.8845044376,14.884552134,14.8845998288,14.8846475219,14.8846952135,14.8847429036,14.884790592,14.8848382789,14.8848859642, +14.8849336479,14.8849813301,14.8850290107,14.8850766897,14.8851243671,14.885172043,14.8852197172,14.8852673899,14.885315061,14.8853627306,14.8854103986,14.885458065,14.8855057298,14.885553393,14.8856010547,14.8856487148, +14.8856963733,14.8857440303,14.8857916857,14.8858393395,14.8858869917,14.8859346424,14.8859822914,14.8860299389,14.8860775849,14.8861252292,14.886172872,14.8862205132,14.8862681529,14.8863157909,14.8863634274,14.8864110624, +14.8864586957,14.8865063275,14.8865539577,14.8866015863,14.8866492134,14.8866968389,14.8867444628,14.8867920851,14.8868397059,14.8868873251,14.8869349427,14.8869825588,14.8870301732,14.8870777862,14.8871253975,14.8871730073, +14.8872206155,14.8872682221,14.8873158272,14.8873634306,14.8874110326,14.8874586329,14.8875062317,14.8875538289,14.8876014245,14.8876490186,14.8876966111,14.887744202,14.8877917913,14.8878393791,14.8878869653,14.88793455, +14.8879821331,14.8880297146,14.8880772945,14.8881248729,14.8881724497,14.8882200249,14.8882675986,14.8883151706,14.8883627412,14.8884103101,14.8884578775,14.8885054433,14.8885530076,14.8886005703,14.8886481314,14.8886956909, +14.8887432489,14.8887908053,14.8888383602,14.8888859134,14.8889334651,14.8889810153,14.8890285638,14.8890761109,14.8891236563,14.8891712002,14.8892187425,14.8892662832,14.8893138224,14.88936136,14.889408896,14.8894564305, +14.8895039634,14.8895514948,14.8895990245,14.8896465527,14.8896940794,14.8897416045,14.889789128,14.8898366499,14.8898841703,14.8899316891,14.8899792064,14.8900267221,14.8900742362,14.8901217487,14.8901692597,14.8902167692, +14.890264277,14.8903117833,14.8903592881,14.8904067912,14.8904542928,14.8905017929,14.8905492914,14.8905967883,14.8906442836,14.8906917774,14.8907392696,14.8907867603,14.8908342494,14.8908817369,14.8909292229,14.8909767073, +14.8910241901,14.8910716714,14.8911191512,14.8911666293,14.8912141059,14.8912615809,14.8913090544,14.8913565263,14.8914039967,14.8914514654,14.8914989327,14.8915463983,14.8915938624,14.891641325,14.8916887859,14.8917362454, +14.8917837032,14.8918311595,14.8918786142,14.8919260674,14.891973519,14.8920209691,14.8920684176,14.8921158645,14.8921633099,14.8922107537,14.8922581959,14.8923056366,14.8923530757,14.8924005133,14.8924479493,14.8924953838, +14.8925428166,14.892590248,14.8926376777,14.892685106,14.8927325326,14.8927799577,14.8928273812,14.8928748032,14.8929222236,14.8929696425,14.8930170598,14.8930644755,14.8931118897,14.8931593023,14.8932067134,14.8932541229, +14.8933015309,14.8933489373,14.8933963421,14.8934437454,14.8934911471,14.8935385472,14.8935859459,14.8936333429,14.8936807384,14.8937281323,14.8937755247,14.8938229155,14.8938703048,14.8939176925,14.8939650786,14.8940124632, +14.8940598463,14.8941072278,14.8941546077,14.8942019861,14.8942493629,14.8942967381,14.8943441118,14.894391484,14.8944388546,14.8944862236,14.8945335911,14.894580957,14.8946283214,14.8946756842,14.8947230455,14.8947704052, +14.8948177633,14.8948651199,14.8949124749,14.8949598284,14.8950071804,14.8950545307,14.8951018796,14.8951492268,14.8951965726,14.8952439167,14.8952912593,14.8953386004,14.8953859399,14.8954332778,14.8954806142,14.8955279491, +14.8955752824,14.8956226141,14.8956699443,14.8957172729,14.8957646,14.8958119255,14.8958592495,14.8959065719,14.8959538928,14.8960012121,14.8960485299,14.8960958461,14.8961431608,14.8961904739,14.8962377854,14.8962850955, +14.8963324039,14.8963797108,14.8964270162,14.89647432,14.8965216222,14.8965689229,14.8966162221,14.8966635197,14.8967108157,14.8967581102,14.8968054032,14.8968526946,14.8968999844,14.8969472727,14.8969945595,14.8970418447, +14.8970891283,14.8971364104,14.897183691,14.89723097,14.8972782474,14.8973255233,14.8973727977,14.8974200705,14.8974673417,14.8975146114,14.8975618796,14.8976091462,14.8976564113,14.8977036748,14.8977509367,14.8977981971, +14.897845456,14.8978927133,14.8979399691,14.8979872233,14.898034476,14.8980817271,14.8981289767,14.8981762247,14.8982234712,14.8982707162,14.8983179595,14.8983652014,14.8984124417,14.8984596804,14.8985069176,14.8985541533, +14.8986013874,14.89864862,14.898695851,14.8987430805,14.8987903084,14.8988375348,14.8988847596,14.8989319829,14.8989792046,14.8990264248,14.8990736435,14.8991208606,14.8991680761,14.8992152901,14.8992625026,14.8993097135, +14.8993569229,14.8994041308,14.899451337,14.8994985418,14.899545745,14.8995929467,14.8996401468,14.8996873453,14.8997345424,14.8997817378,14.8998289318,14.8998761242,14.899923315,14.8999705043,14.9000176921,14.9000648783, +14.900112063,14.9001592461,14.9002064277,14.9002536077,14.9003007862,14.9003479632,14.9003951386,14.9004423125,14.9004894848,14.9005366556,14.9005838249,14.9006309926,14.9006781587,14.9007253234,14.9007724864,14.900819648, +14.900866808,14.9009139664,14.9009611233,14.9010082787,14.9010554326,14.9011025848,14.9011497356,14.9011968848,14.9012440325,14.9012911786,14.9013383232,14.9013854662,14.9014326077,14.9014797477,14.9015268861,14.901574023, +14.9016211583,14.9016682922,14.9017154244,14.9017625551,14.9018096843,14.901856812,14.9019039381,14.9019510626,14.9019981857,14.9020453072,14.9020924271,14.9021395455,14.9021866624,14.9022337777,14.9022808915,14.9023280038, +14.9023751145,14.9024222237,14.9024693313,14.9025164374,14.902563542,14.902610645,14.9026577465,14.9027048464,14.9027519449,14.9027990417,14.9028461371,14.9028932309,14.9029403231,14.9029874139,14.903034503,14.9030815907, +14.9031286768,14.9031757614,14.9032228444,14.9032699259,14.9033170059,14.9033640843,14.9034111612,14.9034582366,14.9035053104,14.9035523827,14.9035994535,14.9036465227,14.9036935904,14.9037406565,14.9037877211,14.9038347842, +14.9038818457,14.9039289057,14.9039759642,14.9040230211,14.9040700765,14.9041171304,14.9041641827,14.9042112335,14.9042582828,14.9043053305,14.9043523767,14.9043994214,14.9044464645,14.9044935061,14.9045405462,14.9045875847, +14.9046346217,14.9046816571,14.904728691,14.9047757234,14.9048227543,14.9048697836,14.9049168114,14.9049638377,14.9050108624,14.9050578856,14.9051049072,14.9051519274,14.905198946,14.905245963,14.9052929786,14.9053399926, +14.905387005,14.905434016,14.9054810254,14.9055280332,14.9055750396,14.9056220444,14.9056690476,14.9057160494,14.9057630496,14.9058100483,14.9058570454,14.9059040411,14.9059510351,14.9059980277,14.9060450187,14.9060920082, +14.9061389962,14.9061859826,14.9062329675,14.9062799509,14.9063269328,14.9063739131,14.9064208919,14.9064678691,14.9065148448,14.906561819,14.9066087917,14.9066557629,14.9067027325,14.9067497005,14.9067966671,14.9068436321, +14.9068905956,14.9069375576,14.906984518,14.9070314769,14.9070784343,14.9071253901,14.9071723445,14.9072192973,14.9072662485,14.9073131983,14.9073601465,14.9074070932,14.9074540383,14.9075009819,14.907547924,14.9075948646, +14.9076418037,14.9076887412,14.9077356772,14.9077826116,14.9078295446,14.907876476,14.9079234059,14.9079703342,14.9080172611,14.9080641864,14.9081111101,14.9081580324,14.9082049531,14.9082518723,14.90829879,14.9083457062, +14.9083926208,14.9084395339,14.9084864454,14.9085333555,14.908580264,14.908627171,14.9086740765,14.9087209804,14.9087678828,14.9088147837,14.9088616831,14.908908581,14.9089554773,14.9090023721,14.9090492654,14.9090961571, +14.9091430473,14.909189936,14.9092368232,14.9092837089,14.909330593,14.9093774756,14.9094243567,14.9094712363,14.9095181143,14.9095649908,14.9096118658,14.9096587393,14.9097056112,14.9097524816,14.9097993505,14.9098462179, +14.9098930838,14.9099399481,14.9099868109,14.9100336722,14.910080532,14.9101273902,14.9101742469,14.9102211021,14.9102679558,14.910314808,14.9103616586,14.9104085077,14.9104553553,14.9105022014,14.9105490459,14.910595889, +14.9106427305,14.9106895705,14.9107364089,14.9107832459,14.9108300813,14.9108769152,14.9109237476,14.9109705785,14.9110174078,14.9110642356,14.9111110619,14.9111578867,14.91120471,14.9112515317,14.9112983519,14.9113451707, +14.9113919878,14.9114388035,14.9114856177,14.9115324303,14.9115792414,14.911626051,14.9116728591,14.9117196656,14.9117664707,14.9118132742,14.9118600762,14.9119068767,14.9119536756,14.9120004731,14.912047269,14.9120940634, +14.9121408563,14.9121876477,14.9122344375,14.9122812259,14.9123280127,14.912374798,14.9124215818,14.912468364,14.9125151448,14.912561924,14.9126087018,14.912655478,14.9127022526,14.9127490258,14.9127957975,14.9128425676, +14.9128893362,14.9129361033,14.9129828689,14.913029633,14.9130763956,14.9131231566,14.9131699161,14.9132166741,14.9132634306,14.9133101856,14.9133569391,14.913403691,14.9134504415,14.9134971904,14.9135439378,14.9135906837, +14.913637428,14.9136841709,14.9137309123,14.9137776521,14.9138243904,14.9138711272,14.9139178625,14.9139645963,14.9140113285,14.9140580593,14.9141047885,14.9141515162,14.9141982425,14.9142449671,14.9142916903,14.914338412, +14.9143851322,14.9144318508,14.9144785679,14.9145252835,14.9145719976,14.9146187102,14.9146654213,14.9147121309,14.9147588389,14.9148055455,14.9148522505,14.914898954,14.914945656,14.9149923565,14.9150390555,14.915085753, +14.915132449,14.9151791434,14.9152258363,14.9152725278,14.9153192177,14.9153659061,14.915412593,14.9154592784,14.9155059622,14.9155526446,14.9155993254,14.9156460048,14.9156926826,14.9157393589,14.9157860337,14.915832707, +14.9158793788,14.9159260491,14.9159727179,14.9160193851,14.9160660509,14.9161127151,14.9161593779,14.9162060391,14.9162526988,14.916299357,14.9163460137,14.9163926689,14.9164393226,14.9164859748,14.9165326254,14.9165792746, +14.9166259222,14.9166725683,14.916719213,14.9167658561,14.9168124977,14.9168591378,14.9169057764,14.9169524135,14.9169990491,14.9170456832,14.9170923157,14.9171389468,14.9171855763,14.9172322044,14.9172788309,14.917325456, +14.9173720795,14.9174187015,14.917465322,14.917511941,14.9175585585,14.9176051745,14.917651789,14.917698402,14.9177450134,14.9177916234,14.9178382319,14.9178848388,14.9179314443,14.9179780482,14.9180246507,14.9180712516, +14.918117851,14.918164449,14.9182110454,14.9182576403,14.9183042337,14.9183508256,14.918397416,14.9184440049,14.9184905923,14.9185371782,14.9185837626,14.9186303454,14.9186769268,14.9187235067,14.9187700851,14.9188166619, +14.9188632373,14.9189098111,14.9189563835,14.9190029543,14.9190495237,14.9190960915,14.9191426579,14.9191892227,14.919235786,14.9192823479,14.9193289082,14.919375467,14.9194220243,14.9194685802,14.9195151345,14.9195616873, +14.9196082386,14.9196547884,14.9197013367,14.9197478835,14.9197944288,14.9198409726,14.9198875149,14.9199340557,14.919980595,14.9200271328,14.9200736691,14.9201202039,14.9201667372,14.920213269,14.9202597993,14.9203063281, +14.9203528554,14.9203993812,14.9204459055,14.9204924283,14.9205389496,14.9205854694,14.9206319877,14.9206785045,14.9207250198,14.9207715335,14.9208180458,14.9208645566,14.9209110659,14.9209575737,14.92100408,14.9210505848, +14.9210970881,14.9211435899,14.9211900902,14.921236589,14.9212830863,14.9213295821,14.9213760764,14.9214225692,14.9214690605,14.9215155503,14.9215620387,14.9216085255,14.9216550108,14.9217014946,14.9217479769,14.9217944577, +14.9218409371,14.9218874149,14.9219338912,14.9219803661,14.9220268394,14.9220733112,14.9221197816,14.9221662504,14.9222127178,14.9222591836,14.922305648,14.9223521109,14.9223985722,14.9224450321,14.9224914905,14.9225379473, +14.9225844027,14.9226308566,14.922677309,14.9227237599,14.9227702093,14.9228166572,14.9228631036,14.9229095485,14.9229559919,14.9230024338,14.9230488743,14.9230953132,14.9231417506,14.9231881866,14.923234621,14.923281054, +14.9233274854,14.9233739154,14.9234203439,14.9234667708,14.9235131963,14.9235596203,14.9236060428,14.9236524638,14.9236988833,14.9237453013,14.9237917178,14.9238381329,14.9238845464,14.9239309584,14.923977369,14.924023778, +14.9240701856,14.9241165917,14.9241629962,14.9242093993,14.9242558009,14.924302201,14.9243485996,14.9243949967,14.9244413923,14.9244877865,14.9245341791,14.9245805703,14.9246269599,14.9246733481,14.9247197347,14.9247661199, +14.9248125036,14.9248588858,14.9249052665,14.9249516457,14.9249980234,14.9250443997,14.9250907744,14.9251371477,14.9251835194,14.9252298897,14.9252762585,14.9253226258,14.9253689916,14.9254153559,14.9254617187,14.92550808, +14.9255544399,14.9256007982,14.9256471551,14.9256935105,14.9257398643,14.9257862167,14.9258325676,14.925878917,14.925925265,14.9259716114,14.9260179564,14.9260642998,14.9261106418,14.9261569823,14.9262033213,14.9262496588, +14.9262959948,14.9263423293,14.9263886623,14.9264349939,14.926481324,14.9265276525,14.9265739796,14.9266203052,14.9266666293,14.926712952,14.9267592731,14.9268055928,14.9268519109,14.9268982276,14.9269445428,14.9269908565, +14.9270371687,14.9270834795,14.9271297887,14.9271760965,14.9272224027,14.9272687075,14.9273150108,14.9273613126,14.9274076129,14.9274539118,14.9275002091,14.927546505,14.9275927994,14.9276390923,14.9276853837,14.9277316736, +14.9277779621,14.927824249,14.9278705345,14.9279168185,14.927963101,14.928009382,14.9280556616,14.9281019396,14.9281482162,14.9281944912,14.9282407648,14.928287037,14.9283333076,14.9283795767,14.9284258444,14.9284721106, +14.9285183753,14.9285646385,14.9286109002,14.9286571604,14.9287034192,14.9287496765,14.9287959323,14.9288421866,14.9288884394,14.9289346907,14.9289809406,14.929027189,14.9290734359,14.9291196813,14.9291659252,14.9292121677, +14.9292584086,14.9293046481,14.9293508861,14.9293971226,14.9294433577,14.9294895912,14.9295358233,14.9295820539,14.929628283,14.9296745107,14.9297207368,14.9297669615,14.9298131847,14.9298594064,14.9299056266,14.9299518453, +14.9299980626,14.9300442784,14.9300904927,14.9301367055,14.9301829169,14.9302291267,14.9302753351,14.930321542,14.9303677474,14.9304139514,14.9304601538,14.9305063548,14.9305525543,14.9305987524,14.9306449489,14.930691144, +14.9307373376,14.9307835297,14.9308297203,14.9308759095,14.9309220971,14.9309682833,14.931014468,14.9310606513,14.931106833,14.9311530133,14.9311991921,14.9312453694,14.9312915453,14.9313377196,14.9313838925,14.931430064, +14.9314762339,14.9315224023,14.9315685693,14.9316147348,14.9316608989,14.9317070614,14.9317532225,14.9317993821,14.9318455402,14.9318916968,14.931937852,14.9319840057,14.9320301579,14.9320763086,14.9321224579,14.9321686057, +14.932214752,14.9322608968,14.9323070402,14.932353182,14.9323993224,14.9324454614,14.9324915988,14.9325377348,14.9325838693,14.9326300023,14.9326761339,14.9327222639,14.9327683925,14.9328145197,14.9328606453,14.9329067695, +14.9329528922,14.9329990134,14.9330451332,14.9330912515,14.9331373683,14.9331834836,14.9332295974,14.9332757098,14.9333218207,14.9333679302,14.9334140381,14.9334601446,14.9335062496,14.9335523532,14.9335984552,14.9336445558, +14.933690655,14.9337367526,14.9337828488,14.9338289435,14.9338750367,14.9339211285,14.9339672187,14.9340133076,14.9340593949,14.9341054808,14.9341515652,14.9341976481,14.9342437295,14.9342898095,14.934335888,14.9343819651, +14.9344280406,14.9344741147,14.9345201873,14.9345662585,14.9346123282,14.9346583964,14.9347044631,14.9347505284,14.9347965922,14.9348426545,14.9348887154,14.9349347747,14.9349808327,14.9350268891,14.9350729441,14.9351189976, +14.9351650496,14.9352111002,14.9352571493,14.9353031969,14.935349243,14.9353952877,14.9354413309,14.9354873727,14.935533413,14.9355794518,14.9356254891,14.935671525,14.9357175594,14.9357635923,14.9358096238,14.9358556537, +14.9359016823,14.9359477093,14.9359937349,14.936039759,14.9360857817,14.9361318029,14.9361778226,14.9362238408,14.9362698576,14.9363158729,14.9363618868,14.9364078991,14.93645391,14.9364999195,14.9365459275,14.936591934, +14.936637939,14.9366839426,14.9367299447,14.9367759453,14.9368219445,14.9368679422,14.9369139384,14.9369599332,14.9370059265,14.9370519184,14.9370979087,14.9371438976,14.9371898851,14.9372358711,14.9372818556,14.9373278386, +14.9373738202,14.9374198003,14.937465779,14.9375117561,14.9375577319,14.9376037061,14.9376496789,14.9376956502,14.9377416201,14.9377875885,14.9378335554,14.9378795209,14.9379254849,14.9379714474,14.9380174085,14.9380633681, +14.9381093262,14.9381552829,14.9382012381,14.9382471919,14.9382931442,14.938339095,14.9383850443,14.9384309922,14.9384769387,14.9385228836,14.9385688271,14.9386147692,14.9386607098,14.9387066489,14.9387525865,14.9387985227, +14.9388444575,14.9388903907,14.9389363225,14.9389822529,14.9390281818,14.9390741092,14.9391200351,14.9391659596,14.9392118827,14.9392578042,14.9393037243,14.939349643,14.9393955602,14.9394414759,14.9394873902,14.939533303, +14.9395792143,14.9396251242,14.9396710326,14.9397169396,14.9397628451,14.9398087491,14.9398546517,14.9399005528,14.9399464525,14.9399923507,14.9400382474,14.9400841427,14.9401300365,14.9401759288,14.9402218197,14.9402677092, +14.9403135971,14.9403594837,14.9404053687,14.9404512523,14.9404971345,14.9405430151,14.9405888944,14.9406347721,14.9406806484,14.9407265233,14.9407723967,14.9408182686,14.940864139,14.9409100081,14.9409558756,14.9410017417, +14.9410476063,14.9410934695,14.9411393312,14.9411851915,14.9412310503,14.9412769076,14.9413227635,14.941368618,14.9414144709,14.9414603225,14.9415061725,14.9415520211,14.9415978683,14.941643714,14.9416895582,14.941735401, +14.9417812423,14.9418270821,14.9418729205,14.9419187575,14.941964593,14.942010427,14.9420562596,14.9421020907,14.9421479204,14.9421937486,14.9422395754,14.9422854007,14.9423312245,14.9423770469,14.9424228678,14.9424686873, +14.9425145053,14.9425603219,14.942606137,14.9426519507,14.9426977629,14.9427435736,14.9427893829,14.9428351908,14.9428809972,14.9429268021,14.9429726056,14.9430184076,14.9430642082,14.9431100073,14.9431558049,14.9432016011, +14.9432473959,14.9432931892,14.943338981,14.9433847714,14.9434305604,14.9434763479,14.9435221339,14.9435679185,14.9436137016,14.9436594833,14.9437052635,14.9437510423,14.9437968196,14.9438425955,14.9438883699,14.9439341428, +14.9439799143,14.9440256844,14.944071453,14.9441172202,14.9441629859,14.9442087501,14.9442545129,14.9443002742,14.9443460341,14.9443917926,14.9444375496,14.9444833051,14.9445290592,14.9445748118,14.944620563,14.9446663128, +14.944712061,14.9447578079,14.9448035533,14.9448492972,14.9448950397,14.9449407807,14.9449865203,14.9450322584,14.9450779951,14.9451237303,14.9451694641,14.9452151965,14.9452609273,14.9453066568,14.9453523848,14.9453981113, +14.9454438364,14.94548956,14.9455352822,14.9455810029,14.9456267222,14.9456724401,14.9457181565,14.9457638714,14.9458095849,14.9458552969,14.9459010075,14.9459467167,14.9459924244,14.9460381307,14.9460838355,14.9461295388, +14.9461752407,14.9462209412,14.9462666402,14.9463123378,14.9463580339,14.9464037286,14.9464494218,14.9464951136,14.9465408039,14.9465864928,14.9466321802,14.9466778662,14.9467235507,14.9467692338,14.9468149155,14.9468605957, +14.9469062745,14.9469519518,14.9469976276,14.9470433021,14.947088975,14.9471346466,14.9471803166,14.9472259853,14.9472716525,14.9473173182,14.9473629825,14.9474086454,14.9474543068,14.9474999667,14.9475456252,14.9475912823, +14.947636938,14.9476825921,14.9477282449,14.9477738962,14.947819546,14.9478651944,14.9479108414,14.9479564869,14.948002131,14.9480477736,14.9480934148,14.9481390545,14.9481846928,14.9482303297,14.9482759651,14.9483215991, +14.9483672316,14.9484128627,14.9484584923,14.9485041205,14.9485497472,14.9485953726,14.9486409964,14.9486866188,14.9487322398,14.9487778594,14.9488234775,14.9488690941,14.9489147093,14.9489603231,14.9490059354,14.9490515463, +14.9490971557,14.9491427637,14.9491883703,14.9492339754,14.9492795791,14.9493251813,14.9493707821,14.9494163815,14.9494619794,14.9495075758,14.9495531709,14.9495987644,14.9496443566,14.9496899473,14.9497355366,14.9497811244, +14.9498267108,14.9498722957,14.9499178792,14.9499634613,14.9500090419,14.9500546211,14.9501001988,14.9501457751,14.95019135,14.9502369234,14.9502824954,14.9503280659,14.950373635,14.9504192027,14.9504647689,14.9505103337, +14.950555897,14.950601459,14.9506470194,14.9506925785,14.950738136,14.9507836922,14.9508292469,14.9508748002,14.950920352,14.9509659024,14.9510114514,14.9510569989,14.951102545,14.9511480896,14.9511936329,14.9512391746, +14.951284715,14.9513302539,14.9513757913,14.9514213273,14.9514668619,14.9515123951,14.9515579268,14.9516034571,14.9516489859,14.9516945133,14.9517400393,14.9517855638,14.9518310869,14.9518766085,14.9519221288,14.9519676475, +14.9520131649,14.9520586808,14.9521041953,14.9521497083,14.9521952199,14.9522407301,14.9522862388,14.9523317461,14.952377252,14.9524227564,14.9524682594,14.9525137609,14.9525592611,14.9526047597,14.952650257,14.9526957528, +14.9527412472,14.9527867401,14.9528322316,14.9528777217,14.9529232104,14.9529686976,14.9530141833,14.9530596677,14.9531051506,14.9531506321,14.9531961121,14.9532415907,14.9532870679,14.9533325436,14.9533780179,14.9534234908, +14.9534689622,14.9535144322,14.9535599008,14.9536053679,14.9536508336,14.9536962979,14.9537417608,14.9537872222,14.9538326821,14.9538781407,14.9539235978,14.9539690535,14.9540145077,14.9540599605,14.9541054119,14.9541508619, +14.9541963104,14.9542417575,14.9542872031,14.9543326474,14.9543780901,14.9544235315,14.9544689714,14.9545144099,14.954559847,14.9546052826,14.9546507168,14.9546961496,14.954741581,14.9547870109,14.9548324394,14.9548778664, +14.954923292,14.9549687162,14.955014139,14.9550595603,14.9551049802,14.9551503987,14.9551958157,14.9552412313,14.9552866455,14.9553320583,14.9553774696,14.9554228795,14.955468288,14.955513695,14.9555591006,14.9556045048, +14.9556499075,14.9556953088,14.9557407087,14.9557861072,14.9558315042,14.9558768998,14.955922294,14.9559676868,14.9560130781,14.956058468,14.9561038564,14.9561492435,14.9561946291,14.9562400133,14.956285396,14.9563307774, +14.9563761572,14.9564215357,14.9564669128,14.9565122884,14.9565576626,14.9566030353,14.9566484067,14.9566937766,14.9567391451,14.9567845121,14.9568298777,14.9568752419,14.9569206047,14.9569659661,14.957011326,14.9570566845, +14.9571020416,14.9571473972,14.9571927514,14.9572381042,14.9572834556,14.9573288055,14.957374154,14.9574195011,14.9574648468,14.957510191,14.9575555339,14.9576008753,14.9576462152,14.9576915538,14.9577368909,14.9577822266, +14.9578275608,14.9578728937,14.9579182251,14.9579635551,14.9580088837,14.9580542108,14.9580995365,14.9581448608,14.9581901837,14.9582355051,14.9582808252,14.9583261438,14.9583714609,14.9584167767,14.958462091,14.9585074039, +14.9585527154,14.9585980255,14.9586433341,14.9586886413,14.9587339471,14.9587792515,14.9588245545,14.958869856,14.9589151561,14.9589604548,14.959005752,14.9590510479,14.9590963423,14.9591416353,14.9591869268,14.959232217, +14.9592775057,14.959322793,14.9593680789,14.9594133634,14.9594586464,14.959503928,14.9595492082,14.959594487,14.9596397644,14.9596850403,14.9597303148,14.9597755879,14.9598208596,14.9598661298,14.9599113987,14.9599566661, +14.9600019321,14.9600471966,14.9600924598,14.9601377215,14.9601829818,14.9602282407,14.9602734982,14.9603187542,14.9603640089,14.9604092621,14.9604545139,14.9604997643,14.9605450132,14.9605902607,14.9606355069,14.9606807516, +14.9607259948,14.9607712367,14.9608164771,14.9608617162,14.9609069538,14.96095219,14.9609974247,14.9610426581,14.96108789,14.9611331205,14.9611783496,14.9612235773,14.9612688035,14.9613140284,14.9613592518,14.9614044738, +14.9614496944,14.9614949136,14.9615401313,14.9615853477,14.9616305626,14.9616757761,14.9617209882,14.9617661988,14.9618114081,14.9618566159,14.9619018223,14.9619470273,14.9619922309,14.9620374331,14.9620826339,14.9621278332, +14.9621730311,14.9622182276,14.9622634227,14.9623086164,14.9623538086,14.9623989995,14.9624441889,14.9624893769,14.9625345635,14.9625797487,14.9626249325,14.9626701148,14.9627152957,14.9627604753,14.9628056534,14.9628508301, +14.9628960053,14.9629411792,14.9629863516,14.9630315227,14.9630766923,14.9631218605,14.9631670273,14.9632121927,14.9632573566,14.9633025192,14.9633476803,14.96339284,14.9634379983,14.9634831552,14.9635283107,14.9635734648, +14.9636186174,14.9636637687,14.9637089185,14.9637540669,14.9637992139,14.9638443595,14.9638895037,14.9639346465,14.9639797878,14.9640249278,14.9640700663,14.9641152034,14.9641603391,14.9642054734,14.9642506063,14.9642957377, +14.9643408678,14.9643859964,14.9644311237,14.9644762495,14.9645213739,14.9645664969,14.9646116185,14.9646567387,14.9647018574,14.9647469748,14.9647920907,14.9648372052,14.9648823184,14.9649274301,14.9649725404,14.9650176493, +14.9650627567,14.9651078628,14.9651529675,14.9651980707,14.9652431726,14.965288273,14.965333372,14.9653784696,14.9654235658,14.9654686606,14.965513754,14.9655588459,14.9656039365,14.9656490257,14.9656941134,14.9657391997, +14.9657842847,14.9658293682,14.9658744503,14.965919531,14.9659646103,14.9660096882,14.9660547646,14.9660998397,14.9661449133,14.9661899856,14.9662350564,14.9662801259,14.9663251939,14.9663702605,14.9664153257,14.9664603895, +14.9665054519,14.9665505129,14.9665955725,14.9666406306,14.9666856874,14.9667307428,14.9667757967,14.9668208493,14.9668659004,14.9669109501,14.9669559984,14.9670010454,14.9670460909,14.967091135,14.9671361777,14.967181219, +14.9672262588,14.9672712973,14.9673163344,14.9673613701,14.9674064043,14.9674514372,14.9674964686,14.9675414987,14.9675865273,14.9676315545,14.9676765804,14.9677216048,14.9677666278,14.9678116494,14.9678566696,14.9679016884, +14.9679467058,14.9679917218,14.9680367364,14.9680817496,14.9681267614,14.9681717717,14.9682167807,14.9682617883,14.9683067944,14.9683517992,14.9683968025,14.9684418045,14.968486805,14.9685318042,14.9685768019,14.9686217983, +14.9686667932,14.9687117867,14.9687567789,14.9688017696,14.9688467589,14.9688917468,14.9689367333,14.9689817184,14.9690267022,14.9690716845,14.9691166654,14.9691616449,14.969206623,14.9692515997,14.969296575,14.9693415489, +14.9693865213,14.9694314924,14.9694764621,14.9695214304,14.9695663973,14.9696113628,14.9696563269,14.9697012895,14.9697462508,14.9697912107,14.9698361692,14.9698811262,14.9699260819,14.9699710362,14.9700159891,14.9700609405, +14.9701058906,14.9701508393,14.9701957866,14.9702407324,14.9702856769,14.97033062,14.9703755616,14.9704205019,14.9704654408,14.9705103783,14.9705553143,14.970600249,14.9706451823,14.9706901141,14.9707350446,14.9707799737, +14.9708249014,14.9708698276,14.9709147525,14.970959676,14.9710045981,14.9710495188,14.971094438,14.9711393559,14.9711842724,14.9712291875,14.9712741012,14.9713190135,14.9713639244,14.9714088339,14.971453742,14.9714986487, +14.971543554,14.9715884579,14.9716333604,14.9716782615,14.9717231612,14.9717680595,14.9718129564,14.9718578519,14.971902746,14.9719476388,14.9719925301,14.97203742,14.9720823086,14.9721271957,14.9721720814,14.9722169658, +14.9722618487,14.9723067303,14.9723516104,14.9723964892,14.9724413666,14.9724862425,14.9725311171,14.9725759903,14.9726208621,14.9726657324,14.9727106014,14.972755469,14.9728003352,14.9728452,14.9728900634,14.9729349254, +14.9729797861,14.9730246453,14.9730695031,14.9731143596,14.9731592146,14.9732040682,14.9732489205,14.9732937713,14.9733386208,14.9733834689,14.9734283155,14.9734731608,14.9735180047,14.9735628472,14.9736076883,14.973652528, +14.9736973663,14.9737422032,14.9737870387,14.9738318729,14.9738767056,14.973921537,14.9739663669,14.9740111955,14.9740560226,14.9741008484,14.9741456728,14.9741904958,14.9742353174,14.9742801376,14.9743249564,14.9743697738, +14.9744145898,14.9744594044,14.9745042177,14.9745490295,14.97459384,14.974638649,14.9746834567,14.974728263,14.9747730679,14.9748178714,14.9748626735,14.9749074742,14.9749522735,14.9749970715,14.975041868,14.9750866632, +14.9751314569,14.9751762493,14.9752210403,14.9752658299,14.9753106181,14.9753554049,14.9754001903,14.9754449743,14.9754897569,14.9755345382,14.975579318,14.9756240965,14.9756688736,14.9757136493,14.9757584236,14.9758031965, +14.975847968,14.9758927381,14.9759375069,14.9759822742,14.9760270402,14.9760718048,14.9761165679,14.9761613297,14.9762060901,14.9762508492,14.9762956068,14.976340363,14.9763851179,14.9764298714,14.9764746234,14.9765193741, +14.9765641234,14.9766088713,14.9766536179,14.976698363,14.9767431067,14.9767878491,14.9768325901,14.9768773297,14.9769220679,14.9769668047,14.9770115401,14.9770562741,14.9771010068,14.977145738,14.9771904679,14.9772351964, +14.9772799235,14.9773246492,14.9773693735,14.9774140965,14.977458818,14.9775035382,14.977548257,14.9775929744,14.9776376904,14.977682405,14.9777271183,14.9777718301,14.9778165406,14.9778612497,14.9779059574,14.9779506637, +14.9779953686,14.9780400722,14.9780847743,14.9781294751,14.9781741745,14.9782188725,14.9782635691,14.9783082643,14.9783529582,14.9783976506,14.9784423417,14.9784870314,14.9785317197,14.9785764066,14.9786210922,14.9786657763, +14.9787104591,14.9787551405,14.9787998205,14.9788444991,14.9788891764,14.9789338522,14.9789785267,14.9790231998,14.9790678715,14.9791125418,14.9791572107,14.9792018783,14.9792465445,14.9792912093,14.9793358727,14.9793805347, +14.9794251953,14.9794698546,14.9795145125,14.979559169,14.9796038241,14.9796484778,14.9796931302,14.9797377811,14.9797824307,14.9798270789,14.9798717257,14.9799163712,14.9799610152,14.9800056579,14.9800502992,14.9800949391, +14.9801395776,14.9801842148,14.9802288506,14.9802734849,14.980318118,14.9803627496,14.9804073798,14.9804520087,14.9804966362,14.9805412623,14.980585887,14.9806305104,14.9806751323,14.9807197529,14.9807643721,14.9808089899, +14.9808536064,14.9808982214,14.9809428351,14.9809874474,14.9810320584,14.9810766679,14.9811212761,14.9811658829,14.9812104883,14.9812550923,14.981299695,14.9813442962,14.9813888961,14.9814334946,14.9814780918,14.9815226875, +14.9815672819,14.9816118749,14.9816564665,14.9817010568,14.9817456456,14.9817902331,14.9818348192,14.981879404,14.9819239873,14.9819685693,14.9820131499,14.9820577291,14.982102307,14.9821468834,14.9821914585,14.9822360322, +14.9822806046,14.9823251755,14.9823697451,14.9824143133,14.9824588801,14.9825034456,14.9825480097,14.9825925723,14.9826371337,14.9826816936,14.9827262522,14.9827708094,14.9828153652,14.9828599196,14.9829044727,14.9829490244, +14.9829935747,14.9830381236,14.9830826712,14.9831272174,14.9831717622,14.9832163056,14.9832608477,14.9833053884,14.9833499277,14.9833944656,14.9834390022,14.9834835374,14.9835280712,14.9835726036,14.9836171347,14.9836616643, +14.9837061927,14.9837507196,14.9837952452,14.9838397693,14.9838842922,14.9839288136,14.9839733337,14.9840178524,14.9840623697,14.9841068856,14.9841514002,14.9841959134,14.9842404252,14.9842849357,14.9843294448,14.9843739525, +14.9844184588,14.9844629638,14.9845074673,14.9845519696,14.9845964704,14.9846409699,14.984685468,14.9847299647,14.98477446,14.984818954,14.9848634466,14.9849079379,14.9849524277,14.9849969162,14.9850414033,14.9850858891, +14.9851303735,14.9851748565,14.9852193381,14.9852638184,14.9853082973,14.9853527748,14.9853972509,14.9854417257,14.9854861991,14.9855306711,14.9855751418,14.9856196111,14.985664079,14.9857085456,14.9857530108,14.9857974746, +14.985841937,14.9858863981,14.9859308578,14.9859753161,14.9860197731,14.9860642287,14.9861086829,14.9861531357,14.9861975872,14.9862420373,14.9862864861,14.9863309334,14.9863753794,14.9864198241,14.9864642673,14.9865087092, +14.9865531498,14.9865975889,14.9866420267,14.9866864631,14.9867308982,14.9867753319,14.9868197642,14.9868641951,14.9869086247,14.9869530529,14.9869974797,14.9870419052,14.9870863293,14.9871307521,14.9871751734,14.9872195934, +14.9872640121,14.9873084293,14.9873528452,14.9873972598,14.9874416729,14.9874860847,14.9875304952,14.9875749042,14.9876193119,14.9876637183,14.9877081232,14.9877525268,14.987796929,14.9878413299,14.9878857294,14.9879301275, +14.9879745243,14.9880189197,14.9880633137,14.9881077064,14.9881520977,14.9881964876,14.9882408762,14.9882852634,14.9883296492,14.9883740337,14.9884184168,14.9884627985,14.9885071789,14.9885515579,14.9885959356,14.9886403119, +14.9886846868,14.9887290603,14.9887734325,14.9888178033,14.9888621728,14.9889065409,14.9889509076,14.988995273,14.989039637,14.9890839996,14.9891283609,14.9891727208,14.9892170793,14.9892614365,14.9893057923,14.9893501468, +14.9893944998,14.9894388516,14.9894832019,14.9895275509,14.9895718986,14.9896162448,14.9896605897,14.9897049333,14.9897492755,14.9897936163,14.9898379557,14.9898822938,14.9899266306,14.9899709659,14.9900152999,14.9900596326, +14.9901039639,14.9901482938,14.9901926223,14.9902369495,14.9902812754,14.9903255998,14.9903699229,14.9904142447,14.9904585651,14.9905028841,14.9905472018,14.9905915181,14.990635833,14.9906801466,14.9907244588,14.9907687697, +14.9908130792,14.9908573873,14.9909016941,14.9909459995,14.9909903035,14.9910346062,14.9910789076,14.9911232075,14.9911675061,14.9912118034,14.9912560993,14.9913003938,14.991344687,14.9913889788,14.9914332693,14.9914775583, +14.9915218461,14.9915661324,14.9916104175,14.9916547011,14.9916989834,14.9917432643,14.9917875439,14.9918318221,14.991876099,14.9919203745,14.9919646486,14.9920089214,14.9920531929,14.9920974629,14.9921417316,14.992185999, +14.992230265,14.9922745296,14.9923187929,14.9923630548,14.9924073153,14.9924515745,14.9924958324,14.9925400889,14.992584344,14.9926285978,14.9926728502,14.9927171012,14.9927613509,14.9928055993,14.9928498463,14.9928940919, +14.9929383362,14.9929825791,14.9930268206,14.9930710608,14.9931152997,14.9931595372,14.9932037733,14.9932480081,14.9932922415,14.9933364736,14.9933807043,14.9934249336,14.9934691616,14.9935133882,14.9935576135,14.9936018374, +14.99364606,14.9936902812,14.9937345011,14.9937787196,14.9938229367,14.9938671525,14.993911367,14.9939555801,14.9939997918,14.9940440022,14.9940882112,14.9941324189,14.9941766252,14.9942208301,14.9942650337,14.994309236, +14.9943534369,14.9943976364,14.9944418346,14.9944860314,14.9945302269,14.994574421,14.9946186138,14.9946628052,14.9947069953,14.994751184,14.9947953713,14.9948395573,14.994883742,14.9949279253,14.9949721072,14.9950162878, +14.995060467,14.9951046449,14.9951488214,14.9951929966,14.9952371704,14.9952813429,14.995325514,14.9953696838,14.9954138522,14.9954580193,14.995502185,14.9955463494,14.9955905124,14.995634674,14.9956788343,14.9957229933, +14.9957671509,14.9958113071,14.995855462,14.9958996156,14.9959437678,14.9959879186,14.9960320681,14.9960762162,14.996120363,14.9961645085,14.9962086526,14.9962527953,14.9962969367,14.9963410767,14.9963852154,14.9964293527, +14.9964734887,14.9965176234,14.9965617567,14.9966058886,14.9966500192,14.9966941484,14.9967382763,14.9967824028,14.996826528,14.9968706519,14.9969147743,14.9969588955,14.9970030153,14.9970471337,14.9970912508,14.9971353665, +14.9971794809,14.997223594,14.9972677057,14.997311816,14.997355925,14.9974000327,14.997444139,14.9974882439,14.9975323475,14.9975764498,14.9976205507,14.9976646502,14.9977087485,14.9977528453,14.9977969408,14.997841035, +14.9978851278,14.9979292193,14.9979733094,14.9980173982,14.9980614856,14.9981055717,14.9981496565,14.9981937398,14.9982378219,14.9982819026,14.9983259819,14.9983700599,14.9984141366,14.9984582119,14.9985022859,14.9985463585, +14.9985904297,14.9986344997,14.9986785682,14.9987226355,14.9987667014,14.9988107659,14.9988548291,14.9988988909,14.9989429514,14.9989870106,14.9990310684,14.9990751249,14.99911918,14.9991632338,14.9992072862,14.9992513373, +14.999295387,14.9993394354,14.9993834825,14.9994275282,14.9994715725,14.9995156155,14.9995596572,14.9996036975,14.9996477365,14.9996917742,14.9997358105,14.9997798454,14.999823879,14.9998679113,14.9999119422,14.9999559718, +15.0,15.0000440269,15.0000880524,15.0001320766,15.0001760995,15.000220121,15.0002641412,15.00030816,15.0003521775,15.0003961936,15.0004402084,15.0004842219,15.000528234,15.0005722448,15.0006162542,15.0006602623, +15.000704269,15.0007482744,15.0007922785,15.0008362812,15.0008802826,15.0009242826,15.0009682813,15.0010122786,15.0010562746,15.0011002693,15.0011442626,15.0011882546,15.0012322452,15.0012762345,15.0013202225,15.0013642091, +15.0014081944,15.0014521783,15.0014961609,15.0015401422,15.0015841221,15.0016281007,15.0016720779,15.0017160538,15.0017600283,15.0018040015,15.0018479734,15.0018919439,15.0019359131,15.001979881,15.0020238475,15.0020678127, +15.0021117765,15.002155739,15.0021997001,15.0022436599,15.0022876184,15.0023315755,15.0023755313,15.0024194858,15.0024634389,15.0025073907,15.0025513411,15.0025952902,15.002639238,15.0026831844,15.0027271295,15.0027710732, +15.0028150156,15.0028589567,15.0029028964,15.0029468348,15.0029907718,15.0030347076,15.0030786419,15.003122575,15.0031665067,15.003210437,15.0032543661,15.0032982937,15.0033422201,15.0033861451,15.0034300688,15.0034739911, +15.0035179121,15.0035618318,15.0036057501,15.0036496671,15.0036935827,15.0037374971,15.00378141,15.0038253217,15.003869232,15.0039131409,15.0039570486,15.0040009549,15.0040448598,15.0040887635,15.0041326657,15.0041765667, +15.0042204663,15.0042643646,15.0043082615,15.0043521572,15.0043960514,15.0044399444,15.004483836,15.0045277262,15.0045716152,15.0046155028,15.004659389,15.004703274,15.0047471575,15.0047910398,15.0048349207,15.0048788003, +15.0049226786,15.0049665555,15.0050104311,15.0050543053,15.0050981782,15.0051420498,15.0051859201,15.005229789,15.0052736566,15.0053175228,15.0053613877,15.0054052513,15.0054491135,15.0054929745,15.005536834,15.0055806923, +15.0056245492,15.0056684048,15.005712259,15.0057561119,15.0057999635,15.0058438138,15.0058876627,15.0059315103,15.0059753565,15.0060192014,15.006063045,15.0061068873,15.0061507282,15.0061945678,15.006238406,15.0062822429, +15.0063260785,15.0063699128,15.0064137457,15.0064575773,15.0065014076,15.0065452365,15.0065890641,15.0066328904,15.0066767153,15.0067205389,15.0067643612,15.0068081821,15.0068520017,15.00689582,15.006939637,15.0069834526, +15.0070272669,15.0070710799,15.0071148915,15.0071587018,15.0072025107,15.0072463184,15.0072901247,15.0073339297,15.0073777333,15.0074215356,15.0074653366,15.0075091363,15.0075529346,15.0075967316,15.0076405273,15.0076843216, +15.0077281146,15.0077719063,15.0078156967,15.0078594857,15.0079032734,15.0079470597,15.0079908448,15.0080346285,15.0080784109,15.0081221919,15.0081659716,15.00820975,15.0082535271,15.0082973028,15.0083410772,15.0083848503, +15.0084286221,15.0084723925,15.0085161616,15.0085599294,15.0086036958,15.0086474609,15.0086912247,15.0087349872,15.0087787483,15.0088225081,15.0088662666,15.0089100237,15.0089537795,15.008997534,15.0090412872,15.009085039, +15.0091287895,15.0091725387,15.0092162866,15.0092600331,15.0093037783,15.0093475222,15.0093912648,15.009435006,15.0094787459,15.0095224845,15.0095662217,15.0096099576,15.0096536922,15.0096974255,15.0097411575,15.0097848881, +15.0098286174,15.0098723453,15.009916072,15.0099597973,15.0100035213,15.010047244,15.0100909653,15.0101346853,15.010178404,15.0102221214,15.0102658374,15.0103095522,15.0103532655,15.0103969776,15.0104406884,15.0104843978, +15.0105281059,15.0105718127,15.0106155181,15.0106592222,15.010702925,15.0107466265,15.0107903267,15.0108340255,15.010877723,15.0109214192,15.0109651141,15.0110088076,15.0110524998,15.0110961907,15.0111398803,15.0111835685, +15.0112272554,15.011270941,15.0113146253,15.0113583082,15.0114019899,15.0114456702,15.0114893492,15.0115330268,15.0115767032,15.0116203782,15.0116640519,15.0117077243,15.0117513953,15.011795065,15.0118387335,15.0118824005, +15.0119260663,15.0119697308,15.0120133939,15.0120570557,15.0121007162,15.0121443753,15.0121880331,15.0122316897,15.0122753449,15.0123189987,15.0123626513,15.0124063025,15.0124499524,15.012493601,15.0125372483,15.0125808942, +15.0126245389,15.0126681822,15.0127118242,15.0127554648,15.0127991042,15.0128427422,15.0128863789,15.0129300143,15.0129736484,15.0130172811,15.0130609126,15.0131045427,15.0131481715,15.0131917989,15.0132354251,15.0132790499, +15.0133226734,15.0133662956,15.0134099165,15.0134535361,15.0134971543,15.0135407712,15.0135843868,15.0136280011,15.0136716141,15.0137152257,15.013758836,15.013802445,15.0138460527,15.0138896591,15.0139332642,15.0139768679, +15.0140204703,15.0140640714,15.0141076712,15.0141512697,15.0141948668,15.0142384626,15.0142820572,15.0143256504,15.0143692422,15.0144128328,15.014456422,15.01450001,15.0145435966,15.0145871819,15.0146307659,15.0146743485, +15.0147179299,15.0147615099,15.0148050886,15.014848666,15.0148922421,15.0149358168,15.0149793903,15.0150229624,15.0150665332,15.0151101027,15.0151536709,15.0151972378,15.0152408033,15.0152843676,15.0153279305,15.0153714921, +15.0154150524,15.0154586114,15.015502169,15.0155457254,15.0155892804,15.0156328341,15.0156763865,15.0157199376,15.0157634874,15.0158070358,15.015850583,15.0158941288,15.0159376733,15.0159812165,15.0160247584,15.016068299, +15.0161118382,15.0161553762,15.0161989128,15.0162424481,15.0162859821,15.0163295148,15.0163730462,15.0164165762,15.016460105,15.0165036324,15.0165471585,15.0165906833,15.0166342068,15.016677729,15.0167212499,15.0167647694, +15.0168082877,15.0168518046,15.0168953202,15.0169388345,15.0169823475,15.0170258592,15.0170693696,15.0171128786,15.0171563864,15.0171998928,15.0172433979,15.0172869017,15.0173304042,15.0173739054,15.0174174053,15.0174609039, +15.0175044011,15.017547897,15.0175913917,15.017634885,15.017678377,15.0177218677,15.0177653571,15.0178088451,15.0178523319,15.0178958174,15.0179393015,15.0179827843,15.0180262658,15.0180697461,15.0181132249,15.0181567025, +15.0182001788,15.0182436538,15.0182871274,15.0183305998,15.0183740708,15.0184175405,15.018461009,15.0185044761,15.0185479419,15.0185914064,15.0186348695,15.0186783314,15.018721792,15.0187652512,15.0188087092,15.0188521658, +15.0188956211,15.0189390751,15.0189825278,15.0190259792,15.0190694293,15.0191128781,15.0191563256,15.0191997717,15.0192432166,15.0192866602,15.0193301024,15.0193735433,15.0194169829,15.0194604213,15.0195038583,15.019547294, +15.0195907284,15.0196341614,15.0196775932,15.0197210237,15.0197644528,15.0198078807,15.0198513073,15.0198947325,15.0199381564,15.0199815791,15.0200250004,15.0200684204,15.0201118391,15.0201552565,15.0201986726,15.0202420874, +15.0202855008,15.020328913,15.0203723239,15.0204157334,15.0204591417,15.0205025486,15.0205459543,15.0205893586,15.0206327617,15.0206761634,15.0207195638,15.0207629629,15.0208063607,15.0208497572,15.0208931524,15.0209365463, +15.0209799389,15.0210233302,15.0210667202,15.0211101088,15.0211534962,15.0211968823,15.021240267,15.0212836505,15.0213270326,15.0213704135,15.021413793,15.0214571712,15.0215005482,15.0215439238,15.0215872981,15.0216306711, +15.0216740429,15.0217174133,15.0217607824,15.0218041502,15.0218475167,15.0218908819,15.0219342458,15.0219776084,15.0220209696,15.0220643296,15.0221076883,15.0221510457,15.0221944018,15.0222377565,15.02228111,15.0223244622, +15.022367813,15.0224111626,15.0224545108,15.0224978578,15.0225412035,15.0225845478,15.0226278909,15.0226712326,15.022714573,15.0227579122,15.02280125,15.0228445866,15.0228879218,15.0229312557,15.0229745884,15.0230179197, +15.0230612497,15.0231045785,15.0231479059,15.023191232,15.0232345568,15.0232778804,15.0233212026,15.0233645235,15.0234078431,15.0234511615,15.0234944785,15.0235377942,15.0235811086,15.0236244217,15.0236677336,15.0237110441, +15.0237543533,15.0237976612,15.0238409678,15.0238842732,15.0239275772,15.0239708799,15.0240141813,15.0240574814,15.0241007803,15.0241440778,15.024187374,15.0242306689,15.0242739625,15.0243172549,15.0243605459,15.0244038356, +15.024447124,15.0244904112,15.024533697,15.0245769815,15.0246202648,15.0246635467,15.0247068273,15.0247501067,15.0247933847,15.0248366614,15.0248799369,15.024923211,15.0249664839,15.0250097554,15.0250530257,15.0250962946, +15.0251395623,15.0251828286,15.0252260937,15.0252693575,15.0253126199,15.0253558811,15.025399141,15.0254423995,15.0254856568,15.0255289128,15.0255721675,15.0256154209,15.0256586729,15.0257019237,15.0257451732,15.0257884214, +15.0258316683,15.0258749139,15.0259181582,15.0259614013,15.026004643,15.0260478834,15.0260911225,15.0261343604,15.0261775969,15.0262208321,15.0262640661,15.0263072987,15.0263505301,15.0263937601,15.0264369889,15.0264802163, +15.0265234425,15.0265666674,15.026609891,15.0266531133,15.0266963342,15.0267395539,15.0267827723,15.0268259895,15.0268692053,15.0269124198,15.026955633,15.0269988449,15.0270420556,15.0270852649,15.027128473,15.0271716797, +15.0272148852,15.0272580893,15.0273012922,15.0273444938,15.0273876941,15.027430893,15.0274740907,15.0275172871,15.0275604822,15.0276036761,15.0276468686,15.0276900598,15.0277332498,15.0277764384,15.0278196257,15.0278628118, +15.0279059966,15.02794918,15.0279923622,15.0280355431,15.0280787227,15.028121901,15.028165078,15.0282082537,15.0282514282,15.0282946013,15.0283377731,15.0283809437,15.0284241129,15.0284672809,15.0285104476,15.028553613, +15.0285967771,15.0286399399,15.0286831014,15.0287262616,15.0287694205,15.0288125782,15.0288557345,15.0288988896,15.0289420433,15.0289851958,15.029028347,15.0290714969,15.0291146455,15.0291577928,15.0292009388,15.0292440835, +15.029287227,15.0293303691,15.02937351,15.0294166495,15.0294597878,15.0295029248,15.0295460605,15.0295891949,15.029632328,15.0296754599,15.0297185904,15.0297617197,15.0298048476,15.0298479743,15.0298910997,15.0299342238, +15.0299773466,15.0300204681,15.0300635883,15.0301067073,15.0301498249,15.0301929413,15.0302360564,15.0302791701,15.0303222826,15.0303653939,15.0304085038,15.0304516124,15.0304947197,15.0305378258,15.0305809306,15.0306240341, +15.0306671362,15.0307102372,15.0307533368,15.0307964351,15.0308395321,15.0308826279,15.0309257224,15.0309688155,15.0310119074,15.031054998,15.0310980874,15.0311411754,15.0311842621,15.0312273476,15.0312704318,15.0313135147, +15.0313565963,15.0313996766,15.0314427556,15.0314858333,15.0315289098,15.031571985,15.0316150588,15.0316581314,15.0317012027,15.0317442728,15.0317873415,15.031830409,15.0318734751,15.03191654,15.0319596036,15.0320026659, +15.0320457269,15.0320887867,15.0321318451,15.0321749023,15.0322179582,15.0322610128,15.0323040661,15.0323471181,15.0323901689,15.0324332183,15.0324762665,15.0325193134,15.032562359,15.0326054033,15.0326484464,15.0326914881, +15.0327345286,15.0327775678,15.0328206057,15.0328636423,15.0329066776,15.0329497117,15.0329927444,15.0330357759,15.0330788061,15.033121835,15.0331648627,15.033207889,15.0332509141,15.0332939379,15.0333369604,15.0333799816, +15.0334230015,15.0334660202,15.0335090376,15.0335520536,15.0335950685,15.033638082,15.0336810942,15.0337241052,15.0337671148,15.0338101232,15.0338531304,15.0338961362,15.0339391407,15.033982144,15.034025146,15.0340681467, +15.0341111461,15.0341541442,15.0341971411,15.0342401367,15.034283131,15.034326124,15.0343691157,15.0344121062,15.0344550953,15.0344980832,15.0345410698,15.0345840552,15.0346270392,15.034670022,15.0347130034,15.0347559837, +15.0347989626,15.0348419402,15.0348849166,15.0349278917,15.0349708655,15.035013838,15.0350568092,15.0350997792,15.0351427479,15.0351857153,15.0352286814,15.0352716463,15.0353146098,15.0353575721,15.0354005331,15.0354434928, +15.0354864513,15.0355294085,15.0355723644,15.035615319,15.0356582723,15.0357012243,15.0357441751,15.0357871246,15.0358300728,15.0358730198,15.0359159654,15.0359589098,15.0360018529,15.0360447947,15.0360877353,15.0361306746, +15.0361736126,15.0362165493,15.0362594847,15.0363024189,15.0363453517,15.0363882833,15.0364312137,15.0364741427,15.0365170705,15.036559997,15.0366029222,15.0366458461,15.0366887688,15.0367316902,15.0367746103,15.0368175291, +15.0368604467,15.036903363,15.036946278,15.0369891917,15.0370321041,15.0370750153,15.0371179252,15.0371608338,15.0372037412,15.0372466472,15.037289552,15.0373324555,15.0373753578,15.0374182587,15.0374611584,15.0375040568, +15.037546954,15.0375898498,15.0376327444,15.0376756377,15.0377185298,15.0377614205,15.03780431,15.0378471982,15.0378900851,15.0379329708,15.0379758552,15.0380187383,15.0380616201,15.0381045007,15.03814738,15.038190258, +15.0382331347,15.0382760102,15.0383188844,15.0383617573,15.0384046289,15.0384474993,15.0384903684,15.0385332362,15.0385761028,15.038618968,15.038661832,15.0387046948,15.0387475562,15.0387904164,15.0388332753,15.0388761329, +15.0389189893,15.0389618444,15.0390046982,15.0390475507,15.039090402,15.039133252,15.0391761007,15.0392189482,15.0392617943,15.0393046392,15.0393474829,15.0393903252,15.0394331663,15.0394760061,15.0395188447,15.039561682, +15.039604518,15.0396473527,15.0396901861,15.0397330183,15.0397758492,15.0398186789,15.0398615072,15.0399043343,15.0399471602,15.0399899847,15.040032808,15.04007563,15.0401184508,15.0401612702,15.0402040884,15.0402469054, +15.040289721,15.0403325354,15.0403753485,15.0404181604,15.040460971,15.0405037803,15.0405465883,15.0405893951,15.0406322006,15.0406750048,15.0407178077,15.0407606094,15.0408034098,15.040846209,15.0408890069,15.0409318035, +15.0409745988,15.0410173929,15.0410601857,15.0411029772,15.0411457675,15.0411885565,15.0412313442,15.0412741306,15.0413169158,15.0413596997,15.0414024824,15.0414452638,15.0414880439,15.0415308227,15.0415736003,15.0416163766, +15.0416591516,15.0417019254,15.0417446979,15.0417874691,15.0418302391,15.0418730078,15.0419157752,15.0419585414,15.0420013063,15.0420440699,15.0420868323,15.0421295934,15.0421723532,15.0422151117,15.042257869,15.042300625, +15.0423433798,15.0423861333,15.0424288855,15.0424716365,15.0425143861,15.0425571346,15.0425998817,15.0426426276,15.0426853722,15.0427281156,15.0427708577,15.0428135985,15.042856338,15.0428990763,15.0429418133,15.0429845491, +15.0430272836,15.0430700168,15.0431127488,15.0431554795,15.0431982089,15.0432409371,15.043283664,15.0433263896,15.043369114,15.0434118371,15.0434545589,15.0434972795,15.0435399988,15.0435827168,15.0436254336,15.0436681491, +15.0437108633,15.0437535763,15.043796288,15.0438389985,15.0438817077,15.0439244156,15.0439671223,15.0440098277,15.0440525318,15.0440952347,15.0441379363,15.0441806366,15.0442233357,15.0442660335,15.0443087301,15.0443514253, +15.0443941194,15.0444368121,15.0444795036,15.0445221938,15.0445648828,15.0446075705,15.044650257,15.0446929421,15.0447356261,15.0447783087,15.0448209901,15.0448636702,15.0449063491,15.0449490267,15.044991703,15.0450343781, +15.0450770519,15.0451197245,15.0451623958,15.0452050658,15.0452477346,15.0452904021,15.0453330683,15.0453757333,15.045418397,15.0454610595,15.0455037207,15.0455463806,15.0455890393,15.0456316967,15.0456743529,15.0457170078, +15.0457596614,15.0458023138,15.0458449649,15.0458876147,15.0459302633,15.0459729106,15.0460155567,15.0460582015,15.046100845,15.0461434873,15.0461861283,15.0462287681,15.0462714066,15.0463140438,15.0463566798,15.0463993145, +15.046441948,15.0464845802,15.0465272112,15.0465698408,15.0466124693,15.0466550964,15.0466977223,15.046740347,15.0467829704,15.0468255925,15.0468682133,15.046910833,15.0469534513,15.0469960684,15.0470386842,15.0470812988, +15.0471239121,15.0471665242,15.047209135,15.0472517445,15.0472943528,15.0473369598,15.0473795656,15.0474221701,15.0474647733,15.0475073753,15.047549976,15.0475925755,15.0476351737,15.0476777707,15.0477203664,15.0477629608, +15.047805554,15.0478481459,15.0478907366,15.047933326,15.0479759142,15.0480185011,15.0480610867,15.0481036711,15.0481462542,15.0481888361,15.0482314167,15.0482739961,15.0483165742,15.048359151,15.0484017266,15.0484443009, +15.048486874,15.0485294458,15.0485720164,15.0486145857,15.0486571537,15.0486997205,15.0487422861,15.0487848503,15.0488274134,15.0488699751,15.0489125356,15.0489550949,15.0489976529,15.0490402097,15.0490827652,15.0491253194, +15.0491678724,15.0492104241,15.0492529746,15.0492955238,15.0493380718,15.0493806185,15.0494231639,15.0494657081,15.0495082511,15.0495507927,15.0495933332,15.0496358724,15.0496784103,15.049720947,15.0497634824,15.0498060165, +15.0498485495,15.0498910811,15.0499336115,15.0499761407,15.0500186686,15.0500611952,15.0501037206,15.0501462447,15.0501887676,15.0502312892,15.0502738096,15.0503163287,15.0503588466,15.0504013632,15.0504438786,15.0504863927, +15.0505289055,15.0505714171,15.0506139275,15.0506564366,15.0506989444,15.050741451,15.0507839564,15.0508264605,15.0508689633,15.0509114649,15.0509539652,15.0509964643,15.0510389621,15.0510814587,15.051123954,15.0511664481, +15.0512089409,15.0512514325,15.0512939228,15.0513364119,15.0513788997,15.0514213863,15.0514638716,15.0515063556,15.0515488384,15.05159132,15.0516338003,15.0516762794,15.0517187572,15.0517612337,15.051803709,15.0518461831, +15.0518886559,15.0519311275,15.0519735978,15.0520160668,15.0520585346,15.0521010012,15.0521434665,15.0521859305,15.0522283933,15.0522708549,15.0523133152,15.0523557743,15.0523982321,15.0524406886,15.0524831439,15.052525598, +15.0525680508,15.0526105024,15.0526529527,15.0526954017,15.0527378495,15.0527802961,15.0528227414,15.0528651855,15.0529076283,15.0529500699,15.0529925102,15.0530349493,15.0530773871,15.0531198237,15.053162259,15.0532046931, +15.0532471259,15.0532895575,15.0533319878,15.0533744169,15.0534168448,15.0534592713,15.0535016967,15.0535441208,15.0535865436,15.0536289652,15.0536713856,15.0537138047,15.0537562226,15.0537986392,15.0538410545,15.0538834687, +15.0539258815,15.0539682932,15.0540107035,15.0540531127,15.0540955206,15.0541379272,15.0541803326,15.0542227367,15.0542651396,15.0543075413,15.0543499417,15.0543923408,15.0544347388,15.0544771354,15.0545195309,15.054561925, +15.054604318,15.0546467096,15.0546891001,15.0547314893,15.0547738772,15.0548162639,15.0548586494,15.0549010336,15.0549434166,15.0549857983,15.0550281788,15.055070558,15.055112936,15.0551553127,15.0551976882,15.0552400625, +15.0552824355,15.0553248073,15.0553671778,15.0554095471,15.0554519151,15.0554942819,15.0555366474,15.0555790117,15.0556213748,15.0556637366,15.0557060972,15.0557484565,15.0557908146,15.0558331714,15.055875527,15.0559178813, +15.0559602345,15.0560025863,15.0560449369,15.0560872863,15.0561296344,15.0561719813,15.056214327,15.0562566714,15.0562990146,15.0563413565,15.0563836971,15.0564260366,15.0564683748,15.0565107117,15.0565530474,15.0565953819, +15.0566377151,15.0566800471,15.0567223778,15.0567647073,15.0568070356,15.0568493626,15.0568916884,15.0569340129,15.0569763362,15.0570186582,15.057060979,15.0571032986,15.0571456169,15.057187934,15.0572302498,15.0572725644, +15.0573148778,15.0573571899,15.0573995008,15.0574418104,15.0574841188,15.057526426,15.0575687319,15.0576110365,15.05765334,15.0576956422,15.0577379431,15.0577802428,15.0578225413,15.0578648385,15.0579071345,15.0579494292, +15.0579917228,15.058034015,15.0580763061,15.0581185958,15.0581608844,15.0582031717,15.0582454578,15.0582877426,15.0583300262,15.0583723086,15.0584145897,15.0584568695,15.0584991482,15.0585414256,15.0585837017,15.0586259767, +15.0586682503,15.0587105228,15.058752794,15.058795064,15.0588373327,15.0588796002,15.0589218664,15.0589641314,15.0590063952,15.0590486577,15.059090919,15.0591331791,15.0591754379,15.0592176955,15.0592599518,15.059302207, +15.0593444608,15.0593867135,15.0594289649,15.059471215,15.0595134639,15.0595557116,15.0595979581,15.0596402033,15.0596824472,15.05972469,15.0597669315,15.0598091717,15.0598514108,15.0598936486,15.0599358851,15.0599781204, +15.0600203545,15.0600625874,15.060104819,15.0601470493,15.0601892785,15.0602315064,15.060273733,15.0603159585,15.0603581826,15.0604004056,15.0604426273,15.0604848478,15.060527067,15.0605692851,15.0606115018,15.0606537174, +15.0606959317,15.0607381448,15.0607803566,15.0608225672,15.0608647766,15.0609069847,15.0609491916,15.0609913973,15.0610336017,15.0610758049,15.0611180068,15.0611602076,15.061202407,15.0612446053,15.0612868023,15.0613289981, +15.0613711927,15.061413386,15.0614555781,15.0614977689,15.0615399585,15.0615821469,15.0616243341,15.06166652,15.0617087047,15.0617508881,15.0617930703,15.0618352513,15.0618774311,15.0619196096,15.0619617869,15.0620039629, +15.0620461377,15.0620883113,15.0621304837,15.0621726548,15.0622148247,15.0622569933,15.0622991607,15.0623413269,15.0623834919,15.0624256556,15.0624678181,15.0625099793,15.0625521394,15.0625942982,15.0626364557,15.0626786121, +15.0627207672,15.062762921,15.0628050737,15.0628472251,15.0628893752,15.0629315242,15.0629736719,15.0630158184,15.0630579636,15.0631001076,15.0631422504,15.063184392,15.0632265323,15.0632686714,15.0633108093,15.0633529459, +15.0633950813,15.0634372155,15.0634793484,15.0635214801,15.0635636106,15.0636057398,15.0636478679,15.0636899946,15.0637321202,15.0637742445,15.0638163676,15.0638584895,15.0639006101,15.0639427295,15.0639848477,15.0640269647, +15.0640690804,15.0641111949,15.0641533081,15.0641954202,15.064237531,15.0642796405,15.0643217489,15.064363856,15.0644059619,15.0644480665,15.06449017,15.0645322722,15.0645743731,15.0646164729,15.0646585714,15.0647006687, +15.0647427648,15.0647848596,15.0648269532,15.0648690456,15.0649111367,15.0649532266,15.0649953153,15.0650374028,15.065079489,15.065121574,15.0651636578,15.0652057403,15.0652478217,15.0652899018,15.0653319806,15.0653740583, +15.0654161347,15.0654582099,15.0655002838,15.0655423566,15.0655844281,15.0656264983,15.0656685674,15.0657106352,15.0657527018,15.0657947672,15.0658368313,15.0658788943,15.0659209559,15.0659630164,15.0660050757,15.0660471337, +15.0660891905,15.066131246,15.0661733004,15.0662153535,15.0662574054,15.066299456,15.0663415054,15.0663835537,15.0664256006,15.0664676464,15.0665096909,15.0665517342,15.0665937763,15.0666358172,15.0666778568,15.0667198952, +15.0667619324,15.0668039683,15.0668460031,15.0668880366,15.0669300689,15.0669720999,15.0670141298,15.0670561584,15.0670981857,15.0671402119,15.0671822368,15.0672242606,15.067266283,15.0673083043,15.0673503243,15.0673923432, +15.0674343608,15.0674763771,15.0675183923,15.0675604062,15.0676024189,15.0676444304,15.0676864406,15.0677284496,15.0677704574,15.067812464,15.0678544694,15.0678964735,15.0679384764,15.0679804781,15.0680224786,15.0680644778, +15.0681064759,15.0681484727,15.0681904682,15.0682324626,15.0682744557,15.0683164476,15.0683584383,15.0684004278,15.068442416,15.068484403,15.0685263888,15.0685683734,15.0686103568,15.0686523389,15.0686943198,15.0687362995, +15.068778278,15.0688202552,15.0688622313,15.0689042061,15.0689461796,15.068988152,15.0690301232,15.0690720931,15.0691140618,15.0691560293,15.0691979955,15.0692399605,15.0692819244,15.069323887,15.0693658483,15.0694078085, +15.0694497674,15.0694917251,15.0695336816,15.0695756369,15.069617591,15.0696595438,15.0697014954,15.0697434458,15.069785395,15.0698273429,15.0698692897,15.0699112352,15.0699531795,15.0699951226,15.0700370644,15.0700790051, +15.0701209445,15.0701628827,15.0702048197,15.0702467554,15.07028869,15.0703306233,15.0703725554,15.0704144863,15.0704564159,15.0704983444,15.0705402716,15.0705821976,15.0706241224,15.070666046,15.0707079684,15.0707498895, +15.0707918094,15.0708337281,15.0708756456,15.0709175619,15.0709594769,15.0710013908,15.0710433034,15.0710852148,15.0711271249,15.0711690339,15.0712109417,15.0712528482,15.0712947535,15.0713366576,15.0713785605,15.0714204621, +15.0714623626,15.0715042618,15.0715461598,15.0715880566,15.0716299522,15.0716718465,15.0717137397,15.0717556316,15.0717975223,15.0718394118,15.0718813001,15.0719231871,15.071965073,15.0720069576,15.072048841,15.0720907232, +15.0721326042,15.0721744839,15.0722163625,15.0722582398,15.0723001159,15.0723419908,15.0723838645,15.072425737,15.0724676082,15.0725094783,15.0725513471,15.0725932147,15.0726350811,15.0726769463,15.0727188103,15.072760673, +15.0728025345,15.0728443949,15.072886254,15.0729281119,15.0729699685,15.073011824,15.0730536783,15.0730955313,15.0731373831,15.0731792337,15.0732210831,15.0732629313,15.0733047783,15.073346624,15.0733884685,15.0734303119, +15.073472154,15.0735139949,15.0735558346,15.073597673,15.0736395103,15.0736813463,15.0737231812,15.0737650148,15.0738068472,15.0738486784,15.0738905083,15.0739323371,15.0739741647,15.074015991,15.0740578161,15.07409964, +15.0741414628,15.0741832842,15.0742251045,15.0742669236,15.0743087414,15.0743505581,15.0743923735,15.0744341877,15.0744760007,15.0745178125,15.0745596231,15.0746014325,15.0746432406,15.0746850476,15.0747268533,15.0747686578, +15.0748104612,15.0748522633,15.0748940642,15.0749358638,15.0749776623,15.0750194596,15.0750612556,15.0751030504,15.0751448441,15.0751866365,15.0752284277,15.0752702177,15.0753120065,15.075353794,15.0753955804,15.0754373655, +15.0754791495,15.0755209322,15.0755627137,15.0756044941,15.0756462732,15.075688051,15.0757298277,15.0757716032,15.0758133775,15.0758551505,15.0758969224,15.075938693,15.0759804624,15.0760222306,15.0760639976,15.0761057634, +15.076147528,15.0761892914,15.0762310536,15.0762728145,15.0763145743,15.0763563328,15.0763980902,15.0764398463,15.0764816012,15.0765233549,15.0765651074,15.0766068587,15.0766486088,15.0766903577,15.0767321053,15.0767738518, +15.0768155971,15.0768573411,15.0768990839,15.0769408256,15.076982566,15.0770243052,15.0770660432,15.07710778,15.0771495156,15.07719125,15.0772329831,15.0772747151,15.0773164459,15.0773581754,15.0773999038,15.0774416309, +15.0774833569,15.0775250816,15.0775668051,15.0776085274,15.0776502485,15.0776919684,15.0777336871,15.0777754046,15.0778171209,15.077858836,15.0779005498,15.0779422625,15.077983974,15.0780256842,15.0780673933,15.0781091011, +15.0781508077,15.0781925132,15.0782342174,15.0782759204,15.0783176222,15.0783593228,15.0784010222,15.0784427204,15.0784844174,15.0785261132,15.0785678078,15.0786095012,15.0786511933,15.0786928843,15.0787345741,15.0787762626, +15.07881795,15.0788596361,15.0789013211,15.0789430048,15.0789846873,15.0790263687,15.0790680488,15.0791097277,15.0791514054,15.0791930819,15.0792347572,15.0792764314,15.0793181043,15.079359776,15.0794014464,15.0794431157, +15.0794847838,15.0795264507,15.0795681164,15.0796097809,15.0796514441,15.0796931062,15.0797347671,15.0797764267,15.0798180852,15.0798597425,15.0799013985,15.0799430534,15.079984707,15.0800263595,15.0800680107,15.0801096608, +15.0801513096,15.0801929573,15.0802346037,15.0802762489,15.080317893,15.0803595358,15.0804011774,15.0804428178,15.0804844571,15.0805260951,15.0805677319,15.0806093675,15.0806510019,15.0806926352,15.0807342672,15.080775898, +15.0808175276,15.080859156,15.0809007832,15.0809424092,15.080984034,15.0810256577,15.0810672801,15.0811089013,15.0811505213,15.0811921401,15.0812337577,15.0812753741,15.0813169893,15.0813586033,15.0814002161,15.0814418277, +15.0814834381,15.0815250473,15.0815666553,15.0816082621,15.0816498677,15.0816914721,15.0817330753,15.0817746773,15.0818162781,15.0818578777,15.0818994761,15.0819410733,15.0819826693,15.0820242641,15.0820658577,15.0821074501, +15.0821490414,15.0821906314,15.0822322202,15.0822738078,15.0823153942,15.0823569794,15.0823985634,15.0824401462,15.0824817279,15.0825233083,15.0825648875,15.0826064655,15.0826480424,15.082689618,15.0827311924,15.0827727656, +15.0828143377,15.0828559085,15.0828974781,15.0829390466,15.0829806138,15.0830221799,15.0830637447,15.0831053084,15.0831468708,15.0831884321,15.0832299921,15.083271551,15.0833131087,15.0833546651,15.0833962204,15.0834377745, +15.0834793273,15.083520879,15.0835624295,15.0836039788,15.0836455269,15.0836870738,15.0837286195,15.083770164,15.0838117073,15.0838532494,15.0838947903,15.08393633,15.0839778685,15.0840194058,15.084060942,15.0841024769, +15.0841440106,15.0841855432,15.0842270745,15.0842686046,15.0843101336,15.0843516614,15.0843931879,15.0844347133,15.0844762375,15.0845177604,15.0845592822,15.0846008028,15.0846423222,15.0846838404,15.0847253574,15.0847668732, +15.0848083878,15.0848499012,15.0848914134,15.0849329245,15.0849744343,15.0850159429,15.0850574504,15.0850989566,15.0851404617,15.0851819656,15.0852234682,15.0852649697,15.08530647,15.0853479691,15.085389467,15.0854309637, +15.0854724592,15.0855139535,15.0855554466,15.0855969385,15.0856384293,15.0856799188,15.0857214072,15.0857628943,15.0858043803,15.085845865,15.0858873486,15.085928831,15.0859703122,15.0860117922,15.086053271,15.0860947486, +15.086136225,15.0861777003,15.0862191743,15.0862606471,15.0863021188,15.0863435892,15.0863850585,15.0864265266,15.0864679935,15.0865094592,15.0865509237,15.086592387,15.0866338491,15.08667531,15.0867167697,15.0867582283, +15.0867996856,15.0868411418,15.0868825967,15.0869240505,15.0869655031,15.0870069545,15.0870484047,15.0870898537,15.0871313015,15.0871727482,15.0872141936,15.0872556379,15.0872970809,15.0873385228,15.0873799635,15.087421403, +15.0874628413,15.0875042784,15.0875457143,15.087587149,15.0876285825,15.0876700149,15.087711446,15.087752876,15.0877943048,15.0878357324,15.0878771588,15.087918584,15.087960008,15.0880014308,15.0880428525,15.0880842729, +15.0881256922,15.0881671103,15.0882085271,15.0882499428,15.0882913573,15.0883327707,15.0883741828,15.0884155937,15.0884570035,15.088498412,15.0885398194,15.0885812256,15.0886226306,15.0886640344,15.088705437,15.0887468385, +15.0887882387,15.0888296378,15.0888710356,15.0889124323,15.0889538278,15.0889952221,15.0890366152,15.0890780072,15.0891193979,15.0891607875,15.0892021758,15.089243563,15.089284949,15.0893263338,15.0893677174,15.0894090999, +15.0894504811,15.0894918612,15.08953324,15.0895746177,15.0896159942,15.0896573695,15.0896987437,15.0897401166,15.0897814884,15.0898228589,15.0898642283,15.0899055965,15.0899469635,15.0899883293,15.090029694,15.0900710574, +15.0901124197,15.0901537807,15.0901951406,15.0902364993,15.0902778569,15.0903192132,15.0903605683,15.0904019223,15.0904432751,15.0904846267,15.0905259771,15.0905673263,15.0906086743,15.0906500212,15.0906913669,15.0907327113, +15.0907740546,15.0908153968,15.0908567377,15.0908980774,15.090939416,15.0909807534,15.0910220895,15.0910634246,15.0911047584,15.091146091,15.0911874225,15.0912287527,15.0912700818,15.0913114097,15.0913527364,15.091394062, +15.0914353863,15.0914767095,15.0915180315,15.0915593523,15.0916006719,15.0916419903,15.0916833076,15.0917246236,15.0917659385,15.0918072522,15.0918485647,15.0918898761,15.0919311862,15.0919724952,15.092013803,15.0920551096, +15.092096415,15.0921377192,15.0921790223,15.0922203242,15.0922616248,15.0923029244,15.0923442227,15.0923855198,15.0924268158,15.0924681106,15.0925094042,15.0925506966,15.0925919878,15.0926332779,15.0926745667,15.0927158544, +15.0927571409,15.0927984262,15.0928397104,15.0928809934,15.0929222751,15.0929635557,15.0930048352,15.0930461134,15.0930873904,15.0931286663,15.093169941,15.0932112145,15.0932524869,15.093293758,15.093335028,15.0933762968, +15.0934175644,15.0934588308,15.0935000961,15.0935413601,15.093582623,15.0936238847,15.0936651453,15.0937064046,15.0937476628,15.0937889198,15.0938301756,15.0938714302,15.0939126837,15.0939539359,15.093995187,15.0940364369, +15.0940776857,15.0941189332,15.0941601796,15.0942014248,15.0942426688,15.0942839116,15.0943251533,15.0943663938,15.0944076331,15.0944488712,15.0944901081,15.0945313439,15.0945725785,15.0946138119,15.0946550441,15.0946962752, +15.094737505,15.0947787337,15.0948199613,15.0948611876,15.0949024128,15.0949436367,15.0949848595,15.0950260812,15.0950673016,15.0951085209,15.095149739,15.0951909559,15.0952321716,15.0952733862,15.0953145996,15.0953558118, +15.0953970228,15.0954382326,15.0954794413,15.0955206488,15.0955618551,15.0956030603,15.0956442642,15.095685467,15.0957266686,15.0957678691,15.0958090683,15.0958502664,15.0958914633,15.0959326591,15.0959738536,15.096015047, +15.0960562392,15.0960974302,15.0961386201,15.0961798087,15.0962209962,15.0962621825,15.0963033677,15.0963445517,15.0963857345,15.0964269161,15.0964680965,15.0965092758,15.0965504539,15.0965916308,15.0966328065,15.0966739811, +15.0967151545,15.0967563267,15.0967974977,15.0968386676,15.0968798363,15.0969210038,15.0969621702,15.0970033353,15.0970444993,15.0970856621,15.0971268238,15.0971679843,15.0972091436,15.0972503017,15.0972914586,15.0973326144, +15.097373769,15.0974149224,15.0974560747,15.0974972257,15.0975383756,15.0975795244,15.0976206719,15.0976618183,15.0977029635,15.0977441076,15.0977852504,15.0978263921,15.0978675326,15.097908672,15.0979498101,15.0979909471, +15.098032083,15.0980732176,15.0981143511,15.0981554834,15.0981966145,15.0982377445,15.0982788733,15.0983200009,15.0983611273,15.0984022526,15.0984433767,15.0984844996,15.0985256214,15.098566742,15.0986078614,15.0986489796, +15.0986900967,15.0987312126,15.0987723273,15.0988134408,15.0988545532,15.0988956644,15.0989367745,15.0989778833,15.099018991,15.0990600975,15.0991012029,15.0991423071,15.0991834101,15.0992245119,15.0992656126,15.0993067121, +15.0993478104,15.0993889076,15.0994300035,15.0994710984,15.099512192,15.0995532845,15.0995943758,15.0996354659,15.0996765549,15.0997176427,15.0997587293,15.0997998147,15.099840899,15.0998819821,15.0999230641,15.0999641448, +15.1000052244,15.1000463029,15.1000873801,15.1001284562,15.1001695311,15.1002106049,15.1002516775,15.1002927489,15.1003338191,15.1003748882,15.1004159561,15.1004570228,15.1004980884,15.1005391528,15.100580216,15.1006212781, +15.100662339,15.1007033987,15.1007444573,15.1007855147,15.1008265709,15.1008676259,15.1009086798,15.1009497325,15.1009907841,15.1010318345,15.1010728837,15.1011139317,15.1011549786,15.1011960243,15.1012370688,15.1012781122, +15.1013191544,15.1013601955,15.1014012353,15.101442274,15.1014833116,15.1015243479,15.1015653831,15.1016064172,15.10164745,15.1016884817,15.1017295123,15.1017705416,15.1018115698,15.1018525969,15.1018936227,15.1019346474, +15.1019756709,15.1020166933,15.1020577145,15.1020987345,15.1021397534,15.1021807711,15.1022217876,15.102262803,15.1023038172,15.1023448302,15.1023858421,15.1024268528,15.1024678624,15.1025088707,15.1025498779,15.102590884, +15.1026318889,15.1026728926,15.1027138951,15.1027548965,15.1027958967,15.1028368958,15.1028778936,15.1029188904,15.1029598859,15.1030008803,15.1030418735,15.1030828656,15.1031238565,15.1031648462,15.1032058348,15.1032468222, +15.1032878084,15.1033287935,15.1033697774,15.1034107601,15.1034517417,15.1034927221,15.1035337014,15.1035746795,15.1036156564,15.1036566322,15.1036976068,15.1037385802,15.1037795525,15.1038205236,15.1038614935,15.1039024623, +15.1039434299,15.1039843963,15.1040253616,15.1040663258,15.1041072887,15.1041482505,15.1041892112,15.1042301706,15.1042711289,15.1043120861,15.1043530421,15.1043939969,15.1044349506,15.104475903,15.1045168544,15.1045578046, +15.1045987536,15.1046397014,15.1046806481,15.1047215936,15.104762538,15.1048034812,15.1048444232,15.1048853641,15.1049263038,15.1049672424,15.1050081798,15.105049116,15.105090051,15.105130985,15.1051719177,15.1052128493, +15.1052537797,15.105294709,15.1053356371,15.105376564,15.1054174898,15.1054584144,15.1054993378,15.1055402601,15.1055811813,15.1056221013,15.1056630201,15.1057039377,15.1057448542,15.1057857695,15.1058266837,15.1058675967, +15.1059085086,15.1059494193,15.1059903288,15.1060312372,15.1060721444,15.1061130504,15.1061539553,15.106194859,15.1062357616,15.106276663,15.1063175633,15.1063584624,15.1063993603,15.1064402571,15.1064811527,15.1065220471, +15.1065629404,15.1066038326,15.1066447236,15.1066856134,15.106726502,15.1067673895,15.1068082759,15.1068491611,15.1068900451,15.106930928,15.1069718097,15.1070126902,15.1070535696,15.1070944478,15.1071353249,15.1071762008, +15.1072170756,15.1072579492,15.1072988216,15.1073396929,15.107380563,15.107421432,15.1074622998,15.1075031665,15.107544032,15.1075848963,15.1076257595,15.1076666215,15.1077074824,15.1077483421,15.1077892006,15.107830058, +15.1078709143,15.1079117694,15.1079526233,15.1079934761,15.1080343277,15.1080751781,15.1081160274,15.1081568756,15.1081977225,15.1082385684,15.108279413,15.1083202565,15.1083610989,15.1084019401,15.1084427802,15.108483619, +15.1085244568,15.1085652934,15.1086061288,15.108646963,15.1086877962,15.1087286281,15.1087694589,15.1088102886,15.108851117,15.1088919444,15.1089327706,15.1089735956,15.1090144194,15.1090552422,15.1090960637,15.1091368841, +15.1091777034,15.1092185214,15.1092593384,15.1093001542,15.1093409688,15.1093817823,15.1094225946,15.1094634057,15.1095042158,15.1095450246,15.1095858323,15.1096266389,15.1096674443,15.1097082485,15.1097490516,15.1097898535, +15.1098306543,15.1098714539,15.1099122524,15.1099530497,15.1099938458,15.1100346409,15.1100754347,15.1101162274,15.110157019,15.1101978093,15.1102385986,15.1102793867,15.1103201736,15.1103609594,15.110401744,15.1104425275, +15.1104833098,15.110524091,15.110564871,15.1106056499,15.1106464276,15.1106872041,15.1107279795,15.1107687538,15.1108095269,15.1108502988,15.1108910696,15.1109318393,15.1109726078,15.1110133751,15.1110541413,15.1110949063, +15.1111356702,15.111176433,15.1112171945,15.111257955,15.1112987143,15.1113394724,15.1113802294,15.1114209852,15.1114617399,15.1115024934,15.1115432457,15.111583997,15.111624747,15.111665496,15.1117062437,15.1117469903, +15.1117877358,15.1118284801,15.1118692233,15.1119099653,15.1119507062,15.1119914459,15.1120321844,15.1120729218,15.1121136581,15.1121543932,15.1121951272,15.11223586,15.1122765916,15.1123173221,15.1123580515,15.1123987797, +15.1124395068,15.1124802327,15.1125209575,15.1125616811,15.1126024035,15.1126431248,15.112683845,15.112724564,15.1127652819,15.1128059986,15.1128467142,15.1128874286,15.1129281419,15.112968854,15.1130095649,15.1130502748, +15.1130909834,15.113131691,15.1131723973,15.1132131026,15.1132538067,15.1132945096,15.1133352114,15.113375912,15.1134166115,15.1134573098,15.113498007,15.1135387031,15.113579398,15.1136200917,15.1136607843,15.1137014757, +15.113742166,15.1137828552,15.1138235432,15.1138642301,15.1139049158,15.1139456004,15.1139862838,15.114026966,15.1140676472,15.1141083271,15.114149006,15.1141896837,15.1142303602,15.1142710356,15.1143117098,15.1143523829, +15.1143930549,15.1144337257,15.1144743953,15.1145150638,15.1145557312,15.1145963974,15.1146370625,15.1146777264,15.1147183892,15.1147590508,15.1147997113,15.1148403706,15.1148810288,15.1149216859,15.1149623418,15.1150029966, +15.1150436502,15.1150843026,15.1151249539,15.1151656041,15.1152062532,15.115246901,15.1152875478,15.1153281934,15.1153688378,15.1154094811,15.1154501233,15.1154907643,15.1155314042,15.1155720429,15.1156126805,15.1156533169, +15.1156939522,15.1157345863,15.1157752193,15.1158158512,15.1158564819,15.1158971115,15.1159377399,15.1159783672,15.1160189933,15.1160596183,15.1161002422,15.1161408649,15.1161814864,15.1162221068,15.1162627261,15.1163033443, +15.1163439612,15.1163845771,15.1164251918,15.1164658053,15.1165064177,15.116547029,15.1165876391,15.1166282481,15.116668856,15.1167094627,15.1167500682,15.1167906726,15.1168312759,15.116871878,15.116912479,15.1169530788, +15.1169936775,15.1170342751,15.1170748715,15.1171154668,15.1171560609,15.1171966539,15.1172372457,15.1172778364,15.117318426,15.1173590144,15.1173996017,15.1174401878,15.1174807728,15.1175213567,15.1175619394,15.117602521, +15.1176431014,15.1176836807,15.1177242588,15.1177648358,15.1178054117,15.1178459864,15.11788656,15.1179271324,15.1179677037,15.1180082739,15.1180488429,15.1180894108,15.1181299775,15.1181705431,15.1182111075,15.1182516709, +15.118292233,15.1183327941,15.1183733539,15.1184139127,15.1184544703,15.1184950268,15.1185355821,15.1185761363,15.1186166894,15.1186572413,15.118697792,15.1187383417,15.1187788902,15.1188194375,15.1188599837,15.1189005288, +15.1189410727,15.1189816155,15.1190221572,15.1190626977,15.1191032371,15.1191437753,15.1191843124,15.1192248484,15.1192653832,15.1193059169,15.1193464494,15.1193869808,15.1194275111,15.1194680402,15.1195085682,15.119549095, +15.1195896207,15.1196301453,15.1196706687,15.119711191,15.1197517122,15.1197922322,15.1198327511,15.1198732688,15.1199137855,15.1199543009,15.1199948153,15.1200353284,15.1200758405,15.1201163514,15.1201568612,15.1201973698, +15.1202378773,15.1202783837,15.1203188889,15.120359393,15.120399896,15.1204403978,15.1204808985,15.120521398,15.1205618964,15.1206023937,15.1206428898,15.1206833848,15.1207238787,15.1207643714,15.120804863,15.1208453535, +15.1208858428,15.120926331,15.120966818,15.1210073039,15.1210477887,15.1210882723,15.1211287548,15.1211692362,15.1212097164,15.1212501955,15.1212906735,15.1213311503,15.121371626,15.1214121005,15.1214525739,15.1214930462, +15.1215335173,15.1215739873,15.1216144562,15.121654924,15.1216953906,15.121735856,15.1217763204,15.1218167836,15.1218572456,15.1218977065,15.1219381663,15.121978625,15.1220190825,15.1220595389,15.1220999942,15.1221404483, +15.1221809013,15.1222213531,15.1222618038,15.1223022534,15.1223427019,15.1223831492,15.1224235954,15.1224640404,15.1225044843,15.1225449271,15.1225853687,15.1226258093,15.1226662486,15.1227066869,15.122747124,15.12278756, +15.1228279948,15.1228684285,15.1229088611,15.1229492925,15.1229897229,15.123030152,15.1230705801,15.123111007,15.1231514328,15.1231918574,15.1232322809,15.1232727033,15.1233131246,15.1233535447,15.1233939637,15.1234343815, +15.1234747982,15.1235152138,15.1235556283,15.1235960416,15.1236364538,15.1236768649,15.1237172748,15.1237576836,15.1237980913,15.1238384978,15.1238789032,15.1239193075,15.1239597106,15.1240001126,15.1240405135,15.1240809132, +15.1241213118,15.1241617093,15.1242021057,15.1242425009,15.124282895,15.1243232879,15.1243636797,15.1244040704,15.12444446,15.1244848484,15.1245252357,15.1245656219,15.124606007,15.1246463909,15.1246867737,15.1247271553, +15.1247675358,15.1248079152,15.1248482935,15.1248886706,15.1249290466,15.1249694215,15.1250097952,15.1250501678,15.1250905393,15.1251309097,15.1251712789,15.125211647,15.1252520139,15.1252923798,15.1253327445,15.125373108, +15.1254134705,15.1254538318,15.125494192,15.125534551,15.125574909,15.1256152658,15.1256556214,15.125695976,15.1257363294,15.1257766817,15.1258170328,15.1258573829,15.1258977318,15.1259380795,15.1259784262,15.1260187717, +15.1260591161,15.1260994593,15.1261398015,15.1261801425,15.1262204823,15.1262608211,15.1263011587,15.1263414952,15.1263818305,15.1264221648,15.1264624979,15.1265028299,15.1265431607,15.1265834904,15.126623819,15.1266641465, +15.1267044728,15.1267447981,15.1267851221,15.1268254451,15.1268657669,15.1269060876,15.1269464072,15.1269867257,15.127027043,15.1270673592,15.1271076743,15.1271479882,15.127188301,15.1272286127,15.1272689233,15.1273092327, +15.1273495411,15.1273898482,15.1274301543,15.1274704592,15.1275107631,15.1275510657,15.1275913673,15.1276316677,15.127671967,15.1277122652,15.1277525623,15.1277928582,15.127833153,15.1278734467,15.1279137392,15.1279540307, +15.127994321,15.1280346102,15.1280748982,15.1281151851,15.1281554709,15.1281957556,15.1282360392,15.1282763216,15.1283166029,15.1283568831,15.1283971621,15.1284374401,15.1284777169,15.1285179926,15.1285582671,15.1285985405, +15.1286388129,15.128679084,15.1287193541,15.128759623,15.1287998908,15.1288401575,15.1288804231,15.1289206875,15.1289609509,15.129001213,15.1290414741,15.1290817341,15.1291219929,15.1291622506,15.1292025072,15.1292427626, +15.1292830169,15.1293232702,15.1293635222,15.1294037732,15.129444023,15.1294842717,15.1295245193,15.1295647658,15.1296050112,15.1296452554,15.1296854985,15.1297257405,15.1297659813,15.129806221,15.1298464597,15.1298866971, +15.1299269335,15.1299671688,15.1300074029,15.1300476359,15.1300878678,15.1301280985,15.1301683281,15.1302085567,15.1302487841,15.1302890103,15.1303292355,15.1303694595,15.1304096824,15.1304499042,15.1304901248,15.1305303444, +15.1305705628,15.1306107801,15.1306509963,15.1306912113,15.1307314253,15.1307716381,15.1308118498,15.1308520604,15.1308922698,15.1309324781,15.1309726853,15.1310128914,15.1310530964,15.1310933003,15.131133503,15.1311737046, +15.1312139051,15.1312541045,15.1312943027,15.1313344998,15.1313746958,15.1314148907,15.1314550845,15.1314952771,15.1315354687,15.1315756591,15.1316158484,15.1316560365,15.1316962236,15.1317364095,15.1317765943,15.131816778, +15.1318569606,15.1318971421,15.1319373224,15.1319775016,15.1320176797,15.1320578567,15.1320980326,15.1321382073,15.1321783809,15.1322185534,15.1322587248,15.1322988951,15.1323390642,15.1323792322,15.1324193992,15.132459565, +15.1324997296,15.1325398932,15.1325800556,15.1326202169,15.1326603771,15.1327005362,15.1327406942,15.132780851,15.1328210068,15.1328611614,15.1329013149,15.1329414673,15.1329816185,15.1330217687,15.1330619177,15.1331020656, +15.1331422124,15.1331823581,15.1332225026,15.1332626461,15.1333027884,15.1333429296,15.1333830697,15.1334232087,15.1334633465,15.1335034833,15.1335436189,15.1335837534,15.1336238868,15.1336640191,15.1337041502,15.1337442803, +15.1337844092,15.133824537,15.1338646637,15.1339047893,15.1339449137,15.1339850371,15.1340251593,15.1340652804,15.1341054004,15.1341455193,15.134185637,15.1342257537,15.1342658692,15.1343059837,15.134346097,15.1343862091, +15.1344263202,15.1344664302,15.134506539,15.1345466468,15.1345867534,15.1346268589,15.1346669632,15.1347070665,15.1347471687,15.1347872697,15.1348273696,15.1348674684,15.1349075661,15.1349476627,15.1349877582,15.1350278525, +15.1350679458,15.1351080379,15.1351481289,15.1351882188,15.1352283076,15.1352683953,15.1353084818,15.1353485673,15.1353886516,15.1354287348,15.1354688169,15.1355088979,15.1355489777,15.1355890565,15.1356291342,15.1356692107, +15.1357092861,15.1357493604,15.1357894336,15.1358295057,15.1358695766,15.1359096465,15.1359497152,15.1359897829,15.1360298494,15.1360699148,15.1361099791,15.1361500423,15.1361901043,15.1362301653,15.1362702251,15.1363102838, +15.1363503415,15.136390398,15.1364304533,15.1364705076,15.1365105608,15.1365506128,15.1365906638,15.1366307136,15.1366707623,15.1367108099,15.1367508564,15.1367909018,15.1368309461,15.1368709893,15.1369110313,15.1369510723, +15.1369911121,15.1370311508,15.1370711884,15.1371112249,15.1371512603,15.1371912946,15.1372313277,15.1372713598,15.1373113907,15.1373514205,15.1373914492,15.1374314769,15.1374715034,15.1375115287,15.137551553,15.1375915762, +15.1376315982,15.1376716192,15.137711639,15.1377516577,15.1377916754,15.1378316919,15.1378717073,15.1379117215,15.1379517347,15.1379917468,15.1380317577,15.1380717676,15.1381117763,15.1381517839,15.1381917905,15.1382317959, +15.1382718002,15.1383118034,15.1383518054,15.1383918064,15.1384318063,15.138471805,15.1385118027,15.1385517992,15.1385917946,15.138631789,15.1386717822,15.1387117743,15.1387517653,15.1387917551,15.1388317439,15.1388717316, +15.1389117181,15.1389517036,15.1389916879,15.1390316712,15.1390716533,15.1391116343,15.1391516142,15.139191593,15.1392315707,15.1392715473,15.1393115228,15.1393514972,15.1393914704,15.1394314426,15.1394714136,15.1395113836, +15.1395513524,15.1395913201,15.1396312867,15.1396712523,15.1397112167,15.13975118,15.1397911422,15.1398311032,15.1398710632,15.1399110221,15.1399509798,15.1399909365,15.1400308921,15.1400708465,15.1401107998,15.1401507521, +15.1401907032,15.1402306532,15.1402706021,15.1403105499,15.1403504966,15.1403904422,15.1404303867,15.1404703301,15.1405102724,15.1405502135,15.1405901536,15.1406300926,15.1406700304,15.1407099672,15.1407499028,15.1407898373, +15.1408297708,15.1408697031,15.1409096343,15.1409495644,15.1409894934,15.1410294214,15.1410693482,15.1411092738,15.1411491984,15.1411891219,15.1412290443,15.1412689656,15.1413088858,15.1413488048,15.1413887228,15.1414286396, +15.1414685554,15.14150847,15.1415483836,15.141588296,15.1416282074,15.1416681176,15.1417080267,15.1417479348,15.1417878417,15.1418277475,15.1418676522,15.1419075558,15.1419474583,15.1419873597,15.14202726,15.1420671592, +15.1421070573,15.1421469543,15.1421868502,15.142226745,15.1422666386,15.1423065312,15.1423464227,15.1423863131,15.1424262023,15.1424660905,15.1425059775,15.1425458635,15.1425857484,15.1426256321,15.1426655148,15.1427053963, +15.1427452768,15.1427851561,15.1428250343,15.1428649115,15.1429047875,15.1429446624,15.1429845363,15.143024409,15.1430642806,15.1431041512,15.1431440206,15.1431838889,15.1432237561,15.1432636222,15.1433034873,15.1433433512, +15.143383214,15.1434230757,15.1434629363,15.1435027958,15.1435426542,15.1435825115,15.1436223677,15.1436622229,15.1437020769,15.1437419298,15.1437817816,15.1438216323,15.1438614819,15.1439013304,15.1439411778,15.1439810241, +15.1440208693,15.1440607134,15.1441005564,15.1441403983,15.1441802391,15.1442200788,15.1442599174,15.1442997549,15.1443395912,15.1443794265,15.1444192607,15.1444590938,15.1444989258,15.1445387567,15.1445785865,15.1446184152, +15.1446582428,15.1446980693,15.1447378947,15.144777719,15.1448175422,15.1448573643,15.1448971853,15.1449370052,15.1449768241,15.1450166418,15.1450564584,15.1450962739,15.1451360883,15.1451759016,15.1452157138,15.1452555249, +15.1452953349,15.1453351439,15.1453749517,15.1454147584,15.145454564,15.1454943685,15.145534172,15.1455739743,15.1456137755,15.1456535756,15.1456933747,15.1457331726,15.1457729694,15.1458127652,15.1458525598,15.1458923534, +15.1459321458,15.1459719372,15.1460117274,15.1460515166,15.1460913046,15.1461310916,15.1461708775,15.1462106622,15.1462504459,15.1462902285,15.1463300099,15.1463697903,15.1464095696,15.1464493478,15.1464891249,15.1465289008, +15.1465686757,15.1466084495,15.1466482222,15.1466879938,15.1467277643,15.1467675338,15.1468073021,15.1468470693,15.1468868354,15.1469266004,15.1469663644,15.1470061272,15.1470458889,15.1470856496,15.1471254091,15.1471651676, +15.1472049249,15.1472446812,15.1472844364,15.1473241904,15.1473639434,15.1474036953,15.1474434461,15.1474831958,15.1475229444,15.1475626918,15.1476024383,15.1476421836,15.1476819278,15.1477216709,15.1477614129,15.1478011538, +15.1478408937,15.1478806324,15.1479203701,15.1479601066,15.1479998421,15.1480395764,15.1480793097,15.1481190419,15.1481587729,15.1481985029,15.1482382318,15.1482779596,15.1483176863,15.1483574119,15.1483971364,15.1484368599, +15.1484765822,15.1485163034,15.1485560236,15.1485957426,15.1486354605,15.1486751774,15.1487148932,15.1487546078,15.1487943214,15.1488340339,15.1488737453,15.1489134556,15.1489531648,15.1489928729,15.1490325799,15.1490722859, +15.1491119907,15.1491516944,15.1491913971,15.1492310987,15.1492707991,15.1493104985,15.1493501968,15.149389894,15.1494295901,15.1494692851,15.149508979,15.1495486718,15.1495883635,15.1496280542,15.1496677437,15.1497074321, +15.1497471195,15.1497868058,15.1498264909,15.149866175,15.149905858,15.1499455399,15.1499852207,15.1500249005,15.1500645791,15.1501042566,15.1501439331,15.1501836084,15.1502232827,15.1502629558,15.1503026279,15.1503422989, +15.1503819688,15.1504216376,15.1504613053,15.150500972,15.1505406375,15.150580302,15.1506199653,15.1506596276,15.1506992887,15.1507389488,15.1507786078,15.1508182657,15.1508579225,15.1508975783,15.1509372329,15.1509768864, +15.1510165389,15.1510561903,15.1510958405,15.1511354897,15.1511751378,15.1512147848,15.1512544307,15.1512940756,15.1513337193,15.1513733619,15.1514130035,15.151452644,15.1514922833,15.1515319216,15.1515715588,15.1516111949, +15.15165083,15.1516904639,15.1517300968,15.1517697285,15.1518093592,15.1518489888,15.1518886173,15.1519282447,15.151967871,15.1520074962,15.1520471203,15.1520867434,15.1521263653,15.1521659862,15.152205606,15.1522452247, +15.1522848423,15.1523244588,15.1523640743,15.1524036886,15.1524433019,15.152482914,15.1525225251,15.1525621351,15.152601744,15.1526413518,15.1526809586,15.1527205642,15.1527601688,15.1527997722,15.1528393746,15.1528789759, +15.1529185761,15.1529581753,15.1529977733,15.1530373702,15.1530769661,15.1531165609,15.1531561546,15.1531957472,15.1532353387,15.1532749291,15.1533145185,15.1533541067,15.1533936939,15.15343328,15.153472865,15.1535124489, +15.1535520317,15.1535916134,15.1536311941,15.1536707737,15.1537103522,15.1537499295,15.1537895059,15.1538290811,15.1538686552,15.1539082283,15.1539478002,15.1539873711,15.1540269409,15.1540665096,15.1541060773,15.1541456438, +15.1541852093,15.1542247736,15.1542643369,15.1543038991,15.1543434602,15.1543830203,15.1544225792,15.1544621371,15.1545016939,15.1545412496,15.1545808042,15.1546203577,15.1546599101,15.1546994615,15.1547390118,15.1547785609, +15.1548181091,15.1548576561,15.154897202,15.1549367469,15.1549762906,15.1550158333,15.1550553749,15.1550949154,15.1551344549,15.1551739932,15.1552135305,15.1552530667,15.1552926018,15.1553321358,15.1553716687,15.1554112005, +15.1554507313,15.155490261,15.1555297896,15.1555693171,15.1556088435,15.1556483689,15.1556878932,15.1557274163,15.1557669384,15.1558064595,15.1558459794,15.1558854983,15.155925016,15.1559645327,15.1560040483,15.1560435628, +15.1560830763,15.1561225886,15.1561620999,15.1562016101,15.1562411192,15.1562806273,15.1563201342,15.1563596401,15.1563991449,15.1564386486,15.1564781512,15.1565176527,15.1565571532,15.1565966526,15.1566361509,15.1566756481, +15.1567151442,15.1567546393,15.1567941332,15.1568336261,15.1568731179,15.1569126087,15.1569520983,15.1569915869,15.1570310744,15.1570705608,15.1571100461,15.1571495304,15.1571890135,15.1572284956,15.1572679766,15.1573074565, +15.1573469354,15.1573864131,15.1574258898,15.1574653654,15.1575048399,15.1575443134,15.1575837857,15.157623257,15.1576627272,15.1577021963,15.1577416644,15.1577811313,15.1578205972,15.157860062,15.1578995257,15.1579389884, +15.1579784499,15.1580179104,15.1580573698,15.1580968282,15.1581362854,15.1581757416,15.1582151967,15.1582546507,15.1582941036,15.1583335555,15.1583730062,15.1584124559,15.1584519045,15.1584913521,15.1585307985,15.1585702439, +15.1586096882,15.1586491314,15.1586885736,15.1587280146,15.1587674546,15.1588068935,15.1588463314,15.1588857681,15.1589252038,15.1589646384,15.1590040719,15.1590435044,15.1590829357,15.159122366,15.1591617952,15.1592012234, +15.1592406504,15.1592800764,15.1593195013,15.1593589251,15.1593983479,15.1594377695,15.1594771901,15.1595166096,15.1595560281,15.1595954454,15.1596348617,15.1596742769,15.159713691,15.1597531041,15.1597925161,15.159831927, +15.1598713368,15.1599107455,15.1599501532,15.1599895598,15.1600289653,15.1600683697,15.1601077731,15.1601471754,15.1601865766,15.1602259767,15.1602653758,15.1603047738,15.1603441707,15.1603835665,15.1604229613,15.160462355, +15.1605017476,15.1605411391,15.1605805295,15.1606199189,15.1606593072,15.1606986944,15.1607380806,15.1607774657,15.1608168497,15.1608562326,15.1608956145,15.1609349952,15.1609743749,15.1610137536,15.1610531311,15.1610925076, +15.161131883,15.1611712573,15.1612106306,15.1612500027,15.1612893738,15.1613287439,15.1613681128,15.1614074807,15.1614468475,15.1614862133,15.1615255779,15.1615649415,15.161604304,15.1616436654,15.1616830258,15.1617223851, +15.1617617433,15.1618011004,15.1618404565,15.1618798115,15.1619191654,15.1619585183,15.16199787,15.1620372207,15.1620765704,15.1621159189,15.1621552664,15.1621946128,15.1622339581,15.1622733024,15.1623126456,15.1623519877, +15.1623913288,15.1624306687,15.1624700076,15.1625093454,15.1625486822,15.1625880179,15.1626273525,15.162666686,15.1627060185,15.1627453499,15.1627846802,15.1628240094,15.1628633376,15.1629026647,15.1629419907,15.1629813157, +15.1630206396,15.1630599624,15.1630992841,15.1631386048,15.1631779244,15.1632172429,15.1632565604,15.1632958768,15.1633351921,15.1633745063,15.1634138195,15.1634531316,15.1634924426,15.1635317526,15.1635710615,15.1636103693, +15.163649676,15.1636889817,15.1637282863,15.1637675898,15.1638068923,15.1638461937,15.163885494,15.1639247932,15.1639640914,15.1640033885,15.1640426846,15.1640819795,15.1641212734,15.1641605662,15.164199858,15.1642391487, +15.1642784383,15.1643177268,15.1643570143,15.1643963007,15.1644355861,15.1644748703,15.1645141535,15.1645534357,15.1645927167,15.1646319967,15.1646712756,15.1647105535,15.1647498302,15.164789106,15.1648283806,15.1648676542, +15.1649069267,15.1649461981,15.1649854685,15.1650247378,15.165064006,15.1651032732,15.1651425392,15.1651818043,15.1652210682,15.1652603311,15.1652995929,15.1653388537,15.1653781133,15.165417372,15.1654566295,15.165495886, +15.1655351414,15.1655743957,15.165613649,15.1656529012,15.1656921523,15.1657314024,15.1657706514,15.1658098993,15.1658491462,15.165888392,15.1659276367,15.1659668804,15.166006123,15.1660453645,15.1660846049,15.1661238443, +15.1661630826,15.1662023199,15.1662415561,15.1662807912,15.1663200253,15.1663592583,15.1663984902,15.166437721,15.1664769508,15.1665161795,15.1665554072,15.1665946338,15.1666338593,15.1666730838,15.1667123071,15.1667515295, +15.1667907507,15.1668299709,15.16686919,15.1669084081,15.1669476251,15.166986841,15.1670260559,15.1670652697,15.1671044824,15.167143694,15.1671829046,15.1672221142,15.1672613226,15.16730053,15.1673397364,15.1673789416, +15.1674181458,15.167457349,15.167496551,15.167535752,15.167574952,15.1676141509,15.1676533487,15.1676925454,15.1677317411,15.1677709357,15.1678101293,15.1678493218,15.1678885132,15.1679277035,15.1679668928,15.1680060811, +15.1680452682,15.1680844543,15.1681236394,15.1681628233,15.1682020062,15.1682411881,15.1682803689,15.1683195486,15.1683587272,15.1683979048,15.1684370813,15.1684762568,15.1685154312,15.1685546045,15.1685937768,15.168632948, +15.1686721181,15.1687112872,15.1687504552,15.1687896222,15.1688287881,15.1688679529,15.1689071166,15.1689462793,15.168985441,15.1690246016,15.1690637611,15.1691029195,15.1691420769,15.1691812332,15.1692203885,15.1692595427, +15.1692986958,15.1693378479,15.1693769989,15.1694161488,15.1694552977,15.1694944455,15.1695335923,15.169572738,15.1696118826,15.1696510262,15.1696901687,15.1697293101,15.1697684505,15.1698075898,15.1698467281,15.1698858653, +15.1699250014,15.1699641365,15.1700032705,15.1700424035,15.1700815354,15.1701206662,15.170159796,15.1701989247,15.1702380523,15.1702771789,15.1703163044,15.1703554289,15.1703945523,15.1704336747,15.1704727959,15.1705119162, +15.1705510353,15.1705901534,15.1706292705,15.1706683864,15.1707075013,15.1707466152,15.170785728,15.1708248397,15.1708639504,15.17090306,15.1709421686,15.1709812761,15.1710203825,15.1710594879,15.1710985922,15.1711376955, +15.1711767977,15.1712158988,15.1712549989,15.1712940979,15.1713331958,15.1713722927,15.1714113886,15.1714504833,15.1714895771,15.1715286697,15.1715677613,15.1716068519,15.1716459413,15.1716850298,15.1717241171,15.1717632034, +15.1718022887,15.1718413729,15.171880456,15.1719195381,15.1719586191,15.171997699,15.1720367779,15.1720758558,15.1721149325,15.1721540083,15.1721930829,15.1722321565,15.1722712291,15.1723103005,15.172349371,15.1723884403, +15.1724275086,15.1724665759,15.1725056421,15.1725447072,15.1725837713,15.1726228343,15.1726618963,15.1727009572,15.172740017,15.1727790758,15.1728181336,15.1728571903,15.1728962459,15.1729353004,15.1729743539,15.1730134064, +15.1730524578,15.1730915081,15.1731305574,15.1731696056,15.1732086528,15.1732476989,15.1732867439,15.1733257879,15.1733648308,15.1734038727,15.1734429136,15.1734819533,15.173520992,15.1735600297,15.1735990663,15.1736381018, +15.1736771363,15.1737161697,15.1737552021,15.1737942334,15.1738332637,15.1738722929,15.173911321,15.1739503481,15.1739893742,15.1740283991,15.1740674231,15.1741064459,15.1741454678,15.1741844885,15.1742235082,15.1742625269, +15.1743015445,15.174340561,15.1743795765,15.1744185909,15.1744576043,15.1744966166,15.1745356279,15.1745746381,15.1746136472,15.1746526553,15.1746916624,15.1747306684,15.1747696733,15.1748086772,15.17484768,15.1748866818, +15.1749256825,15.1749646822,15.1750036808,15.1750426783,15.1750816748,15.1751206703,15.1751596647,15.175198658,15.1752376503,15.1752766415,15.1753156317,15.1753546208,15.1753936089,15.1754325959,15.1754715819,15.1755105668, +15.1755495506,15.1755885334,15.1756275152,15.1756664959,15.1757054755,15.1757444541,15.1757834317,15.1758224081,15.1758613836,15.1759003579,15.1759393313,15.1759783035,15.1760172748,15.1760562449,15.176095214,15.1761341821, +15.1761731491,15.1762121151,15.17625108,15.1762900438,15.1763290066,15.1763679684,15.1764069291,15.1764458887,15.1764848473,15.1765238048,15.1765627613,15.1766017168,15.1766406711,15.1766796245,15.1767185767,15.176757528, +15.1767964781,15.1768354273,15.1768743753,15.1769133224,15.1769522683,15.1769912133,15.1770301571,15.1770690999,15.1771080417,15.1771469824,15.1771859221,15.1772248607,15.1772637983,15.1773027348,15.1773416702,15.1773806046, +15.177419538,15.1774584703,15.1774974016,15.1775363318,15.1775752609,15.177614189,15.1776531161,15.1776920421,15.177730967,15.1777698909,15.1778088138,15.1778477356,15.1778866563,15.1779255761,15.1779644947,15.1780034123, +15.1780423289,15.1780812444,15.1781201588,15.1781590722,15.1781979846,15.1782368959,15.1782758061,15.1783147154,15.1783536235,15.1783925306,15.1784314367,15.1784703417,15.1785092457,15.1785481486,15.1785870504,15.1786259512, +15.178664851,15.1787037497,15.1787426474,15.178781544,15.1788204396,15.1788593341,15.1788982276,15.17893712,15.1789760114,15.1790149017,15.179053791,15.1790926792,15.1791315664,15.1791704525,15.1792093376,15.1792482217, +15.1792871046,15.1793259866,15.1793648675,15.1794037473,15.1794426261,15.1794815039,15.1795203806,15.1795592562,15.1795981308,15.1796370044,15.1796758769,15.1797147484,15.1797536188,15.1797924882,15.1798313565,15.1798702238, +15.17990909,15.1799479552,15.1799868193,15.1800256824,15.1800645445,15.1801034055,15.1801422654,15.1801811243,15.1802199822,15.180258839,15.1802976947,15.1803365495,15.1803754031,15.1804142558,15.1804531073,15.1804919579, +15.1805308073,15.1805696558,15.1806085032,15.1806473495,15.1806861948,15.1807250391,15.1807638823,15.1808027244,15.1808415656,15.1808804056,15.1809192447,15.1809580826,15.1809969196,15.1810357555,15.1810745903,15.1811134241, +15.1811522569,15.1811910886,15.1812299192,15.1812687489,15.1813075774,15.181346405,15.1813852314,15.1814240569,15.1814628813,15.1815017046,15.1815405269,15.1815793482,15.1816181684,15.1816569876,15.1816958057,15.1817346228, +15.1817734388,15.1818122538,15.1818510677,15.1818898807,15.1819286925,15.1819675033,15.1820063131,15.1820451218,15.1820839295,15.1821227362,15.1821615417,15.1822003463,15.1822391498,15.1822779523,15.1823167537,15.1823555541, +15.1823943534,15.1824331517,15.1824719489,15.1825107451,15.1825495403,15.1825883344,15.1826271275,15.1826659195,15.1827047105,15.1827435005,15.1827822894,15.1828210772,15.182859864,15.1828986498,15.1829374345,15.1829762182, +15.1830150009,15.1830537825,15.183092563,15.1831313426,15.183170121,15.1832088985,15.1832476749,15.1832864502,15.1833252245,15.1833639978,15.18340277,15.1834415412,15.1834803113,15.1835190804,15.1835578485,15.1835966155, +15.1836353815,15.1836741464,15.1837129103,15.1837516731,15.1837904349,15.1838291957,15.1838679554,15.1839067141,15.1839454718,15.1839842284,15.1840229839,15.1840617384,15.1841004919,15.1841392443,15.1841779957,15.1842167461, +15.1842554954,15.1842942437,15.1843329909,15.1843717371,15.1844104822,15.1844492264,15.1844879694,15.1845267115,15.1845654524,15.1846041924,15.1846429313,15.1846816692,15.184720406,15.1847591418,15.1847978765,15.1848366102, +15.1848753429,15.1849140745,15.1849528051,15.1849915347,15.1850302632,15.1850689907,15.1851077171,15.1851464425,15.1851851668,15.1852238901,15.1852626124,15.1853013336,15.1853400538,15.185378773,15.1854174911,15.1854562082, +15.1854949242,15.1855336392,15.1855723532,15.1856110661,15.185649778,15.1856884888,15.1857271986,15.1857659074,15.1858046151,15.1858433218,15.1858820274,15.1859207321,15.1859594356,15.1859981382,15.1860368397,15.1860755401, +15.1861142395,15.1861529379,15.1861916353,15.1862303316,15.1862690268,15.1863077211,15.1863464143,15.1863851064,15.1864237975,15.1864624876,15.1865011767,15.1865398647,15.1865785516,15.1866172376,15.1866559225,15.1866946063, +15.1867332891,15.1867719709,15.1868106517,15.1868493314,15.18688801,15.1869266877,15.1869653643,15.1870040398,15.1870427143,15.1870813878,15.1871200603,15.1871587317,15.1871974021,15.1872360714,15.1872747397,15.187313407, +15.1873520732,15.1873907384,15.1874294026,15.1874680657,15.1875067278,15.1875453888,15.1875840488,15.1876227078,15.1876613657,15.1877000226,15.1877386785,15.1877773333,15.1878159871,15.1878546399,15.1878932916,15.1879319423, +15.187970592,15.1880092406,15.1880478882,15.1880865347,15.1881251803,15.1881638247,15.1882024682,15.1882411106,15.188279752,15.1883183923,15.1883570316,15.1883956699,15.1884343071,15.1884729433,15.1885115785,15.1885502126, +15.1885888457,15.1886274778,15.1886661088,15.1887047388,15.1887433677,15.1887819957,15.1888206226,15.1888592484,15.1888978732,15.188936497,15.1889751198,15.1890137415,15.1890523622,15.1890909818,15.1891296005,15.189168218, +15.1892068346,15.1892454501,15.1892840646,15.189322678,15.1893612905,15.1893999018,15.1894385122,15.1894771215,15.1895157298,15.1895543371,15.1895929433,15.1896315485,15.1896701526,15.1897087557,15.1897473578,15.1897859589, +15.1898245589,15.1898631579,15.1899017558,15.1899403527,15.1899789486,15.1900175435,15.1900561373,15.1900947301,15.1901333219,15.1901719126,15.1902105023,15.1902490909,15.1902876786,15.1903262652,15.1903648507,15.1904034353, +15.1904420188,15.1904806013,15.1905191827,15.1905577631,15.1905963425,15.1906349208,15.1906734981,15.1907120744,15.1907506497,15.1907892239,15.1908277971,15.1908663692,15.1909049403,15.1909435104,15.1909820795,15.1910206475, +15.1910592145,15.1910977805,15.1911363454,15.1911749093,15.1912134722,15.1912520341,15.1912905949,15.1913291547,15.1913677134,15.1914062711,15.1914448278,15.1914833835,15.1915219381,15.1915604917,15.1915990443,15.1916375958, +15.1916761464,15.1917146958,15.1917532443,15.1917917917,15.1918303381,15.1918688835,15.1919074278,15.1919459711,15.1919845134,15.1920230546,15.1920615948,15.192100134,15.1921386722,15.1921772093,15.1922157454,15.1922542804, +15.1922928145,15.1923313475,15.1923698795,15.1924084104,15.1924469403,15.1924854692,15.1925239971,15.1925625239,15.1926010497,15.1926395745,15.1926780982,15.192716621,15.1927551426,15.1927936633,15.1928321829,15.1928707015, +15.1929092191,15.1929477357,15.1929862512,15.1930247657,15.1930632791,15.1931017916,15.193140303,15.1931788133,15.1932173227,15.193255831,15.1932943383,15.1933328446,15.1933713498,15.193409854,15.1934483572,15.1934868594, +15.1935253605,15.1935638606,15.1936023597,15.1936408577,15.1936793547,15.1937178507,15.1937563457,15.1937948396,15.1938333325,15.1938718244,15.1939103153,15.1939488051,15.1939872939,15.1940257817,15.1940642684,15.1941027542, +15.1941412389,15.1941797225,15.1942182052,15.1942566868,15.1942951674,15.1943336469,15.1943721255,15.194410603,15.1944490795,15.1944875549,15.1945260294,15.1945645028,15.1946029752,15.1946414465,15.1946799168,15.1947183861, +15.1947568544,15.1947953217,15.1948337879,15.1948722531,15.1949107173,15.1949491804,15.1949876425,15.1950261036,15.1950645637,15.1951030228,15.1951414808,15.1951799378,15.1952183938,15.1952568487,15.1952953026,15.1953337555, +15.1953722074,15.1954106583,15.1954491081,15.1954875569,15.1955260046,15.1955644514,15.1956028971,15.1956413418,15.1956797855,15.1957182281,15.1957566698,15.1957951104,15.19583355,15.1958719885,15.195910426,15.1959488625, +15.195987298,15.1960257325,15.1960641659,15.1961025983,15.1961410297,15.1961794601,15.1962178894,15.1962563177,15.196294745,15.1963331713,15.1963715965,15.1964100208,15.196448444,15.1964868661,15.1965252873,15.1965637074, +15.1966021265,15.1966405446,15.1966789617,15.1967173777,15.1967557927,15.1967942067,15.1968326197,15.1968710316,15.1969094425,15.1969478524,15.1969862613,15.1970246692,15.197063076,15.1971014818,15.1971398866,15.1971782904, +15.1972166931,15.1972550948,15.1972934955,15.1973318952,15.1973702939,15.1974086915,15.1974470881,15.1974854837,15.1975238783,15.1975622718,15.1976006643,15.1976390558,15.1976774463,15.1977158358,15.1977542242,15.1977926116, +15.197830998,15.1978693834,15.1979077677,15.1979461511,15.1979845334,15.1980229147,15.1980612949,15.1980996742,15.1981380524,15.1981764296,15.1982148058,15.198253181,15.1982915551,15.1983299282,15.1983683003,15.1984066714, +15.1984450415,15.1984834105,15.1985217785,15.1985601455,15.1985985115,15.1986368764,15.1986752404,15.1987136033,15.1987519652,15.1987903261,15.1988286859,15.1988670448,15.1989054026,15.1989437594,15.1989821152,15.1990204699, +15.1990588237,15.1990971764,15.1991355281,15.1991738788,15.1992122284,15.1992505771,15.1992889247,15.1993272713,15.1993656169,15.1994039614,15.199442305,15.1994806475,15.199518989,15.1995573295,15.199595669,15.1996340074, +15.1996723448,15.1997106812,15.1997490166,15.199787351,15.1998256844,15.1998640167,15.199902348,15.1999406783,15.1999790076,15.2000173359,15.2000556631,15.2000939894,15.2001323146,15.2001706388,15.2002089619,15.2002472841, +15.2002856052,15.2003239253,15.2003622444,15.2004005625,15.2004388796,15.2004771956,15.2005155107,15.2005538247,15.2005921377,15.2006304497,15.2006687606,15.2007070706,15.2007453795,15.2007836874,15.2008219943,15.2008603002, +15.200898605,15.2009369089,15.2009752117,15.2010135135,15.2010518143,15.2010901141,15.2011284128,15.2011667106,15.2012050073,15.201243303,15.2012815977,15.2013198914,15.201358184,15.2013964757,15.2014347663,15.2014730559, +15.2015113445,15.2015496321,15.2015879186,15.2016262042,15.2016644887,15.2017027722,15.2017410547,15.2017793362,15.2018176167,15.2018558961,15.2018941746,15.201932452,15.2019707284,15.2020090038,15.2020472781,15.2020855515, +15.2021238238,15.2021620952,15.2022003655,15.2022386348,15.202276903,15.2023151703,15.2023534366,15.2023917018,15.202429966,15.2024682292,15.2025064914,15.2025447526,15.2025830127,15.2026212719,15.20265953,15.2026977871, +15.2027360433,15.2027742983,15.2028125524,15.2028508055,15.2028890575,15.2029273086,15.2029655586,15.2030038076,15.2030420556,15.2030803025,15.2031185485,15.2031567934,15.2031950374,15.2032332803,15.2032715222,15.2033097631, +15.203348003,15.2033862418,15.2034244797,15.2034627165,15.2035009524,15.2035391872,15.203577421,15.2036156538,15.2036538855,15.2036921163,15.203730346,15.2037685748,15.2038068025,15.2038450292,15.2038832549,15.2039214796, +15.2039597032,15.2039979259,15.2040361475,15.2040743682,15.2041125878,15.2041508064,15.204189024,15.2042272406,15.2042654561,15.2043036707,15.2043418842,15.2043800968,15.2044183083,15.2044565188,15.2044947283,15.2045329368, +15.2045711442,15.2046093507,15.2046475562,15.2046857606,15.204723964,15.2047621664,15.2048003678,15.2048385682,15.2048767676,15.204914966,15.2049531633,15.2049913597,15.205029555,15.2050677493,15.2051059426,15.2051441349, +15.2051823262,15.2052205165,15.2052587058,15.205296894,15.2053350813,15.2053732675,15.2054114527,15.2054496369,15.2054878202,15.2055260023,15.2055641835,15.2056023637,15.2056405429,15.205678721,15.2057168981,15.2057550743, +15.2057932494,15.2058314235,15.2058695966,15.2059077687,15.2059459398,15.2059841098,15.2060222789,15.206060447,15.206098614,15.20613678,15.206174945,15.2062131091,15.2062512721,15.2062894341,15.206327595,15.206365755, +15.206403914,15.2064420719,15.2064802289,15.2065183848,15.2065565397,15.2065946937,15.2066328466,15.2066709985,15.2067091494,15.2067472992,15.2067854481,15.206823596,15.2068617428,15.2068998887,15.2069380335,15.2069761774, +15.2070143202,15.207052462,15.2070906028,15.2071287426,15.2071668814,15.2072050192,15.2072431559,15.2072812917,15.2073194265,15.2073575602,15.2073956929,15.2074338247,15.2074719554,15.2075100851,15.2075482138,15.2075863415, +15.2076244682,15.2076625939,15.2077007186,15.2077388423,15.2077769649,15.2078150866,15.2078532072,15.2078913269,15.2079294455,15.2079675631,15.2080056798,15.2080437954,15.20808191,15.2081200236,15.2081581362,15.2081962478, +15.2082343583,15.2082724679,15.2083105765,15.208348684,15.2083867906,15.2084248961,15.2084630007,15.2085011042,15.2085392067,15.2085773083,15.2086154088,15.2086535083,15.2086916068,15.2087297043,15.2087678008,15.2088058963, +15.2088439907,15.2088820842,15.2089201767,15.2089582681,15.2089963586,15.209034448,15.2090725365,15.2091106239,15.2091487104,15.2091867958,15.2092248802,15.2092629636,15.209301046,15.2093391274,15.2093772078,15.2094152872, +15.2094533656,15.209491443,15.2095295194,15.2095675948,15.2096056691,15.2096437425,15.2096818149,15.2097198862,15.2097579566,15.2097960259,15.2098340943,15.2098721616,15.2099102279,15.2099482933,15.2099863576,15.2100244209, +15.2100624832,15.2101005446,15.2101386049,15.2101766642,15.2102147225,15.2102527798,15.2102908361,15.2103288913,15.2103669456,15.2104049989,15.2104430512,15.2104811025,15.2105191527,15.210557202,15.2105952503,15.2106332975, +15.2106713438,15.210709389,15.2107474333,15.2107854765,15.2108235188,15.21086156,15.2108996003,15.2109376395,15.2109756777,15.211013715,15.2110517512,15.2110897864,15.2111278206,15.2111658538,15.2112038861,15.2112419173, +15.2112799475,15.2113179767,15.2113560049,15.2113940321,15.2114320583,15.2114700835,15.2115081077,15.2115461309,15.2115841531,15.2116221743,15.2116601945,15.2116982136,15.2117362318,15.211774249,15.2118122652,15.2118502804, +15.2118882945,15.2119263077,15.2119643199,15.2120023311,15.2120403412,15.2120783504,15.2121163586,15.2121543657,15.2121923719,15.2122303771,15.2122683812,15.2123063844,15.2123443866,15.2123823877,15.2124203879,15.212458387, +15.2124963852,15.2125343824,15.2125723785,15.2126103737,15.2126483678,15.212686361,15.2127243531,15.2127623443,15.2128003344,15.2128383236,15.2128763117,15.2129142989,15.212952285,15.2129902702,15.2130282543,15.2130662375, +15.2131042196,15.2131422008,15.2131801809,15.2132181601,15.2132561382,15.2132941154,15.2133320916,15.2133700667,15.2134080409,15.213446014,15.2134839862,15.2135219573,15.2135599275,15.2135978966,15.2136358648,15.2136738319, +15.2137117981,15.2137497633,15.2137877274,15.2138256906,15.2138636527,15.2139016139,15.2139395741,15.2139775332,15.2140154914,15.2140534486,15.2140914047,15.2141293599,15.2141673141,15.2142052673,15.2142432194,15.2142811706, +15.2143191208,15.21435707,15.2143950182,15.2144329653,15.2144709115,15.2145088567,15.2145468009,15.2145847441,15.2146226863,15.2146606275,15.2146985677,15.2147365069,15.2147744451,15.2148123823,15.2148503185,15.2148882537, +15.2149261879,15.2149641212,15.2150020534,15.2150399846,15.2150779148,15.215115844,15.2151537723,15.2151916995,15.2152296257,15.215267551,15.2153054752,15.2153433985,15.2153813207,15.215419242,15.2154571622,15.2154950815, +15.2155329997,15.215570917,15.2156088333,15.2156467485,15.2156846628,15.2157225761,15.2157604884,15.2157983997,15.21583631,15.2158742193,15.2159121276,15.2159500349,15.2159879412,15.2160258465,15.2160637508,15.2161016541, +15.2161395564,15.2161774578,15.2162153581,15.2162532574,15.2162911558,15.2163290531,15.2163669494,15.2164048448,15.2164427392,15.2164806325,15.2165185249,15.2165564163,15.2165943066,15.216632196,15.2166700844,15.2167079718, +15.2167458582,15.2167837436,15.216821628,15.2168595114,15.2168973938,15.2169352753,15.2169731557,15.2170110351,15.2170489136,15.217086791,15.2171246675,15.2171625429,15.2172004174,15.2172382908,15.2172761633,15.2173140348, +15.2173519053,15.2173897748,15.2174276433,15.2174655108,15.2175033773,15.2175412428,15.2175791073,15.2176169708,15.2176548334,15.2176926949,15.2177305554,15.217768415,15.2178062736,15.2178441311,15.2178819877,15.2179198433, +15.2179576979,15.2179955515,15.2180334041,15.2180712557,15.2181091063,15.2181469559,15.2181848045,15.2182226522,15.2182604988,15.2182983444,15.2183361891,15.2183740328,15.2184118754,15.2184497171,15.2184875578,15.2185253975, +15.2185632362,15.2186010739,15.2186389106,15.2186767463,15.2187145811,15.2187524148,15.2187902476,15.2188280793,15.2188659101,15.2189037398,15.2189415686,15.2189793964,15.2190172232,15.219055049,15.2190928738,15.2191306976, +15.2191685205,15.2192063423,15.2192441631,15.219281983,15.2193198019,15.2193576197,15.2193954366,15.2194332525,15.2194710674,15.2195088813,15.2195466942,15.2195845061,15.2196223171,15.219660127,15.219697936,15.2197357439, +15.2197735509,15.2198113569,15.2198491619,15.2198869659,15.2199247689,15.2199625709,15.2200003719,15.2200381719,15.220075971,15.220113769,15.2201515661,15.2201893622,15.2202271573,15.2202649514,15.2203027445,15.2203405366, +15.2203783277,15.2204161178,15.220453907,15.2204916951,15.2205294823,15.2205672685,15.2206050537,15.2206428378,15.2206806211,15.2207184033,15.2207561845,15.2207939647,15.220831744,15.2208695222,15.2209072995,15.2209450758, +15.2209828511,15.2210206254,15.2210583987,15.221096171,15.2211339424,15.2211717127,15.2212094821,15.2212472504,15.2212850178,15.2213227842,15.2213605496,15.221398314,15.2214360774,15.2214738399,15.2215116013,15.2215493618, +15.2215871213,15.2216248797,15.2216626372,15.2217003938,15.2217381493,15.2217759038,15.2218136573,15.2218514099,15.2218891615,15.2219269121,15.2219646616,15.2220024102,15.2220401579,15.2220779045,15.2221156501,15.2221533948, +15.2221911385,15.2222288811,15.2222666228,15.2223043635,15.2223421032,15.222379842,15.2224175797,15.2224553165,15.2224930522,15.222530787,15.2225685208,15.2226062536,15.2226439855,15.2226817163,15.2227194461,15.222757175, +15.2227949029,15.2228326298,15.2228703557,15.2229080806,15.2229458045,15.2229835274,15.2230212494,15.2230589704,15.2230966903,15.2231344093,15.2231721274,15.2232098444,15.2232475604,15.2232852755,15.2233229895,15.2233607026, +15.2233984147,15.2234361258,15.2234738359,15.2235115451,15.2235492532,15.2235869604,15.2236246666,15.2236623718,15.223700076,15.2237377792,15.2237754815,15.2238131827,15.223850883,15.2238885823,15.2239262806,15.2239639779, +15.2240016742,15.2240393695,15.2240770639,15.2241147573,15.2241524497,15.2241901411,15.2242278315,15.2242655209,15.2243032094,15.2243408968,15.2243785833,15.2244162688,15.2244539533,15.2244916369,15.2245293194,15.224567001, +15.2246046815,15.2246423611,15.2246800397,15.2247177174,15.224755394,15.2247930697,15.2248307443,15.224868418,15.2249060907,15.2249437624,15.2249814332,15.2250191029,15.2250567717,15.2250944395,15.2251321063,15.2251697721, +15.2252074369,15.2252451008,15.2252827637,15.2253204256,15.2253580865,15.2253957464,15.2254334053,15.2254710633,15.2255087202,15.2255463762,15.2255840312,15.2256216853,15.2256593383,15.2256969903,15.2257346414,15.2257722915, +15.2258099406,15.2258475888,15.2258852359,15.2259228821,15.2259605272,15.2259981714,15.2260358146,15.2260734569,15.2261110981,15.2261487384,15.2261863777,15.226224016,15.2262616533,15.2262992897,15.226336925,15.2263745594, +15.2264121928,15.2264498252,15.2264874566,15.2265250871,15.2265627166,15.226600345,15.2266379725,15.2266755991,15.2267132246,15.2267508492,15.2267884728,15.2268260954,15.226863717,15.2269013376,15.2269389573,15.226976576, +15.2270141936,15.2270518104,15.2270894261,15.2271270409,15.2271646546,15.2272022674,15.2272398792,15.2272774901,15.2273150999,15.2273527088,15.2273903167,15.2274279236,15.2274655295,15.2275031345,15.2275407384,15.2275783414, +15.2276159434,15.2276535444,15.2276911445,15.2277287436,15.2277663416,15.2278039388,15.2278415349,15.22787913,15.2279167242,15.2279543174,15.2279919096,15.2280295008,15.2280670911,15.2281046804,15.2281422686,15.228179856, +15.2282174423,15.2282550276,15.228292612,15.2283301954,15.2283677778,15.2284053593,15.2284429397,15.2284805192,15.2285180977,15.2285556752,15.2285932518,15.2286308273,15.2286684019,15.2287059755,15.2287435482,15.2287811198, +15.2288186905,15.2288562602,15.2288938289,15.2289313966,15.2289689634,15.2290065292,15.229044094,15.2290816578,15.2291192207,15.2291567825,15.2291943434,15.2292319033,15.2292694623,15.2293070202,15.2293445772,15.2293821332, +15.2294196882,15.2294572423,15.2294947953,15.2295323474,15.2295698986,15.2296074487,15.2296449978,15.229682546,15.2297200932,15.2297576395,15.2297951847,15.229832729,15.2298702723,15.2299078146,15.229945356,15.2299828963, +15.2300204357,15.2300579741,15.2300955116,15.230133048,15.2301705835,15.230208118,15.2302456515,15.2302831841,15.2303207157,15.2303582463,15.2303957759,15.2304333045,15.2304708322,15.2305083589,15.2305458846,15.2305834094, +15.2306209331,15.2306584559,15.2306959777,15.2307334986,15.2307710184,15.2308085373,15.2308460552,15.2308835722,15.2309210881,15.2309586031,15.2309961171,15.2310336302,15.2310711422,15.2311086533,15.2311461634,15.2311836726, +15.2312211807,15.2312586879,15.2312961941,15.2313336993,15.2313712036,15.2314087069,15.2314462092,15.2314837105,15.2315212109,15.2315587103,15.2315962087,15.2316337061,15.2316712026,15.231708698,15.2317461926,15.2317836861, +15.2318211787,15.2318586702,15.2318961609,15.2319336505,15.2319711392,15.2320086269,15.2320461136,15.2320835993,15.2321210841,15.2321585679,15.2321960507,15.2322335325,15.2322710134,15.2323084933,15.2323459722,15.2323834502, +15.2324209272,15.2324584032,15.2324958782,15.2325333523,15.2325708254,15.2326082975,15.2326457686,15.2326832388,15.232720708,15.2327581762,15.2327956434,15.2328331097,15.232870575,15.2329080393,15.2329455027,15.2329829651, +15.2330204265,15.2330578869,15.2330953464,15.2331328049,15.2331702624,15.2332077189,15.2332451745,15.2332826291,15.2333200827,15.2333575354,15.2333949871,15.2334324378,15.2334698875,15.2335073363,15.2335447841,15.2335822309, +15.2336196768,15.2336571216,15.2336945655,15.2337320085,15.2337694504,15.2338068914,15.2338443315,15.2338817705,15.2339192086,15.2339566457,15.2339940818,15.234031517,15.2340689512,15.2341063844,15.2341438167,15.2341812479, +15.2342186782,15.2342561076,15.2342935359,15.2343309633,15.2343683898,15.2344058152,15.2344432397,15.2344806632,15.2345180857,15.2345555073,15.2345929279,15.2346303475,15.2346677662,15.2347051839,15.2347426006,15.2347800163, +15.2348174311,15.2348548449,15.2348922578,15.2349296696,15.2349670805,15.2350044904,15.2350418994,15.2350793074,15.2351167144,15.2351541204,15.2351915255,15.2352289296,15.2352663328,15.2353037349,15.2353411361,15.2353785363, +15.2354159356,15.2354533339,15.2354907312,15.2355281276,15.2355655229,15.2356029173,15.2356403108,15.2356777033,15.2357150948,15.2357524853,15.2357898749,15.2358272635,15.2358646511,15.2359020377,15.2359394234,15.2359768081, +15.2360141919,15.2360515747,15.2360889565,15.2361263373,15.2361637172,15.2362010961,15.2362384741,15.236275851,15.236313227,15.2363506021,15.2363879761,15.2364253492,15.2364627214,15.2365000925,15.2365374627,15.236574832, +15.2366122002,15.2366495675,15.2366869338,15.2367242992,15.2367616636,15.236799027,15.2368363894,15.2368737509,15.2369111114,15.236948471,15.2369858296,15.2370231872,15.2370605438,15.2370978995,15.2371352542,15.237172608, +15.2372099608,15.2372473126,15.2372846634,15.2373220133,15.2373593622,15.2373967101,15.2374340571,15.2374714031,15.2375087482,15.2375460922,15.2375834354,15.2376207775,15.2376581187,15.2376954589,15.2377327981,15.2377701364, +15.2378074737,15.2378448101,15.2378821454,15.2379194799,15.2379568133,15.2379941458,15.2380314773,15.2380688078,15.2381061374,15.238143466,15.2381807937,15.2382181204,15.2382554461,15.2382927709,15.2383300946,15.2383674175, +15.2384047393,15.2384420602,15.2384793801,15.2385166991,15.2385540171,15.2385913341,15.2386286502,15.2386659653,15.2387032794,15.2387405926,15.2387779048,15.238815216,15.2388525263,15.2388898356,15.238927144,15.2389644514, +15.2390017578,15.2390390632,15.2390763677,15.2391136712,15.2391509738,15.2391882754,15.239225576,15.2392628757,15.2393001744,15.2393374721,15.2393747689,15.2394120647,15.2394493595,15.2394866534,15.2395239463,15.2395612383, +15.2395985292,15.2396358193,15.2396731083,15.2397103964,15.2397476836,15.2397849697,15.2398222549,15.2398595392,15.2398968224,15.2399341048,15.2399713861,15.2400086665,15.2400459459,15.2400832244,15.2401205019,15.2401577784, +15.240195054,15.2402323286,15.2402696022,15.2403068749,15.2403441466,15.2403814174,15.2404186872,15.240455956,15.2404932239,15.2405304908,15.2405677567,15.2406050217,15.2406422857,15.2406795488,15.2407168109,15.240754072, +15.2407913322,15.2408285914,15.2408658496,15.2409031069,15.2409403632,15.2409776186,15.241014873,15.2410521264,15.2410893789,15.2411266304,15.2411638809,15.2412011305,15.2412383791,15.2412756268,15.2413128735,15.2413501192, +15.241387364,15.2414246078,15.2414618507,15.2414990926,15.2415363335,15.2415735735,15.2416108125,15.2416480505,15.2416852876,15.2417225237,15.2417597589,15.2417969931,15.2418342263,15.2418714586,15.2419086899,15.2419459203, +15.2419831497,15.2420203781,15.2420576056,15.2420948321,15.2421320577,15.2421692823,15.2422065059,15.2422437286,15.2422809503,15.2423181711,15.2423553909,15.2423926097,15.2424298276,15.2424670445,15.2425042604,15.2425414754, +15.2425786895,15.2426159025,15.2426531146,15.2426903258,15.242727536,15.2427647452,15.2428019535,15.2428391608,15.2428763672,15.2429135726,15.242950777,15.2429879805,15.243025183,15.2430623846,15.2430995852,15.2431367848, +15.2431739835,15.2432111812,15.243248378,15.2432855738,15.2433227686,15.2433599625,15.2433971554,15.2434343474,15.2434715384,15.2435087284,15.2435459175,15.2435831057,15.2436202928,15.2436574791,15.2436946643,15.2437318486, +15.243769032,15.2438062143,15.2438433958,15.2438805762,15.2439177557,15.2439549343,15.2439921119,15.2440292885,15.2440664642,15.2441036389,15.2441408127,15.2441779855,15.2442151573,15.2442523282,15.2442894981,15.2443266671, +15.2443638351,15.2444010022,15.2444381683,15.2444753334,15.2445124976,15.2445496608,15.2445868231,15.2446239844,15.2446611448,15.2446983042,15.2447354626,15.2447726201,15.2448097766,15.2448469322,15.2448840868,15.2449212405, +15.2449583932,15.2449955449,15.2450326957,15.2450698455,15.2451069944,15.2451441423,15.2451812893,15.2452184353,15.2452555803,15.2452927244,15.2453298675,15.2453670097,15.2454041509,15.2454412912,15.2454784305,15.2455155689, +15.2455527063,15.2455898427,15.2456269782,15.2456641127,15.2457012463,15.2457383789,15.2457755106,15.2458126413,15.245849771,15.2458868998,15.2459240277,15.2459611545,15.2459982805,15.2460354054,15.2460725295,15.2461096525, +15.2461467746,15.2461838958,15.246221016,15.2462581352,15.2462952535,15.2463323708,15.2463694872,15.2464066026,15.2464437171,15.2464808306,15.2465179432,15.2465550548,15.2465921654,15.2466292751,15.2466663839,15.2467034917, +15.2467405985,15.2467777044,15.2468148093,15.2468519133,15.2468890163,15.2469261183,15.2469632194,15.2470003196,15.2470374188,15.247074517,15.2471116143,15.2471487107,15.247185806,15.2472229005,15.2472599939,15.2472970865, +15.247334178,15.2473712686,15.2474083583,15.247445447,15.2474825348,15.2475196216,15.2475567074,15.2475937923,15.2476308762,15.2476679592,15.2477050413,15.2477421223,15.2477792025,15.2478162816,15.2478533599,15.2478904371, +15.2479275134,15.2479645888,15.2480016632,15.2480387367,15.2480758092,15.2481128807,15.2481499513,15.248187021,15.2482240897,15.2482611574,15.2482982242,15.24833529,15.2483723549,15.2484094189,15.2484464818,15.2484835439, +15.2485206049,15.2485576651,15.2485947242,15.2486317825,15.2486688397,15.248705896,15.2487429514,15.2487800058,15.2488170593,15.2488541118,15.2488911633,15.248928214,15.2489652636,15.2490023123,15.2490393601,15.2490764069, +15.2491134527,15.2491504976,15.2491875416,15.2492245846,15.2492616266,15.2492986677,15.2493357078,15.249372747,15.2494097853,15.2494468226,15.2494838589,15.2495208943,15.2495579287,15.2495949622,15.2496319947,15.2496690263, +15.249706057,15.2497430867,15.2497801154,15.2498171432,15.24985417,15.2498911959,15.2499282208,15.2499652448,15.2500022678,15.2500392899,15.2500763111,15.2501133312,15.2501503505,15.2501873688,15.2502243861,15.2502614025, +15.2502984179,15.2503354324,15.2503724459,15.2504094585,15.2504464701,15.2504834808,15.2505204906,15.2505574994,15.2505945072,15.2506315141,15.25066852,15.250705525,15.2507425291,15.2507795321,15.2508165343,15.2508535355, +15.2508905357,15.250927535,15.2509645334,15.2510015308,15.2510385272,15.2510755227,15.2511125173,15.2511495109,15.2511865035,15.2512234952,15.251260486,15.2512974758,15.2513344647,15.2513714526,15.2514084395,15.2514454256, +15.2514824106,15.2515193947,15.2515563779,15.2515933601,15.2516303414,15.2516673217,15.2517043011,15.2517412796,15.251778257,15.2518152336,15.2518522092,15.2518891838,15.2519261575,15.2519631302,15.252000102,15.2520370729, +15.2520740428,15.2521110118,15.2521479798,15.2521849468,15.2522219129,15.2522588781,15.2522958423,15.2523328056,15.2523697679,15.2524067293,15.2524436897,15.2524806492,15.2525176078,15.2525545654,15.252591522,15.2526284777, +15.2526654325,15.2527023863,15.2527393391,15.252776291,15.252813242,15.252850192,15.2528871411,15.2529240892,15.2529610364,15.2529979826,15.2530349279,15.2530718723,15.2531088157,15.2531457581,15.2531826996,15.2532196402, +15.2532565798,15.2532935184,15.2533304562,15.2533673929,15.2534043288,15.2534412637,15.2534781976,15.2535151306,15.2535520626,15.2535889937,15.2536259239,15.2536628531,15.2536997814,15.2537367087,15.2537736351,15.2538105605, +15.253847485,15.2538844085,15.2539213311,15.2539582528,15.2539951735,15.2540320932,15.2540690121,15.2541059299,15.2541428469,15.2541797628,15.2542166779,15.254253592,15.2542905051,15.2543274173,15.2543643286,15.2544012389, +15.2544381483,15.2544750567,15.2545119642,15.2545488707,15.2545857763,15.254622681,15.2546595847,15.2546964874,15.2547333892,15.2547702901,15.2548071901,15.254844089,15.2548809871,15.2549178842,15.2549547803,15.2549916755, +15.2550285698,15.2550654631,15.2551023555,15.255139247,15.2551761375,15.255213027,15.2552499156,15.2552868033,15.25532369,15.2553605758,15.2553974606,15.2554343445,15.2554712275,15.2555081095,15.2555449905,15.2555818707, +15.2556187498,15.2556556281,15.2556925054,15.2557293817,15.2557662571,15.2558031316,15.2558400051,15.2558768777,15.2559137493,15.25595062,15.2559874898,15.2560243586,15.2560612265,15.2560980934,15.2561349594,15.2561718244, +15.2562086885,15.2562455517,15.2562824139,15.2563192752,15.2563561355,15.2563929949,15.2564298534,15.2564667109,15.2565035674,15.2565404231,15.2565772777,15.2566141315,15.2566509843,15.2566878361,15.2567246871,15.256761537, +15.2567983861,15.2568352342,15.2568720813,15.2569089275,15.2569457728,15.2569826171,15.2570194605,15.257056303,15.2570931445,15.2571299851,15.2571668247,15.2572036634,15.2572405011,15.2572773379,15.2573141738,15.2573510087, +15.2573878427,15.2574246757,15.2574615078,15.257498339,15.2575351692,15.2575719985,15.2576088268,15.2576456542,15.2576824807,15.2577193062,15.2577561308,15.2577929545,15.2578297772,15.2578665989,15.2579034197,15.2579402396, +15.2579770586,15.2580138766,15.2580506936,15.2580875098,15.2581243249,15.2581611392,15.2581979525,15.2582347649,15.2582715763,15.2583083868,15.2583451963,15.2583820049,15.2584188126,15.2584556193,15.2584924251,15.25852923, +15.2585660339,15.2586028369,15.2586396389,15.25867644,15.2587132402,15.2587500394,15.2587868377,15.258823635,15.2588604314,15.2588972269,15.2589340214,15.258970815,15.2590076076,15.2590443994,15.2590811901,15.25911798, +15.2591547689,15.2591915568,15.2592283438,15.2592651299,15.2593019151,15.2593386993,15.2593754826,15.2594122649,15.2594490463,15.2594858267,15.2595226063,15.2595593848,15.2595961625,15.2596329392,15.259669715,15.2597064898, +15.2597432637,15.2597800366,15.2598168087,15.2598535798,15.2598903499,15.2599271191,15.2599638874,15.2600006547,15.2600374211,15.2600741866,15.2601109511,15.2601477147,15.2601844773,15.260221239,15.2602579998,15.2602947597, +15.2603315186,15.2603682765,15.2604050336,15.2604417896,15.2604785448,15.260515299,15.2605520523,15.2605888047,15.2606255561,15.2606623065,15.2606990561,15.2607358047,15.2607725524,15.2608092991,15.2608460449,15.2608827897, +15.2609195337,15.2609562767,15.2609930187,15.2610297598,15.2610665,15.2611032392,15.2611399776,15.2611767149,15.2612134514,15.2612501869,15.2612869214,15.2613236551,15.2613603878,15.2613971195,15.2614338504,15.2614705802, +15.2615073092,15.2615440372,15.2615807643,15.2616174905,15.2616542157,15.26169094,15.2617276633,15.2617643857,15.2618011072,15.2618378277,15.2618745473,15.261911266,15.2619479838,15.2619847006,15.2620214164,15.2620581314, +15.2620948454,15.2621315584,15.2621682706,15.2622049818,15.262241692,15.2622784014,15.2623151098,15.2623518172,15.2623885238,15.2624252293,15.262461934,15.2624986377,15.2625353405,15.2625720424,15.2626087433,15.2626454433, +15.2626821424,15.2627188405,15.2627555377,15.2627922339,15.2628289293,15.2628656237,15.2629023171,15.2629390096,15.2629757012,15.2630123919,15.2630490816,15.2630857704,15.2631224583,15.2631591452,15.2631958312,15.2632325162, +15.2632692004,15.2633058836,15.2633425658,15.2633792472,15.2634159276,15.263452607,15.2634892856,15.2635259632,15.2635626398,15.2635993156,15.2636359904,15.2636726642,15.2637093372,15.2637460092,15.2637826802,15.2638193504, +15.2638560196,15.2638926879,15.2639293552,15.2639660216,15.2640026871,15.2640393517,15.2640760153,15.264112678,15.2641493397,15.2641860005,15.2642226604,15.2642593194,15.2642959774,15.2643326345,15.2643692907,15.2644059459, +15.2644426002,15.2644792536,15.264515906,15.2645525575,15.2645892081,15.2646258578,15.2646625065,15.2646991543,15.2647358011,15.2647724471,15.264809092,15.2648457361,15.2648823792,15.2649190214,15.2649556627,15.264992303, +15.2650289425,15.2650655809,15.2651022185,15.2651388551,15.2651754908,15.2652121255,15.2652487594,15.2652853923,15.2653220242,15.2653586553,15.2653952854,15.2654319146,15.2654685428,15.2655051701,15.2655417965,15.265578422, +15.2656150465,15.2656516701,15.2656882927,15.2657249145,15.2657615353,15.2657981552,15.2658347741,15.2658713921,15.2659080092,15.2659446254,15.2659812406,15.2660178549,15.2660544683,15.2660910807,15.2661276923,15.2661643028, +15.2662009125,15.2662375212,15.266274129,15.2663107359,15.2663473418,15.2663839468,15.2664205509,15.2664571541,15.2664937563,15.2665303576,15.266566958,15.2666035574,15.2666401559,15.2666767535,15.2667133502,15.2667499459, +15.2667865407,15.2668231346,15.2668597275,15.2668963195,15.2669329106,15.2669695008,15.26700609,15.2670426783,15.2670792657,15.2671158521,15.2671524376,15.2671890222,15.2672256059,15.2672621886,15.2672987704,15.2673353513, +15.2673719313,15.2674085103,15.2674450884,15.2674816656,15.2675182418,15.2675548171,15.2675913915,15.267627965,15.2676645375,15.2677011091,15.2677376798,15.2677742495,15.2678108184,15.2678473863,15.2678839532,15.2679205193, +15.2679570844,15.2679936486,15.2680302119,15.2680667742,15.2681033356,15.2681398961,15.2681764557,15.2682130143,15.268249572,15.2682861288,15.2683226846,15.2683592396,15.2683957936,15.2684323466,15.2684688988,15.26850545, +15.2685420003,15.2685785497,15.2686150981,15.2686516456,15.2686881922,15.2687247379,15.2687612826,15.2687978265,15.2688343693,15.2688709113,15.2689074523,15.2689439925,15.2689805316,15.2690170699,15.2690536073,15.2690901437, +15.2691266791,15.2691632137,15.2691997473,15.2692362801,15.2692728118,15.2693093427,15.2693458726,15.2693824017,15.2694189297,15.2694554569,15.2694919831,15.2695285085,15.2695650328,15.2696015563,15.2696380788,15.2696746005, +15.2697111211,15.2697476409,15.2697841597,15.2698206777,15.2698571947,15.2698937107,15.2699302259,15.2699667401,15.2700032534,15.2700397657,15.2700762772,15.2701127877,15.2701492973,15.270185806,15.2702223137,15.2702588206, +15.2702953265,15.2703318315,15.2703683355,15.2704048386,15.2704413408,15.2704778421,15.2705143425,15.2705508419,15.2705873404,15.270623838,15.2706603347,15.2706968305,15.2707333253,15.2707698192,15.2708063121,15.2708428042, +15.2708792953,15.2709157855,15.2709522748,15.2709887632,15.2710252506,15.2710617371,15.2710982227,15.2711347074,15.2711711911,15.271207674,15.2712441559,15.2712806368,15.2713171169,15.271353596,15.2713900742,15.2714265515, +15.2714630279,15.2714995033,15.2715359779,15.2715724515,15.2716089242,15.2716453959,15.2716818667,15.2717183367,15.2717548056,15.2717912737,15.2718277409,15.2718642071,15.2719006724,15.2719371368,15.2719736002,15.2720100628, +15.2720465244,15.2720829851,15.2721194449,15.2721559037,15.2721923616,15.2722288187,15.2722652747,15.2723017299,15.2723381842,15.2723746375,15.2724110899,15.2724475414,15.2724839919,15.2725204416,15.2725568903,15.2725933381, +15.272629785,15.2726662309,15.272702676,15.2727391201,15.2727755633,15.2728120056,15.2728484469,15.2728848874,15.2729213269,15.2729577655,15.2729942031,15.2730306399,15.2730670757,15.2731035106,15.2731399446,15.2731763777, +15.2732128099,15.2732492411,15.2732856714,15.2733221008,15.2733585293,15.2733949568,15.2734313835,15.2734678092,15.273504234,15.2735406578,15.2735770808,15.2736135028,15.2736499239,15.2736863441,15.2737227634,15.2737591818, +15.2737955992,15.2738320157,15.2738684313,15.273904846,15.2739412598,15.2739776726,15.2740140845,15.2740504955,15.2740869056,15.2741233148,15.274159723,15.2741961304,15.2742325368,15.2742689423,15.2743053469,15.2743417505, +15.2743781532,15.2744145551,15.274450956,15.2744873559,15.274523755,15.2745601532,15.2745965504,15.2746329467,15.2746693421,15.2747057365,15.2747421301,15.2747785227,15.2748149145,15.2748513053,15.2748876951,15.2749240841, +15.2749604721,15.2749968593,15.2750332455,15.2750696308,15.2751060151,15.2751423986,15.2751787811,15.2752151628,15.2752515435,15.2752879233,15.2753243021,15.2753606801,15.2753970571,15.2754334332,15.2754698084,15.2755061827, +15.2755425561,15.2755789285,15.2756153001,15.2756516707,15.2756880404,15.2757244092,15.275760777,15.275797144,15.27583351,15.2758698751,15.2759062393,15.2759426026,15.275978965,15.2760153264,15.276051687,15.2760880466, +15.2761244053,15.2761607631,15.2761971199,15.2762334759,15.2762698309,15.276306185,15.2763425382,15.2763788905,15.2764152419,15.2764515923,15.2764879419,15.2765242905,15.2765606382,15.276596985,15.2766333309,15.2766696758, +15.2767060199,15.276742363,15.2767787052,15.2768150465,15.2768513869,15.2768877264,15.2769240649,15.2769604026,15.2769967393,15.2770330751,15.27706941,15.277105744,15.277142077,15.2771784092,15.2772147404,15.2772510707, +15.2772874001,15.2773237286,15.2773600562,15.2773963828,15.2774327086,15.2774690334,15.2775053573,15.2775416803,15.2775780024,15.2776143236,15.2776506438,15.2776869632,15.2777232816,15.2777595991,15.2777959157,15.2778322314, +15.2778685462,15.27790486,15.277941173,15.277977485,15.2780137961,15.2780501063,15.2780864156,15.278122724,15.2781590314,15.278195338,15.2782316436,15.2782679483,15.2783042521,15.278340555,15.278376857,15.2784131581, +15.2784494582,15.2784857575,15.2785220558,15.2785583532,15.2785946497,15.2786309453,15.2786672399,15.2787035337,15.2787398266,15.2787761185,15.2788124095,15.2788486996,15.2788849888,15.2789212771,15.2789575645,15.2789938509, +15.2790301364,15.2790664211,15.2791027048,15.2791389876,15.2791752695,15.2792115505,15.2792478305,15.2792841097,15.2793203879,15.2793566653,15.2793929417,15.2794292172,15.2794654918,15.2795017655,15.2795380382,15.2795743101, +15.2796105811,15.2796468511,15.2796831202,15.2797193884,15.2797556557,15.2797919221,15.2798281876,15.2798644521,15.2799007158,15.2799369785,15.2799732404,15.2800095013,15.2800457613,15.2800820204,15.2801182786,15.2801545359, +15.2801907922,15.2802270477,15.2802633022,15.2802995558,15.2803358086,15.2803720604,15.2804083113,15.2804445612,15.2804808103,15.2805170585,15.2805533057,15.2805895521,15.2806257975,15.280662042,15.2806982856,15.2807345283, +15.2807707701,15.280807011,15.280843251,15.28087949,15.2809157282,15.2809519654,15.2809882018,15.2810244372,15.2810606717,15.2810969053,15.281133138,15.2811693697,15.2812056006,15.2812418306,15.2812780596,15.2813142878, +15.281350515,15.2813867413,15.2814229667,15.2814591912,15.2814954148,15.2815316375,15.2815678593,15.2816040801,15.2816403001,15.2816765191,15.2817127372,15.2817489545,15.2817851708,15.2818213862,15.2818576007,15.2818938143, +15.281930027,15.2819662387,15.2820024496,15.2820386595,15.2820748686,15.2821110767,15.2821472839,15.2821834903,15.2822196957,15.2822559002,15.2822921038,15.2823283064,15.2823645082,15.2824007091,15.282436909,15.2824731081, +15.2825093062,15.2825455035,15.2825816998,15.2826178952,15.2826540897,15.2826902833,15.282726476,15.2827626678,15.2827988587,15.2828350487,15.2828712377,15.2829074259,15.2829436131,15.2829797995,15.2830159849,15.2830521694, +15.283088353,15.2831245357,15.2831607175,15.2831968984,15.2832330784,15.2832692575,15.2833054357,15.2833416129,15.2833777893,15.2834139647,15.2834501393,15.2834863129,15.2835224856,15.2835586575,15.2835948284,15.2836309984, +15.2836671675,15.2837033357,15.283739503,15.2837756694,15.2838118348,15.2838479994,15.2838841631,15.2839203258,15.2839564877,15.2839926486,15.2840288086,15.2840649678,15.284101126,15.2841372833,15.2841734397,15.2842095952, +15.2842457498,15.2842819035,15.2843180563,15.2843542082,15.2843903592,15.2844265092,15.2844626584,15.2844988067,15.284534954,15.2845711005,15.284607246,15.2846433906,15.2846795344,15.2847156772,15.2847518191,15.2847879601, +15.2848241002,15.2848602394,15.2848963777,15.2849325151,15.2849686516,15.2850047872,15.2850409219,15.2850770556,15.2851131885,15.2851493205,15.2851854515,15.2852215817,15.2852577109,15.2852938393,15.2853299667,15.2853660932, +15.2854022189,15.2854383436,15.2854744674,15.2855105903,15.2855467123,15.2855828334,15.2856189536,15.2856550729,15.2856911913,15.2857273088,15.2857634254,15.2857995411,15.2858356559,15.2858717697,15.2859078827,15.2859439948, +15.2859801059,15.2860162162,15.2860523255,15.286088434,15.2861245415,15.2861606482,15.2861967539,15.2862328587,15.2862689627,15.2863050657,15.2863411678,15.2863772691,15.2864133694,15.2864494688,15.2864855673,15.2865216649, +15.2865577616,15.2865938574,15.2866299523,15.2866660463,15.2867021394,15.2867382316,15.2867743229,15.2868104133,15.2868465027,15.2868825913,15.286918679,15.2869547658,15.2869908516,15.2870269366,15.2870630207,15.2870991038, +15.2871351861,15.2871712674,15.2872073479,15.2872434275,15.2872795061,15.2873155839,15.2873516607,15.2873877366,15.2874238117,15.2874598858,15.2874959591,15.2875320314,15.2875681028,15.2876041734,15.287640243,15.2876763117, +15.2877123795,15.2877484465,15.2877845125,15.2878205776,15.2878566418,15.2878927052,15.2879287676,15.2879648291,15.2880008897,15.2880369494,15.2880730082,15.2881090661,15.2881451232,15.2881811793,15.2882172345,15.2882532888, +15.2882893422,15.2883253947,15.2883614463,15.288397497,15.2884335468,15.2884695957,15.2885056437,15.2885416908,15.288577737,15.2886137823,15.2886498267,15.2886858702,15.2887219128,15.2887579545,15.2887939953,15.2888300352, +15.2888660742,15.2889021123,15.2889381495,15.2889741858,15.2890102211,15.2890462556,15.2890822892,15.2891183219,15.2891543537,15.2891903846,15.2892264146,15.2892624437,15.2892984719,15.2893344992,15.2893705256,15.2894065511, +15.2894425757,15.2894785994,15.2895146222,15.2895506441,15.2895866651,15.2896226852,15.2896587044,15.2896947227,15.2897307401,15.2897667566,15.2898027722,15.2898387869,15.2898748007,15.2899108136,15.2899468256,15.2899828367, +15.2900188469,15.2900548562,15.2900908647,15.2901268722,15.2901628788,15.2901988845,15.2902348893,15.2902708932,15.2903068963,15.2903428984,15.2903788996,15.2904148999,15.2904508994,15.2904868979,15.2905228955,15.2905588922, +15.2905948881,15.290630883,15.2906668771,15.2907028702,15.2907388624,15.2907748538,15.2908108442,15.2908468338,15.2908828224,15.2909188102,15.290954797,15.290990783,15.2910267681,15.2910627522,15.2910987355,15.2911347179, +15.2911706993,15.2912066799,15.2912426596,15.2912786383,15.2913146162,15.2913505932,15.2913865693,15.2914225445,15.2914585188,15.2914944922,15.2915304647,15.2915664363,15.291602407,15.2916383768,15.2916743457,15.2917103137, +15.2917462808,15.2917822471,15.2918182124,15.2918541768,15.2918901403,15.291926103,15.2919620647,15.2919980256,15.2920339855,15.2920699445,15.2921059027,15.29214186,15.2921778163,15.2922137718,15.2922497264,15.29228568, +15.2923216328,15.2923575847,15.2923935357,15.2924294858,15.2924654349,15.2925013832,15.2925373306,15.2925732772,15.2926092228,15.2926451675,15.2926811113,15.2927170542,15.2927529962,15.2927889374,15.2928248776,15.292860817, +15.2928967554,15.292932693,15.2929686296,15.2930045654,15.2930405002,15.2930764342,15.2931123673,15.2931482995,15.2931842308,15.2932201612,15.2932560906,15.2932920192,15.293327947,15.2933638738,15.2933997997,15.2934357247, +15.2934716488,15.2935075721,15.2935434944,15.2935794159,15.2936153364,15.2936512561,15.2936871748,15.2937230927,15.2937590097,15.2937949257,15.2938308409,15.2938667552,15.2939026686,15.2939385811,15.2939744927,15.2940104034, +15.2940463133,15.2940822222,15.2941181302,15.2941540374,15.2941899436,15.294225849,15.2942617534,15.294297657,15.2943335597,15.2943694615,15.2944053623,15.2944412623,15.2944771614,15.2945130596,15.2945489569,15.2945848534, +15.2946207489,15.2946566435,15.2946925373,15.2947284301,15.2947643221,15.2948002131,15.2948361033,15.2948719926,15.294907881,15.2949437684,15.294979655,15.2950155407,15.2950514256,15.2950873095,15.2951231925,15.2951590746, +15.2951949559,15.2952308362,15.2952667157,15.2953025943,15.2953384719,15.2953743487,15.2954102246,15.2954460996,15.2954819737,15.2955178469,15.2955537192,15.2955895907,15.2956254612,15.2956613308,15.2956971996,15.2957330675, +15.2957689344,15.2958048005,15.2958406657,15.29587653,15.2959123934,15.2959482559,15.2959841175,15.2960199782,15.2960558381,15.296091697,15.2961275551,15.2961634122,15.2961992685,15.2962351239,15.2962709784,15.296306832, +15.2963426847,15.2963785365,15.2964143874,15.2964502375,15.2964860866,15.2965219349,15.2965577822,15.2965936287,15.2966294743,15.296665319,15.2967011628,15.2967370057,15.2967728477,15.2968086888,15.2968445291,15.2968803684, +15.2969162069,15.2969520444,15.2969878811,15.2970237169,15.2970595518,15.2970953858,15.2971312189,15.2971670512,15.2972028825,15.2972387129,15.2972745425,15.2973103712,15.2973461989,15.2973820258,15.2974178518,15.2974536769, +15.2974895012,15.2975253245,15.2975611469,15.2975969685,15.2976327891,15.2976686089,15.2977044278,15.2977402458,15.2977760629,15.2978118791,15.2978476944,15.2978835089,15.2979193224,15.2979551351,15.2979909468,15.2980267577, +15.2980625677,15.2980983768,15.298134185,15.2981699924,15.2982057988,15.2982416043,15.298277409,15.2983132128,15.2983490157,15.2983848177,15.2984206188,15.298456419,15.2984922183,15.2985280167,15.2985638143,15.298599611, +15.2986354067,15.2986712016,15.2987069956,15.2987427887,15.298778581,15.2988143723,15.2988501627,15.2988859523,15.298921741,15.2989575288,15.2989933156,15.2990291017,15.2990648868,15.299100671,15.2991364544,15.2991722368, +15.2992080184,15.2992437991,15.2992795789,15.2993153578,15.2993511358,15.2993869129,15.2994226892,15.2994584645,15.299494239,15.2995300126,15.2995657853,15.2996015571,15.299637328,15.2996730981,15.2997088672,15.2997446355, +15.2997804029,15.2998161693,15.299851935,15.2998876997,15.2999234635,15.2999592264,15.2999949885,15.3000307497,15.30006651,15.3001022694,15.3001380279,15.3001737855,15.3002095422,15.3002452981,15.3002810531,15.3003168071, +15.3003525603,15.3003883126,15.3004240641,15.3004598146,15.3004955642,15.300531313,15.3005670609,15.3006028079,15.300638554,15.3006742992,15.3007100436,15.300745787,15.3007815296,15.3008172712,15.300853012,15.300888752, +15.300924491,15.3009602291,15.3009959664,15.3010317027,15.3010674382,15.3011031728,15.3011389065,15.3011746394,15.3012103713,15.3012461024,15.3012818325,15.3013175618,15.3013532902,15.3013890177,15.3014247444,15.3014604701, +15.301496195,15.301531919,15.3015676421,15.3016033643,15.3016390856,15.301674806,15.3017105256,15.3017462443,15.3017819621,15.301817679,15.301853395,15.3018891101,15.3019248244,15.3019605377,15.3019962502,15.3020319618, +15.3020676725,15.3021033824,15.3021390913,15.3021747994,15.3022105065,15.3022462128,15.3022819183,15.3023176228,15.3023533264,15.3023890292,15.3024247311,15.3024604321,15.3024961322,15.3025318314,15.3025675297,15.3026032272, +15.3026389238,15.3026746195,15.3027103143,15.3027460082,15.3027817013,15.3028173934,15.3028530847,15.3028887751,15.3029244646,15.3029601532,15.302995841,15.3030315279,15.3030672138,15.3031028989,15.3031385832,15.3031742665, +15.3032099489,15.3032456305,15.3032813112,15.303316991,15.3033526699,15.303388348,15.3034240251,15.3034597014,15.3034953768,15.3035310513,15.3035667249,15.3036023977,15.3036380695,15.3036737405,15.3037094106,15.3037450798, +15.3037807482,15.3038164156,15.3038520822,15.3038877479,15.3039234127,15.3039590766,15.3039947397,15.3040304018,15.3040660631,15.3041017235,15.304137383,15.3041730417,15.3042086994,15.3042443563,15.3042800123,15.3043156674, +15.3043513217,15.304386975,15.3044226275,15.3044582791,15.3044939298,15.3045295796,15.3045652286,15.3046008766,15.3046365238,15.3046721701,15.3047078155,15.3047434601,15.3047791037,15.3048147465,15.3048503884,15.3048860294, +15.3049216696,15.3049573088,15.3049929472,15.3050285847,15.3050642213,15.3050998571,15.3051354919,15.3051711259,15.305206759,15.3052423912,15.3052780226,15.305313653,15.3053492826,15.3053849113,15.3054205391,15.3054561661, +15.3054917921,15.3055274173,15.3055630416,15.305598665,15.3056342875,15.3056699092,15.30570553,15.3057411499,15.3057767689,15.3058123871,15.3058480043,15.3058836207,15.3059192362,15.3059548508,15.3059904646,15.3060260774, +15.3060616894,15.3060973005,15.3061329108,15.3061685201,15.3062041286,15.3062397362,15.3062753429,15.3063109487,15.3063465537,15.3063821578,15.306417761,15.3064533633,15.3064889647,15.3065245653,15.306560165,15.3065957638, +15.3066313617,15.3066669588,15.3067025549,15.3067381502,15.3067737446,15.3068093382,15.3068449308,15.3068805226,15.3069161135,15.3069517035,15.3069872927,15.307022881,15.3070584684,15.3070940549,15.3071296405,15.3071652253, +15.3072008091,15.3072363921,15.3072719743,15.3073075555,15.3073431359,15.3073787154,15.307414294,15.3074498717,15.3074854486,15.3075210246,15.3075565997,15.3075921739,15.3076277473,15.3076633197,15.3076988913,15.307734462, +15.3077700319,15.3078056009,15.3078411689,15.3078767362,15.3079123025,15.307947868,15.3079834325,15.3080189962,15.3080545591,15.308090121,15.3081256821,15.3081612423,15.3081968016,15.3082323601,15.3082679176,15.3083034743, +15.3083390301,15.3083745851,15.3084101391,15.3084456923,15.3084812446,15.3085167961,15.3085523466,15.3085878963,15.3086234451,15.3086589931,15.3086945401,15.3087300863,15.3087656316,15.308801176,15.3088367196,15.3088722623, +15.3089078041,15.308943345,15.308978885,15.3090144242,15.3090499625,15.3090854999,15.3091210365,15.3091565722,15.309192107,15.3092276409,15.3092631739,15.3092987061,15.3093342374,15.3093697678,15.3094052974,15.309440826, +15.3094763538,15.3095118808,15.3095474068,15.309582932,15.3096184563,15.3096539797,15.3096895023,15.3097250239,15.3097605447,15.3097960647,15.3098315837,15.3098671019,15.3099026192,15.3099381356,15.3099736512,15.3100091658, +15.3100446796,15.3100801926,15.3101157046,15.3101512158,15.3101867261,15.3102222356,15.3102577441,15.3102932518,15.3103287586,15.3103642646,15.3103997696,15.3104352738,15.3104707771,15.3105062796,15.3105417811,15.3105772818, +15.3106127817,15.3106482806,15.3106837787,15.3107192759,15.3107547722,15.3107902677,15.3108257623,15.310861256,15.3108967488,15.3109322408,15.3109677318,15.3110032221,15.3110387114,15.3110741999,15.3111096875,15.3111451742, +15.3111806601,15.311216145,15.3112516291,15.3112871124,15.3113225947,15.3113580762,15.3113935568,15.3114290366,15.3114645154,15.3114999934,15.3115354706,15.3115709468,15.3116064222,15.3116418967,15.3116773703,15.3117128431, +15.311748315,15.311783786,15.3118192562,15.3118547254,15.3118901939,15.3119256614,15.311961128,15.3119965938,15.3120320587,15.3120675228,15.312102986,15.3121384483,15.3121739097,15.3122093702,15.3122448299,15.3122802887, +15.3123157467,15.3123512038,15.31238666,15.3124221153,15.3124575697,15.3124930233,15.312528476,15.3125639279,15.3125993789,15.312634829,15.3126702782,15.3127057266,15.312741174,15.3127766207,15.3128120664,15.3128475113, +15.3128829553,15.3129183984,15.3129538407,15.3129892821,15.3130247226,15.3130601622,15.313095601,15.3131310389,15.313166476,15.3132019121,15.3132373474,15.3132727819,15.3133082154,15.3133436481,15.3133790799,15.3134145109, +15.313449941,15.3134853702,15.3135207985,15.313556226,15.3135916526,15.3136270783,15.3136625032,15.3136979271,15.3137333503,15.3137687725,15.3138041939,15.3138396144,15.313875034,15.3139104528,15.3139458707,15.3139812877, +15.3140167039,15.3140521192,15.3140875336,15.3141229472,15.3141583599,15.3141937717,15.3142291826,15.3142645927,15.3143000019,15.3143354102,15.3143708177,15.3144062243,15.31444163,15.3144770349,15.3145124389,15.314547842, +15.3145832443,15.3146186457,15.3146540462,15.3146894458,15.3147248446,15.3147602425,15.3147956396,15.3148310357,15.3148664311,15.3149018255,15.3149372191,15.3149726118,15.3150080036,15.3150433946,15.3150787847,15.3151141739, +15.3151495623,15.3151849498,15.3152203364,15.3152557221,15.315291107,15.315326491,15.3153618742,15.3153972565,15.3154326379,15.3154680185,15.3155033981,15.315538777,15.3155741549,15.315609532,15.3156449082,15.3156802835, +15.315715658,15.3157510316,15.3157864044,15.3158217763,15.3158571473,15.3158925174,15.3159278867,15.3159632551,15.3159986226,15.3160339893,15.3160693551,15.31610472,15.3161400841,15.3161754473,15.3162108097,15.3162461711, +15.3162815317,15.3163168915,15.3163522504,15.3163876084,15.3164229655,15.3164583218,15.3164936772,15.3165290317,15.3165643854,15.3165997382,15.3166350901,15.3166704412,15.3167057914,15.3167411408,15.3167764892,15.3168118369, +15.3168471836,15.3168825295,15.3169178745,15.3169532186,15.3169885619,15.3170239043,15.3170592459,15.3170945866,15.3171299264,15.3171652653,15.3172006034,15.3172359406,15.317271277,15.3173066125,15.3173419471,15.3173772809, +15.3174126138,15.3174479458,15.317483277,15.3175186073,15.3175539367,15.3175892653,15.317624593,15.3176599198,15.3176952458,15.3177305709,15.3177658951,15.3178012185,15.317836541,15.3178718627,15.3179071834,15.3179425034, +15.3179778224,15.3180131406,15.3180484579,15.3180837744,15.31811909,15.3181544047,15.3181897186,15.3182250316,15.3182603437,15.318295655,15.3183309654,15.3183662749,15.3184015836,15.3184368914,15.3184721984,15.3185075045, +15.3185428097,15.3185781141,15.3186134176,15.3186487202,15.318684022,15.3187193229,15.3187546229,15.3187899221,15.3188252204,15.3188605179,15.3188958144,15.3189311102,15.318966405,15.319001699,15.3190369921,15.3190722844, +15.3191075758,15.3191428664,15.319178156,15.3192134449,15.3192487328,15.3192840199,15.3193193061,15.3193545915,15.319389876,15.3194251596,15.3194604424,15.3194957243,15.3195310054,15.3195662856,15.3196015649,15.3196368433, +15.3196721209,15.3197073977,15.3197426736,15.3197779486,15.3198132227,15.319848496,15.3198837684,15.31991904,15.3199543107,15.3199895805,15.3200248495,15.3200601176,15.3200953849,15.3201306512,15.3201659168,15.3202011814, +15.3202364452,15.3202717082,15.3203069703,15.3203422315,15.3203774918,15.3204127513,15.32044801,15.3204832677,15.3205185246,15.3205537807,15.3205890359,15.3206242902,15.3206595436,15.3206947962,15.320730048,15.3207652989, +15.3208005489,15.320835798,15.3208710463,15.3209062938,15.3209415403,15.320976786,15.3210120309,15.3210472749,15.321082518,15.3211177603,15.3211530017,15.3211882422,15.3212234819,15.3212587207,15.3212939587,15.3213291958, +15.321364432,15.3213996674,15.3214349019,15.3214701356,15.3215053684,15.3215406003,15.3215758314,15.3216110616,15.321646291,15.3216815195,15.3217167471,15.3217519739,15.3217871998,15.3218224249,15.3218576491,15.3218928724, +15.3219280949,15.3219633165,15.3219985373,15.3220337572,15.3220689762,15.3221041944,15.3221394117,15.3221746282,15.3222098437,15.3222450585,15.3222802724,15.3223154854,15.3223506975,15.3223859088,15.3224211193,15.3224563289, +15.3224915376,15.3225267455,15.3225619525,15.3225971586,15.3226323639,15.3226675683,15.3227027719,15.3227379746,15.3227731765,15.3228083774,15.3228435776,15.3228787769,15.3229139753,15.3229491728,15.3229843695,15.3230195654, +15.3230547603,15.3230899545,15.3231251477,15.3231603401,15.3231955317,15.3232307224,15.3232659122,15.3233011012,15.3233362893,15.3233714765,15.3234066629,15.3234418485,15.3234770332,15.323512217,15.3235473999,15.323582582, +15.3236177633,15.3236529437,15.3236881232,15.3237233019,15.3237584797,15.3237936567,15.3238288328,15.323864008,15.3238991824,15.3239343559,15.3239695286,15.3240047004,15.3240398714,15.3240750415,15.3241102107,15.3241453791, +15.3241805466,15.3242157133,15.3242508791,15.3242860441,15.3243212082,15.3243563714,15.3243915338,15.3244266953,15.324461856,15.3244970158,15.3245321747,15.3245673328,15.3246024901,15.3246376465,15.324672802,15.3247079567, +15.3247431105,15.3247782635,15.3248134156,15.3248485668,15.3248837172,15.3249188667,15.3249540154,15.3249891632,15.3250243102,15.3250594563,15.3250946016,15.3251297459,15.3251648895,15.3252000322,15.325235174,15.325270315, +15.3253054551,15.3253405943,15.3253757328,15.3254108703,15.325446007,15.3254811428,15.3255162778,15.3255514119,15.3255865452,15.3256216776,15.3256568092,15.3256919399,15.3257270697,15.3257621987,15.3257973269,15.3258324541, +15.3258675806,15.3259027061,15.3259378309,15.3259729547,15.3260080777,15.3260431999,15.3260783212,15.3261134416,15.3261485612,15.3261836799,15.3262187978,15.3262539148,15.326289031,15.3263241463,15.3263592608,15.3263943744, +15.3264294871,15.326464599,15.3264997101,15.3265348202,15.3265699296,15.326605038,15.3266401457,15.3266752524,15.3267103583,15.3267454634,15.3267805676,15.326815671,15.3268507735,15.3268858751,15.3269209759,15.3269560758, +15.3269911749,15.3270262731,15.3270613705,15.327096467,15.3271315627,15.3271666575,15.3272017515,15.3272368446,15.3272719368,15.3273070282,15.3273421187,15.3273772084,15.3274122973,15.3274473853,15.3274824724,15.3275175587, +15.3275526441,15.3275877287,15.3276228124,15.3276578952,15.3276929772,15.3277280584,15.3277631387,15.3277982182,15.3278332968,15.3278683745,15.3279034514,15.3279385274,15.3279736026,15.3280086769,15.3280437504,15.3280788231, +15.3281138948,15.3281489658,15.3281840358,15.328219105,15.3282541734,15.3282892409,15.3283243076,15.3283593734,15.3283944384,15.3284295025,15.3284645657,15.3284996281,15.3285346897,15.3285697504,15.3286048102,15.3286398692, +15.3286749273,15.3287099846,15.3287450411,15.3287800966,15.3288151514,15.3288502052,15.3288852583,15.3289203105,15.3289553618,15.3289904123,15.3290254619,15.3290605106,15.3290955586,15.3291306056,15.3291656519,15.3292006972, +15.3292357417,15.3292707854,15.3293058282,15.3293408702,15.3293759113,15.3294109515,15.3294459909,15.3294810295,15.3295160672,15.3295511041,15.3295861401,15.3296211752,15.3296562095,15.329691243,15.3297262756,15.3297613073, +15.3297963382,15.3298313683,15.3298663975,15.3299014258,15.3299364533,15.32997148,15.3300065058,15.3300415307,15.3300765548,15.330111578,15.3301466004,15.330181622,15.3302166427,15.3302516625,15.3302866815,15.3303216997, +15.330356717,15.3303917334,15.330426749,15.3304617637,15.3304967776,15.3305317907,15.3305668029,15.3306018142,15.3306368247,15.3306718344,15.3307068432,15.3307418511,15.3307768582,15.3308118645,15.3308468699,15.3308818744, +15.3309168781,15.330951881,15.330986883,15.3310218841,15.3310568844,15.3310918839,15.3311268825,15.3311618802,15.3311968772,15.3312318732,15.3312668684,15.3313018628,15.3313368563,15.331371849,15.3314068408,15.3314418317, +15.3314768219,15.3315118111,15.3315467995,15.3315817871,15.3316167738,15.3316517597,15.3316867447,15.3317217289,15.3317567123,15.3317916947,15.3318266764,15.3318616572,15.3318966371,15.3319316162,15.3319665944,15.3320015718, +15.3320365484,15.3320715241,15.3321064989,15.3321414729,15.3321764461,15.3322114184,15.3322463898,15.3322813604,15.3323163302,15.3323512991,15.3323862672,15.3324212344,15.3324562008,15.3324911663,15.332526131,15.3325610948, +15.3325960578,15.3326310199,15.3326659812,15.3327009417,15.3327359012,15.33277086,15.3328058179,15.3328407749,15.3328757312,15.3329106865,15.332945641,15.3329805947,15.3330155475,15.3330504995,15.3330854506,15.3331204009, +15.3331553503,15.3331902989,15.3332252466,15.3332601935,15.3332951396,15.3333300848,15.3333650291,15.3333999726,15.3334349153,15.3334698571,15.3335047981,15.3335397382,15.3335746775,15.3336096159,15.3336445535,15.3336794902, +15.3337144261,15.3337493611,15.3337842953,15.3338192287,15.3338541612,15.3338890929,15.3339240237,15.3339589536,15.3339938828,15.334028811,15.3340637385,15.3340986651,15.3341335908,15.3341685157,15.3342034397,15.3342383629, +15.3342732853,15.3343082068,15.3343431275,15.3343780473,15.3344129663,15.3344478844,15.3344828017,15.3345177182,15.3345526338,15.3345875485,15.3346224624,15.3346573755,15.3346922877,15.3347271991,15.3347621096,15.3347970193, +15.3348319281,15.3348668361,15.3349017433,15.3349366496,15.334971555,15.3350064596,15.3350413634,15.3350762663,15.3351111684,15.3351460697,15.3351809701,15.3352158696,15.3352507683,15.3352856662,15.3353205632,15.3353554594, +15.3353903547,15.3354252492,15.3354601428,15.3354950356,15.3355299276,15.3355648187,15.3355997089,15.3356345984,15.3356694869,15.3357043747,15.3357392616,15.3357741476,15.3358090328,15.3358439172,15.3358788007,15.3359136834, +15.3359485652,15.3359834462,15.3360183263,15.3360532056,15.3360880841,15.3361229617,15.3361578385,15.3361927144,15.3362275895,15.3362624637,15.3362973371,15.3363322097,15.3363670814,15.3364019523,15.3364368223,15.3364716915, +15.3365065598,15.3365414273,15.336576294,15.3366111598,15.3366460247,15.3366808889,15.3367157522,15.3367506146,15.3367854762,15.336820337,15.3368551969,15.336890056,15.3369249142,15.3369597716,15.3369946281,15.3370294838, +15.3370643387,15.3370991927,15.3371340459,15.3371688982,15.3372037497,15.3372386004,15.3372734502,15.3373082991,15.3373431473,15.3373779946,15.337412841,15.3374476866,15.3374825314,15.3375173753,15.3375522184,15.3375870606, +15.337621902,15.3376567425,15.3376915823,15.3377264211,15.3377612592,15.3377960963,15.3378309327,15.3378657682,15.3379006029,15.3379354367,15.3379702697,15.3380051018,15.3380399331,15.3380747636,15.3381095932,15.338144422, +15.3381792499,15.338214077,15.3382489033,15.3382837287,15.3383185532,15.338353377,15.3383881999,15.3384230219,15.3384578431,15.3384926635,15.338527483,15.3385623017,15.3385971196,15.3386319366,15.3386667528,15.3387015681, +15.3387363826,15.3387711962,15.338806009,15.338840821,15.3388756321,15.3389104424,15.3389452519,15.3389800605,15.3390148683,15.3390496752,15.3390844813,15.3391192865,15.3391540909,15.3391888945,15.3392236972,15.3392584991, +15.3392933002,15.3393281004,15.3393628998,15.3393976983,15.339432496,15.3394672929,15.3395020889,15.339536884,15.3395716784,15.3396064719,15.3396412645,15.3396760564,15.3397108473,15.3397456375,15.3397804268,15.3398152153, +15.3398500029,15.3398847897,15.3399195756,15.3399543607,15.339989145,15.3400239284,15.340058711,15.3400934928,15.3401282737,15.3401630538,15.340197833,15.3402326114,15.340267389,15.3403021657,15.3403369416,15.3403717166, +15.3404064909,15.3404412642,15.3404760368,15.3405108085,15.3405455793,15.3405803493,15.3406151185,15.3406498869,15.3406846544,15.340719421,15.3407541869,15.3407889519,15.340823716,15.3408584793,15.3408932418,15.3409280034, +15.3409627643,15.3409975242,15.3410322833,15.3410670416,15.3411017991,15.3411365557,15.3411713115,15.3412060664,15.3412408205,15.3412755738,15.3413103262,15.3413450778,15.3413798286,15.3414145785,15.3414493276,15.3414840758, +15.3415188232,15.3415535698,15.3415883156,15.3416230605,15.3416578045,15.3416925477,15.3417272901,15.3417620317,15.3417967724,15.3418315123,15.3418662513,15.3419009895,15.3419357269,15.3419704634,15.3420051991,15.342039934, +15.342074668,15.3421094012,15.3421441335,15.3421788651,15.3422135957,15.3422483256,15.3422830546,15.3423177828,15.3423525101,15.3423872366,15.3424219623,15.3424566871,15.3424914111,15.3425261342,15.3425608565,15.342595578, +15.3426302987,15.3426650185,15.3426997375,15.3427344556,15.3427691729,15.3428038894,15.342838605,15.3428733198,15.3429080338,15.3429427469,15.3429774592,15.3430121707,15.3430468813,15.3430815911,15.3431163,15.3431510082, +15.3431857154,15.3432204219,15.3432551275,15.3432898323,15.3433245362,15.3433592393,15.3433939416,15.3434286431,15.3434633437,15.3434980434,15.3435327424,15.3435674405,15.3436021377,15.3436368342,15.3436715298,15.3437062245, +15.3437409185,15.3437756116,15.3438103038,15.3438449953,15.3438796858,15.3439143756,15.3439490645,15.3439837526,15.3440184399,15.3440531263,15.3440878119,15.3441224966,15.3441571806,15.3441918637,15.3442265459,15.3442612273, +15.3442959079,15.3443305877,15.3443652666,15.3443999447,15.3444346219,15.3444692983,15.3445039739,15.3445386487,15.3445733226,15.3446079957,15.3446426679,15.3446773394,15.3447120099,15.3447466797,15.3447813486,15.3448160167, +15.3448506839,15.3448853504,15.3449200159,15.3449546807,15.3449893446,15.3450240077,15.34505867,15.3450933314,15.345127992,15.3451626517,15.3451973107,15.3452319687,15.345266626,15.3453012824,15.345335938,15.3453705928, +15.3454052467,15.3454398998,15.3454745521,15.3455092035,15.3455438541,15.3455785039,15.3456131528,15.3456478009,15.3456824482,15.3457170946,15.3457517402,15.345786385,15.345821029,15.3458556721,15.3458903143,15.3459249558, +15.3459595964,15.3459942362,15.3460288751,15.3460635133,15.3460981505,15.346132787,15.3461674226,15.3462020574,15.3462366914,15.3462713245,15.3463059568,15.3463405883,15.3463752189,15.3464098487,15.3464444777,15.3464791059, +15.3465137332,15.3465483596,15.3465829853,15.3466176101,15.3466522341,15.3466868573,15.3467214796,15.3467561011,15.3467907218,15.3468253416,15.3468599606,15.3468945788,15.3469291961,15.3469638126,15.3469984283,15.3470330431, +15.3470676572,15.3471022704,15.3471368827,15.3471714942,15.3472061049,15.3472407148,15.3472753238,15.3473099321,15.3473445394,15.347379146,15.3474137517,15.3474483566,15.3474829606,15.3475175639,15.3475521663,15.3475867678, +15.3476213686,15.3476559685,15.3476905676,15.3477251658,15.3477597632,15.3477943598,15.3478289556,15.3478635505,15.3478981446,15.3479327379,15.3479673303,15.3480019219,15.3480365127,15.3480711027,15.3481056918,15.3481402801, +15.3481748675,15.3482094542,15.34824404,15.348278625,15.3483132091,15.3483477924,15.3483823749,15.3484169566,15.3484515374,15.3484861174,15.3485206966,15.3485552749,15.3485898524,15.3486244291,15.348659005,15.34869358, +15.3487281542,15.3487627276,15.3487973002,15.3488318719,15.3488664428,15.3489010128,15.348935582,15.3489701505,15.349004718,15.3490392848,15.3490738507,15.3491084158,15.34914298,15.3491775435,15.3492121061,15.3492466679, +15.3492812288,15.3493157889,15.3493503482,15.3493849067,15.3494194643,15.3494540212,15.3494885771,15.3495231323,15.3495576866,15.3495922401,15.3496267928,15.3496613446,15.3496958957,15.3497304458,15.3497649952,15.3497995437, +15.3498340915,15.3498686383,15.3499031844,15.3499377296,15.349972274,15.3500068176,15.3500413603,15.3500759023,15.3501104433,15.3501449836,15.3501795231,15.3502140617,15.3502485994,15.3502831364,15.3503176725,15.3503522078, +15.3503867423,15.350421276,15.3504558088,15.3504903408,15.350524872,15.3505594023,15.3505939318,15.3506284605,15.3506629884,15.3506975154,15.3507320416,15.350766567,15.3508010916,15.3508356153,15.3508701382,15.3509046603, +15.3509391815,15.350973702,15.3510082216,15.3510427404,15.3510772583,15.3511117754,15.3511462917,15.3511808072,15.3512153219,15.3512498357,15.3512843487,15.3513188608,15.3513533722,15.3513878827,15.3514223924,15.3514569013, +15.3514914093,15.3515259165,15.3515604229,15.3515949285,15.3516294332,15.3516639372,15.3516984403,15.3517329425,15.351767444,15.3518019446,15.3518364444,15.3518709433,15.3519054415,15.3519399388,15.3519744353,15.352008931, +15.3520434258,15.3520779198,15.352112413,15.3521469054,15.3521813969,15.3522158876,15.3522503775,15.3522848666,15.3523193548,15.3523538423,15.3523883289,15.3524228146,15.3524572996,15.3524917837,15.352526267,15.3525607495, +15.3525952311,15.352629712,15.352664192,15.3526986711,15.3527331495,15.352767627,15.3528021037,15.3528365796,15.3528710547,15.3529055289,15.3529400023,15.3529744749,15.3530089467,15.3530434176,15.3530778877,15.353112357, +15.3531468255,15.3531812931,15.35321576,15.353250226,15.3532846911,15.3533191555,15.353353619,15.3533880817,15.3534225436,15.3534570047,15.3534914649,15.3535259243,15.3535603829,15.3535948407,15.3536292976,15.3536637537, +15.353698209,15.3537326635,15.3537671172,15.35380157,15.353836022,15.3538704732,15.3539049236,15.3539393731,15.3539738218,15.3540082697,15.3540427168,15.354077163,15.3541116085,15.3541460531,15.3541804968,15.3542149398, +15.3542493819,15.3542838233,15.3543182638,15.3543527034,15.3543871423,15.3544215803,15.3544560175,15.3544904539,15.3545248894,15.3545593242,15.3545937581,15.3546281912,15.3546626235,15.3546970549,15.3547314856,15.3547659154, +15.3548003444,15.3548347725,15.3548691999,15.3549036264,15.3549380521,15.354972477,15.355006901,15.3550413243,15.3550757467,15.3551101683,15.355144589,15.355179009,15.3552134281,15.3552478464,15.3552822639,15.3553166806, +15.3553510964,15.3553855114,15.3554199257,15.355454339,15.3554887516,15.3555231633,15.3555575743,15.3555919844,15.3556263936,15.3556608021,15.3556952097,15.3557296166,15.3557640225,15.3557984277,15.3558328321,15.3558672356, +15.3559016383,15.3559360402,15.3559704413,15.3560048416,15.356039241,15.3560736396,15.3561080374,15.3561424344,15.3561768305,15.3562112258,15.3562456204,15.3562800141,15.3563144069,15.356348799,15.3563831902,15.3564175806, +15.3564519702,15.356486359,15.356520747,15.3565551341,15.3565895204,15.3566239059,15.3566582906,15.3566926744,15.3567270575,15.3567614397,15.3567958211,15.3568302017,15.3568645814,15.3568989604,15.3569333385,15.3569677158, +15.3570020923,15.3570364679,15.3570708428,15.3571052168,15.35713959,15.3571739624,15.357208334,15.3572427047,15.3572770746,15.3573114438,15.357345812,15.3573801795,15.3574145462,15.357448912,15.357483277,15.3575176412, +15.3575520046,15.3575863672,15.3576207289,15.3576550899,15.35768945,15.3577238093,15.3577581677,15.3577925254,15.3578268822,15.3578612382,15.3578955934,15.3579299478,15.3579643014,15.3579986541,15.358033006,15.3580673571, +15.3581017074,15.3581360569,15.3581704056,15.3582047534,15.3582391004,15.3582734466,15.358307792,15.3583421366,15.3583764803,15.3584108233,15.3584451654,15.3584795067,15.3585138471,15.3585481868,15.3585825257,15.3586168637, +15.3586512009,15.3586855373,15.3587198729,15.3587542076,15.3587885416,15.3588228747,15.358857207,15.3588915385,15.3589258692,15.358960199,15.3589945281,15.3590288563,15.3590631837,15.3590975103,15.359131836,15.359166161, +15.3592004851,15.3592348085,15.359269131,15.3593034527,15.3593377735,15.3593720936,15.3594064128,15.3594407312,15.3594750488,15.3595093656,15.3595436816,15.3595779968,15.3596123111,15.3596466246,15.3596809374,15.3597152492, +15.3597495603,15.3597838706,15.35981818,15.3598524887,15.3598867965,15.3599211035,15.3599554097,15.359989715,15.3600240196,15.3600583233,15.3600926262,15.3601269283,15.3601612296,15.3601955301,15.3602298297,15.3602641286, +15.3602984266,15.3603327238,15.3603670202,15.3604013158,15.3604356106,15.3604699045,15.3605041977,15.36053849,15.3605727815,15.3606070722,15.360641362,15.3606756511,15.3607099393,15.3607442268,15.3607785134,15.3608127992, +15.3608470842,15.3608813684,15.3609156517,15.3609499342,15.360984216,15.3610184969,15.361052777,15.3610870563,15.3611213347,15.3611556124,15.3611898892,15.3612241653,15.3612584405,15.3612927149,15.3613269884,15.3613612612, +15.3613955332,15.3614298043,15.3614640746,15.3614983441,15.3615326128,15.3615668807,15.3616011478,15.3616354141,15.3616696795,15.3617039441,15.3617382079,15.3617724709,15.3618067331,15.3618409945,15.3618752551,15.3619095148, +15.3619437737,15.3619780319,15.3620122892,15.3620465457,15.3620808013,15.3621150562,15.3621493102,15.3621835635,15.3622178159,15.3622520675,15.3622863183,15.3623205683,15.3623548175,15.3623890658,15.3624233134,15.3624575601, +15.362491806,15.3625260512,15.3625602954,15.3625945389,15.3626287816,15.3626630235,15.3626972645,15.3627315047,15.3627657442,15.3627999828,15.3628342206,15.3628684575,15.3629026937,15.3629369291,15.3629711636,15.3630053973, +15.3630396303,15.3630738624,15.3631080937,15.3631423241,15.3631765538,15.3632107827,15.3632450107,15.363279238,15.3633134644,15.36334769,15.3633819148,15.3634161388,15.3634503619,15.3634845843,15.3635188059,15.3635530266, +15.3635872465,15.3636214656,15.3636556839,15.3636899014,15.3637241181,15.363758334,15.363792549,15.3638267633,15.3638609767,15.3638951894,15.3639294012,15.3639636122,15.3639978224,15.3640320317,15.3640662403,15.3641004481, +15.364134655,15.3641688611,15.3642030665,15.364237271,15.3642714747,15.3643056776,15.3643398797,15.3643740809,15.3644082814,15.364442481,15.3644766799,15.3645108779,15.3645450751,15.3645792715,15.3646134671,15.3646476619, +15.3646818559,15.364716049,15.3647502414,15.3647844329,15.3648186237,15.3648528136,15.3648870027,15.364921191,15.3649553785,15.3649895652,15.365023751,15.3650579361,15.3650921203,15.3651263038,15.3651604864,15.3651946682, +15.3652288493,15.3652630295,15.3652972088,15.3653313874,15.3653655652,15.3653997422,15.3654339183,15.3654680937,15.3655022682,15.3655364419,15.3655706148,15.3656047869,15.3656389582,15.3656731287,15.3657072984,15.3657414673, +15.3657756353,15.3658098026,15.365843969,15.3658781346,15.3659122995,15.3659464635,15.3659806267,15.3660147891,15.3660489507,15.3660831114,15.3661172714,15.3661514306,15.3661855889,15.3662197465,15.3662539032,15.3662880591, +15.3663222142,15.3663563686,15.3663905221,15.3664246747,15.3664588266,15.3664929777,15.366527128,15.3665612774,15.3665954261,15.3666295739,15.3666637209,15.3666978672,15.3667320126,15.3667661572,15.366800301,15.366834444, +15.3668685862,15.3669027275,15.3669368681,15.3669710079,15.3670051468,15.367039285,15.3670734223,15.3671075588,15.3671416946,15.3671758295,15.3672099636,15.3672440969,15.3672782294,15.367312361,15.3673464919,15.367380622, +15.3674147512,15.3674488797,15.3674830073,15.3675171342,15.3675512602,15.3675853854,15.3676195099,15.3676536335,15.3676877563,15.3677218783,15.3677559995,15.3677901198,15.3678242394,15.3678583582,15.3678924761,15.3679265933, +15.3679607096,15.3679948252,15.3680289399,15.3680630538,15.368097167,15.3681312793,15.3681653908,15.3681995015,15.3682336114,15.3682677205,15.3683018288,15.3683359362,15.3683700429,15.3684041488,15.3684382538,15.3684723581, +15.3685064615,15.3685405641,15.368574666,15.368608767,15.3686428672,15.3686769666,15.3687110652,15.368745163,15.36877926,15.3688133562,15.3688474516,15.3688815462,15.36891564,15.3689497329,15.3689838251,15.3690179165, +15.369052007,15.3690860967,15.3691201857,15.3691542738,15.3691883611,15.3692224477,15.3692565334,15.3692906183,15.3693247024,15.3693587857,15.3693928682,15.3694269499,15.3694610308,15.3694951109,15.3695291901,15.3695632686, +15.3695973463,15.3696314231,15.3696654992,15.3696995744,15.3697336489,15.3697677225,15.3698017954,15.3698358674,15.3698699386,15.3699040091,15.3699380787,15.3699721475,15.3700062155,15.3700402827,15.3700743491,15.3701084147, +15.3701424795,15.3701765435,15.3702106067,15.370244669,15.3702787306,15.3703127914,15.3703468514,15.3703809105,15.3704149689,15.3704490264,15.3704830832,15.3705171391,15.3705511943,15.3705852486,15.3706193021,15.3706533549, +15.3706874068,15.3707214579,15.3707555083,15.3707895578,15.3708236065,15.3708576544,15.3708917015,15.3709257478,15.3709597933,15.370993838,15.3710278819,15.371061925,15.3710959673,15.3711300087,15.3711640494,15.3711980893, +15.3712321284,15.3712661666,15.3713002041,15.3713342408,15.3713682766,15.3714023117,15.3714363459,15.3714703794,15.371504412,15.3715384439,15.3715724749,15.3716065052,15.3716405346,15.3716745632,15.3717085911,15.3717426181, +15.3717766443,15.3718106698,15.3718446944,15.3718787182,15.3719127412,15.3719467634,15.3719807849,15.3720148055,15.3720488253,15.3720828443,15.3721168625,15.3721508799,15.3721848965,15.3722189123,15.3722529273,15.3722869415, +15.3723209549,15.3723549675,15.3723889792,15.3724229902,15.3724570004,15.3724910098,15.3725250184,15.3725590262,15.3725930331,15.3726270393,15.3726610447,15.3726950493,15.372729053,15.372763056,15.3727970582,15.3728310595, +15.3728650601,15.3728990599,15.3729330588,15.372967057,15.3730010544,15.3730350509,15.3730690467,15.3731030416,15.3731370358,15.3731710292,15.3732050217,15.3732390135,15.3732730044,15.3733069946,15.3733409839,15.3733749725, +15.3734089602,15.3734429472,15.3734769333,15.3735109187,15.3735449032,15.373578887,15.3736128699,15.3736468521,15.3736808334,15.373714814,15.3737487937,15.3737827726,15.3738167508,15.3738507281,15.3738847047,15.3739186804, +15.3739526554,15.3739866295,15.3740206029,15.3740545754,15.3740885471,15.3741225181,15.3741564882,15.3741904576,15.3742244261,15.3742583939,15.3742923608,15.374326327,15.3743602923,15.3743942569,15.3744282206,15.3744621835, +15.3744961457,15.374530107,15.3745640676,15.3745980273,15.3746319863,15.3746659444,15.3746999018,15.3747338583,15.3747678141,15.374801769,15.3748357232,15.3748696766,15.3749036291,15.3749375809,15.3749715318,15.375005482, +15.3750394313,15.3750733799,15.3751073277,15.3751412746,15.3751752208,15.3752091662,15.3752431107,15.3752770545,15.3753109975,15.3753449396,15.375378881,15.3754128216,15.3754467614,15.3754807003,15.3755146385,15.3755485759, +15.3755825125,15.3756164483,15.3756503833,15.3756843174,15.3757182508,15.3757521834,15.3757861152,15.3758200462,15.3758539764,15.3758879058,15.3759218344,15.3759557622,15.3759896892,15.3760236154,15.3760575408,15.3760914655, +15.3761253893,15.3761593123,15.3761932345,15.3762271559,15.3762610766,15.3762949964,15.3763289154,15.3763628336,15.3763967511,15.3764306677,15.3764645836,15.3764984986,15.3765324128,15.3765663263,15.3766002389,15.3766341508, +15.3766680619,15.3767019721,15.3767358816,15.3767697902,15.3768036981,15.3768376052,15.3768715115,15.3769054169,15.3769393216,15.3769732255,15.3770071286,15.3770410309,15.3770749324,15.3771088331,15.377142733,15.3771766321, +15.3772105304,15.3772444279,15.3772783246,15.3773122205,15.3773461157,15.37738001,15.3774139035,15.3774477962,15.3774816882,15.3775155793,15.3775494697,15.3775833592,15.377617248,15.3776511359,15.3776850231,15.3777189095, +15.377752795,15.3777866798,15.3778205638,15.377854447,15.3778883293,15.3779222109,15.3779560917,15.3779899717,15.3780238509,15.3780577293,15.3780916069,15.3781254838,15.3781593598,15.378193235,15.3782271094,15.3782609831, +15.3782948559,15.378328728,15.3783625992,15.3783964697,15.3784303393,15.3784642082,15.3784980762,15.3785319435,15.37856581,15.3785996757,15.3786335406,15.3786674047,15.378701268,15.3787351305,15.3787689922,15.3788028531, +15.3788367132,15.3788705725,15.3789044311,15.3789382888,15.3789721457,15.3790060019,15.3790398572,15.3790737118,15.3791075656,15.3791414185,15.3791752707,15.3792091221,15.3792429727,15.3792768225,15.3793106715,15.3793445197, +15.3793783671,15.3794122137,15.3794460595,15.3794799045,15.3795137488,15.3795475922,15.3795814349,15.3796152767,15.3796491178,15.379682958,15.3797167975,15.3797506362,15.3797844741,15.3798183111,15.3798521474,15.3798859829, +15.3799198176,15.3799536516,15.3799874847,15.380021317,15.3800551485,15.3800889793,15.3801228092,15.3801566384,15.3801904667,15.3802242943,15.3802581211,15.3802919471,15.3803257723,15.3803595967,15.3803934203,15.3804272431, +15.3804610651,15.3804948863,15.3805287067,15.3805625264,15.3805963452,15.3806301633,15.3806639805,15.380697797,15.3807316127,15.3807654276,15.3807992417,15.380833055,15.3808668675,15.3809006792,15.3809344901,15.3809683002, +15.3810021096,15.3810359181,15.3810697258,15.3811035328,15.381137339,15.3811711443,15.3812049489,15.3812387527,15.3812725557,15.3813063579,15.3813401593,15.38137396,15.3814077598,15.3814415588,15.3814753571,15.3815091545, +15.3815429512,15.3815767471,15.3816105421,15.3816443364,15.3816781299,15.3817119226,15.3817457145,15.3817795057,15.381813296,15.3818470855,15.3818808743,15.3819146622,15.3819484494,15.3819822358,15.3820160214,15.3820498061, +15.3820835901,15.3821173734,15.3821511558,15.3821849374,15.3822187182,15.3822524983,15.3822862775,15.382320056,15.3823538337,15.3823876105,15.3824213866,15.3824551619,15.3824889364,15.3825227102,15.3825564831,15.3825902552, +15.3826240266,15.3826577971,15.3826915669,15.3827253359,15.3827591041,15.3827928715,15.3828266381,15.3828604039,15.3828941689,15.3829279331,15.3829616966,15.3829954592,15.3830292211,15.3830629822,15.3830967424,15.3831305019, +15.3831642606,15.3831980185,15.3832317757,15.383265532,15.3832992875,15.3833330423,15.3833667963,15.3834005494,15.3834343018,15.3834680534,15.3835018042,15.3835355542,15.3835693035,15.3836030519,15.3836367995,15.3836705464, +15.3837042925,15.3837380378,15.3837717822,15.3838055259,15.3838392689,15.383873011,15.3839067523,15.3839404929,15.3839742326,15.3840079716,15.3840417098,15.3840754471,15.3841091837,15.3841429195,15.3841766546,15.3842103888, +15.3842441222,15.3842778549,15.3843115868,15.3843453178,15.3843790481,15.3844127776,15.3844465063,15.3844802343,15.3845139614,15.3845476877,15.3845814133,15.3846151381,15.3846488621,15.3846825852,15.3847163076,15.3847500293, +15.3847837501,15.3848174701,15.3848511894,15.3848849078,15.3849186255,15.3849523424,15.3849860585,15.3850197738,15.3850534883,15.3850872021,15.385120915,15.3851546272,15.3851883386,15.3852220491,15.3852557589,15.385289468, +15.3853231762,15.3853568836,15.3853905903,15.3854242961,15.3854580012,15.3854917055,15.385525409,15.3855591117,15.3855928136,15.3856265147,15.3856602151,15.3856939146,15.3857276134,15.3857613114,15.3857950086,15.385828705, +15.3858624006,15.3858960955,15.3859297895,15.3859634828,15.3859971753,15.386030867,15.3860645579,15.386098248,15.3861319373,15.3861656259,15.3861993136,15.3862330006,15.3862666868,15.3863003722,15.3863340568,15.3863677406, +15.3864014236,15.3864351059,15.3864687874,15.386502468,15.3865361479,15.386569827,15.3866035054,15.3866371829,15.3866708596,15.3867045356,15.3867382108,15.3867718852,15.3868055588,15.3868392316,15.3868729036,15.3869065749, +15.3869402453,15.386973915,15.3870075839,15.387041252,15.3870749193,15.3871085858,15.3871422516,15.3871759165,15.3872095807,15.3872432441,15.3872769067,15.3873105685,15.3873442296,15.3873778898,15.3874115493,15.387445208, +15.3874788658,15.3875125229,15.3875461793,15.3875798348,15.3876134896,15.3876471435,15.3876807967,15.3877144491,15.3877481007,15.3877817515,15.3878154016,15.3878490508,15.3878826993,15.387916347,15.3879499939,15.38798364, +15.3880172853,15.3880509299,15.3880845737,15.3881182166,15.3881518588,15.3881855002,15.3882191409,15.3882527807,15.3882864198,15.388320058,15.3883536955,15.3883873322,15.3884209681,15.3884546033,15.3884882376,15.3885218712, +15.388555504,15.388589136,15.3886227672,15.3886563976,15.3886900273,15.3887236561,15.3887572842,15.3887909115,15.388824538,15.3888581638,15.3888917887,15.3889254129,15.3889590362,15.3889926588,15.3890262806,15.3890599017, +15.3890935219,15.3891271414,15.38916076,15.3891943779,15.389227995,15.3892616114,15.3892952269,15.3893288417,15.3893624556,15.3893960688,15.3894296812,15.3894632929,15.3894969037,15.3895305138,15.3895641231,15.3895977315, +15.3896313393,15.3896649462,15.3896985523,15.3897321577,15.3897657623,15.3897993661,15.3898329691,15.3898665713,15.3899001728,15.3899337734,15.3899673733,15.3900009724,15.3900345707,15.3900681683,15.390101765,15.390135361, +15.3901689562,15.3902025506,15.3902361442,15.3902697371,15.3903033291,15.3903369204,15.3903705109,15.3904041006,15.3904376896,15.3904712777,15.3905048651,15.3905384517,15.3905720375,15.3906056225,15.3906392067,15.3906727902, +15.3907063729,15.3907399548,15.3907735359,15.3908071162,15.3908406958,15.3908742745,15.3909078525,15.3909414297,15.3909750062,15.3910085818,15.3910421567,15.3910757307,15.391109304,15.3911428766,15.3911764483,15.3912100193, +15.3912435894,15.3912771588,15.3913107274,15.3913442953,15.3913778623,15.3914114286,15.3914449941,15.3914785588,15.3915121227,15.3915456859,15.3915792482,15.3916128098,15.3916463706,15.3916799306,15.3917134899,15.3917470483, +15.391780606,15.3918141629,15.391847719,15.3918812744,15.3919148289,15.3919483827,15.3919819357,15.3920154879,15.3920490394,15.39208259,15.3921161399,15.392149689,15.3921832373,15.3922167848,15.3922503316,15.3922838776, +15.3923174228,15.3923509672,15.3923845108,15.3924180537,15.3924515958,15.3924851371,15.3925186776,15.3925522173,15.3925857563,15.3926192945,15.3926528319,15.3926863685,15.3927199043,15.3927534394,15.3927869737,15.3928205072, +15.3928540399,15.3928875718,15.392921103,15.3929546334,15.392988163,15.3930216918,15.3930552198,15.3930887471,15.3931222736,15.3931557993,15.3931893242,15.3932228484,15.3932563717,15.3932898943,15.3933234162,15.3933569372, +15.3933904574,15.3934239769,15.3934574956,15.3934910135,15.3935245307,15.393558047,15.3935915626,15.3936250774,15.3936585915,15.3936921047,15.3937256172,15.3937591289,15.3937926398,15.3938261499,15.3938596593,15.3938931678, +15.3939266756,15.3939601827,15.3939936889,15.3940271944,15.3940606991,15.394094203,15.3941277061,15.3941612084,15.39419471,15.3942282108,15.3942617108,15.3942952101,15.3943287085,15.3943622062,15.3943957031,15.3944291993, +15.3944626946,15.3944961892,15.394529683,15.394563176,15.3945966682,15.3946301597,15.3946636504,15.3946971403,15.3947306294,15.3947641178,15.3947976054,15.3948310922,15.3948645782,15.3948980634,15.3949315479,15.3949650316, +15.3949985145,15.3950319966,15.395065478,15.3950989586,15.3951324384,15.3951659174,15.3951993957,15.3952328731,15.3952663498,15.3952998258,15.3953333009,15.3953667753,15.3954002489,15.3954337217,15.3954671937,15.395500665, +15.3955341355,15.3955676052,15.3956010741,15.3956345423,15.3956680096,15.3957014762,15.3957349421,15.3957684071,15.3958018714,15.3958353349,15.3958687976,15.3959022596,15.3959357207,15.3959691811,15.3960026407,15.3960360996, +15.3960695576,15.3961030149,15.3961364714,15.3961699272,15.3962033821,15.3962368363,15.3962702897,15.3963037424,15.3963371942,15.3963706453,15.3964040956,15.3964375452,15.3964709939,15.3965044419,15.3965378891,15.3965713355, +15.3966047812,15.3966382261,15.3966716702,15.3967051135,15.396738556,15.3967719978,15.3968054388,15.3968388791,15.3968723185,15.3969057572,15.3969391951,15.3969726322,15.3970060686,15.3970395042,15.397072939,15.397106373, +15.3971398062,15.3971732387,15.3972066704,15.3972401013,15.3972735315,15.3973069609,15.3973403895,15.3973738173,15.3974072444,15.3974406707,15.3974740962,15.3975075209,15.3975409449,15.397574368,15.3976077905,15.3976412121, +15.3976746329,15.397708053,15.3977414723,15.3977748909,15.3978083087,15.3978417256,15.3978751419,15.3979085573,15.397941972,15.3979753859,15.398008799,15.3980422113,15.3980756229,15.3981090337,15.3981424437,15.398175853, +15.3982092615,15.3982426692,15.3982760761,15.3983094823,15.3983428876,15.3983762923,15.3984096961,15.3984430992,15.3984765014,15.398509903,15.3985433037,15.3985767037,15.3986101029,15.3986435013,15.398676899,15.3987102958, +15.3987436919,15.3987770873,15.3988104818,15.3988438756,15.3988772686,15.3989106609,15.3989440523,15.398977443,15.399010833,15.3990442221,15.3990776105,15.3991109981,15.3991443849,15.399177771,15.3992111563,15.3992445408, +15.3992779245,15.3993113075,15.3993446897,15.3993780711,15.3994114517,15.3994448316,15.3994782107,15.3995115891,15.3995449666,15.3995783434,15.3996117194,15.3996450947,15.3996784692,15.3997118429,15.3997452158,15.3997785879, +15.3998119593,15.3998453299,15.3998786998,15.3999120689,15.3999454371,15.3999788047,15.4000121714,15.4000455374,15.4000789026,15.4001122671,15.4001456307,15.4001789936,15.4002123558,15.4002457171,15.4002790777,15.4003124375, +15.4003457965,15.4003791548,15.4004125123,15.400445869,15.400479225,15.4005125802,15.4005459346,15.4005792882,15.4006126411,15.4006459932,15.4006793445,15.4007126951,15.4007460448,15.4007793939,15.4008127421,15.4008460896, +15.4008794363,15.4009127822,15.4009461274,15.4009794718,15.4010128154,15.4010461582,15.4010795003,15.4011128416,15.4011461822,15.4011795219,15.4012128609,15.4012461991,15.4012795366,15.4013128733,15.4013462092,15.4013795443, +15.4014128787,15.4014462123,15.4014795452,15.4015128772,15.4015462085,15.401579539,15.4016128688,15.4016461978,15.401679526,15.4017128534,15.4017461801,15.401779506,15.4018128311,15.4018461555,15.4018794791,15.4019128019, +15.401946124,15.4019794453,15.4020127658,15.4020460855,15.4020794045,15.4021127227,15.4021460401,15.4021793568,15.4022126727,15.4022459878,15.4022793022,15.4023126158,15.4023459286,15.4023792407,15.402412552,15.4024458625, +15.4024791722,15.4025124812,15.4025457894,15.4025790968,15.4026124035,15.4026457094,15.4026790145,15.4027123189,15.4027456225,15.4027789253,15.4028122274,15.4028455287,15.4028788292,15.4029121289,15.4029454279,15.4029787261, +15.4030120236,15.4030453203,15.4030786162,15.4031119113,15.4031452057,15.4031784993,15.4032117921,15.4032450842,15.4032783755,15.403311666,15.4033449558,15.4033782448,15.403411533,15.4034448204,15.4034781071,15.403511393, +15.4035446782,15.4035779626,15.4036112462,15.4036445291,15.4036778111,15.4037110925,15.403744373,15.4037776528,15.4038109318,15.40384421,15.4038774875,15.4039107642,15.4039440402,15.4039773153,15.4040105897,15.4040438634, +15.4040771362,15.4041104083,15.4041436797,15.4041769502,15.4042102201,15.4042434891,15.4042767574,15.4043100249,15.4043432916,15.4043765576,15.4044098228,15.4044430872,15.4044763508,15.4045096137,15.4045428759,15.4045761372, +15.4046093978,15.4046426577,15.4046759167,15.404709175,15.4047424326,15.4047756893,15.4048089453,15.4048422006,15.404875455,15.4049087087,15.4049419616,15.4049752138,15.4050084652,15.4050417158,15.4050749657,15.4051082148, +15.4051414631,15.4051747107,15.4052079575,15.4052412035,15.4052744488,15.4053076933,15.405340937,15.40537418,15.4054074222,15.4054406637,15.4054739043,15.4055071442,15.4055403834,15.4055736218,15.4056068594,15.4056400962, +15.4056733323,15.4057065676,15.4057398021,15.4057730359,15.4058062689,15.4058395012,15.4058727327,15.4059059634,15.4059391933,15.4059724225,15.406005651,15.4060388786,15.4060721055,15.4061053316,15.406138557,15.4061717816, +15.4062050054,15.4062382285,15.4062714508,15.4063046723,15.4063378931,15.4063711131,15.4064043323,15.4064375508,15.4064707685,15.4065039855,15.4065372017,15.4065704171,15.4066036317,15.4066368456,15.4066700587,15.4067032711, +15.4067364827,15.4067696935,15.4068029036,15.4068361129,15.4068693214,15.4069025292,15.4069357362,15.4069689424,15.4070021479,15.4070353526,15.4070685566,15.4071017598,15.4071349622,15.4071681639,15.4072013647,15.4072345649, +15.4072677642,15.4073009628,15.4073341607,15.4073673578,15.4074005541,15.4074337496,15.4074669444,15.4075001384,15.4075333317,15.4075665242,15.4075997159,15.4076329069,15.4076660971,15.4076992865,15.4077324752,15.4077656631, +15.4077988502,15.4078320366,15.4078652222,15.4078984071,15.4079315912,15.4079647745,15.4079979571,15.4080311389,15.4080643199,15.4080975002,15.4081306797,15.4081638585,15.4081970364,15.4082302137,15.4082633901,15.4082965658, +15.4083297408,15.4083629149,15.4083960884,15.408429261,15.4084624329,15.408495604,15.4085287744,15.408561944,15.4085951128,15.4086282809,15.4086614482,15.4086946147,15.4087277805,15.4087609455,15.4087941098,15.4088272733, +15.408860436,15.408893598,15.4089267592,15.4089599197,15.4089930793,15.4090262383,15.4090593964,15.4090925538,15.4091257105,15.4091588663,15.4091920215,15.4092251758,15.4092583294,15.4092914822,15.4093246343,15.4093577856, +15.4093909361,15.4094240859,15.4094572349,15.4094903832,15.4095235307,15.4095566774,15.4095898234,15.4096229686,15.4096561131,15.4096892567,15.4097223997,15.4097555418,15.4097886832,15.4098218239,15.4098549638,15.4098881029, +15.4099212412,15.4099543788,15.4099875157,15.4100206518,15.4100537871,15.4100869216,15.4101200554,15.4101531885,15.4101863207,15.4102194522,15.410252583,15.410285713,15.4103188422,15.4103519707,15.4103850984,15.4104182253, +15.4104513515,15.4104844769,15.4105176016,15.4105507255,15.4105838486,15.410616971,15.4106500926,15.4106832135,15.4107163336,15.4107494529,15.4107825715,15.4108156893,15.4108488064,15.4108819227,15.4109150382,15.410948153, +15.410981267,15.4110143803,15.4110474928,15.4110806045,15.4111137155,15.4111468257,15.4111799352,15.4112130439,15.4112461518,15.411279259,15.4113123654,15.4113454711,15.411378576,15.4114116801,15.4114447835,15.4114778861, +15.411510988,15.4115440891,15.4115771895,15.411610289,15.4116433879,15.4116764859,15.4117095832,15.4117426798,15.4117757756,15.4118088706,15.4118419649,15.4118750584,15.4119081511,15.4119412431,15.4119743344,15.4120074248, +15.4120405146,15.4120736035,15.4121066917,15.4121397791,15.4121728658,15.4122059517,15.4122390369,15.4122721213,15.412305205,15.4123382878,15.41237137,15.4124044513,15.4124375319,15.4124706118,15.4125036909,15.4125367692, +15.4125698468,15.4126029236,15.4126359997,15.412669075,15.4127021495,15.4127352233,15.4127682963,15.4128013686,15.4128344401,15.4128675109,15.4129005809,15.4129336501,15.4129667186,15.4129997863,15.4130328533,15.4130659195, +15.4130989849,15.4131320496,15.4131651135,15.4131981767,15.4132312391,15.4132643008,15.4132973617,15.4133304218,15.4133634812,15.4133965398,15.4134295977,15.4134626548,15.4134957112,15.4135287668,15.4135618216,15.4135948757, +15.413627929,15.4136609816,15.4136940334,15.4137270845,15.4137601348,15.4137931843,15.4138262331,15.4138592811,15.4138923284,15.4139253749,15.4139584206,15.4139914656,15.4140245099,15.4140575534,15.4140905961,15.4141236381, +15.4141566793,15.4141897197,15.4142227594,15.4142557984,15.4142888366,15.414321874,15.4143549107,15.4143879466,15.4144209817,15.4144540162,15.4144870498,15.4145200827,15.4145531148,15.4145861462,15.4146191768,15.4146522067, +15.4146852358,15.4147182642,15.4147512918,15.4147843186,15.4148173447,15.41485037,15.4148833946,15.4149164184,15.4149494415,15.4149824638,15.4150154853,15.4150485061,15.4150815262,15.4151145454,15.415147564,15.4151805817, +15.4152135988,15.415246615,15.4152796305,15.4153126453,15.4153456593,15.4153786725,15.415411685,15.4154446967,15.4154777077,15.4155107179,15.4155437274,15.4155767361,15.415609744,15.4156427512,15.4156757577,15.4157087634, +15.4157417683,15.4157747725,15.4158077759,15.4158407786,15.4158737805,15.4159067816,15.415939782,15.4159727817,15.4160057806,15.4160387787,15.4160717761,15.4161047727,15.4161377686,15.4161707637,15.4162037581,15.4162367517, +15.4162697445,15.4163027366,15.416335728,15.4163687186,15.4164017084,15.4164346975,15.4164676858,15.4165006734,15.4165336602,15.4165666463,15.4165996316,15.4166326161,15.4166655999,15.416698583,15.4167315653,15.4167645468, +15.4167975276,15.4168305076,15.4168634869,15.4168964654,15.4169294432,15.4169624202,15.4169953965,15.417028372,15.4170613468,15.4170943208,15.417127294,15.4171602665,15.4171932382,15.4172262092,15.4172591795,15.417292149, +15.4173251177,15.4173580857,15.4173910529,15.4174240193,15.4174569851,15.41748995,15.4175229142,15.4175558777,15.4175888404,15.4176218023,15.4176547635,15.417687724,15.4177206837,15.4177536426,15.4177866008,15.4178195582, +15.4178525149,15.4178854708,15.417918426,15.4179513804,15.4179843341,15.418017287,15.4180502391,15.4180831906,15.4181161412,15.4181490911,15.4181820403,15.4182149887,15.4182479363,15.4182808832,15.4183138293,15.4183467747, +15.4183797194,15.4184126632,15.4184456064,15.4184785488,15.4185114904,15.4185444313,15.4185773714,15.4186103108,15.4186432494,15.4186761872,15.4187091244,15.4187420607,15.4187749963,15.4188079312,15.4188408653,15.4188737987, +15.4189067313,15.4189396631,15.4189725942,15.4190055246,15.4190384542,15.419071383,15.4191043111,15.4191372384,15.419170165,15.4192030909,15.419236016,15.4192689403,15.4193018639,15.4193347867,15.4193677088,15.4194006301, +15.4194335507,15.4194664705,15.4194993896,15.4195323079,15.4195652255,15.4195981423,15.4196310584,15.4196639737,15.4196968883,15.4197298021,15.4197627152,15.4197956275,15.4198285391,15.4198614499,15.41989436,15.4199272693, +15.4199601778,15.4199930857,15.4200259927,15.420058899,15.4200918046,15.4201247094,15.4201576135,15.4201905168,15.4202234193,15.4202563212,15.4202892222,15.4203221225,15.4203550221,15.4203879209,15.420420819,15.4204537163, +15.4204866128,15.4205195086,15.4205524037,15.420585298,15.4206181916,15.4206510844,15.4206839764,15.4207168677,15.4207497583,15.4207826481,15.4208155372,15.4208484255,15.420881313,15.4209141998,15.4209470859,15.4209799712, +15.4210128558,15.4210457396,15.4210786227,15.421111505,15.4211443865,15.4211772673,15.4212101474,15.4212430267,15.4212759053,15.4213087831,15.4213416602,15.4213745365,15.4214074121,15.4214402869,15.421473161,15.4215060343, +15.4215389068,15.4215717787,15.4216046497,15.4216375201,15.4216703897,15.4217032585,15.4217361266,15.4217689939,15.4218018605,15.4218347263,15.4218675914,15.4219004557,15.4219333193,15.4219661821,15.4219990442,15.4220319056, +15.4220647662,15.422097626,15.4221304851,15.4221633435,15.4221962011,15.4222290579,15.422261914,15.4222947694,15.422327624,15.4223604778,15.4223933309,15.4224261833,15.4224590349,15.4224918858,15.4225247359,15.4225575853, +15.4225904339,15.4226232818,15.4226561289,15.4226889753,15.4227218209,15.4227546658,15.4227875099,15.4228203533,15.4228531959,15.4228860378,15.422918879,15.4229517194,15.422984559,15.4230173979,15.4230502361,15.4230830735, +15.4231159101,15.4231487461,15.4231815812,15.4232144156,15.4232472493,15.4232800822,15.4233129144,15.4233457458,15.4233785765,15.4234114065,15.4234442356,15.4234770641,15.4235098918,15.4235427187,15.4235755449,15.4236083704, +15.4236411951,15.423674019,15.4237068422,15.4237396647,15.4237724864,15.4238053074,15.4238381276,15.4238709471,15.4239037658,15.4239365838,15.4239694011,15.4240022176,15.4240350333,15.4240678483,15.4241006626,15.4241334761, +15.4241662888,15.4241991008,15.4242319121,15.4242647226,15.4242975324,15.4243303414,15.4243631497,15.4243959572,15.424428764,15.4244615701,15.4244943754,15.4245271799,15.4245599837,15.4245927868,15.4246255891,15.4246583907, +15.4246911915,15.4247239916,15.4247567909,15.4247895895,15.4248223874,15.4248551844,15.4248879808,15.4249207764,15.4249535713,15.4249863654,15.4250191587,15.4250519514,15.4250847432,15.4251175344,15.4251503248,15.4251831144, +15.4252159033,15.4252486915,15.4252814789,15.4253142655,15.4253470514,15.4253798366,15.425412621,15.4254454047,15.4254781876,15.4255109698,15.4255437513,15.425576532,15.4256093119,15.4256420912,15.4256748696,15.4257076473, +15.4257404243,15.4257732005,15.425805976,15.4258387508,15.4258715248,15.425904298,15.4259370705,15.4259698423,15.4260026133,15.4260353836,15.4260681531,15.4261009219,15.42613369,15.4261664573,15.4261992238,15.4262319896, +15.4262647547,15.426297519,15.4263302826,15.4263630454,15.4263958075,15.4264285689,15.4264613295,15.4264940893,15.4265268485,15.4265596068,15.4265923645,15.4266251213,15.4266578775,15.4266906329,15.4267233875,15.4267561414, +15.4267888946,15.426821647,15.4268543987,15.4268871496,15.4269198998,15.4269526493,15.426985398,15.4270181459,15.4270508932,15.4270836396,15.4271163854,15.4271491303,15.4271818746,15.4272146181,15.4272473608,15.4272801029, +15.4273128441,15.4273455847,15.4273783245,15.4274110635,15.4274438018,15.4274765394,15.4275092762,15.4275420122,15.4275747476,15.4276074822,15.427640216,15.4276729491,15.4277056815,15.4277384131,15.4277711439,15.4278038741, +15.4278366035,15.4278693321,15.42790206,15.4279347872,15.4279675136,15.4280002393,15.4280329642,15.4280656884,15.4280984118,15.4281311345,15.4281638565,15.4281965777,15.4282292982,15.4282620179,15.4282947369,15.4283274552, +15.4283601727,15.4283928895,15.4284256055,15.4284583208,15.4284910353,15.4285237491,15.4285564622,15.4285891745,15.4286218861,15.4286545969,15.428687307,15.4287200164,15.428752725,15.4287854329,15.42881814,15.4288508464, +15.428883552,15.4289162569,15.4289489611,15.4289816645,15.4290143672,15.4290470691,15.4290797703,15.4291124708,15.4291451705,15.4291778695,15.4292105677,15.4292432652,15.4292759619,15.4293086579,15.4293413532,15.4293740477, +15.4294067415,15.4294394346,15.4294721269,15.4295048184,15.4295375092,15.4295701993,15.4296028887,15.4296355773,15.4296682651,15.4297009523,15.4297336386,15.4297663243,15.4297990092,15.4298316933,15.4298643767,15.4298970594, +15.4299297414,15.4299624225,15.429995103,15.4300277827,15.4300604617,15.4300931399,15.4301258174,15.4301584942,15.4301911702,15.4302238455,15.43025652,15.4302891938,15.4303218668,15.4303545392,15.4303872107,15.4304198816, +15.4304525517,15.430485221,15.4305178896,15.4305505575,15.4305832246,15.430615891,15.4306485567,15.4306812216,15.4307138858,15.4307465492,15.4307792119,15.4308118739,15.4308445351,15.4308771956,15.4309098553,15.4309425143, +15.4309751726,15.4310078301,15.4310404869,15.4310731429,15.4311057982,15.4311384528,15.4311711066,15.4312037597,15.4312364121,15.4312690637,15.4313017146,15.4313343647,15.4313670141,15.4313996627,15.4314323106,15.4314649578, +15.4314976043,15.43153025,15.4315628949,15.4315955391,15.4316281826,15.4316608254,15.4316934674,15.4317261086,15.4317587492,15.431791389,15.431824028,15.4318566663,15.4318893039,15.4319219407,15.4319545768,15.4319872122, +15.4320198468,15.4320524807,15.4320851138,15.4321177462,15.4321503779,15.4321830088,15.432215639,15.4322482685,15.4322808972,15.4323135252,15.4323461524,15.4323787789,15.4324114047,15.4324440297,15.432476654,15.4325092776, +15.4325419004,15.4325745225,15.4326071438,15.4326397644,15.4326723843,15.4327050034,15.4327376218,15.4327702394,15.4328028564,15.4328354725,15.432868088,15.4329007027,15.4329333166,15.4329659299,15.4329985424,15.4330311541, +15.4330637651,15.4330963754,15.4331289849,15.4331615937,15.4331942018,15.4332268091,15.4332594157,15.4332920216,15.4333246267,15.4333572311,15.4333898347,15.4334224377,15.4334550398,15.4334876413,15.433520242,15.4335528419, +15.4335854412,15.4336180396,15.4336506374,15.4336832344,15.4337158307,15.4337484262,15.433781021,15.4338136151,15.4338462084,15.433878801,15.4339113929,15.433943984,15.4339765744,15.4340091641,15.434041753,15.4340743412, +15.4341069286,15.4341395153,15.4341721013,15.4342046865,15.434237271,15.4342698548,15.4343024378,15.4343350201,15.4343676017,15.4344001825,15.4344327626,15.4344653419,15.4344979205,15.4345304984,15.4345630756,15.434595652, +15.4346282276,15.4346608026,15.4346933768,15.4347259502,15.434758523,15.434791095,15.4348236662,15.4348562367,15.4348888065,15.4349213756,15.4349539439,15.4349865115,15.4350190783,15.4350516444,15.4350842098,15.4351167745, +15.4351493384,15.4351819015,15.435214464,15.4352470257,15.4352795866,15.4353121469,15.4353447064,15.4353772651,15.4354098232,15.4354423805,15.435474937,15.4355074928,15.4355400479,15.4355726023,15.4356051559,15.4356377088, +15.4356702609,15.4357028124,15.435735363,15.435767913,15.4358004622,15.4358330107,15.4358655584,15.4358981054,15.4359306517,15.4359631972,15.4359957421,15.4360282861,15.4360608295,15.4360933721,15.4361259139,15.4361584551, +15.4361909955,15.4362235352,15.4362560741,15.4362886123,15.4363211498,15.4363536865,15.4363862225,15.4364187578,15.4364512923,15.4364838261,15.4365163592,15.4365488915,15.4365814231,15.4366139539,15.4366464841,15.4366790135, +15.4367115421,15.4367440701,15.4367765973,15.4368091237,15.4368416495,15.4368741745,15.4369066987,15.4369392223,15.436971745,15.4370042671,15.4370367884,15.437069309,15.4371018289,15.437134348,15.4371668664,15.4371993841, +15.437231901,15.4372644172,15.4372969327,15.4373294474,15.4373619614,15.4373944747,15.4374269873,15.4374594991,15.4374920101,15.4375245205,15.4375570301,15.4375895389,15.4376220471,15.4376545545,15.4376870612,15.4377195671, +15.4377520723,15.4377845768,15.4378170805,15.4378495836,15.4378820858,15.4379145874,15.4379470882,15.4379795883,15.4380120877,15.4380445863,15.4380770842,15.4381095813,15.4381420777,15.4381745734,15.4382070684,15.4382395626, +15.4382720561,15.4383045489,15.4383370409,15.4383695322,15.4384020228,15.4384345126,15.4384670017,15.4384994901,15.4385319778,15.4385644647,15.4385969509,15.4386294363,15.438661921,15.438694405,15.4387268883,15.4387593708, +15.4387918526,15.4388243336,15.438856814,15.4388892936,15.4389217724,15.4389542506,15.438986728,15.4390192046,15.4390516806,15.4390841558,15.4391166303,15.439149104,15.4391815771,15.4392140493,15.4392465209,15.4392789917, +15.4393114618,15.4393439312,15.4393763998,15.4394088677,15.4394413349,15.4394738013,15.439506267,15.439538732,15.4395711963,15.4396036598,15.4396361226,15.4396685846,15.439701046,15.4397335066,15.4397659664,15.4397984256, +15.439830884,15.4398633417,15.4398957986,15.4399282548,15.4399607103,15.4399931651,15.4400256191,15.4400580724,15.440090525,15.4401229768,15.4401554279,15.4401878783,15.4402203279,15.4402527768,15.440285225,15.4403176725, +15.4403501192,15.4403825652,15.4404150105,15.440447455,15.4404798988,15.4405123419,15.4405447842,15.4405772259,15.4406096667,15.4406421069,15.4406745463,15.440706985,15.440739423,15.4407718603,15.4408042968,15.4408367326, +15.4408691676,15.4409016019,15.4409340355,15.4409664684,15.4409989005,15.4410313319,15.4410637626,15.4410961926,15.4411286218,15.4411610503,15.4411934781,15.4412259051,15.4412583314,15.441290757,15.4413231818,15.441355606, +15.4413880293,15.441420452,15.4414528739,15.4414852952,15.4415177156,15.4415501354,15.4415825544,15.4416149727,15.4416473903,15.4416798071,15.4417122232,15.4417446386,15.4417770532,15.4418094671,15.4418418803,15.4418742928, +15.4419067045,15.4419391156,15.4419715258,15.4420039354,15.4420363442,15.4420687523,15.4421011597,15.4421335663,15.4421659722,15.4421983774,15.4422307819,15.4422631856,15.4422955886,15.4423279909,15.4423603924,15.4423927932, +15.4424251933,15.4424575927,15.4424899913,15.4425223892,15.4425547864,15.4425871829,15.4426195786,15.4426519736,15.4426843679,15.4427167614,15.4427491542,15.4427815463,15.4428139377,15.4428463283,15.4428787182,15.4429111074, +15.4429434958,15.4429758836,15.4430082706,15.4430406568,15.4430730424,15.4431054272,15.4431378113,15.4431701947,15.4432025773,15.4432349592,15.4432673404,15.4432997208,15.4433321006,15.4433644796,15.4433968579,15.4434292354, +15.4434616122,15.4434939883,15.4435263637,15.4435587383,15.4435911123,15.4436234854,15.4436558579,15.4436882296,15.4437206007,15.4437529709,15.4437853405,15.4438177093,15.4438500774,15.4438824448,15.4439148115,15.4439471774, +15.4439795426,15.4440119071,15.4440442708,15.4440766338,15.4441089961,15.4441413577,15.4441737186,15.4442060787,15.4442384381,15.4442707967,15.4443031547,15.4443355119,15.4443678684,15.4444002242,15.4444325792,15.4444649335, +15.4444972871,15.44452964,15.4445619921,15.4445943435,15.4446266942,15.4446590442,15.4446913934,15.4447237419,15.4447560897,15.4447884368,15.4448207831,15.4448531287,15.4448854736,15.4449178177,15.4449501612,15.4449825039, +15.4450148459,15.4450471871,15.4450795277,15.4451118675,15.4451442066,15.4451765449,15.4452088825,15.4452412195,15.4452735556,15.4453058911,15.4453382258,15.4453705598,15.4454028931,15.4454352257,15.4454675575,15.4454998886, +15.445532219,15.4455645487,15.4455968776,15.4456292058,15.4456615333,15.4456938601,15.4457261861,15.4457585115,15.445790836,15.4458231599,15.4458554831,15.4458878055,15.4459201272,15.4459524481,15.4459847684,15.4460170879, +15.4460494067,15.4460817248,15.4461140421,15.4461463588,15.4461786747,15.4462109899,15.4462433043,15.446275618,15.4463079311,15.4463402433,15.4463725549,15.4464048657,15.4464371758,15.4464694852,15.4465017939,15.4465341018, +15.4465664091,15.4465987156,15.4466310213,15.4466633264,15.4466956307,15.4467279343,15.4467602372,15.4467925393,15.4468248408,15.4468571415,15.4468894415,15.4469217407,15.4469540393,15.4469863371,15.4470186342,15.4470509306, +15.4470832262,15.4471155211,15.4471478153,15.4471801088,15.4472124016,15.4472446936,15.4472769849,15.4473092755,15.4473415654,15.4473738545,15.4474061429,15.4474384306,15.4474707176,15.4475030039,15.4475352894,15.4475675742, +15.4475998583,15.4476321416,15.4476644243,15.4476967062,15.4477289874,15.4477612679,15.4477935476,15.4478258266,15.447858105,15.4478903825,15.4479226594,15.4479549355,15.447987211,15.4480194857,15.4480517596,15.4480840329, +15.4481163054,15.4481485772,15.4481808483,15.4482131187,15.4482453883,15.4482776572,15.4483099254,15.4483421929,15.4483744597,15.4484067257,15.448438991,15.4484712556,15.4485035195,15.4485357826,15.448568045,15.4486003067, +15.4486325677,15.448664828,15.4486970875,15.4487293464,15.4487616045,15.4487938618,15.4488261185,15.4488583744,15.4488906296,15.4489228841,15.4489551379,15.4489873909,15.4490196433,15.4490518949,15.4490841458,15.4491163959, +15.4491486454,15.4491808941,15.4492131421,15.4492453894,15.4492776359,15.4493098818,15.4493421269,15.4493743713,15.449406615,15.4494388579,15.4494711002,15.4495033417,15.4495355825,15.4495678226,15.4496000619,15.4496323006, +15.4496645385,15.4496967757,15.4497290121,15.4497612479,15.4497934829,15.4498257172,15.4498579508,15.4498901837,15.4499224159,15.4499546473,15.449986878,15.450019108,15.4500513373,15.4500835658,15.4501157937,15.4501480208, +15.4501802472,15.4502124728,15.4502446978,15.450276922,15.4503091455,15.4503413683,15.4503735904,15.4504058118,15.4504380324,15.4504702523,15.4505024715,15.45053469,15.4505669077,15.4505991248,15.4506313411,15.4506635567, +15.4506957716,15.4507279857,15.4507601992,15.4507924119,15.4508246239,15.4508568352,15.4508890457,15.4509212556,15.4509534647,15.4509856731,15.4510178808,15.4510500878,15.451082294,15.4511144996,15.4511467044,15.4511789085, +15.4512111118,15.4512433145,15.4512755164,15.4513077176,15.4513399181,15.4513721179,15.451404317,15.4514365153,15.4514687129,15.4515009099,15.451533106,15.4515653015,15.4515974963,15.4516296903,15.4516618836,15.4516940762, +15.4517262681,15.4517584592,15.4517906497,15.4518228394,15.4518550284,15.4518872167,15.4519194043,15.4519515911,15.4519837772,15.4520159626,15.4520481473,15.4520803313,15.4521125146,15.4521446971,15.4521768789,15.45220906, +15.4522412404,15.4522734201,15.4523055991,15.4523377773,15.4523699548,15.4524021316,15.4524343077,15.452466483,15.4524986577,15.4525308316,15.4525630048,15.4525951773,15.4526273491,15.4526595202,15.4526916905,15.4527238601, +15.452756029,15.4527881972,15.4528203647,15.4528525314,15.4528846975,15.4529168628,15.4529490274,15.4529811913,15.4530133545,15.4530455169,15.4530776787,15.4531098397,15.453142,15.4531741596,15.4532063184,15.4532384766, +15.453270634,15.4533027907,15.4533349467,15.453367102,15.4533992566,15.4534314104,15.4534635636,15.453495716,15.4535278677,15.4535600187,15.4535921689,15.4536243185,15.4536564673,15.4536886154,15.4537207628,15.4537529095, +15.4537850555,15.4538172007,15.4538493453,15.4538814891,15.4539136322,15.4539457746,15.4539779163,15.4540100572,15.4540421975,15.454074337,15.4541064758,15.4541386139,15.4541707513,15.4542028879,15.4542350239,15.4542671591, +15.4542992936,15.4543314274,15.4543635605,15.4543956929,15.4544278245,15.4544599555,15.4544920857,15.4545242152,15.454556344,15.454588472,15.4546205994,15.454652726,15.454684852,15.4547169772,15.4547491017,15.4547812254, +15.4548133485,15.4548454709,15.4548775925,15.4549097134,15.4549418336,15.4549739531,15.4550060719,15.4550381899,15.4550703073,15.4551024239,15.4551345398,15.455166655,15.4551987695,15.4552308833,15.4552629963,15.4552951087, +15.4553272203,15.4553593312,15.4553914414,15.4554235509,15.4554556597,15.4554877677,15.455519875,15.4555519817,15.4555840876,15.4556161928,15.4556482973,15.455680401,15.4557125041,15.4557446064,15.455776708,15.4558088089, +15.4558409091,15.4558730086,15.4559051074,15.4559372054,15.4559693028,15.4560013994,15.4560334953,15.4560655905,15.456097685,15.4561297787,15.4561618718,15.4561939641,15.4562260557,15.4562581467,15.4562902369,15.4563223263, +15.4563544151,15.4563865032,15.4564185905,15.4564506771,15.4564827631,15.4565148483,15.4565469327,15.4565790165,15.4566110996,15.4566431819,15.4566752636,15.4567073445,15.4567394247,15.4567715042,15.456803583,15.456835661, +15.4568677384,15.456899815,15.4569318909,15.4569639662,15.4569960407,15.4570281145,15.4570601875,15.4570922599,15.4571243315,15.4571564025,15.4571884727,15.4572205422,15.457252611,15.4572846791,15.4573167465,15.4573488131, +15.4573808791,15.4574129443,15.4574450088,15.4574770726,15.4575091357,15.4575411981,15.4575732598,15.4576053207,15.457637381,15.4576694405,15.4577014993,15.4577335575,15.4577656149,15.4577976715,15.4578297275,15.4578617828, +15.4578938373,15.4579258911,15.4579579443,15.4579899967,15.4580220484,15.4580540994,15.4580861496,15.4581181992,15.4581502481,15.4581822962,15.4582143436,15.4582463903,15.4582784363,15.4583104816,15.4583425262,15.4583745701, +15.4584066132,15.4584386557,15.4584706974,15.4585027384,15.4585347787,15.4585668183,15.4585988572,15.4586308954,15.4586629329,15.4586949696,15.4587270057,15.458759041,15.4587910756,15.4588231095,15.4588551427,15.4588871752, +15.458919207,15.458951238,15.4589832684,15.459015298,15.4590473269,15.4590793552,15.4591113827,15.4591434095,15.4591754356,15.4592074609,15.4592394856,15.4592715095,15.4593035328,15.4593355553,15.4593675771,15.4593995982, +15.4594316186,15.4594636383,15.4594956573,15.4595276756,15.4595596931,15.45959171,15.4596237261,15.4596557415,15.4596877562,15.4597197702,15.4597517835,15.4597837961,15.459815808,15.4598478192,15.4598798296,15.4599118393, +15.4599438484,15.4599758567,15.4600078643,15.4600398712,15.4600718774,15.4601038829,15.4601358876,15.4601678917,15.4601998951,15.4602318977,15.4602638996,15.4602959009,15.4603279014,15.4603599012,15.4603919003,15.4604238986, +15.4604558963,15.4604878933,15.4605198895,15.4605518851,15.4605838799,15.460615874,15.4606478674,15.4606798601,15.4607118521,15.4607438434,15.460775834,15.4608078239,15.460839813,15.4608718015,15.4609037892,15.4609357762, +15.4609677626,15.4609997482,15.4610317331,15.4610637173,15.4610957008,15.4611276835,15.4611596656,15.461191647,15.4612236276,15.4612556076,15.4612875868,15.4613195653,15.4613515431,15.4613835202,15.4614154966,15.4614474723, +15.4614794473,15.4615114216,15.4615433951,15.461575368,15.4616073401,15.4616393115,15.4616712823,15.4617032523,15.4617352216,15.4617671902,15.4617991581,15.4618311253,15.4618630918,15.4618950575,15.4619270226,15.4619589869, +15.4619909506,15.4620229135,15.4620548757,15.4620868373,15.4621187981,15.4621507582,15.4621827176,15.4622146763,15.4622466342,15.4622785915,15.4623105481,15.4623425039,15.4623744591,15.4624064135,15.4624383673,15.4624703203, +15.4625022726,15.4625342242,15.4625661751,15.4625981253,15.4626300748,15.4626620236,15.4626939716,15.462725919,15.4627578657,15.4627898116,15.4628217569,15.4628537014,15.4628856452,15.4629175883,15.4629495307,15.4629814725, +15.4630134134,15.4630453537,15.4630772933,15.4631092322,15.4631411704,15.4631731078,15.4632050446,15.4632369806,15.463268916,15.4633008506,15.4633327845,15.4633647178,15.4633966503,15.4634285821,15.4634605132,15.4634924436, +15.4635243733,15.4635563023,15.4635882305,15.4636201581,15.463652085,15.4636840111,15.4637159366,15.4637478613,15.4637797853,15.4638117087,15.4638436313,15.4638755532,15.4639074744,15.4639393949,15.4639713147,15.4640032338, +15.4640351522,15.4640670699,15.4640989868,15.4641309031,15.4641628187,15.4641947335,15.4642266477,15.4642585611,15.4642904739,15.4643223859,15.4643542972,15.4643862078,15.4644181177,15.4644500269,15.4644819354,15.4645138432, +15.4645457503,15.4645776567,15.4646095624,15.4646414674,15.4646733716,15.4647052752,15.4647371781,15.4647690802,15.4648009817,15.4648328824,15.4648647824,15.4648966818,15.4649285804,15.4649604783,15.4649923755,15.465024272, +15.4650561678,15.4650880629,15.4651199573,15.465151851,15.465183744,15.4652156363,15.4652475278,15.4652794187,15.4653113089,15.4653431983,15.4653750871,15.4654069751,15.4654388625,15.4654707491,15.4655026351,15.4655345203, +15.4655664048,15.4655982886,15.4656301717,15.4656620542,15.4656939359,15.4657258169,15.4657576972,15.4657895768,15.4658214556,15.4658533338,15.4658852113,15.4659170881,15.4659489642,15.4659808395,15.4660127142,15.4660445881, +15.4660764614,15.4661083339,15.4661402058,15.4661720769,15.4662039474,15.4662358171,15.4662676861,15.4662995545,15.4663314221,15.466363289,15.4663951552,15.4664270207,15.4664588855,15.4664907496,15.466522613,15.4665544757, +15.4665863377,15.466618199,15.4666500596,15.4666819195,15.4667137786,15.4667456371,15.4667774949,15.466809352,15.4668412083,15.466873064,15.4669049189,15.4669367732,15.4669686267,15.4670004796,15.4670323317,15.4670641832, +15.4670960339,15.4671278839,15.4671597333,15.4671915819,15.4672234298,15.467255277,15.4672871236,15.4673189694,15.4673508145,15.4673826589,15.4674145026,15.4674463456,15.4674781879,15.4675100295,15.4675418704,15.4675737106, +15.4676055501,15.4676373889,15.467669227,15.4677010643,15.467732901,15.467764737,15.4677965723,15.4678284068,15.4678602407,15.4678920739,15.4679239063,15.4679557381,15.4679875692,15.4680193995,15.4680512292,15.4680830581, +15.4681148864,15.4681467139,15.4681785408,15.4682103669,15.4682421924,15.4682740171,15.4683058411,15.4683376645,15.4683694871,15.468401309,15.4684331303,15.4684649508,15.4684967706,15.4685285898,15.4685604082,15.4685922259, +15.4686240429,15.4686558592,15.4686876749,15.4687194898,15.468751304,15.4687831175,15.4688149303,15.4688467424,15.4688785538,15.4689103645,15.4689421745,15.4689739838,15.4690057924,15.4690376003,15.4690694075,15.469101214, +15.4691330198,15.4691648249,15.4691966293,15.469228433,15.469260236,15.4692920383,15.4693238399,15.4693556408,15.469387441,15.4694192405,15.4694510392,15.4694828373,15.4695146347,15.4695464314,15.4695782274,15.4696100227, +15.4696418172,15.4696736111,15.4697054043,15.4697371968,15.4697689886,15.4698007796,15.46983257,15.4698643597,15.4698961487,15.4699279369,15.4699597245,15.4699915114,15.4700232976,15.4700550831,15.4700868678,15.4701186519, +15.4701504353,15.4701822179,15.4702139999,15.4702457812,15.4702775618,15.4703093416,15.4703411208,15.4703728993,15.4704046771,15.4704364541,15.4704682305,15.4705000062,15.4705317812,15.4705635554,15.470595329,15.4706271019, +15.4706588741,15.4706906455,15.4707224163,15.4707541864,15.4707859558,15.4708177244,15.4708494924,15.4708812597,15.4709130263,15.4709447922,15.4709765573,15.4710083218,15.4710400856,15.4710718487,15.4711036111,15.4711353727, +15.4711671337,15.471198894,15.4712306536,15.4712624125,15.4712941707,15.4713259282,15.4713576849,15.471389441,15.4714211964,15.4714529511,15.4714847051,15.4715164584,15.471548211,15.4715799629,15.4716117141,15.4716434646, +15.4716752144,15.4717069635,15.4717387119,15.4717704596,15.4718022066,15.4718339529,15.4718656985,15.4718974434,15.4719291876,15.4719609312,15.471992674,15.4720244161,15.4720561575,15.4720878982,15.4721196382,15.4721513776, +15.4721831162,15.4722148541,15.4722465913,15.4722783279,15.4723100637,15.4723417988,15.4723735333,15.472405267,15.4724370001,15.4724687324,15.472500464,15.472532195,15.4725639252,15.4725956548,15.4726273836,15.4726591118, +15.4726908392,15.472722566,15.4727542921,15.4727860174,15.4728177421,15.4728494661,15.4728811893,15.4729129119,15.4729446338,15.472976355,15.4730080754,15.4730397952,15.4730715143,15.4731032327,15.4731349504,15.4731666674, +15.4731983837,15.4732300993,15.4732618142,15.4732935284,15.4733252419,15.4733569547,15.4733886668,15.4734203782,15.473452089,15.473483799,15.4735155083,15.4735472169,15.4735789249,15.4736106321,15.4736423386,15.4736740445, +15.4737057496,15.4737374541,15.4737691578,15.4738008609,15.4738325632,15.4738642649,15.4738959659,15.4739276661,15.4739593657,15.4739910646,15.4740227627,15.4740544602,15.474086157,15.4741178531,15.4741495485,15.4741812432, +15.4742129372,15.4742446305,15.4742763231,15.474308015,15.4743397062,15.4743713968,15.4744030866,15.4744347757,15.4744664641,15.4744981519,15.4745298389,15.4745615252,15.4745932109,15.4746248958,15.4746565801,15.4746882637, +15.4747199465,15.4747516287,15.4747833102,15.4748149909,15.474846671,15.4748783504,15.4749100291,15.4749417071,15.4749733844,15.475005061,15.4750367369,15.4750684121,15.4751000866,15.4751317605,15.4751634336,15.475195106, +15.4752267777,15.4752584488,15.4752901191,15.4753217888,15.4753534577,15.475385126,15.4754167936,15.4754484604,15.4754801266,15.4755117921,15.4755434569,15.4755751209,15.4756067843,15.475638447,15.475670109,15.4757017704, +15.475733431,15.4757650909,15.4757967501,15.4758284086,15.4758600665,15.4758917236,15.4759233801,15.4759550358,15.4759866909,15.4760183452,15.4760499989,15.4760816519,15.4761133042,15.4761449557,15.4761766066,15.4762082568, +15.4762399063,15.4762715551,15.4763032032,15.4763348507,15.4763664974,15.4763981434,15.4764297888,15.4764614334,15.4764930773,15.4765247206,15.4765563632,15.476588005,15.4766196462,15.4766512867,15.4766829265,15.4767145655, +15.4767462039,15.4767778416,15.4768094787,15.476841115,15.4768727506,15.4769043855,15.4769360197,15.4769676533,15.4769992861,15.4770309183,15.4770625497,15.4770941805,15.4771258106,15.47715744,15.4771890686,15.4772206966, +15.4772523239,15.4772839505,15.4773155765,15.4773472017,15.4773788262,15.47741045,15.4774420732,15.4774736956,15.4775053174,15.4775369384,15.4775685588,15.4776001785,15.4776317975,15.4776634157,15.4776950333,15.4777266502, +15.4777582664,15.477789882,15.4778214968,15.4778531109,15.4778847244,15.4779163371,15.4779479491,15.4779795605,15.4780111712,15.4780427812,15.4780743904,15.478105999,15.4781376069,15.4781692141,15.4782008206,15.4782324265, +15.4782640316,15.478295636,15.4783272398,15.4783588428,15.4783904452,15.4784220468,15.4784536478,15.4784852481,15.4785168477,15.4785484466,15.4785800448,15.4786116423,15.4786432391,15.4786748352,15.4787064307,15.4787380254, +15.4787696195,15.4788012128,15.4788328055,15.4788643975,15.4788959888,15.4789275794,15.4789591693,15.4789907585,15.479022347,15.4790539348,15.479085522,15.4791171084,15.4791486942,15.4791802792,15.4792118636,15.4792434473, +15.4792750303,15.4793066125,15.4793381941,15.4793697751,15.4794013553,15.4794329348,15.4794645137,15.4794960918,15.4795276693,15.479559246,15.4795908221,15.4796223975,15.4796539722,15.4796855462,15.4797171195,15.4797486921, +15.479780264,15.4798118353,15.4798434058,15.4798749757,15.4799065448,15.4799381133,15.4799696811,15.4800012482,15.4800328146,15.4800643803,15.4800959453,15.4801275096,15.4801590733,15.4801906362,15.4802221985,15.4802537601, +15.4802853209,15.4803168811,15.4803484406,15.4803799994,15.4804115575,15.480443115,15.4804746717,15.4805062277,15.4805377831,15.4805693378,15.4806008917,15.480632445,15.4806639976,15.4806955495,15.4807271007,15.4807586513, +15.4807902011,15.4808217502,15.4808532987,15.4808848465,15.4809163935,15.4809479399,15.4809794856,15.4810110306,15.4810425749,15.4810741186,15.4811056615,15.4811372037,15.4811687453,15.4812002862,15.4812318263,15.4812633658, +15.4812949046,15.4813264427,15.4813579802,15.4813895169,15.4814210529,15.4814525883,15.4814841229,15.4815156569,15.4815471902,15.4815787228,15.4816102547,15.4816417859,15.4816733164,15.4817048463,15.4817363754,15.4817679039, +15.4817994317,15.4818309587,15.4818624851,15.4818940108,15.4819255359,15.4819570602,15.4819885838,15.4820201068,15.482051629,15.4820831506,15.4821146715,15.4821461917,15.4821777112,15.48220923,15.4822407481,15.4822722656, +15.4823037823,15.4823352984,15.4823668138,15.4823983284,15.4824298424,15.4824613558,15.4824928684,15.4825243803,15.4825558915,15.4825874021,15.482618912,15.4826504212,15.4826819296,15.4827134374,15.4827449446,15.482776451, +15.4828079567,15.4828394618,15.4828709661,15.4829024698,15.4829339728,15.4829654751,15.4829969767,15.4830284776,15.4830599779,15.4830914774,15.4831229763,15.4831544745,15.4831859719,15.4832174687,15.4832489648,15.4832804603, +15.483311955,15.483343449,15.4833749424,15.4834064351,15.4834379271,15.4834694184,15.483500909,15.4835323989,15.4835638881,15.4835953767,15.4836268645,15.4836583517,15.4836898382,15.483721324,15.4837528091,15.4837842935, +15.4838157773,15.4838472603,15.4838787427,15.4839102244,15.4839417053,15.4839731856,15.4840046653,15.4840361442,15.4840676224,15.4840991,15.4841305769,15.484162053,15.4841935285,15.4842250033,15.4842564775,15.4842879509, +15.4843194236,15.4843508957,15.4843823671,15.4844138378,15.4844453078,15.4844767771,15.4845082457,15.4845397137,15.4845711809,15.4846026475,15.4846341134,15.4846655786,15.4846970431,15.4847285069,15.48475997,15.4847914325, +15.4848228943,15.4848543553,15.4848858157,15.4849172754,15.4849487345,15.4849801928,15.4850116505,15.4850431074,15.4850745637,15.4851060193,15.4851374742,15.4851689284,15.485200382,15.4852318348,15.485263287,15.4852947384, +15.4853261892,15.4853576393,15.4853890888,15.4854205375,15.4854519856,15.4854834329,15.4855148796,15.4855463256,15.4855777709,15.4856092155,15.4856406595,15.4856721027,15.4857035453,15.4857349872,15.4857664284,15.4857978689, +15.4858293087,15.4858607478,15.4858921863,15.4859236241,15.4859550612,15.4859864976,15.4860179333,15.4860493683,15.4860808027,15.4861122363,15.4861436693,15.4861751016,15.4862065332,15.4862379641,15.4862693943,15.4863008239, +15.4863322528,15.486363681,15.4863951085,15.4864265353,15.4864579614,15.4864893868,15.4865208116,15.4865522357,15.4865836591,15.4866150818,15.4866465038,15.4866779251,15.4867093458,15.4867407658,15.486772185,15.4868036036, +15.4868350216,15.4868664388,15.4868978553,15.4869292712,15.4869606864,15.4869921009,15.4870235147,15.4870549278,15.4870863403,15.487117752,15.4871491631,15.4871805735,15.4872119832,15.4872433922,15.4872748006,15.4873062082, +15.4873376152,15.4873690215,15.4874004271,15.487431832,15.4874632363,15.4874946398,15.4875260427,15.4875574449,15.4875888464,15.4876202472,15.4876516473,15.4876830468,15.4877144456,15.4877458437,15.4877772411,15.4878086378, +15.4878400338,15.4878714292,15.4879028238,15.4879342178,15.4879656111,15.4879970038,15.4880283957,15.488059787,15.4880911775,15.4881225674,15.4881539566,15.4881853452,15.488216733,15.4882481202,15.4882795066,15.4883108924, +15.4883422775,15.488373662,15.4884050457,15.4884364288,15.4884678111,15.4884991928,15.4885305739,15.4885619542,15.4885933338,15.4886247128,15.4886560911,15.4886874687,15.4887188456,15.4887502218,15.4887815974,15.4888129723, +15.4888443465,15.48887572,15.4889070928,15.4889384649,15.4889698364,15.4890012072,15.4890325773,15.4890639467,15.4890953154,15.4891266835,15.4891580508,15.4891894175,15.4892207835,15.4892521488,15.4892835135,15.4893148774, +15.4893462407,15.4893776033,15.4894089652,15.4894403265,15.489471687,15.4895030469,15.4895344061,15.4895657646,15.4895971224,15.4896284795,15.489659836,15.4896911918,15.4897225469,15.4897539013,15.489785255,15.4898166081, +15.4898479604,15.4898793121,15.4899106631,15.4899420135,15.4899733631,15.4900047121,15.4900360604,15.490067408,15.4900987549,15.4901301011,15.4901614467,15.4901927916,15.4902241358,15.4902554793,15.4902868221,15.4903181643, +15.4903495057,15.4903808465,15.4904121866,15.4904435261,15.4904748648,15.4905062029,15.4905375403,15.490568877,15.490600213,15.4906315484,15.490662883,15.490694217,15.4907255503,15.4907568829,15.4907882149,15.4908195462, +15.4908508767,15.4908822066,15.4909135359,15.4909448644,15.4909761923,15.4910075195,15.491038846,15.4910701718,15.4911014969,15.4911328214,15.4911641452,15.4911954683,15.4912267907,15.4912581124,15.4912894335,15.4913207539, +15.4913520736,15.4913833926,15.4914147109,15.4914460286,15.4914773456,15.4915086619,15.4915399775,15.4915712924,15.4916026067,15.4916339203,15.4916652332,15.4916965454,15.4917278569,15.4917591678,15.491790478,15.4918217875, +15.4918530963,15.4918844045,15.4919157119,15.4919470187,15.4919783248,15.4920096303,15.492040935,15.4920722391,15.4921035425,15.4921348452,15.4921661472,15.4921974486,15.4922287493,15.4922600492,15.4922913486,15.4923226472, +15.4923539452,15.4923852424,15.492416539,15.492447835,15.4924791302,15.4925104248,15.4925417187,15.4925730119,15.4926043044,15.4926355962,15.4926668874,15.4926981779,15.4927294677,15.4927607568,15.4927920453,15.4928233331, +15.4928546202,15.4928859066,15.4929171923,15.4929484774,15.4929797618,15.4930110455,15.4930423285,15.4930736109,15.4931048925,15.4931361735,15.4931674538,15.4931987335,15.4932300124,15.4932612907,15.4932925683,15.4933238452, +15.4933551215,15.4933863971,15.493417672,15.4934489462,15.4934802197,15.4935114926,15.4935427647,15.4935740362,15.4936053071,15.4936365772,15.4936678467,15.4936991155,15.4937303836,15.493761651,15.4937929178,15.4938241838, +15.4938554492,15.493886714,15.493917978,15.4939492414,15.4939805041,15.4940117661,15.4940430274,15.4940742881,15.4941055481,15.4941368074,15.494168066,15.4941993239,15.4942305812,15.4942618378,15.4942930937,15.494324349, +15.4943556035,15.4943868574,15.4944181106,15.4944493632,15.494480615,15.4945118662,15.4945431167,15.4945743665,15.4946056157,15.4946368641,15.4946681119,15.4946993591,15.4947306055,15.4947618513,15.4947930963,15.4948243408, +15.4948555845,15.4948868275,15.4949180699,15.4949493116,15.4949805527,15.495011793,15.4950430327,15.4950742717,15.49510551,15.4951367477,15.4951679846,15.4951992209,15.4952304565,15.4952616915,15.4952929257,15.4953241593, +15.4953553922,15.4953866245,15.495417856,15.4954490869,15.4954803171,15.4955115467,15.4955427755,15.4955740037,15.4956052312,15.495636458,15.4956676842,15.4956989096,15.4957301344,15.4957613586,15.495792582,15.4958238048, +15.4958550269,15.4958862483,15.4959174691,15.4959486891,15.4959799085,15.4960111272,15.4960423453,15.4960735626,15.4961047793,15.4961359954,15.4961672107,15.4961984254,15.4962296394,15.4962608527,15.4962920653,15.4963232773, +15.4963544886,15.4963856992,15.4964169091,15.4964481184,15.496479327,15.4965105349,15.4965417421,15.4965729487,15.4966041546,15.4966353598,15.4966665643,15.4966977682,15.4967289714,15.4967601739,15.4967913757,15.4968225769, +15.4968537774,15.4968849772,15.4969161763,15.4969473748,15.4969785726,15.4970097697,15.4970409662,15.4970721619,15.497103357,15.4971345514,15.4971657452,15.4971969382,15.4972281306,15.4972593224,15.4972905134,15.4973217038, +15.4973528935,15.4973840825,15.4974152708,15.4974464585,15.4974776455,15.4975088318,15.4975400175,15.4975712025,15.4976023868,15.4976335704,15.4976647534,15.4976959357,15.4977271173,15.4977582982,15.4977894785,15.497820658, +15.497851837,15.4978830152,15.4979141928,15.4979453696,15.4979765459,15.4980077214,15.4980388963,15.4980700705,15.498101244,15.4981324168,15.498163589,15.4981947605,15.4982259313,15.4982571015,15.498288271,15.4983194398, +15.4983506079,15.4983817754,15.4984129422,15.4984441083,15.4984752737,15.4985064385,15.4985376026,15.498568766,15.4985999288,15.4986310908,15.4986622522,15.498693413,15.498724573,15.4987557324,15.4987868911,15.4988180492, +15.4988492065,15.4988803632,15.4989115192,15.4989426746,15.4989738293,15.4990049833,15.4990361366,15.4990672892,15.4990984412,15.4991295925,15.4991607432,15.4991918931,15.4992230424,15.4992541911,15.499285339,15.4993164863, +15.4993476329,15.4993787788,15.4994099241,15.4994410686,15.4994722126,15.4995033558,15.4995344984,15.4995656403,15.4995967815,15.499627922,15.4996590619,15.4996902011,15.4997213397,15.4997524775,15.4997836147,15.4998147512, +15.4998458871,15.4998770223,15.4999081568,15.4999392906,15.4999704238,15.5000015562,15.5000326881,15.5000638192,15.5000949497,15.5001260795,15.5001572086,15.5001883371,15.5002194648,15.500250592,15.5002817184,15.5003128442, +15.5003439693,15.5003750937,15.5004062175,15.5004373405,15.500468463,15.5004995847,15.5005307058,15.5005618262,15.5005929459,15.500624065,15.5006551833,15.5006863011,15.5007174181,15.5007485345,15.5007796502,15.5008107652, +15.5008418796,15.5008729932,15.5009041063,15.5009352186,15.5009663303,15.5009974413,15.5010285516,15.5010596613,15.5010907703,15.5011218786,15.5011529862,15.5011840932,15.5012151995,15.5012463052,15.5012774101,15.5013085144, +15.5013396181,15.501370721,15.5014018233,15.5014329249,15.5014640259,15.5014951261,15.5015262257,15.5015573247,15.5015884229,15.5016195205,15.5016506174,15.5016817137,15.5017128093,15.5017439042,15.5017749984,15.501806092, +15.5018371849,15.5018682771,15.5018993687,15.5019304596,15.5019615498,15.5019926394,15.5020237282,15.5020548164,15.502085904,15.5021169909,15.5021480771,15.5021791626,15.5022102474,15.5022413316,15.5022724152,15.502303498, +15.5023345802,15.5023656617,15.5023967426,15.5024278227,15.5024589022,15.5024899811,15.5025210592,15.5025521367,15.5025832136,15.5026142897,15.5026453652,15.50267644,15.5027075142,15.5027385876,15.5027696605,15.5028007326, +15.5028318041,15.5028628749,15.502893945,15.5029250145,15.5029560833,15.5029871514,15.5030182188,15.5030492856,15.5030803518,15.5031114172,15.503142482,15.5031735461,15.5032046095,15.5032356723,15.5032667344,15.5032977959, +15.5033288566,15.5033599167,15.5033909762,15.5034220349,15.503453093,15.5034841504,15.5035152072,15.5035462633,15.5035773187,15.5036083735,15.5036394275,15.503670481,15.5037015337,15.5037325858,15.5037636372,15.5037946879, +15.503825738,15.5038567874,15.5038878361,15.5039188842,15.5039499316,15.5039809783,15.5040120244,15.5040430698,15.5040741145,15.5041051586,15.504136202,15.5041672447,15.5041982867,15.5042293281,15.5042603689,15.5042914089, +15.5043224483,15.504353487,15.5043845251,15.5044155624,15.5044465991,15.5044776352,15.5045086706,15.5045397053,15.5045707393,15.5046017727,15.5046328054,15.5046638374,15.5046948688,15.5047258995,15.5047569296,15.5047879589, +15.5048189876,15.5048500157,15.504881043,15.5049120697,15.5049430958,15.5049741211,15.5050051458,15.5050361699,15.5050671932,15.5050982159,15.505129238,15.5051602593,15.50519128,15.5052223,15.5052533194,15.5052843381, +15.5053153561,15.5053463735,15.5053773902,15.5054084062,15.5054394216,15.5054704363,15.5055014503,15.5055324637,15.5055634764,15.5055944884,15.5056254997,15.5056565104,15.5056875205,15.5057185298,15.5057495385,15.5057805466, +15.5058115539,15.5058425606,15.5058735666,15.505904572,15.5059355767,15.5059665807,15.5059975841,15.5060285868,15.5060595888,15.5060905902,15.5061215909,15.5061525909,15.5061835903,15.506214589,15.506245587,15.5062765844, +15.5063075811,15.5063385771,15.5063695725,15.5064005672,15.5064315613,15.5064625546,15.5064935473,15.5065245394,15.5065555308,15.5065865215,15.5066175115,15.5066485009,15.5066794896,15.5067104776,15.506741465,15.5067724517, +15.5068034378,15.5068344232,15.5068654079,15.506896392,15.5069273753,15.5069583581,15.5069893401,15.5070203215,15.5070513022,15.5070822823,15.5071132617,15.5071442404,15.5071752185,15.5072061959,15.5072371726,15.5072681487, +15.5072991241,15.5073300989,15.5073610729,15.5073920464,15.5074230191,15.5074539912,15.5074849626,15.5075159333,15.5075469034,15.5075778729,15.5076088416,15.5076398097,15.5076707771,15.5077017439,15.50773271,15.5077636754, +15.5077946402,15.5078256043,15.5078565677,15.5078875305,15.5079184926,15.5079494541,15.5079804149,15.508011375,15.5080423344,15.5080732932,15.5081042513,15.5081352088,15.5081661656,15.5081971217,15.5082280772,15.508259032, +15.5082899861,15.5083209396,15.5083518924,15.5083828446,15.5084137961,15.5084447469,15.508475697,15.5085066465,15.5085375953,15.5085685435,15.508599491,15.5086304378,15.508661384,15.5086923295,15.5087232744,15.5087542185, +15.5087851621,15.5088161049,15.5088470471,15.5088779886,15.5089089295,15.5089398697,15.5089708092,15.5090017481,15.5090326863,15.5090636239,15.5090945607,15.5091254969,15.5091564325,15.5091873674,15.5092183016,15.5092492352, +15.5092801681,15.5093111003,15.5093420319,15.5093729628,15.5094038931,15.5094348226,15.5094657516,15.5094966798,15.5095276074,15.5095585344,15.5095894606,15.5096203862,15.5096513112,15.5096822355,15.5097131591,15.509744082, +15.5097750043,15.509805926,15.5098368469,15.5098677672,15.5098986869,15.5099296059,15.5099605242,15.5099914418,15.5100223588,15.5100532751,15.5100841908,15.5101151058,15.5101460202,15.5101769338,15.5102078469,15.5102387592, +15.5102696709,15.5103005819,15.5103314923,15.510362402,15.510393311,15.5104242194,15.5104551271,15.5104860342,15.5105169406,15.5105478463,15.5105787514,15.5106096558,15.5106405596,15.5106714626,15.5107023651,15.5107332668, +15.5107641679,15.5107950684,15.5108259681,15.5108568672,15.5108877657,15.5109186635,15.5109495606,15.5109804571,15.5110113529,15.511042248,15.5110731425,15.5111040363,15.5111349295,15.511165822,15.5111967138,15.511227605, +15.5112584955,15.5112893854,15.5113202745,15.5113511631,15.5113820509,15.5114129381,15.5114438247,15.5114747106,15.5115055958,15.5115364804,15.5115673643,15.5115982475,15.5116291301,15.511660012,15.5116908932,15.5117217738, +15.5117526538,15.511783533,15.5118144117,15.5118452896,15.5118761669,15.5119070435,15.5119379195,15.5119687948,15.5119996694,15.5120305434,15.5120614168,15.5120922894,15.5121231614,15.5121540328,15.5121849034,15.5122157735, +15.5122466428,15.5122775115,15.5123083796,15.512339247,15.5123701137,15.5124009797,15.5124318451,15.5124627099,15.5124935739,15.5125244374,15.5125553001,15.5125861622,15.5126170237,15.5126478844,15.5126787445,15.512709604, +15.5127404628,15.5127713209,15.5128021784,15.5128330352,15.5128638914,15.5128947469,15.5129256017,15.5129564559,15.5129873094,15.5130181623,15.5130490145,15.513079866,15.5131107169,15.5131415671,15.5131724167,15.5132032656, +15.5132341138,15.5132649614,15.5132958083,15.5133266546,15.5133575002,15.5133883451,15.5134191894,15.513450033,15.513480876,15.5135117183,15.5135425599,15.5135734009,15.5136042412,15.5136350809,15.5136659199,15.5136967583, +15.513727596,15.513758433,15.5137892694,15.5138201051,15.5138509401,15.5138817745,15.5139126082,15.5139434413,15.5139742737,15.5140051055,15.5140359366,15.514066767,15.5140975968,15.5141284259,15.5141592544,15.5141900822, +15.5142209094,15.5142517358,15.5142825617,15.5143133868,15.5143442114,15.5143750352,15.5144058584,15.5144366809,15.5144675028,15.514498324,15.5145291446,15.5145599645,15.5145907837,15.5146216023,15.5146524203,15.5146832375, +15.5147140541,15.5147448701,15.5147756854,15.5148065,15.514837314,15.5148681273,15.51489894,15.514929752,15.5149605633,15.514991374,15.515022184,15.5150529934,15.5150838021,15.5151146102,15.5151454176,15.5151762243, +15.5152070304,15.5152378358,15.5152686406,15.5152994447,15.5153302482,15.515361051,15.5153918531,15.5154226546,15.5154534554,15.5154842556,15.5155150551,15.5155458539,15.5155766521,15.5156074496,15.5156382465,15.5156690427, +15.5156998383,15.5157306332,15.5157614274,15.515792221,15.515823014,15.5158538062,15.5158845978,15.5159153888,15.5159461791,15.5159769688,15.5160077577,15.5160385461,15.5160693338,15.5161001208,15.5161309071,15.5161616928, +15.5161924779,15.5162232623,15.516254046,15.5162848291,15.5163156115,15.5163463933,15.5163771744,15.5164079548,15.5164387346,15.5164695137,15.5165002922,15.51653107,15.5165618472,15.5165926237,15.5166233996,15.5166541748, +15.5166849493,15.5167157232,15.5167464964,15.516777269,15.5168080409,15.5168388122,15.5168695828,15.5169003527,15.516931122,15.5169618906,15.5169926586,15.5170234259,15.5170541926,15.5170849586,15.517115724,15.5171464886, +15.5171772527,15.5172080161,15.5172387788,15.5172695409,15.5173003023,15.5173310631,15.5173618232,15.5173925826,15.5174233414,15.5174540995,15.517484857,15.5175156138,15.51754637,15.5175771255,15.5176078804,15.5176386346, +15.5176693881,15.517700141,15.5177308933,15.5177616448,15.5177923958,15.517823146,15.5178538957,15.5178846446,15.5179153929,15.5179461406,15.5179768876,15.5180076339,15.5180383796,15.5180691246,15.518099869,15.5181306127, +15.5181613558,15.5181920982,15.5182228399,15.518253581,15.5182843215,15.5183150612,15.5183458004,15.5183765388,15.5184072767,15.5184380138,15.5184687504,15.5184994862,15.5185302214,15.518560956,15.5185916899,15.5186224231, +15.5186531557,15.5186838876,15.5187146189,15.5187453495,15.5187760795,15.5188068088,15.5188375374,15.5188682654,15.5188989928,15.5189297195,15.5189604455,15.5189911709,15.5190218956,15.5190526197,15.5190833431,15.5191140659, +15.519144788,15.5191755095,15.5192062303,15.5192369504,15.5192676699,15.5192983887,15.5193291069,15.5193598245,15.5193905413,15.5194212576,15.5194519731,15.5194826881,15.5195134023,15.5195441159,15.5195748289,15.5196055412, +15.5196362528,15.5196669638,15.5196976742,15.5197283839,15.5197590929,15.5197898013,15.519820509,15.5198512161,15.5198819225,15.5199126283,15.5199433334,15.5199740378,15.5200047416,15.5200354448,15.5200661473,15.5200968491, +15.5201275503,15.5201582509,15.5201889507,15.52021965,15.5202503486,15.5202810465,15.5203117438,15.5203424404,15.5203731363,15.5204038317,15.5204345263,15.5204652203,15.5204959137,15.5205266064,15.5205572984,15.5205879898, +15.5206186806,15.5206493706,15.5206800601,15.5207107489,15.520741437,15.5207721245,15.5208028113,15.5208334975,15.520864183,15.5208948679,15.5209255521,15.5209562356,15.5209869185,15.5210176008,15.5210482824,15.5210789634, +15.5211096437,15.5211403233,15.5211710023,15.5212016806,15.5212323583,15.5212630354,15.5212937117,15.5213243875,15.5213550626,15.521385737,15.5214164108,15.5214470839,15.5214777564,15.5215084282,15.5215390993,15.5215697699, +15.5216004397,15.5216311089,15.5216617775,15.5216924454,15.5217231127,15.5217537793,15.5217844452,15.5218151105,15.5218457752,15.5218764392,15.5219071025,15.5219377652,15.5219684272,15.5219990886,15.5220297494,15.5220604095, +15.5220910689,15.5221217277,15.5221523858,15.5221830433,15.5222137001,15.5222443563,15.5222750118,15.5223056667,15.5223363209,15.5223669745,15.5223976274,15.5224282797,15.5224589313,15.5224895823,15.5225202326,15.5225508822, +15.5225815313,15.5226121796,15.5226428273,15.5226734744,15.5227041208,15.5227347666,15.5227654117,15.5227960561,15.5228266999,15.5228573431,15.5228879856,15.5229186274,15.5229492686,15.5229799092,15.5230105491,15.5230411883, +15.5230718269,15.5231024649,15.5231331022,15.5231637388,15.5231943748,15.5232250102,15.5232556449,15.5232862789,15.5233169123,15.5233475451,15.5233781772,15.5234088086,15.5234394394,15.5234700695,15.523500699,15.5235313279, +15.5235619561,15.5235925836,15.5236232105,15.5236538367,15.5236844623,15.5237150873,15.5237457116,15.5237763352,15.5238069582,15.5238375805,15.5238682022,15.5238988233,15.5239294437,15.5239600634,15.5239906825,15.5240213009, +15.5240519187,15.5240825359,15.5241131524,15.5241437682,15.5241743834,15.5242049979,15.5242356118,15.5242662251,15.5242968377,15.5243274496,15.5243580609,15.5243886715,15.5244192815,15.5244498909,15.5244804996,15.5245111076, +15.524541715,15.5245723218,15.5246029279,15.5246335333,15.5246641381,15.5246947423,15.5247253458,15.5247559486,15.5247865509,15.5248171524,15.5248477533,15.5248783536,15.5249089532,15.5249395521,15.5249701504,15.5250007481, +15.5250313451,15.5250619415,15.5250925372,15.5251231323,15.5251537267,15.5251843205,15.5252149136,15.525245506,15.5252760979,15.525306689,15.5253372796,15.5253678694,15.5253984587,15.5254290472,15.5254596352,15.5254902225, +15.5255208091,15.5255513951,15.5255819804,15.5256125651,15.5256431491,15.5256737325,15.5257043153,15.5257348974,15.5257654788,15.5257960596,15.5258266398,15.5258572193,15.5258877981,15.5259183763,15.5259489539,15.5259795308, +15.5260101071,15.5260406827,15.5260712576,15.526101832,15.5261324056,15.5261629787,15.526193551,15.5262241228,15.5262546938,15.5262852643,15.526315834,15.5263464032,15.5263769717,15.5264075395,15.5264381067,15.5264686732, +15.5264992391,15.5265298044,15.526560369,15.5265909329,15.5266214962,15.5266520589,15.5266826209,15.5267131823,15.526743743,15.5267743031,15.5268048625,15.5268354213,15.5268659794,15.5268965369,15.5269270937,15.5269576499, +15.5269882054,15.5270187603,15.5270493146,15.5270798682,15.5271104211,15.5271409734,15.5271715251,15.5272020761,15.5272326264,15.5272631762,15.5272937252,15.5273242737,15.5273548214,15.5273853686,15.527415915,15.5274464609, +15.5274770061,15.5275075506,15.5275380945,15.5275686377,15.5275991803,15.5276297223,15.5276602636,15.5276908043,15.5277213443,15.5277518837,15.5277824224,15.5278129605,15.5278434979,15.5278740347,15.5279045708,15.5279351063, +15.5279656411,15.5279961753,15.5280267089,15.5280572418,15.528087774,15.5281183057,15.5281488366,15.5281793669,15.5282098966,15.5282404257,15.528270954,15.5283014818,15.5283320089,15.5283625353,15.5283930611,15.5284235863, +15.5284541108,15.5284846346,15.5285151578,15.5285456804,15.5285762023,15.5286067236,15.5286372442,15.5286677642,15.5286982836,15.5287288023,15.5287593203,15.5287898377,15.5288203545,15.5288508706,15.5288813861,15.5289119009, +15.5289424151,15.5289729286,15.5290034415,15.5290339537,15.5290644653,15.5290949763,15.5291254866,15.5291559962,15.5291865053,15.5292170136,15.5292475213,15.5292780284,15.5293085349,15.5293390406,15.5293695458,15.5294000503, +15.5294305541,15.5294610574,15.5294915599,15.5295220618,15.5295525631,15.5295830637,15.5296135637,15.5296440631,15.5296745618,15.5297050598,15.5297355572,15.529766054,15.5297965501,15.5298270456,15.5298575404,15.5298880346, +15.5299185281,15.529949021,15.5299795133,15.5300100049,15.5300404958,15.5300709861,15.5301014758,15.5301319648,15.5301624532,15.530192941,15.5302234281,15.5302539145,15.5302844003,15.5303148855,15.53034537,15.5303758539, +15.5304063371,15.5304368197,15.5304673016,15.5304977829,15.5305282636,15.5305587436,15.530589223,15.5306197017,15.5306501798,15.5306806572,15.530711134,15.5307416101,15.5307720856,15.5308025605,15.5308330347,15.5308635083, +15.5308939812,15.5309244535,15.5309549251,15.5309853961,15.5310158665,15.5310463362,15.5310768052,15.5311072737,15.5311377414,15.5311682086,15.5311986751,15.5312291409,15.5312596061,15.5312900707,15.5313205346,15.5313509979, +15.5313814605,15.5314119225,15.5314423839,15.5314728446,15.5315033046,15.531533764,15.5315642228,15.5315946809,15.5316251384,15.5316555953,15.5316860515,15.531716507,15.5317469619,15.5317774162,15.5318078698,15.5318383228, +15.5318687752,15.5318992269,15.5319296779,15.5319601284,15.5319905781,15.5320210273,15.5320514757,15.5320819236,15.5321123708,15.5321428174,15.5321732633,15.5322037085,15.5322341532,15.5322645972,15.5322950405,15.5323254832, +15.5323559253,15.5323863667,15.5324168075,15.5324472476,15.5324776871,15.532508126,15.5325385642,15.5325690017,15.5325994387,15.532629875,15.5326603106,15.5326907456,15.53272118,15.5327516137,15.5327820467,15.5328124792, +15.532842911,15.5328733421,15.5329037726,15.5329342025,15.5329646317,15.5329950603,15.5330254882,15.5330559155,15.5330863422,15.5331167682,15.5331471936,15.5331776183,15.5332080424,15.5332384658,15.5332688886,15.5332993108, +15.5333297323,15.5333601532,15.5333905734,15.533420993,15.533451412,15.5334818303,15.533512248,15.533542665,15.5335730814,15.5336034971,15.5336339122,15.5336643267,15.5336947405,15.5337251537,15.5337555663,15.5337859782, +15.5338163894,15.5338468001,15.53387721,15.5339076194,15.5339380281,15.5339684361,15.5339988435,15.5340292503,15.5340596565,15.5340900619,15.5341204668,15.534150871,15.5341812746,15.5342116775,15.5342420798,15.5342724814, +15.5343028825,15.5343332828,15.5343636825,15.5343940816,15.5344244801,15.5344548779,15.5344852751,15.5345156716,15.5345460675,15.5345764627,15.5346068573,15.5346372513,15.5346676446,15.5346980373,15.5347284293,15.5347588207, +15.5347892115,15.5348196016,15.5348499911,15.5348803799,15.5349107681,15.5349411557,15.5349715426,15.5350019289,15.5350323145,15.5350626995,15.5350930839,15.5351234676,15.5351538507,15.5351842331,15.5352146149,15.5352449961, +15.5352753766,15.5353057565,15.5353361357,15.5353665143,15.5353968923,15.5354272696,15.5354576463,15.5354880224,15.5355183978,15.5355487725,15.5355791467,15.5356095201,15.535639893,15.5356702652,15.5357006368,15.5357310077, +15.535761378,15.5357917476,15.5358221166,15.535852485,15.5358828528,15.5359132198,15.5359435863,15.5359739521,15.5360043173,15.5360346818,15.5360650457,15.536095409,15.5361257716,15.5361561336,15.5361864949,15.5362168556, +15.5362472157,15.5362775751,15.5363079339,15.536338292,15.5363686496,15.5363990064,15.5364293627,15.5364597182,15.5364900732,15.5365204275,15.5365507812,15.5365811342,15.5366114866,15.5366418384,15.5366721895,15.53670254, +15.5367328898,15.536763239,15.5367935876,15.5368239355,15.5368542828,15.5368846295,15.5369149755,15.5369453209,15.5369756656,15.5370060097,15.5370363532,15.537066696,15.5370970382,15.5371273797,15.5371577206,15.5371880609, +15.5372184005,15.5372487395,15.5372790779,15.5373094156,15.5373397527,15.5373700891,15.5374004249,15.5374307601,15.5374610946,15.5374914285,15.5375217618,15.5375520944,15.5375824264,15.5376127577,15.5376430884,15.5376734185, +15.5377037479,15.5377340767,15.5377644048,15.5377947324,15.5378250592,15.5378553855,15.5378857111,15.537916036,15.5379463604,15.5379766841,15.5380070071,15.5380373295,15.5380676513,15.5380979725,15.538128293,15.5381586128, +15.5381889321,15.5382192506,15.5382495686,15.5382798859,15.5383102026,15.5383405186,15.538370834,15.5384011488,15.538431463,15.5384617764,15.5384920893,15.5385224015,15.5385527131,15.5385830241,15.5386133344,15.538643644, +15.5386739531,15.5387042615,15.5387345692,15.5387648764,15.5387951829,15.5388254887,15.5388557939,15.5388860985,15.5389164025,15.5389467058,15.5389770084,15.5390073105,15.5390376119,15.5390679126,15.5390982128,15.5391285123, +15.5391588111,15.5391891093,15.5392194069,15.5392497038,15.5392800002,15.5393102958,15.5393405909,15.5393708853,15.539401179,15.5394314722,15.5394617646,15.5394920565,15.5395223477,15.5395526383,15.5395829283,15.5396132176, +15.5396435062,15.5396737943,15.5397040817,15.5397343684,15.5397646546,15.5397949401,15.5398252249,15.5398555092,15.5398857928,15.5399160757,15.539946358,15.5399766397,15.5400069208,15.5400372012,15.5400674809,15.5400977601, +15.5401280386,15.5401583165,15.5401885937,15.5402188703,15.5402491462,15.5402794216,15.5403096963,15.5403399703,15.5403702437,15.5404005165,15.5404307887,15.5404610602,15.5404913311,15.5405216013,15.5405518709,15.5405821399, +15.5406124082,15.540642676,15.540672943,15.5407032095,15.5407334753,15.5407637404,15.540794005,15.5408242689,15.5408545321,15.5408847947,15.5409150567,15.5409453181,15.5409755788,15.5410058389,15.5410360983,15.5410663572, +15.5410966153,15.5411268729,15.5411571298,15.5411873861,15.5412176417,15.5412478967,15.5412781511,15.5413084049,15.541338658,15.5413689104,15.5413991623,15.5414294135,15.5414596641,15.541489914,15.5415201633,15.541550412, +15.54158066,15.5416109074,15.5416411542,15.5416714003,15.5417016458,15.5417318906,15.5417621349,15.5417923785,15.5418226214,15.5418528638,15.5418831054,15.5419133465,15.5419435869,15.5419738267,15.5420040659,15.5420343044, +15.5420645423,15.5420947795,15.5421250162,15.5421552521,15.5421854875,15.5422157222,15.5422459563,15.5422761898,15.5423064226,15.5423366548,15.5423668863,15.5423971172,15.5424273475,15.5424575772,15.5424878062,15.5425180346, +15.5425482623,15.5425784895,15.5426087159,15.5426389418,15.542669167,15.5426993916,15.5427296155,15.5427598389,15.5427900616,15.5428202836,15.542850505,15.5428807258,15.542910946,15.5429411655,15.5429713844,15.5430016026, +15.5430318203,15.5430620372,15.5430922536,15.5431224693,15.5431526844,15.5431828989,15.5432131127,15.5432433259,15.5432735384,15.5433037504,15.5433339617,15.5433641723,15.5433943824,15.5434245918,15.5434548005,15.5434850087, +15.5435152162,15.543545423,15.5435756293,15.5436058349,15.5436360398,15.5436662442,15.5436964479,15.5437266509,15.5437568534,15.5437870552,15.5438172564,15.5438474569,15.5438776568,15.5439078561,15.5439380547,15.5439682528, +15.5439984501,15.5440286469,15.544058843,15.5440890385,15.5441192333,15.5441494276,15.5441796212,15.5442098141,15.5442400064,15.5442701981,15.5443003892,15.5443305796,15.5443607694,15.5443909586,15.5444211471,15.544451335, +15.5444815223,15.544511709,15.544541895,15.5445720803,15.5446022651,15.5446324492,15.5446626327,15.5446928155,15.5447229978,15.5447531793,15.5447833603,15.5448135406,15.5448437203,15.5448738994,15.5449040778,15.5449342556, +15.5449644328,15.5449946093,15.5450247852,15.5450549605,15.5450851352,15.5451153092,15.5451454826,15.5451756553,15.5452058274,15.5452359989,15.5452661698,15.54529634,15.5453265096,15.5453566786,15.5453868469,15.5454170146, +15.5454471817,15.5454773481,15.5455075139,15.5455376791,15.5455678437,15.5455980076,15.5456281709,15.5456583335,15.5456884956,15.545718657,15.5457488177,15.5457789779,15.5458091374,15.5458392962,15.5458694545,15.5458996121, +15.5459297691,15.5459599254,15.5459900812,15.5460202363,15.5460503907,15.5460805446,15.5461106978,15.5461408503,15.5461710023,15.5462011536,15.5462313043,15.5462614543,15.5462916037,15.5463217525,15.5463519007,15.5463820482, +15.5464121951,15.5464423414,15.546472487,15.546502632,15.5465327764,15.5465629202,15.5465930633,15.5466232058,15.5466533477,15.5466834889,15.5467136295,15.5467437695,15.5467739088,15.5468040475,15.5468341856,15.5468643231, +15.5468944599,15.5469245961,15.5469547317,15.5469848666,15.5470150009,15.5470451346,15.5470752676,15.5471054,15.5471355318,15.547165663,15.5471957935,15.5472259234,15.5472560527,15.5472861813,15.5473163094,15.5473464367, +15.5473765635,15.5474066896,15.5474368151,15.54746694,15.5474970642,15.5475271878,15.5475573108,15.5475874332,15.5476175549,15.547647676,15.5476777965,15.5477079163,15.5477380355,15.5477681541,15.547798272,15.5478283894, +15.5478585061,15.5478886221,15.5479187376,15.5479488524,15.5479789665,15.5480090801,15.548039193,15.5480693053,15.548099417,15.548129528,15.5481596384,15.5481897482,15.5482198574,15.5482499659,15.5482800738,15.548310181, +15.5483402877,15.5483703937,15.5484004991,15.5484306038,15.5484607079,15.5484908114,15.5485209143,15.5485510166,15.5485811182,15.5486112191,15.5486413195,15.5486714192,15.5487015183,15.5487316168,15.5487617147,15.5487918119, +15.5488219085,15.5488520044,15.5488820998,15.5489121945,15.5489422885,15.548972382,15.5490024748,15.549032567,15.5490626586,15.5490927495,15.5491228398,15.5491529295,15.5491830186,15.549213107,15.5492431948,15.549273282, +15.5493033685,15.5493334544,15.5493635397,15.5493936244,15.5494237084,15.5494537918,15.5494838746,15.5495139568,15.5495440383,15.5495741192,15.5496041995,15.5496342791,15.5496643581,15.5496944365,15.5497245143,15.5497545914, +15.5497846679,15.5498147438,15.5498448191,15.5498748937,15.5499049677,15.5499350411,15.5499651138,15.549995186,15.5500252575,15.5500553283,15.5500853986,15.5501154682,15.5501455372,15.5501756055,15.5502056733,15.5502357404, +15.5502658069,15.5502958727,15.550325938,15.5503560026,15.5503860665,15.5504161299,15.5504461926,15.5504762547,15.5505063162,15.550536377,15.5505664372,15.5505964968,15.5506265558,15.5506566141,15.5506866718,15.5507167289, +15.5507467854,15.5507768412,15.5508068964,15.550836951,15.550867005,15.5508970583,15.550927111,15.5509571631,15.5509872145,15.5510172653,15.5510473155,15.5510773651,15.5511074141,15.5511374624,15.5511675101,15.5511975572, +15.5512276036,15.5512576494,15.5512876946,15.5513177392,15.5513477831,15.5513778264,15.5514078691,15.5514379112,15.5514679526,15.5514979934,15.5515280336,15.5515580732,15.5515881121,15.5516181504,15.5516481881,15.5516782252, +15.5517082616,15.5517382974,15.5517683326,15.5517983672,15.5518284011,15.5518584344,15.5518884671,15.5519184992,15.5519485306,15.5519785614,15.5520085916,15.5520386211,15.5520686501,15.5520986784,15.5521287061,15.5521587331, +15.5521887596,15.5522187854,15.5522488105,15.5522788351,15.552308859,15.5523388823,15.552368905,15.5523989271,15.5524289485,15.5524589693,15.5524889895,15.5525190091,15.552549028,15.5525790463,15.552609064,15.5526390811, +15.5526690975,15.5526991133,15.5527291285,15.5527591431,15.552789157,15.5528191703,15.552849183,15.5528791951,15.5529092065,15.5529392174,15.5529692275,15.5529992371,15.5530292461,15.5530592544,15.5530892621,15.5531192692, +15.5531492756,15.5531792814,15.5532092866,15.5532392912,15.5532692952,15.5532992985,15.5533293012,15.5533593033,15.5533893047,15.5534193056,15.5534493058,15.5534793053,15.5535093043,15.5535393026,15.5535693004,15.5535992975, +15.5536292939,15.5536592898,15.553689285,15.5537192796,15.5537492735,15.5537792669,15.5538092596,15.5538392517,15.5538692432,15.5538992341,15.5539292243,15.5539592139,15.5539892029,15.5540191912,15.554049179,15.5540791661, +15.5541091526,15.5541391384,15.5541691237,15.5541991083,15.5542290923,15.5542590757,15.5542890584,15.5543190406,15.5543490221,15.5543790029,15.5544089832,15.5544389628,15.5544689419,15.5544989202,15.554528898,15.5545588752, +15.5545888517,15.5546188276,15.5546488029,15.5546787775,15.5547087515,15.5547387249,15.5547686977,15.5547986699,15.5548286414,15.5548586123,15.5548885826,15.5549185523,15.5549485214,15.5549784898,15.5550084576,15.5550384248, +15.5550683913,15.5550983573,15.5551283226,15.5551582873,15.5551882513,15.5552182148,15.5552481776,15.5552781398,15.5553081014,15.5553380624,15.5553680227,15.5553979824,15.5554279415,15.5554579,15.5554878578,15.555517815, +15.5555477716,15.5555777276,15.555607683,15.5556376377,15.5556675918,15.5556975453,15.5557274982,15.5557574505,15.5557874021,15.5558173531,15.5558473035,15.5558772532,15.5559072024,15.5559371509,15.5559670988,15.5559970461, +15.5560269927,15.5560569388,15.5560868842,15.556116829,15.5561467731,15.5561767167,15.5562066596,15.5562366019,15.5562665436,15.5562964846,15.5563264251,15.5563563649,15.5563863041,15.5564162427,15.5564461806,15.556476118, +15.5565060547,15.5565359908,15.5565659262,15.5565958611,15.5566257953,15.5566557289,15.5566856619,15.5567155943,15.556745526,15.5567754571,15.5568053876,15.5568353175,15.5568652468,15.5568951754,15.5569251034,15.5569550308, +15.5569849576,15.5570148837,15.5570448093,15.5570747342,15.5571046585,15.5571345822,15.5571645052,15.5571944276,15.5572243495,15.5572542706,15.5572841912,15.5573141112,15.5573440305,15.5573739492,15.5574038673,15.5574337848, +15.5574637016,15.5574936178,15.5575235334,15.5575534484,15.5575833628,15.5576132765,15.5576431896,15.5576731022,15.557703014,15.5577329253,15.5577628359,15.557792746,15.5578226554,15.5578525642,15.5578824723,15.5579123799, +15.5579422868,15.5579721931,15.5580020988,15.5580320038,15.5580619083,15.5580918121,15.5581217153,15.5581516179,15.5581815199,15.5582114212,15.5582413219,15.558271222,15.5583011215,15.5583310204,15.5583609186,15.5583908163, +15.5584207133,15.5584506097,15.5584805054,15.5585104006,15.5585402951,15.558570189,15.5586000823,15.558629975,15.558659867,15.5586897585,15.5587196493,15.5587495395,15.558779429,15.558809318,15.5588392063,15.558869094, +15.5588989811,15.5589288676,15.5589587535,15.5589886387,15.5590185233,15.5590484073,15.5590782907,15.5591081735,15.5591380556,15.5591679372,15.5591978181,15.5592276984,15.559257578,15.5592874571,15.5593173355,15.5593472133, +15.5593770905,15.5594069671,15.5594368431,15.5594667184,15.5594965931,15.5595264672,15.5595563407,15.5595862136,15.5596160858,15.5596459574,15.5596758284,15.5597056988,15.5597355686,15.5597654378,15.5597953063,15.5598251742, +15.5598550415,15.5598849082,15.5599147743,15.5599446397,15.5599745045,15.5600043687,15.5600342323,15.5600640953,15.5600939576,15.5601238194,15.5601536805,15.560183541,15.5602134009,15.5602432601,15.5602731188,15.5603029768, +15.5603328342,15.560362691,15.5603925472,15.5604224027,15.5604522577,15.560482112,15.5605119657,15.5605418188,15.5605716712,15.5606015231,15.5606313743,15.5606612249,15.5606910749,15.5607209243,15.5607507731,15.5607806212, +15.5608104687,15.5608403156,15.5608701619,15.5609000076,15.5609298527,15.5609596971,15.5609895409,15.5610193841,15.5610492267,15.5610790687,15.56110891,15.5611387508,15.5611685909,15.5611984304,15.5612282693,15.5612581075, +15.5612879452,15.5613177822,15.5613476186,15.5613774544,15.5614072896,15.5614371241,15.5614669581,15.5614967914,15.5615266241,15.5615564562,15.5615862877,15.5616161186,15.5616459488,15.5616757784,15.5617056075,15.5617354358, +15.5617652636,15.5617950908,15.5618249173,15.5618547433,15.5618845686,15.5619143933,15.5619442173,15.5619740408,15.5620038637,15.5620336859,15.5620635075,15.5620933285,15.5621231489,15.5621529686,15.5621827878,15.5622126063, +15.5622424242,15.5622722415,15.5623020582,15.5623318743,15.5623616897,15.5623915045,15.5624213188,15.5624511324,15.5624809453,15.5625107577,15.5625405695,15.5625703806,15.5626001911,15.562630001,15.5626598103,15.562689619, +15.562719427,15.5627492345,15.5627790413,15.5628088475,15.5628386531,15.5628684581,15.5628982625,15.5629280662,15.5629578693,15.5629876718,15.5630174737,15.563047275,15.5630770757,15.5631068758,15.5631366752,15.563166474, +15.5631962722,15.5632260698,15.5632558668,15.5632856631,15.5633154589,15.563345254,15.5633750485,15.5634048424,15.5634346357,15.5634644284,15.5634942204,15.5635240119,15.5635538027,15.5635835929,15.5636133825,15.5636431715, +15.5636729598,15.5637027476,15.5637325347,15.5637623212,15.5637921071,15.5638218924,15.5638516771,15.5638814611,15.5639112446,15.5639410274,15.5639708096,15.5640005912,15.5640303722,15.5640601526,15.5640899323,15.5641197115, +15.56414949,15.5641792679,15.5642090452,15.5642388219,15.5642685979,15.5642983734,15.5643281482,15.5643579224,15.5643876961,15.564417469,15.5644472414,15.5644770132,15.5645067843,15.5645365549,15.5645663248,15.5645960941, +15.5646258628,15.5646556309,15.5646853983,15.5647151652,15.5647449314,15.564774697,15.5648044621,15.5648342264,15.5648639902,15.5648937534,15.5649235159,15.5649532779,15.5649830392,15.5650127999,15.56504256,15.5650723195, +15.5651020784,15.5651318366,15.5651615943,15.5651913513,15.5652211077,15.5652508635,15.5652806187,15.5653103733,15.5653401272,15.5653698806,15.5653996333,15.5654293854,15.5654591369,15.5654888878,15.5655186381,15.5655483877, +15.5655781368,15.5656078852,15.565637633,15.5656673803,15.5656971268,15.5657268728,15.5657566182,15.565786363,15.5658161071,15.5658458506,15.5658755935,15.5659053359,15.5659350775,15.5659648186,15.5659945591,15.5660242989, +15.5660540382,15.5660837768,15.5661135148,15.5661432522,15.566172989,15.5662027252,15.5662324607,15.5662621957,15.56629193,15.5663216637,15.5663513968,15.5663811293,15.5664108612,15.5664405925,15.5664703231,15.5665000532, +15.5665297826,15.5665595114,15.5665892397,15.5666189672,15.5666486942,15.5666784206,15.5667081464,15.5667378715,15.566767596,15.56679732,15.5668270433,15.566856766,15.566886488,15.5669162095,15.5669459304,15.5669756506, +15.5670053702,15.5670350893,15.5670648077,15.5670945255,15.5671242427,15.5671539592,15.5671836752,15.5672133905,15.5672431053,15.5672728194,15.5673025329,15.5673322458,15.5673619581,15.5673916698,15.5674213808,15.5674510913, +15.5674808011,15.5675105104,15.567540219,15.567569927,15.5675996344,15.5676293412,15.5676590473,15.5676887529,15.5677184579,15.5677481622,15.5677778659,15.567807569,15.5678372715,15.5678669734,15.5678966747,15.5679263754, +15.5679560754,15.5679857749,15.5680154737,15.5680451719,15.5680748695,15.5681045665,15.5681342629,15.5681639587,15.5681936539,15.5682233484,15.5682530423,15.5682827357,15.5683124284,15.5683421205,15.568371812,15.5684015029, +15.5684311932,15.5684608828,15.5684905719,15.5685202603,15.5685499482,15.5685796354,15.568609322,15.568639008,15.5686686934,15.5686983782,15.5687280623,15.5687577459,15.5687874288,15.5688171112,15.5688467929,15.568876474, +15.5689061545,15.5689358344,15.5689655137,15.5689951923,15.5690248704,15.5690545479,15.5690842247,15.5691139009,15.5691435765,15.5691732516,15.569202926,15.5692325997,15.5692622729,15.5692919455,15.5693216174,15.5693512888, +15.5693809595,15.5694106296,15.5694402992,15.5694699681,15.5694996364,15.5695293041,15.5695589711,15.5695886376,15.5696183034,15.5696479687,15.5696776333,15.5697072974,15.5697369608,15.5697666236,15.5697962858,15.5698259474, +15.5698556083,15.5698852687,15.5699149285,15.5699445876,15.5699742461,15.5700039041,15.5700335614,15.5700632181,15.5700928742,15.5701225297,15.5701521846,15.5701818388,15.5702114925,15.5702411455,15.570270798,15.5703004498, +15.570330101,15.5703597516,15.5703894016,15.570419051,15.5704486998,15.570478348,15.5705079956,15.5705376425,15.5705672889,15.5705969346,15.5706265797,15.5706562243,15.5706858682,15.5707155115,15.5707451542,15.5707747962, +15.5708044377,15.5708340786,15.5708637188,15.5708933585,15.5709229975,15.570952636,15.5709822738,15.571011911,15.5710415476,15.5710711836,15.571100819,15.5711304538,15.5711600879,15.5711897215,15.5712193544,15.5712489868, +15.5712786185,15.5713082496,15.5713378802,15.5713675101,15.5713971394,15.5714267681,15.5714563961,15.5714860236,15.5715156505,15.5715452767,15.5715749024,15.5716045274,15.5716341519,15.5716637757,15.5716933989,15.5717230215, +15.5717526435,15.5717822649,15.5718118857,15.5718415059,15.5718711254,15.5719007444,15.5719303627,15.5719599805,15.5719895976,15.5720192141,15.57204883,15.5720784454,15.5721080601,15.5721376742,15.5721672876,15.5721969005, +15.5722265128,15.5722561245,15.5722857355,15.572315346,15.5723449558,15.572374565,15.5724041737,15.5724337817,15.5724633891,15.5724929959,15.5725226021,15.5725522077,15.5725818126,15.572611417,15.5726410208,15.5726706239, +15.5727002265,15.5727298284,15.5727594298,15.5727890305,15.5728186306,15.5728482301,15.572877829,15.5729074273,15.572937025,15.5729666221,15.5729962186,15.5730258144,15.5730554097,15.5730850044,15.5731145984,15.5731441919, +15.5731737847,15.5732033769,15.5732329685,15.5732625595,15.57329215,15.5733217398,15.5733513289,15.5733809175,15.5734105055,15.5734400929,15.5734696796,15.5734992658,15.5735288514,15.5735584363,15.5735880206,15.5736176044, +15.5736471875,15.57367677,15.5737063519,15.5737359332,15.5737655139,15.573795094,15.5738246735,15.5738542524,15.5738838307,15.5739134083,15.5739429854,15.5739725618,15.5740021377,15.5740317129,15.5740612876,15.5740908616, +15.574120435,15.5741500078,15.57417958,15.5742091516,15.5742387226,15.574268293,15.5742978628,15.574327432,15.5743570006,15.5743865685,15.5744161359,15.5744457026,15.5744752688,15.5745048343,15.5745343993,15.5745639636, +15.5745935273,15.5746230905,15.574652653,15.5746822149,15.5747117762,15.5747413369,15.574770897,15.5748004565,15.5748300153,15.5748595736,15.5748891313,15.5749186883,15.5749482448,15.5749778007,15.5750073559,15.5750369105, +15.5750664646,15.575096018,15.5751255708,15.5751551231,15.5751846747,15.5752142257,15.5752437761,15.5752733259,15.5753028751,15.5753324237,15.5753619716,15.575391519,15.5754210658,15.575450612,15.5754801575,15.5755097025, +15.5755392468,15.5755687906,15.5755983337,15.5756278763,15.5756574182,15.5756869595,15.5757165002,15.5757460404,15.5757755799,15.5758051188,15.5758346571,15.5758641948,15.5758937319,15.5759232684,15.5759528043,15.5759823395, +15.5760118742,15.5760414083,15.5760709417,15.5761004746,15.5761300069,15.5761595385,15.5761890696,15.5762186,15.5762481298,15.5762776591,15.5763071877,15.5763367157,15.5763662432,15.57639577,15.5764252962,15.5764548218, +15.5764843468,15.5765138712,15.576543395,15.5765729182,15.5766024408,15.5766319628,15.5766614841,15.5766910049,15.5767205251,15.5767500446,15.5767795636,15.576809082,15.5768385997,15.5768681169,15.5768976334,15.5769271494, +15.5769566647,15.5769861794,15.5770156936,15.5770452071,15.57707472,15.5771042323,15.5771337441,15.5771632552,15.5771927657,15.5772222756,15.5772517849,15.5772812936,15.5773108017,15.5773403092,15.5773698161,15.5773993224, +15.577428828,15.5774583331,15.5774878376,15.5775173415,15.5775468447,15.5775763474,15.5776058495,15.5776353509,15.5776648518,15.577694352,15.5777238517,15.5777533507,15.5777828492,15.577812347,15.5778418442,15.5778713409, +15.5779008369,15.5779303323,15.5779598271,15.5779893214,15.578018815,15.578048308,15.5780778004,15.5781072922,15.5781367834,15.578166274,15.578195764,15.5782252534,15.5782547422,15.5782842304,15.578313718,15.578343205, +15.5783726914,15.5784021771,15.5784316623,15.5784611469,15.5784906309,15.5785201142,15.578549597,15.5785790792,15.5786085607,15.5786380417,15.5786675221,15.5786970018,15.578726481,15.5787559595,15.5787854375,15.5788149148, +15.5788443916,15.5788738677,15.5789033432,15.5789328182,15.5789622925,15.5789917662,15.5790212394,15.5790507119,15.5790801838,15.5791096552,15.5791391259,15.579168596,15.5791980655,15.5792275344,15.5792570028,15.5792864705, +15.5793159376,15.5793454041,15.57937487,15.5794043353,15.5794338,15.5794632641,15.5794927276,15.5795221905,15.5795516528,15.5795811145,15.5796105756,15.5796400361,15.579669496,15.5796989553,15.579728414,15.579757872, +15.5797873295,15.5798167864,15.5798462427,15.5798756984,15.5799051535,15.5799346079,15.5799640618,15.5799935151,15.5800229678,15.5800524198,15.5800818713,15.5801113222,15.5801407724,15.5801702221,15.5801996712,15.5802291196, +15.5802585675,15.5802880148,15.5803174614,15.5803469075,15.5803763529,15.5804057978,15.5804352421,15.5804646857,15.5804941288,15.5805235712,15.5805530131,15.5805824543,15.580611895,15.580641335,15.5806707745,15.5807002133, +15.5807296516,15.5807590892,15.5807885263,15.5808179627,15.5808473986,15.5808768338,15.5809062685,15.5809357025,15.580965136,15.5809945688,15.5810240011,15.5810534327,15.5810828638,15.5811122942,15.581141724,15.5811711533, +15.5812005819,15.58123001,15.5812594374,15.5812888642,15.5813182905,15.5813477161,15.5813771412,15.5814065656,15.5814359895,15.5814654127,15.5814948353,15.5815242574,15.5815536788,15.5815830997,15.5816125199,15.5816419395, +15.5816713586,15.581700777,15.5817301949,15.5817596121,15.5817890287,15.5818184448,15.5818478602,15.5818772751,15.5819066893,15.581936103,15.581965516,15.5819949284,15.5820243403,15.5820537515,15.5820831622,15.5821125722, +15.5821419817,15.5821713905,15.5822007988,15.5822302064,15.5822596134,15.5822890199,15.5823184257,15.582347831,15.5823772356,15.5824066397,15.5824360431,15.582465446,15.5824948482,15.5825242499,15.582553651,15.5825830514, +15.5826124513,15.5826418505,15.5826712492,15.5827006472,15.5827300447,15.5827594416,15.5827888378,15.5828182335,15.5828476286,15.582877023,15.5829064169,15.5829358101,15.5829652028,15.5829945949,15.5830239864,15.5830533772, +15.5830827675,15.5831121572,15.5831415463,15.5831709347,15.5832003226,15.5832297099,15.5832590966,15.5832884827,15.5833178681,15.583347253,15.5833766373,15.583406021,15.5834354041,15.5834647866,15.5834941685,15.5835235498, +15.5835529305,15.5835823106,15.5836116901,15.583641069,15.5836704473,15.583699825,15.5837292021,15.5837585786,15.5837879545,15.5838173298,15.5838467045,15.5838760786,15.5839054522,15.5839348251,15.5839641974,15.5839935691, +15.5840229403,15.5840523108,15.5840816807,15.58411105,15.5841404188,15.5841697869,15.5841991545,15.5842285214,15.5842578877,15.5842872535,15.5843166186,15.5843459832,15.5843753471,15.5844047105,15.5844340733,15.5844634354, +15.584492797,15.5845221579,15.5845515183,15.5845808781,15.5846102372,15.5846395958,15.5846689538,15.5846983112,15.584727668,15.5847570241,15.5847863797,15.5848157347,15.5848450891,15.5848744429,15.5849037961,15.5849331487, +15.5849625007,15.5849918521,15.5850212029,15.5850505532,15.5850799028,15.5851092518,15.5851386002,15.585167948,15.5851972953,15.5852266419,15.5852559879,15.5852853334,15.5853146782,15.5853440224,15.5853733661,15.5854027091, +15.5854320516,15.5854613934,15.5854907347,15.5855200754,15.5855494154,15.5855787549,15.5856080938,15.5856374321,15.5856667697,15.5856961068,15.5857254433,15.5857547792,15.5857841145,15.5858134492,15.5858427833,15.5858721168, +15.5859014497,15.585930782,15.5859601137,15.5859894448,15.5860187754,15.5860481053,15.5860774346,15.5861067633,15.5861360915,15.586165419,15.586194746,15.5862240723,15.5862533981,15.5862827232,15.5863120478,15.5863413717, +15.5863706951,15.5864000179,15.5864293401,15.5864586616,15.5864879826,15.586517303,15.5865466228,15.586575942,15.5866052606,15.5866345786,15.586663896,15.5866932128,15.586722529,15.5867518447,15.5867811597,15.5868104741, +15.586839788,15.5868691012,15.5868984138,15.5869277259,15.5869570373,15.5869863482,15.5870156585,15.5870449681,15.5870742772,15.5871035857,15.5871328936,15.5871622008,15.5871915075,15.5872208136,15.5872501191,15.587279424, +15.5873087283,15.587338032,15.5873673352,15.5873966377,15.5874259396,15.5874552409,15.5874845417,15.5875138418,15.5875431414,15.5875724403,15.5876017387,15.5876310364,15.5876603336,15.5876896302,15.5877189262,15.5877482215, +15.5877775163,15.5878068105,15.5878361041,15.5878653971,15.5878946895,15.5879239813,15.5879532726,15.5879825632,15.5880118532,15.5880411426,15.5880704315,15.5880997197,15.5881290074,15.5881582944,15.5881875809,15.5882168668, +15.588246152,15.5882754367,15.5883047208,15.5883340043,15.5883632872,15.5883925695,15.5884218512,15.5884511323,15.5884804128,15.5885096928,15.5885389721,15.5885682508,15.588597529,15.5886268065,15.5886560835,15.5886853598, +15.5887146356,15.5887439108,15.5887731853,15.5888024593,15.5888317327,15.5888610055,15.5888902777,15.5889195493,15.5889488203,15.5889780907,15.5890073606,15.5890366298,15.5890658984,15.5890951665,15.5891244339,15.5891537008, +15.589182967,15.5892122327,15.5892414978,15.5892707623,15.5893000262,15.5893292894,15.5893585521,15.5893878143,15.5894170758,15.5894463367,15.589475597,15.5895048567,15.5895341159,15.5895633744,15.5895926324,15.5896218897, +15.5896511465,15.5896804027,15.5897096583,15.5897389133,15.5897681676,15.5897974214,15.5898266747,15.5898559273,15.5898851793,15.5899144307,15.5899436816,15.5899729318,15.5900021814,15.5900314305,15.590060679,15.5900899268, +15.5901191741,15.5901484208,15.5901776669,15.5902069124,15.5902361573,15.5902654016,15.5902946453,15.5903238884,15.590353131,15.5903823729,15.5904116143,15.590440855,15.5904700952,15.5904993348,15.5905285737,15.5905578121, +15.5905870499,15.5906162871,15.5906455237,15.5906747597,15.5907039952,15.59073323,15.5907624642,15.5907916979,15.5908209309,15.5908501634,15.5908793953,15.5909086265,15.5909378572,15.5909670873,15.5909963168,15.5910255457, +15.591054774,15.5910840018,15.5911132289,15.5911424554,15.5911716814,15.5912009067,15.5912301315,15.5912593557,15.5912885792,15.5913178022,15.5913470246,15.5913762464,15.5914054676,15.5914346883,15.5914639083,15.5914931277, +15.5915223466,15.5915515648,15.5915807825,15.5916099996,15.591639216,15.5916684319,15.5916976472,15.5917268619,15.591756076,15.5917852895,15.5918145025,15.5918437148,15.5918729266,15.5919021377,15.5919313483,15.5919605582, +15.5919897676,15.5920189764,15.5920481846,15.5920773922,15.5921065992,15.5921358056,15.5921650115,15.5921942167,15.5922234214,15.5922526254,15.5922818289,15.5923110318,15.592340234,15.5923694357,15.5923986368,15.5924278373, +15.5924570373,15.5924862366,15.5925154353,15.5925446335,15.592573831,15.592603028,15.5926322244,15.5926614202,15.5926906154,15.59271981,15.592749004,15.5927781974,15.5928073902,15.5928365825,15.5928657741,15.5928949652, +15.5929241556,15.5929533455,15.5929825348,15.5930117235,15.5930409116,15.5930700991,15.593099286,15.5931284724,15.5931576581,15.5931868433,15.5932160278,15.5932452118,15.5932743952,15.593303578,15.5933327602,15.5933619418, +15.5933911228,15.5934203032,15.5934494831,15.5934786623,15.593507841,15.593537019,15.5935661965,15.5935953734,15.5936245497,15.5936537254,15.5936829005,15.5937120751,15.593741249,15.5937704224,15.5937995951,15.5938287673, +15.5938579389,15.5938871098,15.5939162802,15.5939454501,15.5939746193,15.5940037879,15.5940329559,15.5940621234,15.5940912903,15.5941204565,15.5941496222,15.5941787873,15.5942079518,15.5942371157,15.594266279,15.5942954418, +15.5943246039,15.5943537655,15.5943829264,15.5944120868,15.5944412466,15.5944704058,15.5944995644,15.5945287224,15.5945578799,15.5945870367,15.594616193,15.5946453486,15.5946745037,15.5947036582,15.5947328121,15.5947619654, +15.5947911181,15.5948202702,15.5948494218,15.5948785727,15.5949077231,15.5949368728,15.594966022,15.5949951706,15.5950243186,15.595053466,15.5950826129,15.5951117591,15.5951409047,15.5951700498,15.5951991943,15.5952283382, +15.5952574814,15.5952866242,15.5953157663,15.5953449078,15.5953740487,15.5954031891,15.5954323288,15.595461468,15.5954906066,15.5955197446,15.595548882,15.5955780188,15.5956071551,15.5956362907,15.5956654258,15.5956945602, +15.5957236941,15.5957528274,15.5957819601,15.5958110922,15.5958402237,15.5958693547,15.595898485,15.5959276148,15.5959567439,15.5959858725,15.5960150005,15.5960441279,15.5960732547,15.596102381,15.5961315066,15.5961606317, +15.5961897561,15.59621888,15.5962480033,15.596277126,15.5963062481,15.5963353697,15.5963644906,15.596393611,15.5964227307,15.5964518499,15.5964809685,15.5965100865,15.5965392039,15.5965683207,15.596597437,15.5966265526, +15.5966556677,15.5966847822,15.596713896,15.5967430093,15.5967721221,15.5968012342,15.5968303457,15.5968594567,15.596888567,15.5969176768,15.596946786,15.5969758946,15.5970050026,15.59703411,15.5970632169,15.5970923231, +15.5971214288,15.5971505339,15.5971796384,15.5972087423,15.5972378456,15.5972669483,15.5972960504,15.597325152,15.597354253,15.5973833534,15.5974124531,15.5974415524,15.597470651,15.597499749,15.5975288465,15.5975579433, +15.5975870396,15.5976161353,15.5976452304,15.5976743249,15.5977034188,15.5977325121,15.5977616049,15.5977906971,15.5978197886,15.5978488796,15.59787797,15.5979070599,15.5979361491,15.5979652377,15.5979943258,15.5980234133, +15.5980525002,15.5980815865,15.5981106722,15.5981397573,15.5981688418,15.5981979258,15.5982270092,15.598256092,15.5982851741,15.5983142558,15.5983433368,15.5983724172,15.5984014971,15.5984305763,15.598459655,15.5984887331, +15.5985178106,15.5985468875,15.5985759639,15.5986050396,15.5986341148,15.5986631894,15.5986922633,15.5987213368,15.5987504096,15.5987794818,15.5988085535,15.5988376245,15.598866695,15.5988957649,15.5989248342,15.5989539029, +15.598982971,15.5990120386,15.5990411055,15.5990701719,15.5990992377,15.5991283029,15.5991573675,15.5991864316,15.599215495,15.5992445579,15.5992736202,15.5993026818,15.599331743,15.5993608035,15.5993898634,15.5994189228, +15.5994479815,15.5994770397,15.5995060973,15.5995351543,15.5995642107,15.5995932666,15.5996223218,15.5996513765,15.5996804306,15.5997094841,15.599738537,15.5997675893,15.5997966411,15.5998256922,15.5998547428,15.5998837928, +15.5999128422,15.599941891,15.5999709392,15.5999999869,15.600029034,15.6000580804,15.6000871263,15.6001161716,15.6001452164,15.6001742605,15.6002033041,15.600232347,15.6002613894,15.6002904312,15.6003194724,15.6003485131, +15.6003775531,15.6004065926,15.6004356314,15.6004646697,15.6004937075,15.6005227446,15.6005517811,15.6005808171,15.6006098524,15.6006388872,15.6006679214,15.6006969551,15.6007259881,15.6007550205,15.6007840524,15.6008130837, +15.6008421144,15.6008711445,15.600900174,15.600929203,15.6009582313,15.6009872591,15.6010162863,15.6010453129,15.6010743389,15.6011033644,15.6011323892,15.6011614135,15.6011904372,15.6012194603,15.6012484828,15.6012775048, +15.6013065261,15.6013355469,15.6013645671,15.6013935867,15.6014226057,15.6014516241,15.601480642,15.6015096593,15.6015386759,15.601567692,15.6015967076,15.6016257225,15.6016547368,15.6016837506,15.6017127638,15.6017417764, +15.6017707884,15.6017997998,15.6018288107,15.601857821,15.6018868306,15.6019158397,15.6019448483,15.6019738562,15.6020028635,15.6020318703,15.6020608765,15.6020898821,15.6021188871,15.6021478915,15.6021768954,15.6022058987, +15.6022349013,15.6022639034,15.602292905,15.6023219059,15.6023509062,15.602379906,15.6024089052,15.6024379038,15.6024669018,15.6024958993,15.6025248961,15.6025538924,15.6025828881,15.6026118832,15.6026408777,15.6026698717, +15.602698865,15.6027278578,15.60275685,15.6027858416,15.6028148326,15.6028438231,15.6028728129,15.6029018022,15.6029307909,15.602959779,15.6029887666,15.6030177535,15.6030467399,15.6030757257,15.6031047109,15.6031336955, +15.6031626795,15.603191663,15.6032206459,15.6032496282,15.6032786099,15.603307591,15.6033365715,15.6033655515,15.6033945309,15.6034235097,15.6034524879,15.6034814655,15.6035104426,15.6035394191,15.603568395,15.6035973703, +15.603626345,15.6036553191,15.6036842927,15.6037132657,15.6037422381,15.6037712099,15.6038001811,15.6038291518,15.6038581218,15.6038870913,15.6039160602,15.6039450286,15.6039739963,15.6040029635,15.6040319301,15.6040608961, +15.6040898615,15.6041188263,15.6041477906,15.6041767542,15.6042057173,15.6042346798,15.6042636418,15.6042926031,15.6043215639,15.6043505241,15.6043794837,15.6044084427,15.6044374011,15.604466359,15.6044953163,15.604524273, +15.6045532291,15.6045821846,15.6046111396,15.6046400939,15.6046690477,15.6046980009,15.6047269536,15.6047559056,15.6047848571,15.604813808,15.6048427583,15.604871708,15.6049006571,15.6049296057,15.6049585537,15.6049875011, +15.6050164479,15.6050453942,15.6050743398,15.6051032849,15.6051322294,15.6051611733,15.6051901166,15.6052190594,15.6052480016,15.6052769432,15.6053058842,15.6053348246,15.6053637645,15.6053927037,15.6054216424,15.6054505805, +15.6054795181,15.605508455,15.6055373914,15.6055663272,15.6055952624,15.605624197,15.6056531311,15.6056820645,15.6057109974,15.6057399297,15.6057688614,15.6057977926,15.6058267232,15.6058556531,15.6058845826,15.6059135114, +15.6059424396,15.6059713673,15.6060002944,15.6060292209,15.6060581468,15.6060870722,15.6061159969,15.6061449211,15.6061738447,15.6062027677,15.6062316902,15.6062606121,15.6062895333,15.6063184541,15.6063473742,15.6063762937, +15.6064052127,15.6064341311,15.6064630489,15.6064919661,15.6065208828,15.6065497988,15.6065787143,15.6066076292,15.6066365436,15.6066654573,15.6066943705,15.6067232831,15.6067521951,15.6067811065,15.6068100174,15.6068389277, +15.6068678374,15.6068967465,15.606925655,15.606954563,15.6069834704,15.6070123772,15.6070412834,15.607070189,15.6070990941,15.6071279986,15.6071569025,15.6071858058,15.6072147086,15.6072436107,15.6072725123,15.6073014133, +15.6073303137,15.6073592136,15.6073881129,15.6074170116,15.6074459097,15.6074748072,15.6075037042,15.6075326006,15.6075614964,15.6075903916,15.6076192862,15.6076481803,15.6076770738,15.6077059667,15.607734859,15.6077637507, +15.6077926419,15.6078215325,15.6078504225,15.607879312,15.6079082008,15.6079370891,15.6079659768,15.6079948639,15.6080237505,15.6080526364,15.6080815218,15.6081104066,15.6081392908,15.6081681745,15.6081970576,15.6082259401, +15.608254822,15.6082837033,15.6083125841,15.6083414643,15.6083703439,15.6083992229,15.6084281013,15.6084569792,15.6084858565,15.6085147332,15.6085436093,15.6085724849,15.6086013599,15.6086302343,15.6086591081,15.6086879814, +15.608716854,15.6087457261,15.6087745976,15.6088034686,15.6088323389,15.6088612087,15.6088900779,15.6089189465,15.6089478146,15.608976682,15.6090055489,15.6090344152,15.609063281,15.6090921461,15.6091210107,15.6091498747, +15.6091787381,15.609207601,15.6092364633,15.609265325,15.6092941861,15.6093230466,15.6093519066,15.609380766,15.6094096248,15.609438483,15.6094673406,15.6094961977,15.6095250542,15.6095539101,15.6095827655,15.6096116202, +15.6096404744,15.609669328,15.6096981811,15.6097270335,15.6097558854,15.6097847367,15.6098135875,15.6098424376,15.6098712872,15.6099001362,15.6099289846,15.6099578324,15.6099866797,15.6100155264,15.6100443725,15.610073218, +15.610102063,15.6101309074,15.6101597512,15.6101885944,15.6102174371,15.6102462791,15.6102751206,15.6103039616,15.6103328019,15.6103616417,15.6103904809,15.6104193195,15.6104481575,15.610476995,15.6105058319,15.6105346682, +15.6105635039,15.6105923391,15.6106211737,15.6106500077,15.6106788411,15.610707674,15.6107365062,15.6107653379,15.6107941691,15.6108229996,15.6108518296,15.610880659,15.6109094878,15.610938316,15.6109671437,15.6109959708, +15.6110247973,15.6110536232,15.6110824486,15.6111112734,15.6111400976,15.6111689212,15.6111977443,15.6112265668,15.6112553887,15.61128421,15.6113130308,15.611341851,15.6113706706,15.6113994896,15.6114283081,15.6114571259, +15.6114859432,15.61151476,15.6115435761,15.6115723917,15.6116012067,15.6116300211,15.611658835,15.6116876482,15.6117164609,15.6117452731,15.6117740846,15.6118028956,15.611831706,15.6118605158,15.6118893251,15.6119181337, +15.6119469418,15.6119757493,15.6120045563,15.6120333627,15.6120621685,15.6120909737,15.6121197783,15.6121485824,15.6121773859,15.6122061888,15.6122349911,15.6122637929,15.6122925941,15.6123213947,15.6123501948,15.6123789942, +15.6124077931,15.6124365915,15.6124653892,15.6124941864,15.612522983,15.612551779,15.6125805744,15.6126093693,15.6126381636,15.6126669573,15.6126957505,15.612724543,15.612753335,15.6127821265,15.6128109173,15.6128397076, +15.6128684973,15.6128972864,15.612926075,15.6129548629,15.6129836503,15.6130124372,15.6130412234,15.6130700091,15.6130987942,15.6131275787,15.6131563627,15.6131851461,15.6132139289,15.6132427111,15.6132714928,15.6133002739, +15.6133290544,15.6133578343,15.6133866137,15.6134153925,15.6134441707,15.6134729483,15.6135017254,15.6135305019,15.6135592778,15.6135880531,15.6136168279,15.6136456021,15.6136743757,15.6137031488,15.6137319212,15.6137606931, +15.6137894645,15.6138182352,15.6138470054,15.613875775,15.613904544,15.6139333125,15.6139620804,15.6139908477,15.6140196144,15.6140483806,15.6140771462,15.6141059112,15.6141346757,15.6141634395,15.6141922028,15.6142209655, +15.6142497277,15.6142784893,15.6143072503,15.6143360107,15.6143647706,15.6143935298,15.6144222885,15.6144510467,15.6144798042,15.6145085612,15.6145373177,15.6145660735,15.6145948288,15.6146235835,15.6146523376,15.6146810911, +15.6147098441,15.6147385965,15.6147673484,15.6147960996,15.6148248503,15.6148536004,15.6148823499,15.6149110989,15.6149398473,15.6149685951,15.6149973424,15.6150260891,15.6150548352,15.6150835807,15.6151123256,15.61514107, +15.6151698138,15.6151985571,15.6152272997,15.6152560418,15.6152847834,15.6153135243,15.6153422647,15.6153710045,15.6153997437,15.6154284824,15.6154572205,15.615485958,15.6155146949,15.6155434313,15.6155721671,15.6156009023, +15.615629637,15.615658371,15.6156871046,15.6157158375,15.6157445699,15.6157733016,15.6158020329,15.6158307635,15.6158594936,15.6158882231,15.615916952,15.6159456804,15.6159744082,15.6160031354,15.616031862,15.6160605881, +15.6160893136,15.6161180385,15.6161467629,15.6161754866,15.6162042099,15.6162329325,15.6162616546,15.6162903761,15.616319097,15.6163478173,15.6163765371,15.6164052563,15.616433975,15.616462693,15.6164914105,15.6165201274, +15.6165488438,15.6165775596,15.6166062748,15.6166349894,15.6166637035,15.616692417,15.6167211299,15.6167498422,15.616778554,15.6168072652,15.6168359758,15.6168646859,15.6168933954,15.6169221043,15.6169508127,15.6169795204, +15.6170082277,15.6170369343,15.6170656404,15.6170943458,15.6171230508,15.6171517551,15.6171804589,15.6172091621,15.6172378647,15.6172665668,15.6172952683,15.6173239692,15.6173526696,15.6173813694,15.6174100686,15.6174387672, +15.6174674653,15.6174961628,15.6175248597,15.6175535561,15.6175822519,15.6176109471,15.6176396417,15.6176683358,15.6176970293,15.6177257222,15.6177544146,15.6177831064,15.6178117976,15.6178404883,15.6178691783,15.6178978679, +15.6179265568,15.6179552452,15.617983933,15.6180126202,15.6180413069,15.6180699929,15.6180986785,15.6181273634,15.6181560478,15.6181847316,15.6182134148,15.6182420975,15.6182707796,15.6182994611,15.6183281421,15.6183568224, +15.6183855023,15.6184141815,15.6184428602,15.6184715383,15.6185002158,15.6185288928,15.6185575692,15.618586245,15.6186149203,15.6186435949,15.618672269,15.6187009426,15.6187296156,15.618758288,15.6187869598,15.6188156311, +15.6188443018,15.6188729719,15.6189016414,15.6189303104,15.6189589788,15.6189876467,15.619016314,15.6190449807,15.6190736468,15.6191023124,15.6191309774,15.6191596418,15.6191883057,15.619216969,15.6192456317,15.6192742938, +15.6193029554,15.6193316164,15.6193602769,15.6193889367,15.619417596,15.6194462548,15.6194749129,15.6195035705,15.6195322276,15.619560884,15.6195895399,15.6196181952,15.61964685,15.6196755042,15.6197041578,15.6197328108, +15.6197614633,15.6197901152,15.6198187665,15.6198474173,15.6198760675,15.6199047171,15.6199333662,15.6199620147,15.6199906626,15.62001931,15.6200479567,15.620076603,15.6201052486,15.6201338937,15.6201625382,15.6201911821, +15.6202198255,15.6202484683,15.6202771105,15.6203057522,15.6203343933,15.6203630338,15.6203916738,15.6204203132,15.620448952,15.6204775903,15.620506228,15.6205348651,15.6205635016,15.6205921376,15.620620773,15.6206494079, +15.6206780421,15.6207066758,15.620735309,15.6207639416,15.6207925736,15.620821205,15.6208498359,15.6208784662,15.6209070959,15.620935725,15.6209643536,15.6209929817,15.6210216091,15.621050236,15.6210788623,15.6211074881, +15.6211361133,15.6211647379,15.6211933619,15.6212219854,15.6212506083,15.6212792307,15.6213078525,15.6213364737,15.6213650943,15.6213937144,15.6214223339,15.6214509528,15.6214795712,15.621508189,15.6215368062,15.6215654229, +15.621594039,15.6216226546,15.6216512695,15.6216798839,15.6217084977,15.621737111,15.6217657237,15.6217943358,15.6218229474,15.6218515584,15.6218801688,15.6219087787,15.621937388,15.6219659967,15.6219946048,15.6220232124, +15.6220518195,15.6220804259,15.6221090318,15.6221376371,15.6221662419,15.6221948461,15.6222234497,15.6222520527,15.6222806552,15.6223092571,15.6223378585,15.6223664593,15.6223950595,15.6224236591,15.6224522582,15.6224808567, +15.6225094547,15.6225380521,15.6225666489,15.6225952451,15.6226238408,15.6226524359,15.6226810305,15.6227096245,15.6227382179,15.6227668107,15.622795403,15.6228239947,15.6228525859,15.6228811764,15.6229097665,15.6229383559, +15.6229669448,15.6229955331,15.6230241209,15.623052708,15.6230812947,15.6231098807,15.6231384662,15.6231670511,15.6231956355,15.6232242192,15.6232528025,15.6232813851,15.6233099672,15.6233385487,15.6233671297,15.62339571, +15.6234242899,15.6234528691,15.6234814478,15.6235100259,15.6235386035,15.6235671805,15.6235957569,15.6236243328,15.6236529081,15.6236814828,15.6237100569,15.6237386305,15.6237672036,15.623795776,15.6238243479,15.6238529192, +15.62388149,15.6239100602,15.6239386298,15.6239671989,15.6239957674,15.6240243353,15.6240529027,15.6240814695,15.6241100358,15.6241386014,15.6241671665,15.6241957311,15.6242242951,15.6242528585,15.6242814213,15.6243099836, +15.6243385453,15.6243671065,15.624395667,15.6244242271,15.6244527865,15.6244813454,15.6245099037,15.6245384615,15.6245670187,15.6245955753,15.6246241314,15.6246526869,15.6246812418,15.6247097962,15.62473835,15.6247669032, +15.6247954559,15.624824008,15.6248525595,15.6248811105,15.6249096609,15.6249382107,15.62496676,15.6249953087,15.6250238569,15.6250524045,15.6250809515,15.6251094979,15.6251380438,15.6251665892,15.6251951339,15.6252236781, +15.6252522217,15.6252807648,15.6253093073,15.6253378493,15.6253663906,15.6253949314,15.6254234717,15.6254520114,15.6254805505,15.625509089,15.625537627,15.6255661644,15.6255947013,15.6256232376,15.6256517733,15.6256803085, +15.6257088431,15.6257373771,15.6257659106,15.6257944435,15.6258229758,15.6258515076,15.6258800388,15.6259085695,15.6259370995,15.6259656291,15.625994158,15.6260226864,15.6260512142,15.6260797415,15.6261082682,15.6261367943, +15.6261653199,15.6261938449,15.6262223694,15.6262508932,15.6262794166,15.6263079393,15.6263364615,15.6263649831,15.6263935042,15.6264220247,15.6264505446,15.626479064,15.6265075828,15.626536101,15.6265646187,15.6265931358, +15.6266216524,15.6266501683,15.6266786838,15.6267071986,15.6267357129,15.6267642267,15.6267927398,15.6268212524,15.6268497645,15.6268782759,15.6269067869,15.6269352972,15.626963807,15.6269923162,15.6270208249,15.627049333, +15.6270778405,15.6271063475,15.6271348539,15.6271633597,15.627191865,15.6272203697,15.6272488739,15.6272773775,15.6273058805,15.627334383,15.6273628849,15.6273913862,15.627419887,15.6274483872,15.6274768869,15.6275053859, +15.6275338845,15.6275623824,15.6275908798,15.6276193767,15.6276478729,15.6276763687,15.6277048638,15.6277333584,15.6277618524,15.6277903459,15.6278188388,15.6278473311,15.6278758229,15.6279043141,15.6279328047,15.6279612948, +15.6279897843,15.6280182733,15.6280467617,15.6280752495,15.6281037368,15.6281322235,15.6281607096,15.6281891952,15.6282176802,15.6282461647,15.6282746486,15.6283031319,15.6283316147,15.6283600969,15.6283885785,15.6284170596, +15.6284455401,15.6284740201,15.6285024995,15.6285309783,15.6285594566,15.6285879343,15.6286164115,15.628644888,15.6286733641,15.6287018395,15.6287303144,15.6287587888,15.6287872625,15.6288157358,15.6288442084,15.6288726805, +15.628901152,15.628929623,15.6289580934,15.6289865632,15.6290150325,15.6290435012,15.6290719694,15.629100437,15.629128904,15.6291573705,15.6291858364,15.6292143018,15.6292427665,15.6292712308,15.6292996944,15.6293281575, +15.6293566201,15.6293850821,15.6294135435,15.6294420043,15.6294704646,15.6294989244,15.6295273835,15.6295558421,15.6295843002,15.6296127577,15.6296412146,15.629669671,15.6296981268,15.629726582,15.6297550367,15.6297834908, +15.6298119444,15.6298403974,15.6298688498,15.6298973017,15.629925753,15.6299542038,15.629982654,15.6300111036,15.6300395527,15.6300680012,15.6300964491,15.6301248965,15.6301533433,15.6301817896,15.6302102353,15.6302386804, +15.630267125,15.630295569,15.6303240125,15.6303524554,15.6303808978,15.6304093395,15.6304377808,15.6304662214,15.6304946615,15.630523101,15.63055154,15.6305799784,15.6306084163,15.6306368536,15.6306652903,15.6306937265, +15.6307221621,15.6307505972,15.6307790316,15.6308074656,15.630835899,15.6308643318,15.630892764,15.6309211957,15.6309496268,15.6309780574,15.6310064874,15.6310349169,15.6310633457,15.6310917741,15.6311202018,15.6311486291, +15.6311770557,15.6312054818,15.6312339073,15.6312623323,15.6312907567,15.6313191805,15.6313476038,15.6313760266,15.6314044487,15.6314328703,15.6314612914,15.6314897119,15.6315181318,15.6315465512,15.63157497,15.6316033882, +15.6316318059,15.631660223,15.6316886396,15.6317170556,15.6317454711,15.631773886,15.6318023003,15.6318307141,15.6318591273,15.6318875399,15.631915952,15.6319443636,15.6319727745,15.6320011849,15.6320295948,15.6320580041, +15.6320864128,15.632114821,15.6321432286,15.6321716357,15.6322000422,15.6322284481,15.6322568535,15.6322852583,15.6323136626,15.6323420663,15.6323704694,15.632398872,15.632427274,15.6324556755,15.6324840764,15.6325124768, +15.6325408765,15.6325692758,15.6325976744,15.6326260726,15.6326544701,15.6326828671,15.6327112635,15.6327396594,15.6327680547,15.6327964495,15.6328248437,15.6328532373,15.6328816304,15.6329100229,15.6329384149,15.6329668063, +15.6329951971,15.6330235874,15.6330519772,15.6330803663,15.6331087549,15.633137143,15.6331655305,15.6331939174,15.6332223038,15.6332506896,15.6332790749,15.6333074596,15.6333358437,15.6333642273,15.6333926103,15.6334209928, +15.6334493747,15.6334777561,15.6335061369,15.6335345171,15.6335628968,15.6335912759,15.6336196544,15.6336480324,15.6336764099,15.6337047868,15.6337331631,15.6337615389,15.6337899141,15.6338182887,15.6338466628,15.6338750364, +15.6339034093,15.6339317818,15.6339601536,15.6339885249,15.6340168957,15.6340452659,15.6340736355,15.6341020046,15.6341303731,15.6341587411,15.6341871085,15.6342154753,15.6342438416,15.6342722073,15.6343005725,15.6343289371, +15.6343573011,15.6343856646,15.6344140276,15.63444239,15.6344707518,15.634499113,15.6345274737,15.6345558339,15.6345841935,15.6346125525,15.634640911,15.6346692689,15.6346976263,15.6347259831,15.6347543393,15.634782695, +15.6348110502,15.6348394047,15.6348677588,15.6348961122,15.6349244651,15.6349528175,15.6349811693,15.6350095205,15.6350378712,15.6350662213,15.6350945709,15.6351229199,15.6351512683,15.6351796162,15.6352079635,15.6352363103, +15.6352646565,15.6352930022,15.6353213473,15.6353496919,15.6353780359,15.6354063793,15.6354347222,15.6354630645,15.6354914063,15.6355197475,15.6355480881,15.6355764282,15.6356047677,15.6356331067,15.6356614452,15.635689783, +15.6357181203,15.6357464571,15.6357747933,15.6358031289,15.635831464,15.6358597985,15.6358881325,15.6359164659,15.6359447988,15.6359731311,15.6360014628,15.636029794,15.6360581247,15.6360864547,15.6361147843,15.6361431132, +15.6361714416,15.6361997695,15.6362280968,15.6362564235,15.6362847497,15.6363130753,15.6363414004,15.6363697249,15.6363980489,15.6364263723,15.6364546951,15.6364830174,15.6365113392,15.6365396603,15.636567981,15.636596301, +15.6366246205,15.6366529395,15.6366812579,15.6367095757,15.636737893,15.6367662098,15.6367945259,15.6368228416,15.6368511566,15.6368794711,15.6369077851,15.6369360985,15.6369644113,15.6369927236,15.6370210353,15.6370493465, +15.6370776571,15.6371059672,15.6371342767,15.6371625857,15.6371908941,15.6372192019,15.6372475092,15.6372758159,15.6373041221,15.6373324277,15.6373607328,15.6373890373,15.6374173413,15.6374456447,15.6374739475,15.6375022498, +15.6375305515,15.6375588527,15.6375871533,15.6376154534,15.6376437529,15.6376720519,15.6377003503,15.6377286481,15.6377569454,15.6377852422,15.6378135383,15.637841834,15.637870129,15.6378984236,15.6379267175,15.6379550109, +15.6379833038,15.6380115961,15.6380398878,15.638068179,15.6380964696,15.6381247597,15.6381530492,15.6381813382,15.6382096266,15.6382379145,15.6382662018,15.6382944886,15.6383227747,15.6383510604,15.6383793455,15.63840763, +15.638435914,15.6384641974,15.6384924803,15.6385207626,15.6385490444,15.6385773256,15.6386056062,15.6386338863,15.6386621659,15.6386904448,15.6387187233,15.6387470012,15.6387752785,15.6388035553,15.6388318315,15.6388601071, +15.6388883823,15.6389166568,15.6389449308,15.6389732043,15.6390014771,15.6390297495,15.6390580213,15.6390862925,15.6391145632,15.6391428333,15.6391711029,15.6391993719,15.6392276403,15.6392559083,15.6392841756,15.6393124424, +15.6393407087,15.6393689743,15.6393972395,15.6394255041,15.6394537681,15.6394820316,15.6395102945,15.6395385569,15.6395668187,15.6395950799,15.6396233407,15.6396516008,15.6396798604,15.6397081195,15.639736378,15.6397646359, +15.6397928933,15.6398211501,15.6398494064,15.6398776621,15.6399059173,15.6399341719,15.639962426,15.6399906795,15.6400189325,15.6400471849,15.6400754367,15.640103688,15.6401319388,15.640160189,15.6401884386,15.6402166877, +15.6402449362,15.6402731842,15.6403014316,15.6403296785,15.6403579248,15.6403861706,15.6404144158,15.6404426605,15.6404709046,15.6404991481,15.6405273912,15.6405556336,15.6405838755,15.6406121168,15.6406403576,15.6406685979, +15.6406968376,15.6407250767,15.6407533153,15.6407815533,15.6408097908,15.6408380277,15.6408662641,15.6408944999,15.6409227352,15.6409509699,15.640979204,15.6410074377,15.6410356707,15.6410639032,15.6410921352,15.6411203666, +15.6411485974,15.6411768277,15.6412050574,15.6412332866,15.6412615153,15.6412897434,15.6413179709,15.6413461979,15.6413744243,15.6414026502,15.6414308755,15.6414591003,15.6414873245,15.6415155481,15.6415437713,15.6415719938, +15.6416002158,15.6416284373,15.6416566582,15.6416848786,15.6417130984,15.6417413176,15.6417695363,15.6417977544,15.641825972,15.6418541891,15.6418824056,15.6419106215,15.6419388369,15.6419670517,15.641995266,15.6420234797, +15.6420516929,15.6420799056,15.6421081176,15.6421363292,15.6421645401,15.6421927506,15.6422209604,15.6422491697,15.6422773785,15.6423055867,15.6423337944,15.6423620015,15.6423902081,15.6424184141,15.6424466195,15.6424748244, +15.6425030288,15.6425312326,15.6425594358,15.6425876385,15.6426158407,15.6426440423,15.6426722433,15.6427004438,15.6427286438,15.6427568432,15.642785042,15.6428132403,15.642841438,15.6428696352,15.6428978319,15.6429260279, +15.6429542235,15.6429824185,15.6430106129,15.6430388068,15.6430670001,15.6430951929,15.6431233851,15.6431515768,15.6431797679,15.6432079585,15.6432361485,15.643264338,15.6432925269,15.6433207153,15.6433489031,15.6433770904, +15.6434052771,15.6434334633,15.6434616489,15.643489834,15.6435180185,15.6435462025,15.6435743859,15.6436025687,15.6436307511,15.6436589328,15.643687114,15.6437152947,15.6437434748,15.6437716544,15.6437998334,15.6438280119, +15.6438561898,15.6438843671,15.6439125439,15.6439407202,15.6439688959,15.6439970711,15.6440252457,15.6440534198,15.6440815933,15.6441097662,15.6441379386,15.6441661105,15.6441942818,15.6442224526,15.6442506228,15.6442787924, +15.6443069615,15.6443351301,15.6443632981,15.6443914656,15.6444196325,15.6444477988,15.6444759647,15.6445041299,15.6445322946,15.6445604588,15.6445886224,15.6446167855,15.644644948,15.6446731099,15.6447012713,15.6447294322, +15.6447575925,15.6447857523,15.6448139115,15.6448420702,15.6448702283,15.6448983858,15.6449265428,15.6449546993,15.6449828552,15.6450110106,15.6450391654,15.6450673197,15.6450954734,15.6451236266,15.6451517792,15.6451799313, +15.6452080828,15.6452362337,15.6452643842,15.645292534,15.6453206834,15.6453488321,15.6453769804,15.645405128,15.6454332752,15.6454614217,15.6454895678,15.6455177132,15.6455458582,15.6455740026,15.6456021464,15.6456302897, +15.6456584324,15.6456865746,15.6457147162,15.6457428573,15.6457709979,15.6457991378,15.6458272773,15.6458554162,15.6458835545,15.6459116923,15.6459398296,15.6459679663,15.6459961024,15.646024238,15.6460523731,15.6460805076, +15.6461086415,15.6461367749,15.6461649078,15.6461930401,15.6462211718,15.646249303,15.6462774337,15.6463055638,15.6463336934,15.6463618224,15.6463899509,15.6464180788,15.6464462062,15.646474333,15.6465024593,15.646530585, +15.6465587102,15.6465868348,15.6466149589,15.6466430824,15.6466712054,15.6466993278,15.6467274497,15.646755571,15.6467836918,15.6468118121,15.6468399318,15.6468680509,15.6468961695,15.6469242876,15.6469524051,15.646980522, +15.6470086384,15.6470367543,15.6470648696,15.6470929844,15.6471210986,15.6471492123,15.6471773254,15.647205438,15.64723355,15.6472616615,15.6472897724,15.6473178828,15.6473459926,15.6473741019,15.6474022106,15.6474303188, +15.6474584265,15.6474865336,15.6475146401,15.6475427461,15.6475708516,15.6475989565,15.6476270608,15.6476551646,15.6476832679,15.6477113706,15.6477394728,15.6477675744,15.6477956755,15.647823776,15.647851876,15.6478799754, +15.6479080743,15.6479361726,15.6479642704,15.6479923676,15.6480204643,15.6480485605,15.6480766561,15.6481047511,15.6481328457,15.6481609396,15.648189033,15.6482171259,15.6482452182,15.64827331,15.6483014012,15.6483294919, +15.648357582,15.6483856716,15.6484137606,15.6484418491,15.6484699371,15.6484980245,15.6485261113,15.6485541976,15.6485822834,15.6486103686,15.6486384532,15.6486665373,15.6486946209,15.6487227039,15.6487507864,15.6487788683, +15.6488069497,15.6488350306,15.6488631109,15.6488911906,15.6489192698,15.6489473484,15.6489754265,15.6490035041,15.6490315811,15.6490596576,15.6490877335,15.6491158089,15.6491438837,15.649171958,15.6492000317,15.6492281049, +15.6492561775,15.6492842496,15.6493123212,15.6493403922,15.6493684626,15.6493965325,15.6494246019,15.6494526707,15.649480739,15.6495088067,15.6495368739,15.6495649405,15.6495930066,15.6496210721,15.6496491371,15.6496772016, +15.6497052655,15.6497333288,15.6497613916,15.6497894539,15.6498175156,15.6498455768,15.6498736374,15.6499016975,15.649929757,15.649957816,15.6499858745,15.6500139324,15.6500419897,15.6500700465,15.6500981028,15.6501261585, +15.6501542137,15.6501822683,15.6502103224,15.6502383759,15.6502664289,15.6502944813,15.6503225332,15.6503505846,15.6503786354,15.6504066857,15.6504347354,15.6504627845,15.6504908332,15.6505188812,15.6505469288,15.6505749758, +15.6506030222,15.6506310681,15.6506591135,15.6506871583,15.6507152025,15.6507432463,15.6507712894,15.6507993321,15.6508273741,15.6508554157,15.6508834567,15.6509114971,15.650939537,15.6509675764,15.6509956152,15.6510236535, +15.6510516912,15.6510797284,15.651107765,15.6511358011,15.6511638366,15.6511918716,15.6512199061,15.65124794,15.6512759733,15.6513040062,15.6513320384,15.6513600702,15.6513881014,15.651416132,15.6514441621,15.6514721916, +15.6515002207,15.6515282491,15.651556277,15.6515843044,15.6516123312,15.6516403575,15.6516683833,15.6516964085,15.6517244331,15.6517524572,15.6517804808,15.6518085038,15.6518365263,15.6518645482,15.6518925696,15.6519205904, +15.6519486107,15.6519766305,15.6520046497,15.6520326683,15.6520606865,15.652088704,15.6521167211,15.6521447376,15.6521727535,15.6522007689,15.6522287838,15.6522567981,15.6522848118,15.6523128251,15.6523408377,15.6523688499, +15.6523968615,15.6524248725,15.652452883,15.652480893,15.6525089024,15.6525369113,15.6525649196,15.6525929274,15.6526209346,15.6526489413,15.6526769475,15.6527049531,15.6527329582,15.6527609627,15.6527889667,15.6528169701, +15.652844973,15.6528729754,15.6529009772,15.6529289784,15.6529569791,15.6529849793,15.6530129789,15.653040978,15.6530689766,15.6530969746,15.653124972,15.653152969,15.6531809653,15.6532089612,15.6532369564,15.6532649512, +15.6532929454,15.653320939,15.6533489322,15.6533769247,15.6534049167,15.6534329082,15.6534608992,15.6534888896,15.6535168794,15.6535448687,15.6535728575,15.6536008457,15.6536288334,15.6536568205,15.6536848071,15.6537127932, +15.6537407787,15.6537687637,15.6537967481,15.653824732,15.6538527153,15.6538806981,15.6539086804,15.6539366621,15.6539646432,15.6539926239,15.654020604,15.6540485835,15.6540765625,15.654104541,15.6541325189,15.6541604962, +15.6541884731,15.6542164493,15.6542444251,15.6542724003,15.6543003749,15.6543283491,15.6543563226,15.6543842957,15.6544122681,15.6544402401,15.6544682115,15.6544961824,15.6545241527,15.6545521225,15.6545800917,15.6546080604, +15.6546360285,15.6546639961,15.6546919632,15.6547199297,15.6547478957,15.6547758611,15.654803826,15.6548317904,15.6548597542,15.6548877175,15.6549156802,15.6549436424,15.654971604,15.6549995651,15.6550275257,15.6550554857, +15.6550834452,15.6551114041,15.6551393625,15.6551673204,15.6551952777,15.6552232345,15.6552511907,15.6552791464,15.6553071015,15.6553350561,15.6553630102,15.6553909637,15.6554189167,15.6554468691,15.655474821,15.6555027723, +15.6555307232,15.6555586734,15.6555866232,15.6556145723,15.655642521,15.6556704691,15.6556984166,15.6557263637,15.6557543101,15.6557822561,15.6558102015,15.6558381463,15.6558660906,15.6558940344,15.6559219776,15.6559499203, +15.6559778625,15.6560058041,15.6560337452,15.6560616857,15.6560896257,15.6561175651,15.656145504,15.6561734424,15.6562013802,15.6562293175,15.6562572542,15.6562851904,15.6563131261,15.6563410612,15.6563689958,15.6563969298, +15.6564248633,15.6564527962,15.6564807286,15.6565086605,15.6565365918,15.6565645226,15.6565924529,15.6566203826,15.6566483117,15.6566762404,15.6567041685,15.656732096,15.656760023,15.6567879495,15.6568158754,15.6568438008, +15.6568717256,15.6568996499,15.6569275737,15.6569554969,15.6569834196,15.6570113417,15.6570392633,15.6570671844,15.6570951049,15.6571230249,15.6571509443,15.6571788632,15.6572067816,15.6572346994,15.6572626166,15.6572905334, +15.6573184496,15.6573463652,15.6573742804,15.6574021949,15.657430109,15.6574580225,15.6574859354,15.6575138478,15.6575417597,15.657569671,15.6575975818,15.6576254921,15.6576534018,15.657681311,15.6577092196,15.6577371277, +15.6577650353,15.6577929423,15.6578208488,15.6578487547,15.6578766601,15.6579045649,15.6579324693,15.657960373,15.6579882763,15.658016179,15.6580440811,15.6580719828,15.6580998838,15.6581277844,15.6581556844,15.6581835838, +15.6582114828,15.6582393811,15.658267279,15.6582951763,15.658323073,15.6583509693,15.6583788649,15.6584067601,15.6584346547,15.6584625488,15.6584904423,15.6585183353,15.6585462277,15.6585741196,15.658602011,15.6586299018, +15.6586577921,15.6586856819,15.6587135711,15.6587414598,15.6587693479,15.6587972355,15.6588251226,15.6588530091,15.658880895,15.6589087805,15.6589366654,15.6589645497,15.6589924336,15.6590203169,15.6590481996,15.6590760818, +15.6591039635,15.6591318446,15.6591597252,15.6591876052,15.6592154848,15.6592433637,15.6592712422,15.6592991201,15.6593269974,15.6593548742,15.6593827505,15.6594106263,15.6594385015,15.6594663761,15.6594942502,15.6595221238, +15.6595499969,15.6595778694,15.6596057414,15.6596336128,15.6596614837,15.659689354,15.6597172239,15.6597450931,15.6597729619,15.6598008301,15.6598286977,15.6598565649,15.6598844315,15.6599122975,15.659940163,15.659968028, +15.6599958924,15.6600237563,15.6600516197,15.6600794825,15.6601073448,15.6601352065,15.6601630677,15.6601909284,15.6602187885,15.6602466481,15.6602745072,15.6603023657,15.6603302237,15.6603580811,15.660385938,15.6604137944, +15.6604416502,15.6604695055,15.6604973602,15.6605252145,15.6605530681,15.6605809213,15.6606087739,15.6606366259,15.6606644775,15.6606923284,15.6607201789,15.6607480288,15.6607758782,15.660803727,15.6608315753,15.6608594231, +15.6608872703,15.660915117,15.6609429631,15.6609708087,15.6609986538,15.6610264984,15.6610543424,15.6610821858,15.6611100287,15.6611378711,15.661165713,15.6611935543,15.6612213951,15.6612492353,15.661277075,15.6613049142, +15.6613327528,15.6613605909,15.6613884284,15.6614162655,15.6614441019,15.6614719379,15.6614997733,15.6615276081,15.6615554425,15.6615832763,15.6616111095,15.6616389422,15.6616667744,15.6616946061,15.6617224372,15.6617502677, +15.6617780978,15.6618059273,15.6618337562,15.6618615847,15.6618894125,15.6619172399,15.6619450667,15.661972893,15.6620007187,15.6620285439,15.6620563686,15.6620841927,15.6621120163,15.6621398394,15.6621676619,15.6621954839, +15.6622233053,15.6622511262,15.6622789466,15.6623067664,15.6623345857,15.6623624045,15.6623902227,15.6624180404,15.6624458576,15.6624736742,15.6625014903,15.6625293058,15.6625571208,15.6625849353,15.6626127493,15.6626405627, +15.6626683755,15.6626961878,15.6627239996,15.6627518109,15.6627796216,15.6628074318,15.6628352415,15.6628630506,15.6628908591,15.6629186672,15.6629464747,15.6629742817,15.6630020881,15.663029894,15.6630576993,15.6630855042, +15.6631133085,15.6631411122,15.6631689154,15.6631967181,15.6632245203,15.6632523219,15.6632801229,15.6633079235,15.6633357235,15.6633635229,15.6633913219,15.6634191203,15.6634469181,15.6634747155,15.6635025122,15.6635303085, +15.6635581042,15.6635858994,15.663613694,15.6636414882,15.6636692817,15.6636970748,15.6637248673,15.6637526592,15.6637804507,15.6638082416,15.6638360319,15.6638638218,15.6638916111,15.6639193998,15.663947188,15.6639749757, +15.6640027629,15.6640305495,15.6640583356,15.6640861211,15.6641139061,15.6641416906,15.6641694746,15.664197258,15.6642250408,15.6642528232,15.664280605,15.6643083862,15.664336167,15.6643639472,15.6643917268,15.664419506, +15.6644472845,15.6644750626,15.6645028401,15.6645306171,15.6645583936,15.6645861695,15.6646139449,15.6646417197,15.664669494,15.6646972678,15.664725041,15.6647528138,15.6647805859,15.6648083576,15.6648361287,15.6648638992, +15.6648916693,15.6649194388,15.6649472078,15.6649749762,15.6650027441,15.6650305115,15.6650582783,15.6650860446,15.6651138103,15.6651415756,15.6651693403,15.6651971044,15.665224868,15.6652526311,15.6652803937,15.6653081557, +15.6653359172,15.6653636781,15.6653914386,15.6654191984,15.6654469578,15.6654747166,15.6655024749,15.6655302326,15.6655579898,15.6655857465,15.6656135027,15.6656412583,15.6656690134,15.6656967679,15.6657245219,15.6657522754, +15.6657800283,15.6658077807,15.6658355326,15.665863284,15.6658910348,15.665918785,15.6659465348,15.665974284,15.6660020326,15.6660297808,15.6660575284,15.6660852755,15.666113022,15.666140768,15.6661685135,15.6661962584, +15.6662240028,15.6662517467,15.66627949,15.6663072328,15.6663349751,15.6663627168,15.666390458,15.6664181987,15.6664459388,15.6664736784,15.6665014175,15.666529156,15.666556894,15.6665846315,15.6666123684,15.6666401048, +15.6666678407,15.666695576,15.6667233108,15.6667510451,15.6667787788,15.666806512,15.6668342447,15.6668619768,15.6668897084,15.6669174395,15.66694517,15.6669729001,15.6670006295,15.6670283585,15.6670560869,15.6670838147, +15.6671115421,15.6671392689,15.6671669952,15.6671947209,15.6672224461,15.6672501708,15.6672778949,15.6673056185,15.6673333416,15.6673610641,15.6673887862,15.6674165076,15.6674442286,15.667471949,15.6674996689,15.6675273882, +15.667555107,15.6675828253,15.6676105431,15.6676382603,15.667665977,15.6676936931,15.6677214088,15.6677491238,15.6677768384,15.6678045524,15.6678322659,15.6678599789,15.6678876913,15.6679154032,15.6679431145,15.6679708254, +15.6679985357,15.6680262454,15.6680539547,15.6680816634,15.6681093715,15.6681370792,15.6681647863,15.6681924928,15.6682201989,15.6682479044,15.6682756094,15.6683033138,15.6683310177,15.6683587211,15.668386424,15.6684141263, +15.6684418281,15.6684695293,15.66849723,15.6685249302,15.6685526299,15.668580329,15.6686080276,15.6686357256,15.6686634232,15.6686911202,15.6687188166,15.6687465126,15.668774208,15.6688019028,15.6688295972,15.668857291, +15.6688849843,15.668912677,15.6689403692,15.6689680609,15.6689957521,15.6690234427,15.6690511328,15.6690788223,15.6691065113,15.6691341998,15.6691618878,15.6691895752,15.6692172621,15.6692449485,15.6692726343,15.6693003196, +15.6693280044,15.6693556886,15.6693833723,15.6694110555,15.6694387382,15.6694664203,15.6694941019,15.6695217829,15.6695494635,15.6695771434,15.6696048229,15.6696325018,15.6696601802,15.6696878581,15.6697155354,15.6697432123, +15.6697708885,15.6697985643,15.6698262395,15.6698539142,15.6698815883,15.6699092619,15.669936935,15.6699646076,15.6699922796,15.6700199511,15.6700476221,15.6700752925,15.6701029624,15.6701306318,15.6701583006,15.670185969, +15.6702136367,15.670241304,15.6702689707,15.6702966369,15.6703243026,15.6703519677,15.6703796323,15.6704072964,15.6704349599,15.6704626229,15.6704902854,15.6705179473,15.6705456088,15.6705732696,15.67060093,15.6706285898, +15.6706562491,15.6706839079,15.6707115661,15.6707392238,15.670766881,15.6707945376,15.6708221938,15.6708498493,15.6708775044,15.6709051589,15.6709328129,15.6709604664,15.6709881193,15.6710157717,15.6710434236,15.6710710749, +15.6710987257,15.671126376,15.6711540258,15.671181675,15.6712093237,15.6712369719,15.6712646195,15.6712922666,15.6713199132,15.6713475592,15.6713752047,15.6714028497,15.6714304942,15.6714581381,15.6714857815,15.6715134244, +15.6715410667,15.6715687085,15.6715963498,15.6716239905,15.6716516308,15.6716792705,15.6717069096,15.6717345482,15.6717621863,15.6717898239,15.671817461,15.6718450975,15.6718727335,15.6719003689,15.6719280038,15.6719556382, +15.6719832721,15.6720109054,15.6720385382,15.6720661705,15.6720938023,15.6721214335,15.6721490642,15.6721766943,15.672204324,15.6722319531,15.6722595816,15.6722872097,15.6723148372,15.6723424642,15.6723700906,15.6723977166, +15.672425342,15.6724529668,15.6724805912,15.672508215,15.6725358383,15.672563461,15.6725910833,15.672618705,15.6726463261,15.6726739468,15.6727015669,15.6727291865,15.6727568055,15.672784424,15.672812042,15.6728396595, +15.6728672764,15.6728948928,15.6729225087,15.6729501241,15.6729777389,15.6730053532,15.673032967,15.6730605802,15.6730881929,15.6731158051,15.6731434167,15.6731710279,15.6731986385,15.6732262485,15.6732538581,15.6732814671, +15.6733090756,15.6733366835,15.6733642909,15.6733918978,15.6734195042,15.67344711,15.6734747154,15.6735023201,15.6735299244,15.6735575281,15.6735851313,15.673612734,15.6736403361,15.6736679378,15.6736955388,15.6737231394, +15.6737507394,15.6737783389,15.6738059379,15.6738335364,15.6738611343,15.6738887317,15.6739163285,15.6739439249,15.6739715207,15.673999116,15.6740267107,15.6740543049,15.6740818986,15.6741094918,15.6741370844,15.6741646766, +15.6741922681,15.6742198592,15.6742474497,15.6742750397,15.6743026292,15.6743302182,15.6743578066,15.6743853945,15.6744129818,15.6744405687,15.674468155,15.6744957408,15.674523326,15.6745509107,15.6745784949,15.6746060786, +15.6746336618,15.6746612444,15.6746888265,15.674716408,15.6747439891,15.6747715696,15.6747991496,15.674826729,15.6748543079,15.6748818863,15.6749094642,15.6749370416,15.6749646184,15.6749921947,15.6750197704,15.6750473457, +15.6750749204,15.6751024946,15.6751300682,15.6751576414,15.675185214,15.675212786,15.6752403576,15.6752679286,15.6752954991,15.6753230691,15.6753506385,15.6753782074,15.6754057758,15.6754333437,15.675460911,15.6754884778, +15.6755160441,15.6755436098,15.6755711751,15.6755987398,15.6756263039,15.6756538676,15.6756814307,15.6757089933,15.6757365554,15.6757641169,15.6757916779,15.6758192384,15.6758467984,15.6758743578,15.6759019167,15.6759294751, +15.6759570329,15.6759845903,15.6760121471,15.6760397033,15.6760672591,15.6760948143,15.676122369,15.6761499232,15.6761774768,15.67620503,15.6762325825,15.6762601346,15.6762876861,15.6763152372,15.6763427876,15.6763703376, +15.676397887,15.676425436,15.6764529843,15.6764805322,15.6765080795,15.6765356263,15.6765631726,15.6765907184,15.6766182636,15.6766458083,15.6766733525,15.6767008961,15.6767284392,15.6767559818,15.6767835239,15.6768110655, +15.6768386065,15.676866147,15.6768936869,15.6769212264,15.6769487653,15.6769763037,15.6770038416,15.6770313789,15.6770589157,15.677086452,15.6771139878,15.677141523,15.6771690577,15.6771965919,15.6772241256,15.6772516587, +15.6772791913,15.6773067234,15.677334255,15.677361786,15.6773893165,15.6774168465,15.6774443759,15.6774719049,15.6774994333,15.6775269612,15.6775544885,15.6775820154,15.6776095417,15.6776370674,15.6776645927,15.6776921174, +15.6777196416,15.6777471653,15.6777746885,15.6778022111,15.6778297332,15.6778572548,15.6778847759,15.6779122964,15.6779398164,15.6779673359,15.6779948548,15.6780223733,15.6780498912,15.6780774085,15.6781049254,15.6781324417, +15.6781599575,15.6781874728,15.6782149876,15.6782425018,15.6782700155,15.6782975287,15.6783250414,15.6783525535,15.6783800651,15.6784075762,15.6784350868,15.6784625968,15.6784901063,15.6785176153,15.6785451237,15.6785726317, +15.6786001391,15.678627646,15.6786551524,15.6786826582,15.6787101635,15.6787376683,15.6787651726,15.6787926763,15.6788201795,15.6788476822,15.6788751844,15.678902686,15.6789301872,15.6789576877,15.6789851878,15.6790126874, +15.6790401864,15.6790676849,15.6790951829,15.6791226803,15.6791501772,15.6791776737,15.6792051695,15.6792326649,15.6792601597,15.679287654,15.6793151478,15.6793426411,15.6793701338,15.679397626,15.6794251177,15.6794526089, +15.6794800995,15.6795075896,15.6795350792,15.6795625683,15.6795900568,15.6796175448,15.6796450323,15.6796725193,15.6797000058,15.6797274917,15.6797549771,15.679782462,15.6798099463,15.6798374302,15.6798649135,15.6798923963, +15.6799198785,15.6799473603,15.6799748415,15.6800023222,15.6800298023,15.680057282,15.6800847611,15.6801122397,15.6801397178,15.6801671953,15.6801946723,15.6802221488,15.6802496248,15.6802771003,15.6803045752,15.6803320496, +15.6803595235,15.6803869969,15.6804144697,15.680441942,15.6804694138,15.6804968851,15.6805243559,15.6805518261,15.6805792958,15.680606765,15.6806342336,15.6806617017,15.6806891694,15.6807166364,15.680744103,15.6807715691, +15.6807990346,15.6808264996,15.680853964,15.680881428,15.6809088914,15.6809363543,15.6809638167,15.6809912786,15.6810187399,15.6810462007,15.681073661,15.6811011208,15.68112858,15.6811560387,15.6811834969,15.6812109546, +15.6812384118,15.6812658684,15.6812933245,15.6813207801,15.6813482352,15.6813756897,15.6814031437,15.6814305972,15.6814580502,15.6814855027,15.6815129546,15.681540406,15.6815678569,15.6815953073,15.6816227571,15.6816502064, +15.6816776552,15.6817051035,15.6817325512,15.6817599985,15.6817874452,15.6818148914,15.681842337,15.6818697822,15.6818972268,15.6819246709,15.6819521145,15.6819795575,15.682007,15.6820344421,15.6820618835,15.6820893245, +15.682116765,15.6821442049,15.6821716443,15.6821990831,15.6822265215,15.6822539593,15.6822813967,15.6823088334,15.6823362697,15.6823637055,15.6823911407,15.6824185754,15.6824460096,15.6824734432,15.6825008764,15.682528309, +15.6825557411,15.6825831727,15.6826106037,15.6826380342,15.6826654642,15.6826928937,15.6827203227,15.6827477511,15.6827751791,15.6828026065,15.6828300333,15.6828574597,15.6828848855,15.6829123109,15.6829397357,15.6829671599, +15.6829945837,15.6830220069,15.6830494296,15.6830768518,15.6831042735,15.6831316946,15.6831591152,15.6831865354,15.6832139549,15.683241374,15.6832687925,15.6832962106,15.6833236281,15.683351045,15.6833784615,15.6834058774, +15.6834332928,15.6834607077,15.6834881221,15.683515536,15.6835429493,15.6835703621,15.6835977744,15.6836251861,15.6836525974,15.6836800081,15.6837074183,15.683734828,15.6837622372,15.6837896458,15.6838170539,15.6838444615, +15.6838718686,15.6838992752,15.6839266812,15.6839540867,15.6839814917,15.6840088962,15.6840363002,15.6840637036,15.6840911065,15.6841185089,15.6841459108,15.6841733122,15.684200713,15.6842281133,15.6842555131,15.6842829124, +15.6843103111,15.6843377094,15.6843651071,15.6843925043,15.6844199009,15.6844472971,15.6844746927,15.6845020878,15.6845294824,15.6845568765,15.68458427,15.6846116631,15.6846390556,15.6846664476,15.684693839,15.68472123, +15.6847486204,15.6847760103,15.6848033997,15.6848307886,15.6848581769,15.6848855648,15.6849129521,15.6849403389,15.6849677251,15.6849951109,15.6850224961,15.6850498808,15.685077265,15.6851046487,15.6851320319,15.6851594145, +15.6851867966,15.6852141782,15.6852415593,15.6852689398,15.6852963198,15.6853236994,15.6853510784,15.6853784568,15.6854058348,15.6854332122,15.6854605891,15.6854879655,15.6855153414,15.6855427168,15.6855700916,15.6855974659, +15.6856248397,15.685652213,15.6856795858,15.685706958,15.6857343297,15.6857617009,15.6857890716,15.6858164418,15.6858438114,15.6858711806,15.6858985492,15.6859259172,15.6859532848,15.6859806519,15.6860080184,15.6860353844, +15.6860627499,15.6860901149,15.6861174793,15.6861448433,15.6861722067,15.6861995696,15.6862269319,15.6862542938,15.6862816551,15.686309016,15.6863363763,15.6863637361,15.6863910953,15.6864184541,15.6864458123,15.68647317, +15.6865005272,15.6865278839,15.68655524,15.6865825956,15.6866099508,15.6866373053,15.6866646594,15.686692013,15.686719366,15.6867467185,15.6867740705,15.686801422,15.686828773,15.6868561234,15.6868834734,15.6869108228, +15.6869381717,15.68696552,15.6869928679,15.6870202152,15.6870475621,15.6870749084,15.6871022541,15.6871295994,15.6871569441,15.6871842884,15.6872116321,15.6872389753,15.6872663179,15.6872936601,15.6873210017,15.6873483428, +15.6873756834,15.6874030235,15.6874303631,15.6874577021,15.6874850407,15.6875123787,15.6875397161,15.6875670531,15.6875943896,15.6876217255,15.6876490609,15.6876763958,15.6877037302,15.6877310641,15.6877583974,15.6877857303, +15.6878130626,15.6878403944,15.6878677256,15.6878950564,15.6879223866,15.6879497164,15.6879770456,15.6880043742,15.6880317024,15.6880590301,15.6880863572,15.6881136838,15.6881410099,15.6881683355,15.6881956606,15.6882229851, +15.6882503091,15.6882776326,15.6883049556,15.6883322781,15.6883596001,15.6883869215,15.6884142424,15.6884415628,15.6884688827,15.6884962021,15.688523521,15.6885508393,15.6885781571,15.6886054744,15.6886327912,15.6886601075, +15.6886874232,15.6887147385,15.6887420532,15.6887693674,15.6887966811,15.6888239942,15.6888513069,15.688878619,15.6889059306,15.6889332417,15.6889605523,15.6889878624,15.6890151719,15.6890424809,15.6890697894,15.6890970974, +15.6891244049,15.6891517119,15.6891790183,15.6892063242,15.6892336297,15.6892609346,15.6892882389,15.6893155428,15.6893428461,15.689370149,15.6893974513,15.6894247531,15.6894520543,15.6894793551,15.6895066553,15.6895339551, +15.6895612543,15.689588553,15.6896158512,15.6896431488,15.689670446,15.6896977426,15.6897250387,15.6897523343,15.6897796294,15.6898069239,15.689834218,15.6898615115,15.6898888045,15.689916097,15.689943389,15.6899706805, +15.6899979714,15.6900252619,15.6900525518,15.6900798412,15.6901071301,15.6901344184,15.6901617063,15.6901889936,15.6902162804,15.6902435667,15.6902708525,15.6902981378,15.6903254225,15.6903527068,15.6903799905,15.6904072737, +15.6904345564,15.6904618386,15.6904891202,15.6905164014,15.690543682,15.6905709621,15.6905982417,15.6906255208,15.6906527993,15.6906800774,15.6907073549,15.6907346319,15.6907619084,15.6907891844,15.6908164599,15.6908437349, +15.6908710093,15.6908982832,15.6909255566,15.6909528295,15.6909801019,15.6910073737,15.6910346451,15.6910619159,15.6910891862,15.691116456,15.6911437253,15.6911709941,15.6911982623,15.6912255301,15.6912527973,15.691280064, +15.6913073302,15.6913345959,15.691361861,15.6913891257,15.6914163898,15.6914436534,15.6914709165,15.6914981791,15.6915254412,15.6915527027,15.6915799638,15.6916072243,15.6916344843,15.6916617438,15.6916890028,15.6917162612, +15.6917435192,15.6917707766,15.6917980335,15.6918252899,15.6918525458,15.6918798012,15.691907056,15.6919343104,15.6919615642,15.6919888175,15.6920160703,15.6920433226,15.6920705744,15.6920978256,15.6921250764,15.6921523266, +15.6921795763,15.6922068255,15.6922340742,15.6922613224,15.69228857,15.6923158171,15.6923430638,15.6923703099,15.6923975555,15.6924248005,15.6924520451,15.6924792892,15.6925065327,15.6925337757,15.6925610182,15.6925882602, +15.6926155017,15.6926427427,15.6926699831,15.692697223,15.6927244625,15.6927517014,15.6927789398,15.6928061776,15.692833415,15.6928606518,15.6928878882,15.692915124,15.6929423593,15.6929695941,15.6929968284,15.6930240621, +15.6930512954,15.6930785281,15.6931057604,15.6931329921,15.6931602233,15.6931874539,15.6932146841,15.6932419138,15.6932691429,15.6932963715,15.6933235996,15.6933508272,15.6933780543,15.6934052809,15.6934325069,15.6934597325, +15.6934869575,15.693514182,15.693541406,15.6935686295,15.6935958525,15.6936230749,15.6936502969,15.6936775183,15.6937047392,15.6937319596,15.6937591795,15.6937863989,15.6938136178,15.6938408361,15.6938680539,15.6938952713, +15.6939224881,15.6939497044,15.6939769202,15.6940041354,15.6940313502,15.6940585644,15.6940857782,15.6941129914,15.6941402041,15.6941674163,15.6941946279,15.6942218391,15.6942490498,15.6942762599,15.6943034695,15.6943306786, +15.6943578872,15.6943850953,15.6944123029,15.6944395099,15.6944667165,15.6944939225,15.694521128,15.694548333,15.6945755375,15.6946027415,15.694629945,15.6946571479,15.6946843504,15.6947115523,15.6947387537,15.6947659546, +15.694793155,15.6948203549,15.6948475542,15.6948747531,15.6949019514,15.6949291493,15.6949563466,15.6949835434,15.6950107397,15.6950379354,15.6950651307,15.6950923254,15.6951195197,15.6951467134,15.6951739066,15.6952010993, +15.6952282915,15.6952554832,15.6952826743,15.695309865,15.6953370551,15.6953642447,15.6953914339,15.6954186225,15.6954458105,15.6954729981,15.6955001852,15.6955273717,15.6955545578,15.6955817433,15.6956089283,15.6956361128, +15.6956632968,15.6956904803,15.6957176632,15.6957448457,15.6957720276,15.695799209,15.69582639,15.6958535704,15.6958807503,15.6959079296,15.6959351085,15.6959622869,15.6959894647,15.696016642,15.6960438189,15.6960709952, +15.696098171,15.6961253462,15.696152521,15.6961796953,15.696206869,15.6962340423,15.696261215,15.6962883872,15.6963155589,15.6963427301,15.6963699008,15.6963970709,15.6964242406,15.6964514097,15.6964785784,15.6965057465, +15.6965329141,15.6965600812,15.6965872478,15.6966144138,15.6966415794,15.6966687444,15.696695909,15.696723073,15.6967502365,15.6967773995,15.696804562,15.696831724,15.6968588855,15.6968860464,15.6969132069,15.6969403668, +15.6969675262,15.6969946851,15.6970218435,15.6970490014,15.6970761588,15.6971033157,15.697130472,15.6971576279,15.6971847832,15.697211938,15.6972390924,15.6972662462,15.6972933995,15.6973205522,15.6973477045,15.6973748563, +15.6974020075,15.6974291582,15.6974563085,15.6974834582,15.6975106074,15.6975377561,15.6975649043,15.6975920519,15.6976191991,15.6976463457,15.6976734919,15.6977006375,15.6977277826,15.6977549272,15.6977820713,15.6978092149, +15.697836358,15.6978635005,15.6978906426,15.6979177841,15.6979449251,15.6979720657,15.6979992057,15.6980263452,15.6980534842,15.6980806226,15.6981077606,15.6981348981,15.698162035,15.6981891714,15.6982163074,15.6982434428, +15.6982705777,15.6982977121,15.698324846,15.6983519793,15.6983791122,15.6984062446,15.6984333764,15.6984605077,15.6984876386,15.6985147689,15.6985418987,15.698569028,15.6985961567,15.698623285,15.6986504128,15.69867754, +15.6987046668,15.698731793,15.6987589187,15.6987860439,15.6988131686,15.6988402928,15.6988674165,15.6988945397,15.6989216623,15.6989487845,15.6989759061,15.6990030273,15.6990301479,15.699057268,15.6990843876,15.6991115067, +15.6991386253,15.6991657433,15.6991928609,15.699219978,15.6992470945,15.6992742105,15.6993013261,15.6993284411,15.6993555556,15.6993826696,15.6994097831,15.699436896,15.6994640085,15.6994911205,15.6995182319,15.6995453429, +15.6995724533,15.6995995632,15.6996266726,15.6996537815,15.6996808899,15.6997079978,15.6997351052,15.699762212,15.6997893184,15.6998164242,15.6998435296,15.6998706344,15.6998977387,15.6999248425,15.6999519458,15.6999790486, +15.7000061509,15.7000332527,15.7000603539,15.7000874547,15.7001145549,15.7001416546,15.7001687539,15.7001958526,15.7002229508,15.7002500485,15.7002771457,15.7003042424,15.7003313385,15.7003584342,15.7003855294,15.700412624, +15.7004397181,15.7004668118,15.7004939049,15.7005209975,15.7005480896,15.7005751812,15.7006022723,15.7006293629,15.7006564529,15.7006835425,15.7007106315,15.7007377201,15.7007648081,15.7007918956,15.7008189826,15.7008460691, +15.7008731551,15.7009002406,15.7009273256,15.7009544101,15.700981494,15.7010085775,15.7010356604,15.7010627429,15.7010898248,15.7011169062,15.7011439872,15.7011710676,15.7011981475,15.7012252268,15.7012523057,15.7012793841, +15.701306462,15.7013335393,15.7013606162,15.7013876925,15.7014147683,15.7014418437,15.7014689185,15.7014959928,15.7015230666,15.7015501399,15.7015772126,15.7016042849,15.7016313567,15.7016584279,15.7016854987,15.7017125689, +15.7017396387,15.7017667079,15.7017937766,15.7018208448,15.7018479125,15.7018749797,15.7019020464,15.7019291126,15.7019561783,15.7019832434,15.7020103081,15.7020373722,15.7020644359,15.702091499,15.7021185616,15.7021456238, +15.7021726854,15.7021997465,15.7022268071,15.7022538672,15.7022809267,15.7023079858,15.7023350444,15.7023621024,15.70238916,15.702416217,15.7024432736,15.7024703296,15.7024973851,15.7025244401,15.7025514946,15.7025785486, +15.7026056021,15.7026326551,15.7026597076,15.7026867595,15.702713811,15.702740862,15.7027679124,15.7027949623,15.7028220118,15.7028490607,15.7028761091,15.702903157,15.7029302044,15.7029572513,15.7029842977,15.7030113436, +15.703038389,15.7030654339,15.7030924782,15.7031195221,15.7031465654,15.7031736083,15.7032006506,15.7032276924,15.7032547337,15.7032817746,15.7033088149,15.7033358547,15.703362894,15.7033899328,15.703416971,15.7034440088, +15.7034710461,15.7034980828,15.7035251191,15.7035521548,15.7035791901,15.7036062248,15.703633259,15.7036602928,15.703687326,15.7037143587,15.7037413909,15.7037684226,15.7037954538,15.7038224844,15.7038495146,15.7038765443, +15.7039035734,15.7039306021,15.7039576302,15.7039846579,15.704011685,15.7040387117,15.7040657378,15.7040927634,15.7041197885,15.7041468131,15.7041738372,15.7042008608,15.7042278839,15.7042549065,15.7042819286,15.7043089501, +15.7043359712,15.7043629917,15.7043900118,15.7044170313,15.7044440504,15.7044710689,15.7044980869,15.7045251044,15.7045521215,15.704579138,15.704606154,15.7046331695,15.7046601845,15.7046871989,15.7047142129,15.7047412264, +15.7047682394,15.7047952518,15.7048222638,15.7048492752,15.7048762862,15.7049032966,15.7049303065,15.704957316,15.7049843249,15.7050113333,15.7050383412,15.7050653486,15.7050923555,15.7051193619,15.7051463678,15.7051733732, +15.7052003781,15.7052273824,15.7052543863,15.7052813897,15.7053083925,15.7053353949,15.7053623967,15.705389398,15.7054163989,15.7054433992,15.705470399,15.7054973984,15.7055243972,15.7055513955,15.7055783933,15.7056053906, +15.7056323874,15.7056593836,15.7056863794,15.7057133747,15.7057403695,15.7057673637,15.7057943575,15.7058213508,15.7058483435,15.7058753358,15.7059023275,15.7059293187,15.7059563095,15.7059832997,15.7060102894,15.7060372786, +15.7060642673,15.7060912555,15.7061182432,15.7061452304,15.7061722171,15.7061992033,15.706226189,15.7062531742,15.7062801588,15.706307143,15.7063341267,15.7063611098,15.7063880925,15.7064150746,15.7064420563,15.7064690374, +15.7064960181,15.7065229982,15.7065499778,15.7065769569,15.7066039356,15.7066309137,15.7066578913,15.7066848684,15.706711845,15.7067388211,15.7067657967,15.7067927718,15.7068197463,15.7068467204,15.706873694,15.7069006671, +15.7069276396,15.7069546117,15.7069815832,15.7070085543,15.7070355248,15.7070624949,15.7070894644,15.7071164335,15.707143402,15.70717037,15.7071973375,15.7072243045,15.7072512711,15.7072782371,15.7073052026,15.7073321676, +15.7073591321,15.7073860961,15.7074130596,15.7074400226,15.707466985,15.707493947,15.7075209085,15.7075478695,15.7075748299,15.7076017899,15.7076287493,15.7076557083,15.7076826668,15.7077096247,15.7077365822,15.7077635391, +15.7077904955,15.7078174515,15.7078444069,15.7078713618,15.7078983162,15.7079252702,15.7079522236,15.7079791765,15.7080061289,15.7080330808,15.7080600322,15.7080869831,15.7081139335,15.7081408834,15.7081678328,15.7081947817, +15.70822173,15.7082486779,15.7082756253,15.7083025722,15.7083295185,15.7083564644,15.7083834098,15.7084103546,15.708437299,15.7084642428,15.7084911862,15.708518129,15.7085450714,15.7085720132,15.7085989545,15.7086258954, +15.7086528357,15.7086797755,15.7087067148,15.7087336537,15.708760592,15.7087875298,15.7088144671,15.7088414039,15.7088683402,15.708895276,15.7089222113,15.7089491461,15.7089760804,15.7090030142,15.7090299475,15.7090568803, +15.7090838126,15.7091107443,15.7091376756,15.7091646064,15.7091915367,15.7092184664,15.7092453957,15.7092723245,15.7092992527,15.7093261805,15.7093531077,15.7093800345,15.7094069607,15.7094338865,15.7094608117,15.7094877365, +15.7095146607,15.7095415844,15.7095685077,15.7095954304,15.7096223526,15.7096492744,15.7096761956,15.7097031163,15.7097300365,15.7097569563,15.7097838755,15.7098107942,15.7098377124,15.7098646301,15.7098915473,15.709918464, +15.7099453802,15.7099722959,15.7099992111,15.7100261258,15.71005304,15.7100799537,15.7101068669,15.7101337796,15.7101606918,15.7101876035,15.7102145147,15.7102414253,15.7102683355,15.7102952452,15.7103221544,15.710349063, +15.7103759712,15.7104028789,15.710429786,15.7104566927,15.7104835989,15.7105105045,15.7105374097,15.7105643144,15.7105912185,15.7106181222,15.7106450253,15.710671928,15.7106988301,15.7107257318,15.7107526329,15.7107795336, +15.7108064337,15.7108333333,15.7108602325,15.7108871311,15.7109140293,15.7109409269,15.710967824,15.7109947207,15.7110216168,15.7110485124,15.7110754076,15.7111023022,15.7111291963,15.7111560899,15.7111829831,15.7112098757, +15.7112367678,15.7112636594,15.7112905505,15.7113174411,15.7113443313,15.7113712209,15.71139811,15.7114249986,15.7114518867,15.7114787743,15.7115056614,15.711532548,15.7115594341,15.7115863198,15.7116132049,15.7116400895, +15.7116669736,15.7116938572,15.7117207403,15.7117476229,15.711774505,15.7118013866,15.7118282677,15.7118551483,15.7118820284,15.7119089079,15.711935787,15.7119626656,15.7119895437,15.7120164213,15.7120432984,15.712070175, +15.7120970511,15.7121239267,15.7121508018,15.7121776764,15.7122045504,15.712231424,15.7122582971,15.7122851697,15.7123120418,15.7123389134,15.7123657844,15.712392655,15.7124195251,15.7124463947,15.7124732638,15.7125001324, +15.7125270004,15.712553868,15.7125807351,15.7126076017,15.7126344678,15.7126613333,15.7126881984,15.712715063,15.7127419271,15.7127687907,15.7127956537,15.7128225163,15.7128493784,15.71287624,15.712903101,15.7129299616, +15.7129568217,15.7129836813,15.7130105404,15.7130373989,15.713064257,15.7130911146,15.7131179717,15.7131448282,15.7131716843,15.7131985399,15.713225395,15.7132522495,15.7132791036,15.7133059572,15.7133328103,15.7133596629, +15.7133865149,15.7134133665,15.7134402176,15.7134670682,15.7134939183,15.7135207678,15.7135476169,15.7135744655,15.7136013136,15.7136281612,15.7136550082,15.7136818548,15.7137087009,15.7137355465,15.7137623916,15.7137892362, +15.7138160802,15.7138429238,15.7138697669,15.7138966095,15.7139234516,15.7139502932,15.7139771343,15.7140039748,15.7140308149,15.7140576545,15.7140844936,15.7141113322,15.7141381703,15.7141650079,15.714191845,15.7142186816, +15.7142455177,15.7142723533,15.7142991884,15.714326023,15.7143528571,15.7143796907,15.7144065238,15.7144333564,15.7144601885,15.7144870201,15.7145138512,15.7145406818,15.7145675119,15.7145943415,15.7146211706,15.7146479992, +15.7146748273,15.7147016549,15.714728482,15.7147553086,15.7147821348,15.7148089604,15.7148357855,15.7148626101,15.7148894342,15.7149162579,15.714943081,15.7149699036,15.7149967257,15.7150235473,15.7150503685,15.7150771891, +15.7151040092,15.7151308289,15.715157648,15.7151844666,15.7152112848,15.7152381024,15.7152649195,15.7152917362,15.7153185523,15.715345368,15.7153721831,15.7153989978,15.7154258119,15.7154526256,15.7154794387,15.7155062514, +15.7155330635,15.7155598752,15.7155866863,15.715613497,15.7156403072,15.7156671168,15.715693926,15.7157207347,15.7157475428,15.7157743505,15.7158011577,15.7158279644,15.7158547705,15.7158815762,15.7159083814,15.7159351861, +15.7159619903,15.7159887939,15.7160155971,15.7160423998,15.716069202,15.7160960037,15.7161228049,15.7161496056,15.7161764058,15.7162032055,15.7162300047,15.7162568034,15.7162836016,15.7163103993,15.7163371966,15.7163639933, +15.7163907895,15.7164175852,15.7164443804,15.7164711752,15.7164979694,15.7165247631,15.7165515564,15.7165783491,15.7166051413,15.7166319331,15.7166587243,15.7166855151,15.7167123053,15.7167390951,15.7167658843,15.7167926731, +15.7168194613,15.7168462491,15.7168730364,15.7168998231,15.7169266094,15.7169533952,15.7169801804,15.7170069652,15.7170337495,15.7170605333,15.7170873166,15.7171140993,15.7171408816,15.7171676634,15.7171944447,15.7172212255, +15.7172480058,15.7172747856,15.7173015649,15.7173283438,15.7173551221,15.7173818999,15.7174086772,15.717435454,15.7174622303,15.7174890062,15.7175157815,15.7175425563,15.7175693307,15.7175961045,15.7176228779,15.7176496507, +15.7176764231,15.7177031949,15.7177299663,15.7177567371,15.7177835075,15.7178102774,15.7178370467,15.7178638156,15.717890584,15.7179173519,15.7179441193,15.7179708861,15.7179976525,15.7180244184,15.7180511838,15.7180779487, +15.7181047131,15.718131477,15.7181582404,15.7181850034,15.7182117658,15.7182385277,15.7182652891,15.71829205,15.7183188105,15.7183455704,15.7183723299,15.7183990888,15.7184258472,15.7184526052,15.7184793626,15.7185061196, +15.7185328761,15.718559632,15.7185863875,15.7186131425,15.718639897,15.7186666509,15.7186934044,15.7187201574,15.7187469099,15.7187736619,15.7188004134,15.7188271644,15.7188539149,15.7188806649,15.7189074144,15.7189341635, +15.718960912,15.71898766,15.7190144075,15.7190411546,15.7190679011,15.7190946472,15.7191213927,15.7191481378,15.7191748823,15.7192016264,15.71922837,15.719255113,15.7192818556,15.7193085977,15.7193353393,15.7193620804, +15.7193888209,15.719415561,15.7194423006,15.7194690397,15.7194957784,15.7195225165,15.7195492541,15.7195759912,15.7196027278,15.719629464,15.7196561996,15.7196829347,15.7197096694,15.7197364035,15.7197631372,15.7197898704, +15.719816603,15.7198433352,15.7198700669,15.719896798,15.7199235287,15.7199502589,15.7199769886,15.7200037178,15.7200304465,15.7200571747,15.7200839024,15.7201106296,15.7201373564,15.7201640826,15.7201908083,15.7202175335, +15.7202442583,15.7202709825,15.7202977063,15.7203244295,15.7203511523,15.7203778746,15.7204045963,15.7204313176,15.7204580384,15.7204847587,15.7205114785,15.7205381978,15.7205649166,15.7205916349,15.7206183527,15.72064507, +15.7206717868,15.7206985032,15.720725219,15.7207519343,15.7207786492,15.7208053635,15.7208320774,15.7208587907,15.7208855036,15.720912216,15.7209389278,15.7209656392,15.7209923501,15.7210190605,15.7210457704,15.7210724798, +15.7210991887,15.7211258971,15.721152605,15.7211793125,15.7212060194,15.7212327258,15.7212594318,15.7212861372,15.7213128422,15.7213395466,15.7213662506,15.7213929541,15.721419657,15.7214463595,15.7214730615,15.721499763, +15.721526464,15.7215531645,15.7215798645,15.721606564,15.7216332631,15.7216599616,15.7216866596,15.7217133572,15.7217400542,15.7217667508,15.7217934468,15.7218201424,15.7218468375,15.721873532,15.7219002261,15.7219269197, +15.7219536128,15.7219803054,15.7220069975,15.7220336891,15.7220603802,15.7220870709,15.722113761,15.7221404506,15.7221671398,15.7221938284,15.7222205166,15.7222472043,15.7222738914,15.7223005781,15.7223272643,15.72235395, +15.7223806352,15.7224073199,15.7224340041,15.7224606878,15.722487371,15.7225140537,15.722540736,15.7225674177,15.722594099,15.7226207797,15.72264746,15.7226741397,15.722700819,15.7227274978,15.7227541761,15.7227808539, +15.7228075312,15.722834208,15.7228608843,15.7228875601,15.7229142354,15.7229409103,15.7229675846,15.7229942585,15.7230209318,15.7230476047,15.723074277,15.7231009489,15.7231276203,15.7231542912,15.7231809616,15.7232076315, +15.7232343009,15.7232609698,15.7232876382,15.7233143062,15.7233409736,15.7233676405,15.723394307,15.723420973,15.7234476384,15.7234743034,15.7235009679,15.7235276319,15.7235542954,15.7235809584,15.7236076209,15.7236342829, +15.7236609444,15.7236876054,15.723714266,15.723740926,15.7237675856,15.7237942446,15.7238209032,15.7238475613,15.7238742189,15.723900876,15.7239275326,15.7239541887,15.7239808443,15.7240074994,15.724034154,15.7240608082, +15.7240874618,15.7241141149,15.7241407676,15.7241674198,15.7241940714,15.7242207226,15.7242473733,15.7242740235,15.7243006732,15.7243273224,15.7243539711,15.7243806194,15.7244072671,15.7244339143,15.7244605611,15.7244872074, +15.7245138531,15.7245404984,15.7245671432,15.7245937875,15.7246204313,15.7246470746,15.7246737174,15.7247003597,15.7247270015,15.7247536429,15.7247802837,15.7248069241,15.7248335639,15.7248602033,15.7248868422,15.7249134806, +15.7249401185,15.7249667559,15.7249933928,15.7250200292,15.7250466651,15.7250733006,15.7250999355,15.72512657,15.7251532039,15.7251798374,15.7252064704,15.7252331028,15.7252597348,15.7252863663,15.7253129973,15.7253396279, +15.7253662579,15.7253928874,15.7254195165,15.725446145,15.7254727731,15.7254994007,15.7255260277,15.7255526543,15.7255792804,15.725605906,15.7256325311,15.7256591558,15.7256857799,15.7257124035,15.7257390267,15.7257656493, +15.7257922715,15.7258188932,15.7258455143,15.725872135,15.7258987552,15.7259253749,15.7259519942,15.7259786129,15.7260052311,15.7260318489,15.7260584661,15.7260850829,15.7261116992,15.7261383149,15.7261649302,15.726191545, +15.7262181593,15.7262447731,15.7262713865,15.7262979993,15.7263246117,15.7263512235,15.7263778349,15.7264044457,15.7264310561,15.726457666,15.7264842754,15.7265108843,15.7265374927,15.7265641007,15.7265907081,15.726617315, +15.7266439215,15.7266705274,15.7266971329,15.7267237379,15.7267503424,15.7267769464,15.7268035499,15.7268301529,15.7268567555,15.7268833575,15.726909959,15.7269365601,15.7269631607,15.7269897607,15.7270163603,15.7270429594, +15.727069558,15.7270961561,15.7271227538,15.7271493509,15.7271759475,15.7272025437,15.7272291394,15.7272557345,15.7272823292,15.7273089234,15.7273355171,15.7273621103,15.727388703,15.7274152953,15.727441887,15.7274684783, +15.727495069,15.7275216593,15.7275482491,15.7275748384,15.7276014272,15.7276280155,15.7276546033,15.7276811906,15.7277077775,15.7277343638,15.7277609497,15.7277875351,15.7278141199,15.7278407043,15.7278672882,15.7278938716, +15.7279204546,15.727947037,15.7279736189,15.7280002004,15.7280267814,15.7280533618,15.7280799418,15.7281065213,15.7281331003,15.7281596788,15.7281862568,15.7282128344,15.7282394114,15.728265988,15.728292564,15.7283191396, +15.7283457147,15.7283722893,15.7283988634,15.728425437,15.7284520102,15.7284785828,15.728505155,15.7285317266,15.7285582978,15.7285848685,15.7286114387,15.7286380084,15.7286645776,15.7286911463,15.7287177145,15.7287442823, +15.7287708495,15.7287974163,15.7288239826,15.7288505484,15.7288771137,15.7289036785,15.7289302428,15.7289568066,15.72898337,15.7290099328,15.7290364952,15.7290630571,15.7290896185,15.7291161794,15.7291427398,15.7291692997, +15.7291958591,15.7292224181,15.7292489765,15.7292755345,15.729302092,15.729328649,15.7293552055,15.7293817615,15.729408317,15.729434872,15.7294614266,15.7294879806,15.7295145342,15.7295410873,15.7295676398,15.7295941919, +15.7296207436,15.7296472947,15.7296738453,15.7297003955,15.7297269451,15.7297534943,15.729780043,15.7298065911,15.7298331388,15.7298596861,15.7298862328,15.729912779,15.7299393248,15.72996587,15.7299924148,15.7300189591, +15.7300455029,15.7300720462,15.730098589,15.7301251313,15.7301516732,15.7301782145,15.7302047554,15.7302312958,15.7302578357,15.7302843751,15.730310914,15.7303374524,15.7303639903,15.7303905278,15.7304170647,15.7304436012, +15.7304701372,15.7304966727,15.7305232077,15.7305497422,15.7305762762,15.7306028098,15.7306293428,15.7306558754,15.7306824075,15.7307089391,15.7307354702,15.7307620008,15.7307885309,15.7308150606,15.7308415897,15.7308681184, +15.7308946465,15.7309211742,15.7309477014,15.7309742281,15.7310007544,15.7310272801,15.7310538054,15.7310803301,15.7311068544,15.7311333782,15.7311599015,15.7311864243,15.7312129466,15.7312394684,15.7312659898,15.7312925107, +15.731319031,15.7313455509,15.7313720703,15.7313985892,15.7314251076,15.7314516256,15.731478143,15.73150466,15.7315311765,15.7315576924,15.7315842079,15.731610723,15.7316372375,15.7316637515,15.7316902651,15.7317167781, +15.7317432907,15.7317698028,15.7317963144,15.7318228255,15.7318493361,15.7318758463,15.7319023559,15.7319288651,15.7319553738,15.731981882,15.7320083897,15.7320348969,15.7320614036,15.7320879099,15.7321144156,15.7321409209, +15.7321674257,15.73219393,15.7322204338,15.7322469371,15.7322734399,15.7322999423,15.7323264441,15.7323529455,15.7323794464,15.7324059468,15.7324324467,15.7324589461,15.7324854451,15.7325119435,15.7325384415,15.732564939, +15.732591436,15.7326179325,15.7326444285,15.732670924,15.7326974191,15.7327239136,15.7327504077,15.7327769013,15.7328033944,15.732829887,15.7328563791,15.7328828708,15.7329093619,15.7329358526,15.7329623428,15.7329888325, +15.7330153217,15.7330418104,15.7330682986,15.7330947864,15.7331212737,15.7331477604,15.7331742467,15.7332007325,15.7332272179,15.7332537027,15.733280187,15.7333066709,15.7333331543,15.7333596372,15.7333861196,15.7334126015, +15.7334390829,15.7334655638,15.7334920443,15.7335185243,15.7335450038,15.7335714828,15.7335979613,15.7336244393,15.7336509168,15.7336773939,15.7337038705,15.7337303465,15.7337568221,15.7337832973,15.7338097719,15.733836246, +15.7338627197,15.7338891928,15.7339156655,15.7339421377,15.7339686094,15.7339950807,15.7340215514,15.7340480217,15.7340744914,15.7341009607,15.7341274295,15.7341538978,15.7341803656,15.734206833,15.7342332998,15.7342597662, +15.7342862321,15.7343126975,15.7343391624,15.7343656268,15.7343920908,15.7344185542,15.7344450172,15.7344714797,15.7344979417,15.7345244032,15.7345508642,15.7345773248,15.7346037848,15.7346302444,15.7346567035,15.7346831621, +15.7347096202,15.7347360779,15.734762535,15.7347889917,15.7348154478,15.7348419035,15.7348683587,15.7348948135,15.7349212677,15.7349477215,15.7349741747,15.7350006275,15.7350270798,15.7350535316,15.7350799829,15.7351064338, +15.7351328841,15.735159334,15.7351857834,15.7352122323,15.7352386807,15.7352651287,15.7352915761,15.7353180231,15.7353444695,15.7353709155,15.735397361,15.7354238061,15.7354502506,15.7354766947,15.7355031382,15.7355295813, +15.7355560239,15.735582466,15.7356089077,15.7356353488,15.7356617895,15.7356882296,15.7357146693,15.7357411085,15.7357675473,15.7357939855,15.7358204233,15.7358468605,15.7358732973,15.7358997336,15.7359261694,15.7359526048, +15.7359790396,15.736005474,15.7360319079,15.7360583413,15.7360847742,15.7361112066,15.7361376385,15.73616407,15.736190501,15.7362169315,15.7362433615,15.736269791,15.73629622,15.7363226486,15.7363490766,15.7363755042, +15.7364019313,15.7364283579,15.7364547841,15.7364812097,15.7365076349,15.7365340596,15.7365604838,15.7365869075,15.7366133307,15.7366397534,15.7366661757,15.7366925975,15.7367190188,15.7367454396,15.7367718599,15.7367982797, +15.7368246991,15.736851118,15.7368775364,15.7369039543,15.7369303717,15.7369567886,15.7369832051,15.7370096211,15.7370360365,15.7370624515,15.7370888661,15.7371152801,15.7371416937,15.7371681067,15.7371945193,15.7372209314, +15.737247343,15.7372737542,15.7373001648,15.737326575,15.7373529847,15.7373793939,15.7374058026,15.7374322108,15.7374586186,15.7374850258,15.7375114326,15.7375378389,15.7375642447,15.7375906501,15.7376170549,15.7376434593, +15.7376698632,15.7376962666,15.7377226695,15.7377490719,15.7377754739,15.7378018754,15.7378282763,15.7378546768,15.7378810769,15.7379074764,15.7379338754,15.737960274,15.7379866721,15.7380130697,15.7380394668,15.7380658635, +15.7380922596,15.7381186553,15.7381450505,15.7381714452,15.7381978394,15.7382242332,15.7382506264,15.7382770192,15.7383034115,15.7383298033,15.7383561946,15.7383825855,15.7384089758,15.7384353657,15.7384617551,15.738488144, +15.7385145324,15.7385409204,15.7385673078,15.7385936948,15.7386200813,15.7386464673,15.7386728529,15.7386992379,15.7387256225,15.7387520066,15.7387783902,15.7388047733,15.7388311559,15.7388575381,15.7388839198,15.738910301, +15.7389366817,15.7389630619,15.7389894416,15.7390158209,15.7390421997,15.739068578,15.7390949558,15.7391213331,15.73914771,15.7391740864,15.7392004622,15.7392268376,15.7392532126,15.739279587,15.739305961,15.7393323344, +15.7393587074,15.7393850799,15.739411452,15.7394378235,15.7394641946,15.7394905652,15.7395169353,15.7395433049,15.739569674,15.7395960427,15.7396224109,15.7396487785,15.7396751458,15.7397015125,15.7397278787,15.7397542445, +15.7397806098,15.7398069746,15.7398333389,15.7398597027,15.7398860661,15.739912429,15.7399387913,15.7399651533,15.7399915147,15.7400178756,15.7400442361,15.7400705961,15.7400969556,15.7401233146,15.7401496731,15.7401760312, +15.7402023888,15.7402287459,15.7402551025,15.7402814586,15.7403078143,15.7403341694,15.7403605241,15.7403868783,15.740413232,15.7404395853,15.740465938,15.7404922903,15.7405186421,15.7405449934,15.7405713443,15.7405976946, +15.7406240445,15.7406503939,15.7406767428,15.7407030912,15.7407294392,15.7407557866,15.7407821336,15.7408084801,15.7408348261,15.7408611717,15.7408875167,15.7409138613,15.7409402054,15.740966549,15.7409928922,15.7410192348, +15.741045577,15.7410719187,15.7410982599,15.7411246006,15.7411509409,15.7411772807,15.74120362,15.7412299588,15.7412562971,15.7412826349,15.7413089723,15.7413353092,15.7413616456,15.7413879815,15.741414317,15.7414406519, +15.7414669864,15.7414933204,15.7415196539,15.741545987,15.7415723195,15.7415986516,15.7416249832,15.7416513143,15.7416776449,15.7417039751,15.7417303048,15.741756634,15.7417829627,15.7418092909,15.7418356187,15.7418619459, +15.7418882727,15.741914599,15.7419409249,15.7419672502,15.7419935751,15.7420198995,15.7420462234,15.7420725468,15.7420988698,15.7421251922,15.7421515142,15.7421778357,15.7422041568,15.7422304773,15.7422567974,15.742283117, +15.7423094361,15.7423357547,15.7423620729,15.7423883905,15.7424147077,15.7424410244,15.7424673406,15.7424936564,15.7425199717,15.7425462864,15.7425726008,15.7425989146,15.7426252279,15.7426515408,15.7426778532,15.7427041651, +15.7427304765,15.7427567875,15.7427830979,15.7428094079,15.7428357174,15.7428620265,15.742888335,15.7429146431,15.7429409507,15.7429672578,15.7429935644,15.7430198706,15.7430461762,15.7430724814,15.7430987861,15.7431250904, +15.7431513941,15.7431776974,15.7432040002,15.7432303025,15.7432566043,15.7432829057,15.7433092066,15.7433355069,15.7433618069,15.7433881063,15.7434144053,15.7434407037,15.7434670017,15.7434932993,15.7435195963,15.7435458929, +15.7435721889,15.7435984845,15.7436247797,15.7436510743,15.7436773685,15.7437036622,15.7437299554,15.7437562481,15.7437825403,15.7438088321,15.7438351234,15.7438614142,15.7438877045,15.7439139944,15.7439402838,15.7439665726, +15.7439928611,15.744019149,15.7440454365,15.7440717234,15.7440980099,15.7441242959,15.7441505815,15.7441768665,15.7442031511,15.7442294352,15.7442557189,15.744282002,15.7443082847,15.7443345669,15.7443608486,15.7443871298, +15.7444134106,15.7444396908,15.7444659706,15.7444922499,15.7445185288,15.7445448071,15.744571085,15.7445973624,15.7446236393,15.7446499158,15.7446761918,15.7447024672,15.7447287422,15.7447550168,15.7447812908,15.7448075644, +15.7448338375,15.7448601101,15.7448863823,15.7449126539,15.7449389251,15.7449651958,15.744991466,15.7450177358,15.745044005,15.7450702738,15.7450965421,15.74512281,15.7451490773,15.7451753442,15.7452016106,15.7452278765, +15.745254142,15.7452804069,15.7453066714,15.7453329354,15.7453591989,15.745385462,15.7454117246,15.7454379867,15.7454642483,15.7454905094,15.7455167701,15.7455430303,15.74556929,15.7455955492,15.7456218079,15.7456480662, +15.745674324,15.7457005813,15.7457268382,15.7457530945,15.7457793504,15.7458056058,15.7458318607,15.7458581152,15.7458843691,15.7459106226,15.7459368756,15.7459631282,15.7459893802,15.7460156318,15.7460418829,15.7460681336, +15.7460943837,15.7461206334,15.7461468826,15.7461731313,15.7461993795,15.7462256273,15.7462518746,15.7462781214,15.7463043677,15.7463306136,15.7463568589,15.7463831038,15.7464093482,15.7464355922,15.7464618356,15.7464880786, +15.7465143211,15.7465405632,15.7465668047,15.7465930458,15.7466192864,15.7466455265,15.7466717662,15.7466980053,15.746724244,15.7467504822,15.74677672,15.7468029572,15.746829194,15.7468554303,15.7468816661,15.7469079015, +15.7469341364,15.7469603708,15.7469866047,15.7470128381,15.7470390711,15.7470653036,15.7470915356,15.7471177671,15.7471439982,15.7471702288,15.7471964589,15.7472226885,15.7472489176,15.7472751463,15.7473013745,15.7473276022, +15.7473538295,15.7473800562,15.7474062825,15.7474325083,15.7474587337,15.7474849585,15.7475111829,15.7475374068,15.7475636303,15.7475898532,15.7476160757,15.7476422977,15.7476685192,15.7476947402,15.7477209608,15.7477471809, +15.7477734005,15.7477996197,15.7478258383,15.7478520565,15.7478782742,15.7479044915,15.7479307082,15.7479569245,15.7479831403,15.7480093556,15.7480355705,15.7480617849,15.7480879988,15.7481142122,15.7481404251,15.7481666376, +15.7481928496,15.7482190611,15.7482452721,15.7482714827,15.7482976928,15.7483239024,15.7483501116,15.7483763202,15.7484025284,15.7484287361,15.7484549433,15.7484811501,15.7485073564,15.7485335622,15.7485597675,15.7485859724, +15.7486121767,15.7486383806,15.7486645841,15.748690787,15.7487169895,15.7487431915,15.748769393,15.748795594,15.7488217946,15.7488479947,15.7488741943,15.7489003935,15.7489265921,15.7489527903,15.748978988,15.7490051853, +15.749031382,15.7490575783,15.7490837741,15.7491099695,15.7491361643,15.7491623587,15.7491885526,15.7492147461,15.749240939,15.7492671315,15.7492933235,15.749319515,15.7493457061,15.7493718967,15.7493980868,15.7494242764, +15.7494504656,15.7494766542,15.7495028425,15.7495290302,15.7495552174,15.7495814042,15.7496075905,15.7496337763,15.7496599617,15.7496861466,15.749712331,15.7497385149,15.7497646983,15.7497908813,15.7498170638,15.7498432458, +15.7498694274,15.7498956085,15.7499217891,15.7499479692,15.7499741488,15.750000328,15.7500265067,15.7500526849,15.7500788627,15.75010504,15.7501312168,15.7501573931,15.7501835689,15.7502097443,15.7502359192,15.7502620936, +15.7502882676,15.7503144411,15.7503406141,15.7503667866,15.7503929586,15.7504191302,15.7504453013,15.7504714719,15.7504976421,15.7505238118,15.750549981,15.7505761497,15.750602318,15.7506284857,15.750654653,15.7506808199, +15.7507069862,15.7507331521,15.7507593175,15.7507854824,15.7508116469,15.7508378109,15.7508639744,15.7508901374,15.7509163,15.7509424621,15.7509686237,15.7509947848,15.7510209455,15.7510471057,15.7510732654,15.7510994246, +15.7511255834,15.7511517417,15.7511778995,15.7512040568,15.7512302137,15.7512563701,15.751282526,15.7513086814,15.7513348364,15.7513609909,15.7513871449,15.7514132985,15.7514394515,15.7514656041,15.7514917563,15.7515179079, +15.7515440591,15.7515702098,15.75159636,15.7516225098,15.7516486591,15.7516748079,15.7517009562,15.7517271041,15.7517532514,15.7517793984,15.7518055448,15.7518316908,15.7518578362,15.7518839813,15.7519101258,15.7519362699, +15.7519624135,15.7519885566,15.7520146992,15.7520408414,15.7520669831,15.7520931243,15.7521192651,15.7521454054,15.7521715452,15.7521976845,15.7522238234,15.7522499617,15.7522760996,15.7523022371,15.752328374,15.7523545105, +15.7523806466,15.7524067821,15.7524329172,15.7524590518,15.7524851859,15.7525113195,15.7525374527,15.7525635854,15.7525897176,15.7526158494,15.7526419807,15.7526681115,15.7526942418,15.7527203717,15.7527465011,15.75277263, +15.7527987584,15.7528248864,15.7528510139,15.7528771409,15.7529032675,15.7529293936,15.7529555192,15.7529816443,15.7530077689,15.7530338931,15.7530600168,15.7530861401,15.7531122628,15.7531383851,15.753164507,15.7531906283, +15.7532167492,15.7532428696,15.7532689895,15.753295109,15.7533212279,15.7533473465,15.7533734645,15.7533995821,15.7534256991,15.7534518158,15.7534779319,15.7535040476,15.7535301628,15.7535562775,15.7535823918,15.7536085055, +15.7536346189,15.7536607317,15.7536868441,15.7537129559,15.7537390674,15.7537651783,15.7537912888,15.7538173988,15.7538435083,15.7538696174,15.753895726,15.7539218341,15.7539479417,15.7539740489,15.7540001556,15.7540262618, +15.7540523675,15.7540784728,15.7541045776,15.7541306819,15.7541567858,15.7541828892,15.7542089921,15.7542350945,15.7542611965,15.754287298,15.754313399,15.7543394996,15.7543655997,15.7543916993,15.7544177984,15.7544438971, +15.7544699953,15.754496093,15.7545221902,15.754548287,15.7545743833,15.7546004792,15.7546265745,15.7546526694,15.7546787638,15.7547048578,15.7547309512,15.7547570442,15.7547831368,15.7548092288,15.7548353204,15.7548614115, +15.7548875022,15.7549135923,15.754939682,15.7549657713,15.75499186,15.7550179483,15.7550440361,15.7550701234,15.7550962103,15.7551222967,15.7551483826,15.7551744681,15.7552005531,15.7552266376,15.7552527216,15.7552788052, +15.7553048883,15.7553309709,15.755357053,15.7553831347,15.7554092159,15.7554352967,15.7554613769,15.7554874567,15.755513536,15.7555396149,15.7555656933,15.7555917712,15.7556178486,15.7556439256,15.7556700021,15.7556960781, +15.7557221536,15.7557482287,15.7557743033,15.7558003775,15.7558264511,15.7558525243,15.7558785971,15.7559046693,15.7559307411,15.7559568124,15.7559828832,15.7560089536,15.7560350235,15.7560610929,15.7560871619,15.7561132304, +15.7561392984,15.7561653659,15.756191433,15.7562174996,15.7562435657,15.7562696314,15.7562956966,15.7563217613,15.7563478255,15.7563738893,15.7563999526,15.7564260154,15.7564520778,15.7564781397,15.7565042011,15.756530262, +15.7565563225,15.7565823825,15.7566084421,15.7566345011,15.7566605597,15.7566866179,15.7567126755,15.7567387327,15.7567647894,15.7567908456,15.7568169014,15.7568429567,15.7568690115,15.7568950659,15.7569211198,15.7569471732, +15.7569732262,15.7569992786,15.7570253307,15.7570513822,15.7570774333,15.7571034839,15.757129534,15.7571555836,15.7571816328,15.7572076815,15.7572337298,15.7572597775,15.7572858249,15.7573118717,15.7573379181,15.7573639639, +15.7573900094,15.7574160543,15.7574420988,15.7574681428,15.7574941864,15.7575202294,15.757546272,15.7575723142,15.7575983558,15.757624397,15.7576504377,15.757676478,15.7577025178,15.7577285571,15.7577545959,15.7577806343, +15.7578066722,15.7578327096,15.7578587466,15.7578847831,15.7579108191,15.7579368547,15.7579628897,15.7579889244,15.7580149585,15.7580409922,15.7580670254,15.7580930581,15.7581190904,15.7581451222,15.7581711535,15.7581971843, +15.7582232147,15.7582492446,15.7582752741,15.7583013031,15.7583273316,15.7583533596,15.7583793872,15.7584054143,15.7584314409,15.7584574671,15.7584834927,15.758509518,15.7585355427,15.758561567,15.7585875908,15.7586136142, +15.758639637,15.7586656594,15.7586916814,15.7587177028,15.7587437238,15.7587697443,15.7587957644,15.758821784,15.7588478031,15.7588738218,15.7588998399,15.7589258576,15.7589518749,15.7589778917,15.759003908,15.7590299238, +15.7590559392,15.7590819541,15.7591079685,15.7591339824,15.7591599959,15.7591860089,15.7592120215,15.7592380336,15.7592640452,15.7592900563,15.759316067,15.7593420772,15.7593680869,15.7593940962,15.759420105,15.7594461133, +15.7594721212,15.7594981286,15.7595241355,15.759550142,15.759576148,15.7596021535,15.7596281585,15.7596541631,15.7596801672,15.7597061709,15.759732174,15.7597581767,15.759784179,15.7598101807,15.759836182,15.7598621829, +15.7598881832,15.7599141831,15.7599401825,15.7599661815,15.75999218,15.760018178,15.7600441755,15.7600701726,15.7600961692,15.7601221654,15.7601481611,15.7601741563,15.760200151,15.7602261453,15.7602521391,15.7602781324, +15.7603041253,15.7603301177,15.7603561096,15.7603821011,15.7604080921,15.7604340826,15.7604600726,15.7604860622,15.7605120514,15.76053804,15.7605640282,15.7605900159,15.7606160032,15.7606419899,15.7606679762,15.7606939621, +15.7607199475,15.7607459324,15.7607719168,15.7607979008,15.7608238843,15.7608498673,15.7608758499,15.760901832,15.7609278136,15.7609537948,15.7609797755,15.7610057557,15.7610317355,15.7610577148,15.7610836936,15.7611096719, +15.7611356498,15.7611616272,15.7611876042,15.7612135807,15.7612395567,15.7612655323,15.7612915073,15.761317482,15.7613434561,15.7613694298,15.761395403,15.7614213757,15.761447348,15.7614733198,15.7614992912,15.761525262, +15.7615512324,15.7615772024,15.7616031719,15.7616291409,15.7616551094,15.7616810775,15.7617070451,15.7617330122,15.7617589789,15.7617849451,15.7618109108,15.7618368761,15.7618628409,15.7618888052,15.7619147691,15.7619407325, +15.7619666954,15.7619926578,15.7620186198,15.7620445814,15.7620705424,15.762096503,15.7621224631,15.7621484228,15.762174382,15.7622003407,15.762226299,15.7622522568,15.7622782141,15.7623041709,15.7623301273,15.7623560833, +15.7623820387,15.7624079937,15.7624339482,15.7624599023,15.7624858559,15.762511809,15.7625377616,15.7625637138,15.7625896655,15.7626156168,15.7626415676,15.7626675179,15.7626934678,15.7627194171,15.7627453661,15.7627713145, +15.7627972625,15.76282321,15.7628491571,15.7628751037,15.7629010498,15.7629269954,15.7629529406,15.7629788853,15.7630048296,15.7630307734,15.7630567167,15.7630826595,15.7631086019,15.7631345439,15.7631604853,15.7631864263, +15.7632123668,15.7632383069,15.7632642465,15.7632901856,15.7633161242,15.7633420624,15.7633680001,15.7633939374,15.7634198742,15.7634458105,15.7634717464,15.7634976818,15.7635236167,15.7635495511,15.7635754851,15.7636014187, +15.7636273517,15.7636532843,15.7636792164,15.7637051481,15.7637310793,15.76375701,15.7637829403,15.7638088701,15.7638347994,15.7638607283,15.7638866567,15.7639125846,15.7639385121,15.7639644391,15.7639903656,15.7640162917, +15.7640422173,15.7640681424,15.7640940671,15.7641199913,15.7641459151,15.7641718383,15.7641977611,15.7642236835,15.7642496054,15.7642755268,15.7643014477,15.7643273682,15.7643532882,15.7643792078,15.7644051269,15.7644310455, +15.7644569636,15.7644828813,15.7645087985,15.7645347153,15.7645606316,15.7645865474,15.7646124628,15.7646383776,15.7646642921,15.764690206,15.7647161195,15.7647420326,15.7647679451,15.7647938572,15.7648197689,15.76484568, +15.7648715907,15.764897501,15.7649234107,15.7649493201,15.7649752289,15.7650011373,15.7650270452,15.7650529526,15.7650788596,15.7651047661,15.7651306722,15.7651565778,15.7651824829,15.7652083875,15.7652342917,15.7652601955, +15.7652860987,15.7653120015,15.7653379038,15.7653638057,15.7653897071,15.765415608,15.7654415085,15.7654674085,15.7654933081,15.7655192071,15.7655451058,15.7655710039,15.7655969016,15.7656227988,15.7656486955,15.7656745918, +15.7657004877,15.765726383,15.7657522779,15.7657781723,15.7658040663,15.7658299598,15.7658558528,15.7658817454,15.7659076375,15.7659335291,15.7659594203,15.765985311,15.7660112013,15.766037091,15.7660629803,15.7660888692, +15.7661147576,15.7661406455,15.766166533,15.76619242,15.7662183065,15.7662441925,15.7662700781,15.7662959633,15.766321848,15.7663477322,15.7663736159,15.7663994992,15.766425382,15.7664512643,15.7664771462,15.7665030276, +15.7665289086,15.7665547891,15.7665806691,15.7666065487,15.7666324278,15.7666583064,15.7666841846,15.7667100623,15.7667359395,15.7667618163,15.7667876926,15.7668135685,15.7668394439,15.7668653188,15.7668911932,15.7669170672, +15.7669429408,15.7669688138,15.7669946864,15.7670205586,15.7670464302,15.7670723014,15.7670981722,15.7671240425,15.7671499123,15.7671757816,15.7672016505,15.767227519,15.7672533869,15.7672792544,15.7673051214,15.767330988, +15.7673568541,15.7673827198,15.7674085849,15.7674344497,15.7674603139,15.7674861777,15.767512041,15.7675379039,15.7675637663,15.7675896282,15.7676154897,15.7676413507,15.7676672112,15.7676930713,15.7677189309,15.7677447901, +15.7677706488,15.767796507,15.7678223648,15.7678482221,15.7678740789,15.7678999353,15.7679257912,15.7679516466,15.7679775016,15.7680033561,15.7680292102,15.7680550638,15.7680809169,15.7681067696,15.7681326218,15.7681584735, +15.7681843248,15.7682101756,15.7682360259,15.7682618758,15.7682877252,15.7683135742,15.7683394227,15.7683652707,15.7683911183,15.7684169654,15.7684428121,15.7684686582,15.768494504,15.7685203492,15.768546194,15.7685720383, +15.7685978822,15.7686237256,15.7686495685,15.768675411,15.768701253,15.7687270946,15.7687529357,15.7687787763,15.7688046165,15.7688304562,15.7688562954,15.7688821342,15.7689079725,15.7689338103,15.7689596477,15.7689854846, +15.7690113211,15.7690371571,15.7690629926,15.7690888277,15.7691146623,15.7691404965,15.7691663301,15.7691921634,15.7692179961,15.7692438284,15.7692696603,15.7692954916,15.7693213225,15.769347153,15.769372983,15.7693988125, +15.7694246416,15.7694504701,15.7694762983,15.769502126,15.7695279532,15.7695537799,15.7695796062,15.769605432,15.7696312574,15.7696570823,15.7696829067,15.7697087307,15.7697345542,15.7697603773,15.7697861998,15.769812022, +15.7698378436,15.7698636648,15.7698894856,15.7699153058,15.7699411257,15.769966945,15.7699927639,15.7700185823,15.7700444003,15.7700702178,15.7700960348,15.7701218514,15.7701476675,15.7701734832,15.7701992984,15.7702251131, +15.7702509274,15.7702767412,15.7703025546,15.7703283674,15.7703541799,15.7703799918,15.7704058033,15.7704316144,15.7704574249,15.770483235,15.7705090447,15.7705348539,15.7705606626,15.7705864709,15.7706122787,15.770638086, +15.7706638929,15.7706896993,15.7707155053,15.7707413108,15.7707671158,15.7707929204,15.7708187245,15.7708445282,15.7708703314,15.7708961341,15.7709219364,15.7709477382,15.7709735395,15.7709993404,15.7710251408,15.7710509408, +15.7710767403,15.7711025393,15.7711283379,15.771154136,15.7711799336,15.7712057308,15.7712315276,15.7712573238,15.7712831196,15.771308915,15.7713347099,15.7713605043,15.7713862983,15.7714120918,15.7714378848,15.7714636774, +15.7714894695,15.7715152612,15.7715410524,15.7715668431,15.7715926334,15.7716184232,15.7716442125,15.7716700014,15.7716957899,15.7717215778,15.7717473653,15.7717731524,15.771798939,15.7718247251,15.7718505108,15.771876296, +15.7719020807,15.771927865,15.7719536488,15.7719794322,15.7720052151,15.7720309975,15.7720567795,15.772082561,15.7721083421,15.7721341226,15.7721599028,15.7721856825,15.7722114617,15.7722372404,15.7722630187,15.7722887966, +15.7723145739,15.7723403508,15.7723661273,15.7723919033,15.7724176788,15.7724434539,15.7724692285,15.7724950026,15.7725207763,15.7725465495,15.7725723223,15.7725980946,15.7726238665,15.7726496378,15.7726754088,15.7727011792, +15.7727269492,15.7727527188,15.7727784879,15.7728042565,15.7728300247,15.7728557924,15.7728815596,15.7729073264,15.7729330927,15.7729588586,15.772984624,15.7730103889,15.7730361534,15.7730619174,15.773087681,15.7731134441, +15.7731392067,15.7731649689,15.7731907306,15.7732164919,15.7732422527,15.773268013,15.7732937729,15.7733195323,15.7733452913,15.7733710498,15.7733968078,15.7734225654,15.7734483225,15.7734740792,15.7734998354,15.7735255911, +15.7735513464,15.7735771013,15.7736028556,15.7736286095,15.773654363,15.7736801159,15.7737058685,15.7737316205,15.7737573721,15.7737831233,15.773808874,15.7738346242,15.773860374,15.7738861233,15.7739118721,15.7739376205, +15.7739633684,15.7739891159,15.7740148629,15.7740406095,15.7740663556,15.7740921012,15.7741178464,15.7741435911,15.7741693353,15.7741950791,15.7742208224,15.7742465653,15.7742723077,15.7742980497,15.7743237912,15.7743495322, +15.7743752728,15.7744010129,15.7744267526,15.7744524918,15.7744782305,15.7745039688,15.7745297066,15.774555444,15.7745811809,15.7746069173,15.7746326533,15.7746583889,15.7746841239,15.7747098585,15.7747355927,15.7747613264, +15.7747870596,15.7748127924,15.7748385247,15.7748642565,15.7748899879,15.7749157189,15.7749414494,15.7749671794,15.7749929089,15.775018638,15.7750443667,15.7750700949,15.7750958226,15.7751215499,15.7751472767,15.775173003, +15.7751987289,15.7752244543,15.7752501793,15.7752759038,15.7753016279,15.7753273515,15.7753530746,15.7753787973,15.7754045195,15.7754302413,15.7754559626,15.7754816834,15.7755074038,15.7755331237,15.7755588432,15.7755845622, +15.7756102808,15.7756359989,15.7756617165,15.7756874337,15.7757131504,15.7757388666,15.7757645824,15.7757902978,15.7758160127,15.7758417271,15.7758674411,15.7758931546,15.7759188676,15.7759445802,15.7759702924,15.775996004, +15.7760217153,15.776047426,15.7760731363,15.7760988462,15.7761245555,15.7761502645,15.7761759729,15.776201681,15.7762273885,15.7762530956,15.7762788022,15.7763045084,15.7763302141,15.7763559194,15.7763816242,15.7764073286, +15.7764330324,15.7764587359,15.7764844388,15.7765101414,15.7765358434,15.776561545,15.7765872462,15.7766129468,15.7766386471,15.7766643468,15.7766900462,15.776715745,15.7767414434,15.7767671413,15.7767928388,15.7768185358, +15.7768442324,15.7768699285,15.7768956242,15.7769213193,15.7769470141,15.7769727084,15.7769984022,15.7770240955,15.7770497884,15.7770754809,15.7771011729,15.7771268644,15.7771525555,15.7771782461,15.7772039362,15.7772296259, +15.7772553152,15.777281004,15.7773066923,15.7773323802,15.7773580676,15.7773837545,15.777409441,15.7774351271,15.7774608127,15.7774864978,15.7775121825,15.7775378667,15.7775635504,15.7775892337,15.7776149166,15.777640599, +15.7776662809,15.7776919623,15.7777176434,15.7777433239,15.777769004,15.7777946837,15.7778203628,15.7778460416,15.7778717198,15.7778973976,15.777923075,15.7779487519,15.7779744283,15.7780001043,15.7780257799,15.7780514549, +15.7780771295,15.7781028037,15.7781284774,15.7781541506,15.7781798234,15.7782054957,15.7782311676,15.778256839,15.77828251,15.7783081805,15.7783338505,15.7783595201,15.7783851893,15.7784108579,15.7784365262,15.7784621939, +15.7784878612,15.7785135281,15.7785391945,15.7785648604,15.7785905259,15.7786161909,15.7786418555,15.7786675196,15.7786931832,15.7787188464,15.7787445092,15.7787701714,15.7787958333,15.7788214946,15.7788471556,15.778872816, +15.778898476,15.7789241356,15.7789497946,15.7789754533,15.7790011114,15.7790267692,15.7790524264,15.7790780832,15.7791037396,15.7791293955,15.7791550509,15.7791807059,15.7792063604,15.7792320145,15.7792576681,15.7792833213, +15.779308974,15.7793346262,15.779360278,15.7793859293,15.7794115802,15.7794372306,15.7794628806,15.7794885301,15.7795141791,15.7795398277,15.7795654759,15.7795911236,15.7796167708,15.7796424176,15.7796680639,15.7796937097, +15.7797193551,15.7797450001,15.7797706446,15.7797962886,15.7798219322,15.7798475753,15.779873218,15.7798988602,15.779924502,15.7799501433,15.7799757841,15.7800014245,15.7800270644,15.7800527039,15.7800783429,15.7801039815, +15.7801296196,15.7801552573,15.7801808945,15.7802065312,15.7802321675,15.7802578034,15.7802834387,15.7803090737,15.7803347081,15.7803603421,15.7803859757,15.7804116088,15.7804372414,15.7804628736,15.7804885054,15.7805141366, +15.7805397675,15.7805653978,15.7805910278,15.7806166572,15.7806422862,15.7806679148,15.7806935429,15.7807191705,15.7807447977,15.7807704244,15.7807960507,15.7808216765,15.7808473019,15.7808729268,15.7808985512,15.7809241752, +15.7809497987,15.7809754218,15.7810010445,15.7810266666,15.7810522884,15.7810779096,15.7811035304,15.7811291508,15.7811547707,15.7811803901,15.7812060091,15.7812316277,15.7812572457,15.7812828634,15.7813084805,15.7813340973, +15.7813597135,15.7813853293,15.7814109447,15.7814365596,15.781462174,15.781487788,15.7815134015,15.7815390146,15.7815646272,15.7815902394,15.7816158511,15.7816414624,15.7816670732,15.7816926835,15.7817182934,15.7817439029, +15.7817695119,15.7817951204,15.7818207285,15.7818463361,15.7818719433,15.78189755,15.7819231562,15.781948762,15.7819743674,15.7819999723,15.7820255767,15.7820511807,15.7820767842,15.7821023873,15.7821279899,15.7821535921, +15.7821791938,15.7822047951,15.7822303959,15.7822559963,15.7822815961,15.7823071956,15.7823327946,15.7823583931,15.7823839912,15.7824095888,15.782435186,15.7824607827,15.782486379,15.7825119748,15.7825375701,15.782563165, +15.7825887595,15.7826143535,15.782639947,15.7826655401,15.7826911327,15.7827167249,15.7827423166,15.7827679079,15.7827934987,15.7828190891,15.782844679,15.7828702685,15.7828958575,15.782921446,15.7829470341,15.7829726217, +15.7829982089,15.7830237957,15.7830493819,15.7830749678,15.7831005531,15.783126138,15.7831517225,15.7831773065,15.7832028901,15.7832284732,15.7832540558,15.783279638,15.7833052197,15.783330801,15.7833563819,15.7833819622, +15.7834075422,15.7834331216,15.7834587007,15.7834842792,15.7835098573,15.783535435,15.7835610122,15.783586589,15.7836121653,15.7836377411,15.7836633165,15.7836888914,15.7837144659,15.7837400399,15.7837656135,15.7837911866, +15.7838167593,15.7838423315,15.7838679033,15.7838934746,15.7839190455,15.7839446159,15.7839701858,15.7839957553,15.7840213244,15.784046893,15.7840724611,15.7840980288,15.784123596,15.7841491628,15.7841747291,15.784200295, +15.7842258604,15.7842514254,15.7842769899,15.784302554,15.7843281176,15.7843536807,15.7843792434,15.7844048057,15.7844303675,15.7844559288,15.7844814897,15.7845070502,15.7845326101,15.7845581697,15.7845837288,15.7846092874, +15.7846348456,15.7846604033,15.7846859605,15.7847115174,15.7847370737,15.7847626296,15.7847881851,15.7848137401,15.7848392947,15.7848648488,15.7848904024,15.7849159556,15.7849415083,15.7849670606,15.7849926125,15.7850181638, +15.7850437148,15.7850692653,15.7850948153,15.7851203649,15.785145914,15.7851714627,15.7851970109,15.7852225586,15.7852481059,15.7852736528,15.7852991992,15.7853247452,15.7853502907,15.7853758357,15.7854013803,15.7854269245, +15.7854524682,15.7854780114,15.7855035542,15.7855290965,15.7855546384,15.7855801798,15.7856057208,15.7856312614,15.7856568014,15.7856823411,15.7857078802,15.7857334189,15.7857589572,15.785784495,15.7858100324,15.7858355693, +15.7858611058,15.7858866418,15.7859121773,15.7859377124,15.7859632471,15.7859887813,15.786014315,15.7860398483,15.7860653812,15.7860909136,15.7861164455,15.786141977,15.786167508,15.7861930386,15.7862185687,15.7862440984, +15.7862696276,15.7862951564,15.7863206848,15.7863462126,15.78637174,15.786397267,15.7864227935,15.7864483196,15.7864738452,15.7864993704,15.7865248951,15.7865504194,15.7865759432,15.7866014665,15.7866269894,15.7866525119, +15.7866780339,15.7867035554,15.7867290765,15.7867545972,15.7867801174,15.7868056371,15.7868311564,15.7868566753,15.7868821937,15.7869077116,15.7869332291,15.7869587461,15.7869842627,15.7870097789,15.7870352945,15.7870608098, +15.7870863246,15.7871118389,15.7871373528,15.7871628662,15.7871883792,15.7872138917,15.7872394038,15.7872649154,15.7872904266,15.7873159373,15.7873414476,15.7873669574,15.7873924667,15.7874179757,15.7874434841,15.7874689921, +15.7874944997,15.7875200068,15.7875455135,15.7875710197,15.7875965254,15.7876220308,15.7876475356,15.78767304,15.787698544,15.7877240475,15.7877495505,15.7877750531,15.7878005553,15.787826057,15.7878515582,15.787877059, +15.7879025594,15.7879280593,15.7879535587,15.7879790577,15.7880045563,15.7880300544,15.788055552,15.7880810492,15.788106546,15.7881320423,15.7881575381,15.7881830335,15.7882085284,15.7882340229,15.788259517,15.7882850106, +15.7883105037,15.7883359964,15.7883614886,15.7883869804,15.7884124718,15.7884379626,15.7884634531,15.7884889431,15.7885144326,15.7885399217,15.7885654103,15.7885908985,15.7886163863,15.7886418735,15.7886673604,15.7886928468, +15.7887183327,15.7887438182,15.7887693032,15.7887947878,15.7888202719,15.7888457556,15.7888712388,15.7888967216,15.788922204,15.7889476858,15.7889731673,15.7889986483,15.7890241288,15.7890496089,15.7890750885,15.7891005677, +15.7891260464,15.7891515247,15.7891770025,15.7892024799,15.7892279569,15.7892534333,15.7892789094,15.789304385,15.7893298601,15.7893553348,15.789380809,15.7894062828,15.7894317561,15.789457229,15.7894827014,15.7895081734, +15.789533645,15.7895591161,15.7895845867,15.7896100569,15.7896355266,15.7896609959,15.7896864647,15.7897119331,15.7897374011,15.7897628686,15.7897883356,15.7898138022,15.7898392683,15.789864734,15.7898901993,15.789915664, +15.7899411284,15.7899665923,15.7899920557,15.7900175187,15.7900429813,15.7900684434,15.790093905,15.7901193662,15.7901448269,15.7901702872,15.7901957471,15.7902212065,15.7902466654,15.7902721239,15.790297582,15.7903230396, +15.7903484968,15.7903739535,15.7903994097,15.7904248655,15.7904503209,15.7904757758,15.7905012302,15.7905266842,15.7905521378,15.7905775909,15.7906030436,15.7906284958,15.7906539476,15.7906793989,15.7907048497,15.7907303002, +15.7907557501,15.7907811996,15.7908066487,15.7908320973,15.7908575455,15.7908829932,15.7909084405,15.7909338873,15.7909593337,15.7909847796,15.7910102251,15.7910356701,15.7910611147,15.7910865588,15.7911120025,15.7911374458, +15.7911628886,15.7911883309,15.7912137728,15.7912392142,15.7912646552,15.7912900958,15.7913155359,15.7913409755,15.7913664147,15.7913918534,15.7914172917,15.7914427296,15.791468167,15.791493604,15.7915190405,15.7915444765, +15.7915699121,15.7915953473,15.791620782,15.7916462163,15.7916716501,15.7916970834,15.7917225164,15.7917479488,15.7917733809,15.7917988124,15.7918242436,15.7918496742,15.7918751045,15.7919005342,15.7919259636,15.7919513925, +15.7919768209,15.7920022489,15.7920276764,15.7920531035,15.7920785302,15.7921039564,15.7921293821,15.7921548074,15.7921802323,15.7922056567,15.7922310806,15.7922565041,15.7922819272,15.7923073498,15.792332772,15.7923581937, +15.7923836149,15.7924090358,15.7924344561,15.792459876,15.7924852955,15.7925107146,15.7925361331,15.7925615513,15.7925869689,15.7926123862,15.792637803,15.7926632193,15.7926886352,15.7927140507,15.7927394656,15.7927648802, +15.7927902943,15.792815708,15.7928411212,15.7928665339,15.7928919462,15.7929173581,15.7929427695,15.7929681805,15.792993591,15.7930190011,15.7930444107,15.7930698199,15.7930952286,15.7931206369,15.7931460447,15.7931714521, +15.7931968591,15.7932222656,15.7932476716,15.7932730772,15.7932984824,15.7933238871,15.7933492913,15.7933746951,15.7934000985,15.7934255014,15.7934509039,15.7934763059,15.7935017075,15.7935271086,15.7935525093,15.7935779095, +15.7936033093,15.7936287086,15.7936541075,15.7936795059,15.7937049039,15.7937303015,15.7937556986,15.7937810952,15.7938064915,15.7938318872,15.7938572825,15.7938826774,15.7939080718,15.7939334658,15.7939588593,15.7939842524, +15.794009645,15.7940350372,15.7940604289,15.7940858202,15.7941112111,15.7941366015,15.7941619914,15.7941873809,15.79421277,15.7942381586,15.7942635468,15.7942889345,15.7943143217,15.7943397086,15.7943650949,15.7943904809, +15.7944158664,15.7944412514,15.794466636,15.7944920201,15.7945174038,15.7945427871,15.7945681699,15.7945935522,15.7946189341,15.7946443156,15.7946696966,15.7946950772,15.7947204573,15.794745837,15.7947712162,15.794796595, +15.7948219733,15.7948473512,15.7948727287,15.7948981057,15.7949234822,15.7949488583,15.794974234,15.7949996092,15.795024984,15.7950503583,15.7950757322,15.7951011056,15.7951264786,15.7951518511,15.7951772232,15.7952025948, +15.795227966,15.7952533368,15.7952787071,15.7953040769,15.7953294464,15.7953548153,15.7953801838,15.7954055519,15.7954309195,15.7954562867,15.7954816535,15.7955070197,15.7955323856,15.795557751,15.7955831159,15.7956084804, +15.7956338445,15.7956592081,15.7956845713,15.795709934,15.7957352963,15.7957606581,15.7957860195,15.7958113804,15.7958367409,15.795862101,15.7958874606,15.7959128197,15.7959381784,15.7959635367,15.7959888945,15.7960142519, +15.7960396088,15.7960649653,15.7960903213,15.7961156769,15.7961410321,15.7961663868,15.796191741,15.7962170948,15.7962424482,15.7962678011,15.7962931536,15.7963185056,15.7963438572,15.7963692083,15.796394559,15.7964199093, +15.7964452591,15.7964706084,15.7964959573,15.7965213058,15.7965466538,15.7965720014,15.7965973485,15.7966226952,15.7966480414,15.7966733872,15.7966987325,15.7967240774,15.7967494219,15.7967747659,15.7968001095,15.7968254526, +15.7968507953,15.7968761375,15.7969014793,15.7969268206,15.7969521615,15.796977502,15.797002842,15.7970281815,15.7970535206,15.7970788593,15.7971041975,15.7971295353,15.7971548726,15.7971802095,15.797205546,15.797230882, +15.7972562175,15.7972815526,15.7973068873,15.7973322215,15.7973575553,15.7973828886,15.7974082215,15.7974335539,15.7974588859,15.7974842175,15.7975095486,15.7975348792,15.7975602094,15.7975855392,15.7976108685,15.7976361974, +15.7976615259,15.7976868538,15.7977121814,15.7977375085,15.7977628352,15.7977881614,15.7978134871,15.7978388125,15.7978641373,15.7978894618,15.7979147858,15.7979401093,15.7979654324,15.7979907551,15.7980160773,15.798041399, +15.7980667204,15.7980920412,15.7981173617,15.7981426817,15.7981680012,15.7981933203,15.798218639,15.7982439572,15.7982692749,15.7982945923,15.7983199092,15.7983452256,15.7983705416,15.7983958571,15.7984211722,15.7984464869, +15.7984718011,15.7984971149,15.7985224282,15.7985477411,15.7985730535,15.7985983655,15.7986236771,15.7986489882,15.7986742988,15.798699609,15.7987249188,15.7987502281,15.798775537,15.7988008455,15.7988261535,15.798851461, +15.7988767681,15.7989020748,15.798927381,15.7989526868,15.7989779921,15.799003297,15.7990286015,15.7990539055,15.799079209,15.7991045121,15.7991298148,15.799155117,15.7991804188,15.7992057202,15.7992310211,15.7992563215, +15.7992816215,15.7993069211,15.7993322202,15.7993575189,15.7993828171,15.7994081149,15.7994334123,15.7994587092,15.7994840056,15.7995093016,15.7995345972,15.7995598923,15.799585187,15.7996104813,15.7996357751,15.7996610684, +15.7996863613,15.7997116538,15.7997369458,15.7997622374,15.7997875285,15.7998128192,15.7998381095,15.7998633993,15.7998886887,15.7999139776,15.7999392661,15.7999645541,15.7999898417,15.8000151288,15.8000404155,15.8000657018, +15.8000909876,15.800116273,15.8001415579,15.8001668424,15.8001921265,15.8002174101,15.8002426932,15.8002679759,15.8002932582,15.8003185401,15.8003438214,15.8003691024,15.8003943829,15.8004196629,15.8004449426,15.8004702217, +15.8004955005,15.8005207788,15.8005460566,15.800571334,15.800596611,15.8006218875,15.8006471635,15.8006724392,15.8006977144,15.8007229891,15.8007482634,15.8007735373,15.8007988107,15.8008240837,15.8008493562,15.8008746283, +15.8008998999,15.8009251711,15.8009504419,15.8009757122,15.8010009821,15.8010262515,15.8010515205,15.801076789,15.8011020571,15.8011273248,15.801152592,15.8011778588,15.8012031251,15.801228391,15.8012536565,15.8012789215, +15.801304186,15.8013294502,15.8013547139,15.8013799771,15.8014052399,15.8014305022,15.8014557641,15.8014810256,15.8015062866,15.8015315472,15.8015568074,15.8015820671,15.8016073263,15.8016325851,15.8016578435,15.8016831014, +15.8017083589,15.801733616,15.8017588726,15.8017841287,15.8018093844,15.8018346397,15.8018598946,15.8018851489,15.8019104029,15.8019356564,15.8019609095,15.8019861621,15.8020114143,15.802036666,15.8020619173,15.8020871682, +15.8021124186,15.8021376686,15.8021629181,15.8021881672,15.8022134158,15.802238664,15.8022639118,15.8022891591,15.802314406,15.8023396524,15.8023648984,15.802390144,15.8024153891,15.8024406338,15.802465878,15.8024911218, +15.8025163651,15.802541608,15.8025668505,15.8025920925,15.8026173341,15.8026425752,15.8026678159,15.8026930562,15.802718296,15.8027435354,15.8027687743,15.8027940128,15.8028192508,15.8028444884,15.8028697256,15.8028949623, +15.8029201986,15.8029454344,15.8029706698,15.8029959048,15.8030211393,15.8030463734,15.803071607,15.8030968402,15.8031220729,15.8031473052,15.8031725371,15.8031977685,15.8032229995,15.8032482301,15.8032734602,15.8032986898, +15.803323919,15.8033491478,15.8033743762,15.8033996041,15.8034248315,15.8034500585,15.8034752851,15.8035005112,15.8035257369,15.8035509622,15.803576187,15.8036014113,15.8036266353,15.8036518587,15.8036770818,15.8037023044, +15.8037275266,15.8037527483,15.8037779696,15.8038031904,15.8038284108,15.8038536307,15.8038788503,15.8039040693,15.803929288,15.8039545062,15.8039797239,15.8040049412,15.8040301581,15.8040553745,15.8040805905,15.8041058061, +15.8041310212,15.8041562359,15.8041814501,15.8042066639,15.8042318772,15.8042570901,15.8042823026,15.8043075146,15.8043327262,15.8043579373,15.804383148,15.8044083583,15.8044335681,15.8044587775,15.8044839864,15.8045091949, +15.804534403,15.8045596106,15.8045848178,15.8046100245,15.8046352308,15.8046604367,15.8046856421,15.8047108471,15.8047360516,15.8047612557,15.8047864594,15.8048116626,15.8048368654,15.8048620677,15.8048872696,15.804912471, +15.8049376721,15.8049628726,15.8049880728,15.8050132725,15.8050384717,15.8050636705,15.8050888689,15.8051140668,15.8051392643,15.8051644614,15.805189658,15.8052148542,15.8052400499,15.8052652452,15.80529044,15.8053156344, +15.8053408284,15.8053660219,15.805391215,15.8054164077,15.8054415999,15.8054667917,15.805491983,15.8055171739,15.8055423644,15.8055675544,15.8055927439,15.8056179331,15.8056431218,15.80566831,15.8056934978,15.8057186852, +15.8057438722,15.8057690586,15.8057942447,15.8058194303,15.8058446155,15.8058698002,15.8058949845,15.8059201684,15.8059453518,15.8059705348,15.8059957173,15.8060208994,15.8060460811,15.8060712623,15.8060964431,15.8061216234, +15.8061468033,15.8061719828,15.8061971618,15.8062223404,15.8062475185,15.8062726962,15.8062978735,15.8063230503,15.8063482267,15.8063734027,15.8063985782,15.8064237532,15.8064489279,15.8064741021,15.8064992758,15.8065244491, +15.806549622,15.8065747944,15.8065999664,15.806625138,15.8066503091,15.8066754798,15.80670065,15.8067258198,15.8067509891,15.8067761581,15.8068013265,15.8068264946,15.8068516622,15.8068768294,15.8069019961,15.8069271624, +15.8069523282,15.8069774936,15.8070026586,15.8070278231,15.8070529872,15.8070781509,15.8071033141,15.8071284768,15.8071536392,15.8071788011,15.8072039625,15.8072291235,15.8072542841,15.8072794443,15.807304604,15.8073297632, +15.8073549221,15.8073800804,15.8074052384,15.8074303959,15.807455553,15.8074807096,15.8075058658,15.8075310215,15.8075561769,15.8075813317,15.8076064862,15.8076316402,15.8076567937,15.8076819469,15.8077070995,15.8077322518, +15.8077574036,15.807782555,15.8078077059,15.8078328564,15.8078580064,15.807883156,15.8079083052,15.807933454,15.8079586023,15.8079837501,15.8080088975,15.8080340445,15.8080591911,15.8080843372,15.8081094828,15.8081346281, +15.8081597729,15.8081849172,15.8082100611,15.8082352046,15.8082603477,15.8082854903,15.8083106324,15.8083357741,15.8083609154,15.8083860563,15.8084111967,15.8084363367,15.8084614762,15.8084866153,15.808511754,15.8085368922, +15.80856203,15.8085871673,15.8086123042,15.8086374407,15.8086625767,15.8086877123,15.8087128475,15.8087379822,15.8087631165,15.8087882503,15.8088133837,15.8088385167,15.8088636492,15.8088887813,15.8089139129,15.8089390441, +15.8089641749,15.8089893053,15.8090144352,15.8090395646,15.8090646936,15.8090898222,15.8091149504,15.8091400781,15.8091652054,15.8091903322,15.8092154586,15.8092405846,15.8092657101,15.8092908352,15.8093159598,15.809341084, +15.8093662078,15.8093913312,15.8094164541,15.8094415765,15.8094666985,15.8094918201,15.8095169413,15.809542062,15.8095671823,15.8095923021,15.8096174215,15.8096425405,15.809667659,15.8096927771,15.8097178947,15.8097430119, +15.8097681287,15.809793245,15.809818361,15.8098434764,15.8098685914,15.809893706,15.8099188202,15.8099439339,15.8099690472,15.80999416,15.8100192724,15.8100443844,15.8100694959,15.810094607,15.8101197177,15.8101448279, +15.8101699377,15.810195047,15.8102201559,15.8102452644,15.8102703724,15.81029548,15.8103205872,15.8103456939,15.8103708002,15.810395906,15.8104210114,15.8104461164,15.810471221,15.8104963251,15.8105214287,15.810546532, +15.8105716347,15.8105967371,15.810621839,15.8106469405,15.8106720415,15.8106971421,15.8107222423,15.810747342,15.8107724413,15.8107975402,15.8108226386,15.8108477366,15.8108728342,15.8108979313,15.810923028,15.8109481242, +15.81097322,15.8109983154,15.8110234103,15.8110485048,15.8110735989,15.8110986925,15.8111237857,15.8111488784,15.8111739707,15.8111990626,15.811224154,15.811249245,15.8112743356,15.8112994257,15.8113245154,15.8113496047, +15.8113746935,15.8113997819,15.8114248698,15.8114499574,15.8114750444,15.8115001311,15.8115252173,15.811550303,15.8115753884,15.8116004733,15.8116255577,15.8116506418,15.8116757253,15.8117008085,15.8117258912,15.8117509735, +15.8117760553,15.8118011367,15.8118262177,15.8118512982,15.8118763783,15.811901458,15.8119265372,15.811951616,15.8119766944,15.8120017723,15.8120268498,15.8120519268,15.8120770034,15.8121020796,15.8121271553,15.8121522306, +15.8121773055,15.8122023799,15.8122274539,15.8122525275,15.8122776006,15.8123026733,15.8123277456,15.8123528174,15.8123778888,15.8124029597,15.8124280302,15.8124531003,15.8124781699,15.8125032391,15.8125283079,15.8125533762, +15.8125784441,15.8126035116,15.8126285786,15.8126536452,15.8126787114,15.8127037771,15.8127288424,15.8127539072,15.8127789716,15.8128040356,15.8128290991,15.8128541623,15.8128792249,15.8129042872,15.812929349,15.8129544103, +15.8129794713,15.8130045317,15.8130295918,15.8130546514,15.8130797106,15.8131047694,15.8131298277,15.8131548856,15.813179943,15.813205,15.8132300566,15.8132551127,15.8132801685,15.8133052237,15.8133302786,15.813355333, +15.8133803869,15.8134054405,15.8134304936,15.8134555462,15.8134805984,15.8135056502,15.8135307016,15.8135557525,15.813580803,15.813605853,15.8136309027,15.8136559518,15.8136810006,15.8137060489,15.8137310968,15.8137561442, +15.8137811912,15.8138062378,15.8138312839,15.8138563296,15.8138813749,15.8139064197,15.8139314641,15.8139565081,15.8139815516,15.8140065947,15.8140316374,15.8140566796,15.8140817214,15.8141067627,15.8141318037,15.8141568441, +15.8141818842,15.8142069238,15.814231963,15.8142570017,15.81428204,15.8143070779,15.8143321154,15.8143571524,15.814382189,15.8144072251,15.8144322608,15.8144572961,15.8144823309,15.8145073653,15.8145323993,15.8145574328, +15.8145824659,15.8146074986,15.8146325308,15.8146575626,15.814682594,15.8147076249,15.8147326554,15.8147576854,15.8147827151,15.8148077443,15.814832773,15.8148578013,15.8148828292,15.8149078567,15.8149328837,15.8149579103, +15.8149829364,15.8150079621,15.8150329874,15.8150580123,15.8150830367,15.8151080607,15.8151330842,15.8151581073,15.81518313,15.8152081523,15.8152331741,15.8152581954,15.8152832164,15.8153082369,15.815333257,15.8153582766, +15.8153832958,15.8154083146,15.8154333329,15.8154583508,15.8154833683,15.8155083853,15.8155334019,15.8155584181,15.8155834339,15.8156084492,15.815633464,15.8156584785,15.8156834925,15.815708506,15.8157335192,15.8157585319, +15.8157835441,15.815808556,15.8158335674,15.8158585783,15.8158835889,15.815908599,15.8159336086,15.8159586179,15.8159836267,15.816008635,15.8160336429,15.8160586504,15.8160836575,15.8161086641,15.8161336703,15.8161586761, +15.8161836814,15.8162086863,15.8162336908,15.8162586948,15.8162836984,15.8163087016,15.8163337043,15.8163587066,15.8163837085,15.8164087099,15.8164337109,15.8164587115,15.8164837116,15.8165087113,15.8165337106,15.8165587094, +15.8165837078,15.8166087058,15.8166337033,15.8166587004,15.816683697,15.8167086933,15.8167336891,15.8167586844,15.8167836794,15.8168086739,15.8168336679,15.8168586616,15.8168836548,15.8169086475,15.8169336399,15.8169586318, +15.8169836233,15.8170086143,15.8170336049,15.8170585951,15.8170835848,15.8171085741,15.817133563,15.8171585514,15.8171835394,15.817208527,15.8172335141,15.8172585008,15.8172834871,15.817308473,15.8173334584,15.8173584434, +15.8173834279,15.817408412,15.8174333957,15.8174583789,15.8174833617,15.8175083441,15.8175333261,15.8175583076,15.8175832887,15.8176082693,15.8176332495,15.8176582293,15.8176832087,15.8177081876,15.8177331661,15.8177581442, +15.8177831218,15.817808099,15.8178330757,15.8178580521,15.8178830279,15.8179080034,15.8179329784,15.817957953,15.8179829272,15.8180079009,15.8180328742,15.8180578471,15.8180828195,15.8181077915,15.8181327631,15.8181577342, +15.8181827049,15.8182076752,15.8182326451,15.8182576145,15.8182825835,15.818307552,15.8183325201,15.8183574878,15.818382455,15.8184074219,15.8184323882,15.8184573542,15.8184823197,15.8185072848,15.8185322495,15.8185572137, +15.8185821775,15.8186071408,15.8186321038,15.8186570663,15.8186820283,15.81870699,15.8187319512,15.8187569119,15.8187818723,15.8188068322,15.8188317917,15.8188567507,15.8188817093,15.8189066675,15.8189316252,15.8189565825, +15.8189815394,15.8190064959,15.8190314519,15.8190564075,15.8190813626,15.8191063174,15.8191312717,15.8191562255,15.819181179,15.819206132,15.8192310845,15.8192560367,15.8192809884,15.8193059396,15.8193308905,15.8193558409, +15.8193807909,15.8194057404,15.8194306895,15.8194556382,15.8194805865,15.8195055343,15.8195304817,15.8195554286,15.8195803752,15.8196053213,15.8196302669,15.8196552121,15.8196801569,15.8197051013,15.8197300453,15.8197549888, +15.8197799318,15.8198048745,15.8198298167,15.8198547585,15.8198796998,15.8199046407,15.8199295812,15.8199545213,15.8199794609,15.8200044001,15.8200293389,15.8200542772,15.8200792151,15.8201041526,15.8201290896,15.8201540262, +15.8201789624,15.8202038982,15.8202288335,15.8202537684,15.8202787028,15.8203036368,15.8203285704,15.8203535036,15.8203784363,15.8204033686,15.8204283005,15.8204532319,15.8204781629,15.8205030935,15.8205280237,15.8205529534, +15.8205778827,15.8206028115,15.8206277399,15.8206526679,15.8206775955,15.8207025226,15.8207274493,15.8207523756,15.8207773014,15.8208022268,15.8208271518,15.8208520763,15.8208770005,15.8209019241,15.8209268474,15.8209517702, +15.8209766926,15.8210016146,15.8210265361,15.8210514572,15.8210763779,15.8211012981,15.8211262179,15.8211511373,15.8211760563,15.8212009748,15.8212258929,15.8212508105,15.8212757278,15.8213006446,15.8213255609,15.8213504769, +15.8213753924,15.8214003074,15.8214252221,15.8214501363,15.8214750501,15.8214999635,15.8215248764,15.8215497889,15.8215747009,15.8215996126,15.8216245238,15.8216494346,15.8216743449,15.8216992548,15.8217241643,15.8217490733, +15.821773982,15.8217988902,15.8218237979,15.8218487053,15.8218736122,15.8218985186,15.8219234247,15.8219483303,15.8219732355,15.8219981402,15.8220230446,15.8220479485,15.8220728519,15.822097755,15.8221226576,15.8221475597, +15.8221724615,15.8221973628,15.8222222637,15.8222471641,15.8222720642,15.8222969638,15.8223218629,15.8223467617,15.82237166,15.8223965578,15.8224214553,15.8224463523,15.8224712489,15.8224961451,15.8225210408,15.8225459361, +15.822570831,15.8225957254,15.8226206194,15.822645513,15.8226704061,15.8226952989,15.8227201911,15.822745083,15.8227699744,15.8227948654,15.822819756,15.8228446462,15.8228695359,15.8228944252,15.822919314,15.8229442025, +15.8229690905,15.822993978,15.8230188652,15.8230437519,15.8230686382,15.823093524,15.8231184094,15.8231432944,15.823168179,15.8231930631,15.8232179468,15.8232428301,15.8232677129,15.8232925954,15.8233174774,15.8233423589, +15.82336724,15.8233921207,15.823417001,15.8234418809,15.8234667603,15.8234916393,15.8235165178,15.8235413959,15.8235662736,15.8235911509,15.8236160278,15.8236409042,15.8236657801,15.8236906557,15.8237155308,15.8237404055, +15.8237652798,15.8237901536,15.823815027,15.8238399,15.8238647726,15.8238896447,15.8239145164,15.8239393877,15.8239642585,15.8239891289,15.8240139989,15.8240388684,15.8240637375,15.8240886062,15.8241134745,15.8241383423, +15.8241632097,15.8241880767,15.8242129433,15.8242378094,15.8242626751,15.8242875403,15.8243124052,15.8243372696,15.8243621336,15.8243869971,15.8244118602,15.8244367229,15.8244615852,15.824486447,15.8245113084,15.8245361694, +15.82456103,15.8245858901,15.8246107498,15.8246356091,15.8246604679,15.8246853263,15.8247101843,15.8247350418,15.824759899,15.8247847556,15.8248096119,15.8248344678,15.8248593232,15.8248841781,15.8249090327,15.8249338868, +15.8249587405,15.8249835938,15.8250084466,15.8250332991,15.825058151,15.8250830026,15.8251078537,15.8251327044,15.8251575547,15.8251824045,15.825207254,15.825232103,15.8252569515,15.8252817996,15.8253066474,15.8253314946, +15.8253563415,15.8253811879,15.8254060339,15.8254308795,15.8254557246,15.8254805693,15.8255054136,15.8255302574,15.8255551009,15.8255799439,15.8256047864,15.8256296286,15.8256544703,15.8256793116,15.8257041524,15.8257289929, +15.8257538329,15.8257786725,15.8258035116,15.8258283503,15.8258531886,15.8258780265,15.8259028639,15.8259277009,15.8259525375,15.8259773737,15.8260022094,15.8260270447,15.8260518796,15.826076714,15.826101548,15.8261263816, +15.8261512148,15.8261760475,15.8262008798,15.8262257117,15.8262505432,15.8262753742,15.8263002048,15.826325035,15.8263498647,15.826374694,15.8263995229,15.8264243514,15.8264491794,15.826474007,15.8264988342,15.826523661, +15.8265484873,15.8265733132,15.8265981387,15.8266229637,15.8266477883,15.8266726125,15.8266974363,15.8267222596,15.8267470825,15.826771905,15.8267967271,15.8268215487,15.8268463699,15.8268711907,15.826896011,15.8269208309, +15.8269456504,15.8269704695,15.8269952881,15.8270201063,15.8270449241,15.8270697415,15.8270945584,15.8271193749,15.827144191,15.8271690066,15.8271938219,15.8272186367,15.827243451,15.827268265,15.8272930785,15.8273178916, +15.8273427042,15.8273675165,15.8273923283,15.8274171397,15.8274419506,15.8274667611,15.8274915712,15.8275163809,15.8275411902,15.827565999,15.8275908074,15.8276156154,15.8276404229,15.82766523,15.8276900367,15.827714843, +15.8277396488,15.8277644542,15.8277892592,15.8278140638,15.8278388679,15.8278636716,15.8278884749,15.8279132777,15.8279380801,15.8279628821,15.8279876837,15.8280124849,15.8280372856,15.8280620859,15.8280868857,15.8281116852, +15.8281364842,15.8281612828,15.8281860809,15.8282108787,15.828235676,15.8282604729,15.8282852693,15.8283100654,15.828334861,15.8283596561,15.8283844509,15.8284092452,15.8284340391,15.8284588326,15.8284836256,15.8285084183, +15.8285332105,15.8285580022,15.8285827936,15.8286075845,15.828632375,15.828657165,15.8286819547,15.8287067439,15.8287315327,15.828756321,15.828781109,15.8288058965,15.8288306836,15.8288554702,15.8288802565,15.8289050423, +15.8289298277,15.8289546126,15.8289793971,15.8290041812,15.8290289649,15.8290537482,15.829078531,15.8291033134,15.8291280954,15.8291528769,15.829177658,15.8292024387,15.829227219,15.8292519989,15.8292767783,15.8293015573, +15.8293263358,15.829351114,15.8293758917,15.829400669,15.8294254459,15.8294502223,15.8294749983,15.8294997739,15.8295245491,15.8295493238,15.8295740981,15.829598872,15.8296236455,15.8296484185,15.8296731911,15.8296979633, +15.8297227351,15.8297475064,15.8297722773,15.8297970478,15.8298218179,15.8298465875,15.8298713567,15.8298961255,15.8299208939,15.8299456618,15.8299704293,15.8299951964,15.8300199631,15.8300447293,15.8300694951,15.8300942605, +15.8301190254,15.83014379,15.8301685541,15.8301933178,15.830218081,15.8302428439,15.8302676063,15.8302923683,15.8303171298,15.8303418909,15.8303666517,15.8303914119,15.8304161718,15.8304409312,15.8304656902,15.8304904488, +15.830515207,15.8305399647,15.830564722,15.8305894789,15.8306142354,15.8306389914,15.830663747,15.8306885022,15.830713257,15.8307380113,15.8307627652,15.8307875187,15.8308122717,15.8308370244,15.8308617766,15.8308865284, +15.8309112797,15.8309360307,15.8309607812,15.8309855313,15.8310102809,15.8310350302,15.831059779,15.8310845274,15.8311092754,15.8311340229,15.83115877,15.8311835167,15.831208263,15.8312330088,15.8312577542,15.8312824992, +15.8313072438,15.8313319879,15.8313567317,15.831381475,15.8314062178,15.8314309603,15.8314557023,15.8314804439,15.8315051851,15.8315299258,15.8315546662,15.8315794061,15.8316041455,15.8316288846,15.8316536232,15.8316783614, +15.8317030992,15.8317278366,15.8317525735,15.83177731,15.8318020461,15.8318267818,15.831851517,15.8318762518,15.8319009862,15.8319257202,15.8319504537,15.8319751868,15.8319999195,15.8320246518,15.8320493836,15.832074115, +15.832098846,15.8321235766,15.8321483068,15.8321730365,15.8321977658,15.8322224947,15.8322472231,15.8322719511,15.8322966787,15.8323214059,15.8323461327,15.832370859,15.8323955849,15.8324203104,15.8324450355,15.8324697601, +15.8324944843,15.8325192081,15.8325439315,15.8325686544,15.832593377,15.8326180991,15.8326428207,15.832667542,15.8326922628,15.8327169832,15.8327417032,15.8327664227,15.8327911419,15.8328158606,15.8328405789,15.8328652967, +15.8328900142,15.8329147312,15.8329394478,15.8329641639,15.8329888797,15.833013595,15.8330383099,15.8330630244,15.8330877384,15.833112452,15.8331371653,15.833161878,15.8331865904,15.8332113023,15.8332360138,15.8332607249, +15.8332854356,15.8333101458,15.8333348556,15.833359565,15.833384274,15.8334089826,15.8334336907,15.8334583984,15.8334831057,15.8335078125,15.8335325189,15.833557225,15.8335819305,15.8336066357,15.8336313404,15.8336560448, +15.8336807487,15.8337054521,15.8337301552,15.8337548578,15.83377956,15.8338042618,15.8338289631,15.8338536641,15.8338783646,15.8339030647,15.8339277643,15.8339524636,15.8339771624,15.8340018608,15.8340265588,15.8340512563, +15.8340759534,15.8341006501,15.8341253464,15.8341500423,15.8341747377,15.8341994327,15.8342241273,15.8342488215,15.8342735152,15.8342982086,15.8343229015,15.8343475939,15.834372286,15.8343969776,15.8344216688,15.8344463596, +15.83447105,15.8344957399,15.8345204294,15.8345451185,15.8345698072,15.8345944955,15.8346191833,15.8346438707,15.8346685577,15.8346932443,15.8347179304,15.8347426161,15.8347673014,15.8347919863,15.8348166707,15.8348413548, +15.8348660384,15.8348907215,15.8349154043,15.8349400866,15.8349647686,15.8349894501,15.8350141311,15.8350388118,15.835063492,15.8350881718,15.8351128512,15.8351375302,15.8351622087,15.8351868868,15.8352115645,15.8352362418, +15.8352609186,15.8352855951,15.8353102711,15.8353349466,15.8353596218,15.8353842965,15.8354089709,15.8354336448,15.8354583182,15.8354829913,15.8355076639,15.8355323361,15.8355570079,15.8355816793,15.8356063502,15.8356310207, +15.8356556908,15.8356803605,15.8357050298,15.8357296986,15.835754367,15.835779035,15.8358037026,15.8358283697,15.8358530364,15.8358777027,15.8359023686,15.8359270341,15.8359516991,15.8359763637,15.8360010279,15.8360256917, +15.8360503551,15.836075018,15.8360996805,15.8361243426,15.8361490042,15.8361736655,15.8361983263,15.8362229867,15.8362476467,15.8362723062,15.8362969654,15.8363216241,15.8363462824,15.8363709403,15.8363955977,15.8364202547, +15.8364449113,15.8364695675,15.8364942233,15.8365188786,15.8365435336,15.8365681881,15.8365928421,15.8366174958,15.836642149,15.8366668018,15.8366914542,15.8367161062,15.8367407578,15.8367654089,15.8367900596,15.8368147099, +15.8368393597,15.8368640092,15.8368886582,15.8369133068,15.836937955,15.8369626028,15.8369872501,15.837011897,15.8370365435,15.8370611896,15.8370858352,15.8371104805,15.8371351253,15.8371597697,15.8371844137,15.8372090572, +15.8372337003,15.837258343,15.8372829853,15.8373076272,15.8373322686,15.8373569097,15.8373815503,15.8374061905,15.8374308302,15.8374554696,15.8374801085,15.837504747,15.8375293851,15.8375540227,15.83757866,15.8376032968, +15.8376279332,15.8376525691,15.8376772047,15.8377018398,15.8377264745,15.8377511088,15.8377757427,15.8378003762,15.8378250092,15.8378496418,15.837874274,15.8378989058,15.8379235371,15.837948168,15.8379727986,15.8379974286, +15.8380220583,15.8380466876,15.8380713164,15.8380959448,15.8381205728,15.8381452003,15.8381698275,15.8381944542,15.8382190805,15.8382437064,15.8382683318,15.8382929569,15.8383175815,15.8383422057,15.8383668295,15.8383914529, +15.8384160758,15.8384406983,15.8384653204,15.8384899421,15.8385145634,15.8385391842,15.8385638046,15.8385884246,15.8386130442,15.8386376634,15.8386622821,15.8386869004,15.8387115183,15.8387361358,15.8387607529,15.8387853695, +15.8388099857,15.8388346015,15.8388592169,15.8388838318,15.8389084464,15.8389330605,15.8389576742,15.8389822875,15.8390069003,15.8390315128,15.8390561248,15.8390807364,15.8391053476,15.8391299583,15.8391545687,15.8391791786, +15.8392037881,15.8392283972,15.8392530058,15.8392776141,15.8393022219,15.8393268293,15.8393514363,15.8393760428,15.839400649,15.8394252547,15.83944986,15.8394744649,15.8394990694,15.8395236734,15.839548277,15.8395728802, +15.839597483,15.8396220854,15.8396466873,15.8396712889,15.83969589,15.8397204907,15.8397450909,15.8397696908,15.8397942902,15.8398188892,15.8398434878,15.839868086,15.8398926837,15.8399172811,15.839941878,15.8399664745, +15.8399910705,15.8400156662,15.8400402614,15.8400648562,15.8400894506,15.8401140446,15.8401386382,15.8401632313,15.840187824,15.8402124163,15.8402370082,15.8402615997,15.8402861907,15.8403107814,15.8403353716,15.8403599613, +15.8403845507,15.8404091397,15.8404337282,15.8404583163,15.840482904,15.8405074913,15.8405320781,15.8405566645,15.8405812506,15.8406058362,15.8406304213,15.8406550061,15.8406795904,15.8407041743,15.8407287578,15.8407533409, +15.8407779236,15.8408025058,15.8408270877,15.8408516691,15.8408762501,15.8409008306,15.8409254108,15.8409499905,15.8409745698,15.8409991487,15.8410237272,15.8410483052,15.8410728829,15.8410974601,15.8411220369,15.8411466133, +15.8411711892,15.8411957648,15.8412203399,15.8412449146,15.8412694889,15.8412940628,15.8413186362,15.8413432093,15.8413677819,15.8413923541,15.8414169259,15.8414414972,15.8414660682,15.8414906387,15.8415152088,15.8415397785, +15.8415643477,15.8415889166,15.841613485,15.841638053,15.8416626206,15.8416871878,15.8417117545,15.8417363209,15.8417608868,15.8417854523,15.8418100174,15.841834582,15.8418591463,15.8418837101,15.8419082735,15.8419328365, +15.8419573991,15.8419819613,15.842006523,15.8420310843,15.8420556452,15.8420802057,15.8421047658,15.8421293254,15.8421538846,15.8421784434,15.8422030018,15.8422275598,15.8422521174,15.8422766745,15.8423012312,15.8423257875, +15.8423503434,15.8423748989,15.8423994539,15.8424240086,15.8424485628,15.8424731166,15.8424976699,15.8425222229,15.8425467754,15.8425713276,15.8425958793,15.8426204306,15.8426449814,15.8426695319,15.8426940819,15.8427186315, +15.8427431807,15.8427677295,15.8427922779,15.8428168258,15.8428413733,15.8428659205,15.8428904672,15.8429150134,15.8429395593,15.8429641047,15.8429886497,15.8430131944,15.8430377385,15.8430622823,15.8430868257,15.8431113686, +15.8431359111,15.8431604532,15.8431849949,15.8432095362,15.843234077,15.8432586174,15.8432831574,15.843307697,15.8433322362,15.843356775,15.8433813133,15.8434058512,15.8434303888,15.8434549258,15.8434794625,15.8435039988, +15.8435285346,15.84355307,15.843577605,15.8436021396,15.8436266738,15.8436512075,15.8436757409,15.8437002738,15.8437248063,15.8437493384,15.84377387,15.8437984013,15.8438229321,15.8438474625,15.8438719925,15.8438965221, +15.8439210513,15.84394558,15.8439701084,15.8439946363,15.8440191638,15.8440436909,15.8440682175,15.8440927438,15.8441172696,15.844141795,15.84416632,15.8441908446,15.8442153687,15.8442398925,15.8442644158,15.8442889387, +15.8443134612,15.8443379833,15.8443625049,15.8443870262,15.844411547,15.8444360674,15.8444605874,15.844485107,15.8445096261,15.8445341449,15.8445586632,15.8445831811,15.8446076986,15.8446322157,15.8446567323,15.8446812486, +15.8447057644,15.8447302798,15.8447547948,15.8447793094,15.8448038235,15.8448283373,15.8448528506,15.8448773635,15.844901876,15.8449263881,15.8449508998,15.844975411,15.8449999218,15.8450244322,15.8450489422,15.8450734518, +15.845097961,15.8451224697,15.845146978,15.845171486,15.8451959935,15.8452205005,15.8452450072,15.8452695134,15.8452940193,15.8453185247,15.8453430297,15.8453675343,15.8453920384,15.8454165422,15.8454410455,15.8454655484, +15.8454900509,15.845514553,15.8455390547,15.845563556,15.8455880568,15.8456125572,15.8456370572,15.8456615568,15.845686056,15.8457105547,15.8457350531,15.845759551,15.8457840485,15.8458085456,15.8458330423,15.8458575385, +15.8458820344,15.8459065298,15.8459310248,15.8459555194,15.8459800136,15.8460045074,15.8460290007,15.8460534937,15.8460779862,15.8461024783,15.84612697,15.8461514612,15.8461759521,15.8462004425,15.8462249325,15.8462494222, +15.8462739113,15.8462984001,15.8463228885,15.8463473764,15.846371864,15.8463963511,15.8464208378,15.8464453241,15.8464698099,15.8464942954,15.8465187804,15.846543265,15.8465677492,15.846592233,15.8466167164,15.8466411994, +15.8466656819,15.846690164,15.8467146457,15.846739127,15.8467636079,15.8467880884,15.8468125684,15.8468370481,15.8468615273,15.8468860061,15.8469104845,15.8469349625,15.84695944,15.8469839172,15.8470083939,15.8470328702, +15.8470573461,15.8470818216,15.8471062966,15.8471307713,15.8471552455,15.8471797193,15.8472041928,15.8472286657,15.8472531383,15.8472776105,15.8473020822,15.8473265536,15.8473510245,15.847375495,15.8473999651,15.8474244347, +15.847448904,15.8474733728,15.8474978412,15.8475223093,15.8475467769,15.847571244,15.8475957108,15.8476201771,15.8476446431,15.8476691086,15.8476935737,15.8477180384,15.8477425027,15.8477669665,15.84779143,15.847815893, +15.8478403556,15.8478648178,15.8478892796,15.847913741,15.8479382019,15.8479626625,15.8479871226,15.8480115823,15.8480360416,15.8480605005,15.848084959,15.848109417,15.8481338747,15.8481583319,15.8481827887,15.8482072451, +15.8482317011,15.8482561567,15.8482806118,15.8483050666,15.8483295209,15.8483539748,15.8483784283,15.8484028814,15.848427334,15.8484517863,15.8484762381,15.8485006895,15.8485251405,15.8485495911,15.8485740413,15.8485984911, +15.8486229404,15.8486473894,15.8486718379,15.848696286,15.8487207337,15.848745181,15.8487696278,15.8487940743,15.8488185203,15.8488429659,15.8488674111,15.8488918559,15.8489163003,15.8489407443,15.8489651878,15.848989631, +15.8490140737,15.849038516,15.8490629579,15.8490873994,15.8491118404,15.8491362811,15.8491607213,15.8491851612,15.8492096006,15.8492340396,15.8492584781,15.8492829163,15.8493073541,15.8493317914,15.8493562283,15.8493806648, +15.8494051009,15.8494295366,15.8494539719,15.8494784068,15.8495028412,15.8495272752,15.8495517088,15.849576142,15.8496005748,15.8496250072,15.8496494392,15.8496738707,15.8496983019,15.8497227326,15.8497471629,15.8497715928, +15.8497960222,15.8498204513,15.84984488,15.8498693082,15.849893736,15.8499181634,15.8499425904,15.849967017,15.8499914432,15.8500158689,15.8500402943,15.8500647192,15.8500891437,15.8501135678,15.8501379915,15.8501624148, +15.8501868376,15.8502112601,15.8502356821,15.8502601037,15.850284525,15.8503089458,15.8503333661,15.8503577861,15.8503822057,15.8504066248,15.8504310435,15.8504554618,15.8504798797,15.8505042972,15.8505287143,15.850553131, +15.8505775472,15.850601963,15.8506263785,15.8506507935,15.8506752081,15.8506996222,15.850724036,15.8507484494,15.8507728623,15.8507972748,15.850821687,15.8508460987,15.85087051,15.8508949208,15.8509193313,15.8509437413, +15.850968151,15.8509925602,15.851016969,15.8510413774,15.8510657854,15.851090193,15.8511146001,15.8511390069,15.8511634132,15.8511878191,15.8512122247,15.8512366297,15.8512610344,15.8512854387,15.8513098426,15.851334246, +15.851358649,15.8513830517,15.8514074539,15.8514318557,15.851456257,15.851480658,15.8515050586,15.8515294587,15.8515538584,15.8515782577,15.8516026567,15.8516270551,15.8516514532,15.8516758509,15.8517002481,15.851724645, +15.8517490414,15.8517734374,15.851797833,15.8518222282,15.851846623,15.8518710174,15.8518954113,15.8519198049,15.851944198,15.8519685907,15.851992983,15.8520173749,15.8520417664,15.8520661575,15.8520905481,15.8521149384, +15.8521393282,15.8521637176,15.8521881066,15.8522124952,15.8522368834,15.8522612712,15.8522856585,15.8523100455,15.852334432,15.8523588181,15.8523832038,15.8524075891,15.852431974,15.8524563585,15.8524807425,15.8525051262, +15.8525295094,15.8525538922,15.8525782746,15.8526026566,15.8526270382,15.8526514194,15.8526758002,15.8527001805,15.8527245604,15.85274894,15.8527733191,15.8527976978,15.8528220761,15.852846454,15.8528708314,15.8528952085, +15.8529195851,15.8529439614,15.8529683372,15.8529927126,15.8530170876,15.8530414622,15.8530658363,15.8530902101,15.8531145834,15.8531389564,15.8531633289,15.853187701,15.8532120727,15.853236444,15.8532608149,15.8532851853, +15.8533095554,15.853333925,15.8533582943,15.8533826631,15.8534070315,15.8534313995,15.8534557671,15.8534801343,15.853504501,15.8535288674,15.8535532333,15.8535775988,15.853601964,15.8536263287,15.8536506929,15.8536750568, +15.8536994203,15.8537237834,15.853748146,15.8537725082,15.8537968701,15.8538212315,15.8538455925,15.8538699531,15.8538943132,15.853918673,15.8539430324,15.8539673913,15.8539917498,15.854016108,15.8540404657,15.854064823, +15.8540891799,15.8541135363,15.8541378924,15.8541622481,15.8541866033,15.8542109581,15.8542353126,15.8542596666,15.8542840202,15.8543083734,15.8543327261,15.8543570785,15.8543814305,15.854405782,15.8544301331,15.8544544839, +15.8544788342,15.8545031841,15.8545275336,15.8545518826,15.8545762313,15.8546005796,15.8546249274,15.8546492748,15.8546736219,15.8546979685,15.8547223147,15.8547466605,15.8547710058,15.8547953508,15.8548196954,15.8548440395, +15.8548683833,15.8548927266,15.8549170695,15.854941412,15.8549657541,15.8549900958,15.8550144371,15.8550387779,15.8550631184,15.8550874584,15.855111798,15.8551361373,15.8551604761,15.8551848145,15.8552091525,15.85523349, +15.8552578272,15.8552821639,15.8553065003,15.8553308362,15.8553551718,15.8553795069,15.8554038416,15.8554281759,15.8554525097,15.8554768432,15.8555011763,15.8555255089,15.8555498412,15.855574173,15.8555985044,15.8556228354, +15.855647166,15.8556714962,15.855695826,15.8557201554,15.8557444843,15.8557688129,15.855793141,15.8558174687,15.855841796,15.855866123,15.8558904495,15.8559147755,15.8559391012,15.8559634265,15.8559877513,15.8560120758, +15.8560363998,15.8560607234,15.8560850467,15.8561093695,15.8561336919,15.8561580138,15.8561823354,15.8562066566,15.8562309773,15.8562552977,15.8562796176,15.8563039371,15.8563282563,15.856352575,15.8563768933,15.8564012111, +15.8564255286,15.8564498457,15.8564741623,15.8564984786,15.8565227944,15.8565471099,15.8565714249,15.8565957395,15.8566200537,15.8566443675,15.8566686808,15.8566929938,15.8567173064,15.8567416185,15.8567659303,15.8567902416, +15.8568145525,15.856838863,15.8568631731,15.8568874828,15.8569117921,15.856936101,15.8569604094,15.8569847175,15.8570090251,15.8570333323,15.8570576392,15.8570819456,15.8571062516,15.8571305572,15.8571548624,15.8571791671, +15.8572034715,15.8572277755,15.857252079,15.8572763822,15.8573006849,15.8573249872,15.8573492891,15.8573735906,15.8573978917,15.8574221924,15.8574464927,15.8574707925,15.857495092,15.857519391,15.8575436897,15.8575679879, +15.8575922857,15.8576165831,15.8576408801,15.8576651767,15.8576894729,15.8577137686,15.857738064,15.857762359,15.8577866535,15.8578109476,15.8578352414,15.8578595347,15.8578838276,15.8579081201,15.8579324122,15.8579567039, +15.8579809951,15.858005286,15.8580295764,15.8580538665,15.8580781561,15.8581024453,15.8581267342,15.8581510226,15.8581753106,15.8581995982,15.8582238853,15.8582481721,15.8582724585,15.8582967444,15.85832103,15.8583453151, +15.8583695999,15.8583938842,15.8584181681,15.8584424516,15.8584667347,15.8584910174,15.8585152996,15.8585395815,15.858563863,15.858588144,15.8586124247,15.8586367049,15.8586609847,15.8586852641,15.8587095431,15.8587338217, +15.8587580999,15.8587823777,15.8588066551,15.8588309321,15.8588552086,15.8588794848,15.8589037605,15.8589280358,15.8589523108,15.8589765853,15.8590008594,15.8590251331,15.8590494064,15.8590736792,15.8590979517,15.8591222238, +15.8591464954,15.8591707667,15.8591950375,15.8592193079,15.859243578,15.8592678476,15.8592921168,15.8593163856,15.859340654,15.8593649219,15.8593891895,15.8594134567,15.8594377234,15.8594619898,15.8594862557,15.8595105213, +15.8595347864,15.8595590511,15.8595833154,15.8596075793,15.8596318428,15.8596561059,15.8596803686,15.8597046308,15.8597288927,15.8597531541,15.8597774152,15.8598016758,15.859825936,15.8598501959,15.8598744553,15.8598987143, +15.8599229729,15.859947231,15.8599714888,15.8599957462,15.8600200032,15.8600442597,15.8600685159,15.8600927716,15.8601170269,15.8601412819,15.8601655364,15.8601897905,15.8602140442,15.8602382975,15.8602625504,15.8602868028, +15.8603110549,15.8603353066,15.8603595578,15.8603838087,15.8604080591,15.8604323092,15.8604565588,15.860480808,15.8605050568,15.8605293052,15.8605535532,15.8605778008,15.860602048,15.8606262947,15.8606505411,15.8606747871, +15.8606990326,15.8607232778,15.8607475225,15.8607717668,15.8607960107,15.8608202542,15.8608444974,15.86086874,15.8608929823,15.8609172242,15.8609414657,15.8609657068,15.8609899474,15.8610141877,15.8610384275,15.861062667, +15.861086906,15.8611111446,15.8611353828,15.8611596206,15.861183858,15.861208095,15.8612323316,15.8612565678,15.8612808036,15.861305039,15.8613292739,15.8613535085,15.8613777426,15.8614019764,15.8614262097,15.8614504426, +15.8614746751,15.8614989072,15.8615231389,15.8615473702,15.8615716011,15.8615958316,15.8616200617,15.8616442914,15.8616685206,15.8616927495,15.8617169779,15.861741206,15.8617654336,15.8617896608,15.8618138876,15.8618381141, +15.8618623401,15.8618865657,15.8619107909,15.8619350156,15.86195924,15.861983464,15.8620076876,15.8620319107,15.8620561335,15.8620803558,15.8621045778,15.8621287993,15.8621530204,15.8621772411,15.8622014614,15.8622256814, +15.8622499009,15.8622741199,15.8622983386,15.8623225569,15.8623467748,15.8623709923,15.8623952093,15.862419426,15.8624436422,15.8624678581,15.8624920735,15.8625162885,15.8625405031,15.8625647174,15.8625889312,15.8626131446, +15.8626373576,15.8626615701,15.8626857823,15.8627099941,15.8627342055,15.8627584164,15.862782627,15.8628068372,15.8628310469,15.8628552562,15.8628794652,15.8629036737,15.8629278818,15.8629520895,15.8629762968,15.8630005037, +15.8630247102,15.8630489163,15.863073122,15.8630973273,15.8631215322,15.8631457366,15.8631699407,15.8631941443,15.8632183476,15.8632425504,15.8632667529,15.8632909549,15.8633151565,15.8633393577,15.8633635585,15.8633877589, +15.8634119589,15.8634361585,15.8634603577,15.8634845565,15.8635087549,15.8635329528,15.8635571504,15.8635813476,15.8636055443,15.8636297407,15.8636539366,15.8636781321,15.8637023273,15.863726522,15.8637507163,15.8637749102, +15.8637991037,15.8638232968,15.8638474895,15.8638716818,15.8638958737,15.8639200652,15.8639442562,15.8639684469,15.8639926372,15.864016827,15.8640410165,15.8640652055,15.8640893942,15.8641135824,15.8641377702,15.8641619576, +15.8641861447,15.8642103313,15.8642345175,15.8642587033,15.8642828887,15.8643070737,15.8643312582,15.8643554424,15.8643796262,15.8644038096,15.8644279925,15.8644521751,15.8644763572,15.864500539,15.8645247203,15.8645489012, +15.8645730818,15.8645972619,15.8646214416,15.8646456209,15.8646697998,15.8646939783,15.8647181564,15.8647423341,15.8647665114,15.8647906883,15.8648148648,15.8648390409,15.8648632165,15.8648873918,15.8649115666,15.8649357411, +15.8649599151,15.8649840888,15.865008262,15.8650324349,15.8650566073,15.8650807793,15.8651049509,15.8651291221,15.8651532929,15.8651774633,15.8652016333,15.8652258029,15.8652499721,15.8652741409,15.8652983093,15.8653224772, +15.8653466448,15.865370812,15.8653949787,15.8654191451,15.865443311,15.8654674766,15.8654916417,15.8655158065,15.8655399708,15.8655641347,15.8655882982,15.8656124613,15.8656366241,15.8656607864,15.8656849483,15.8657091098, +15.8657332709,15.8657574315,15.8657815918,15.8658057517,15.8658299112,15.8658540702,15.8658782289,15.8659023872,15.865926545,15.8659507025,15.8659748595,15.8659990162,15.8660231724,15.8660473282,15.8660714837,15.8660956387, +15.8661197933,15.8661439475,15.8661681013,15.8661922547,15.8662164077,15.8662405603,15.8662647125,15.8662888643,15.8663130157,15.8663371667,15.8663613173,15.8663854674,15.8664096172,15.8664337666,15.8664579155,15.8664820641, +15.8665062122,15.86653036,15.8665545073,15.8665786543,15.8666028008,15.8666269469,15.8666510926,15.866675238,15.8666993829,15.8667235274,15.8667476715,15.8667718152,15.8667959585,15.8668201014,15.8668442439,15.866868386, +15.8668925277,15.866916669,15.8669408098,15.8669649503,15.8669890904,15.86701323,15.8670373693,15.8670615082,15.8670856466,15.8671097847,15.8671339223,15.8671580596,15.8671821964,15.8672063328,15.8672304689,15.8672546045, +15.8672787397,15.8673028745,15.8673270089,15.867351143,15.8673752766,15.8673994098,15.8674235426,15.867447675,15.867471807,15.8674959386,15.8675200697,15.8675442005,15.8675683309,15.8675924609,15.8676165904,15.8676407196, +15.8676648484,15.8676889767,15.8677131047,15.8677372323,15.8677613594,15.8677854862,15.8678096125,15.8678337384,15.867857864,15.8678819891,15.8679061138,15.8679302382,15.8679543621,15.8679784856,15.8680026087,15.8680267314, +15.8680508537,15.8680749757,15.8680990972,15.8681232183,15.868147339,15.8681714592,15.8681955791,15.8682196986,15.8682438177,15.8682679364,15.8682920547,15.8683161725,15.86834029,15.8683644071,15.8683885237,15.86841264, +15.8684367559,15.8684608713,15.8684849864,15.868509101,15.8685332153,15.8685573291,15.8685814425,15.8686055556,15.8686296682,15.8686537804,15.8686778923,15.8687020037,15.8687261147,15.8687502253,15.8687743356,15.8687984454, +15.8688225548,15.8688466638,15.8688707724,15.8688948806,15.8689189884,15.8689430958,15.8689672028,15.8689913094,15.8690154156,15.8690395213,15.8690636267,15.8690877317,15.8691118363,15.8691359404,15.8691600442,15.8691841476, +15.8692082506,15.8692323531,15.8692564553,15.869280557,15.8693046584,15.8693287593,15.8693528599,15.86937696,15.8694010598,15.8694251591,15.8694492581,15.8694733566,15.8694974547,15.8695215525,15.8695456498,15.8695697467, +15.8695938432,15.8696179394,15.8696420351,15.8696661304,15.8696902253,15.8697143198,15.8697384139,15.8697625076,15.8697866009,15.8698106938,15.8698347863,15.8698588784,15.8698829701,15.8699070614,15.8699311523,15.8699552428, +15.8699793329,15.8700034226,15.8700275119,15.8700516007,15.8700756892,15.8700997773,15.870123865,15.8701479522,15.8701720391,15.8701961256,15.8702202116,15.8702442973,15.8702683826,15.8702924674,15.8703165519,15.8703406359, +15.8703647196,15.8703888028,15.8704128857,15.8704369681,15.8704610502,15.8704851318,15.8705092131,15.8705332939,15.8705573743,15.8705814544,15.870605534,15.8706296132,15.8706536921,15.8706777705,15.8707018485,15.8707259261, +15.8707500033,15.8707740802,15.8707981566,15.8708222326,15.8708463082,15.8708703834,15.8708944582,15.8709185326,15.8709426066,15.8709666803,15.8709907535,15.8710148263,15.8710388987,15.8710629707,15.8710870423,15.8711111134, +15.8711351842,15.8711592546,15.8711833246,15.8712073942,15.8712314634,15.8712555322,15.8712796006,15.8713036686,15.8713277361,15.8713518033,15.8713758701,15.8713999365,15.8714240024,15.871448068,15.8714721332,15.871496198, +15.8715202623,15.8715443263,15.8715683899,15.871592453,15.8716165158,15.8716405782,15.8716646401,15.8716887017,15.8717127628,15.8717368236,15.8717608839,15.8717849439,15.8718090035,15.8718330626,15.8718571214,15.8718811797, +15.8719052377,15.8719292952,15.8719533524,15.8719774091,15.8720014654,15.8720255214,15.8720495769,15.8720736321,15.8720976868,15.8721217411,15.8721457951,15.8721698486,15.8721939018,15.8722179545,15.8722420068,15.8722660588, +15.8722901103,15.8723141614,15.8723382121,15.8723622625,15.8723863124,15.8724103619,15.8724344111,15.8724584598,15.8724825081,15.872506556,15.8725306036,15.8725546507,15.8725786974,15.8726027437,15.8726267896,15.8726508352, +15.8726748803,15.872698925,15.8727229693,15.8727470132,15.8727710567,15.8727950998,15.8728191426,15.8728431849,15.8728672268,15.8728912683,15.8729153094,15.8729393501,15.8729633904,15.8729874303,15.8730114698,15.873035509, +15.8730595477,15.873083586,15.8731076239,15.8731316614,15.8731556985,15.8731797352,15.8732037715,15.8732278074,15.8732518429,15.873275878,15.8732999127,15.873323947,15.8733479809,15.8733720144,15.8733960475,15.8734200802, +15.8734441125,15.8734681444,15.8734921759,15.873516207,15.8735402377,15.873564268,15.8735882979,15.8736123274,15.8736363565,15.8736603852,15.8736844135,15.8737084414,15.8737324689,15.873756496,15.8737805227,15.873804549, +15.8738285749,15.8738526004,15.8738766255,15.8739006502,15.8739246745,15.8739486984,15.8739727219,15.873996745,15.8740207677,15.87404479,15.8740688119,15.8740928333,15.8741168544,15.8741408751,15.8741648954,15.8741889153, +15.8742129348,15.8742369539,15.8742609726,15.8742849909,15.8743090088,15.8743330263,15.8743570434,15.8743810601,15.8744050764,15.8744290923,15.8744531078,15.8744771229,15.8745011376,15.8745251519,15.8745491658,15.8745731793, +15.8745971924,15.8746212051,15.8746452174,15.8746692293,15.8746932408,15.8747172519,15.8747412626,15.8747652729,15.8747892828,15.8748132923,15.8748373014,15.8748613101,15.8748853184,15.8749093263,15.8749333338,15.8749573409, +15.8749813477,15.875005354,15.8750293599,15.8750533654,15.8750773705,15.8751013752,15.8751253795,15.8751493834,15.8751733869,15.87519739,15.8752213928,15.8752453951,15.875269397,15.8752933985,15.8753173996,15.8753414003, +15.8753654006,15.8753894006,15.8754134001,15.8754373992,15.8754613979,15.8754853962,15.8755093942,15.8755333917,15.8755573888,15.8755813855,15.8756053819,15.8756293778,15.8756533733,15.8756773684,15.8757013632,15.8757253575, +15.8757493514,15.875773345,15.8757973381,15.8758213308,15.8758453232,15.8758693151,15.8758933066,15.8759172978,15.8759412885,15.8759652788,15.8759892688,15.8760132583,15.8760372475,15.8760612362,15.8760852245,15.8761092125, +15.8761332,15.8761571872,15.8761811739,15.8762051603,15.8762291462,15.8762531318,15.876277117,15.8763011017,15.8763250861,15.87634907,15.8763730536,15.8763970367,15.8764210195,15.8764450019,15.8764689838,15.8764929654, +15.8765169466,15.8765409273,15.8765649077,15.8765888877,15.8766128672,15.8766368464,15.8766608252,15.8766848036,15.8767087816,15.8767327591,15.8767567363,15.8767807131,15.8768046895,15.8768286655,15.8768526411,15.8768766162, +15.876900591,15.8769245654,15.8769485394,15.876972513,15.8769964862,15.877020459,15.8770444314,15.8770684034,15.877092375,15.8771163462,15.877140317,15.8771642875,15.8771882575,15.8772122271,15.8772361963,15.8772601651, +15.8772841335,15.8773081015,15.8773320692,15.8773560364,15.8773800032,15.8774039696,15.8774279357,15.8774519013,15.8774758665,15.8774998314,15.8775237958,15.8775477598,15.8775717235,15.8775956867,15.8776196496,15.877643612, +15.8776675741,15.8776915357,15.877715497,15.8777394578,15.8777634183,15.8777873783,15.877811338,15.8778352973,15.8778592561,15.8778832146,15.8779071727,15.8779311303,15.8779550876,15.8779790445,15.878003001,15.878026957, +15.8780509127,15.878074868,15.8780988229,15.8781227774,15.8781467315,15.8781706852,15.8781946385,15.8782185914,15.8782425439,15.878266496,15.8782904477,15.878314399,15.8783383499,15.8783623004,15.8783862505,15.8784102002, +15.8784341496,15.8784580985,15.878482047,15.8785059951,15.8785299429,15.8785538902,15.8785778371,15.8786017837,15.8786257298,15.8786496755,15.8786736209,15.8786975658,15.8787215104,15.8787454545,15.8787693983,15.8787933417, +15.8788172846,15.8788412272,15.8788651693,15.8788891111,15.8789130525,15.8789369935,15.878960934,15.8789848742,15.879008814,15.8790327534,15.8790566924,15.879080631,15.8791045691,15.8791285069,15.8791524443,15.8791763813, +15.8792003179,15.8792242542,15.87924819,15.8792721254,15.8792960604,15.879319995,15.8793439292,15.8793678631,15.8793917965,15.8794157295,15.8794396621,15.8794635944,15.8794875262,15.8795114577,15.8795353887,15.8795593194, +15.8795832496,15.8796071795,15.8796311089,15.879655038,15.8796789666,15.8797028949,15.8797268228,15.8797507503,15.8797746773,15.879798604,15.8798225303,15.8798464562,15.8798703817,15.8798943068,15.8799182315,15.8799421558, +15.8799660797,15.8799900032,15.8800139263,15.880037849,15.8800617713,15.8800856932,15.8801096147,15.8801335359,15.8801574566,15.8801813769,15.8802052969,15.8802292164,15.8802531356,15.8802770543,15.8803009726,15.8803248906, +15.8803488082,15.8803727253,15.8803966421,15.8804205584,15.8804444744,15.88046839,15.8804923052,15.8805162199,15.8805401343,15.8805640483,15.8805879619,15.8806118751,15.8806357879,15.8806597003,15.8806836123,15.8807075239, +15.8807314351,15.880755346,15.8807792564,15.8808031664,15.880827076,15.8808509853,15.8808748941,15.8808988025,15.8809227106,15.8809466182,15.8809705255,15.8809944323,15.8810183388,15.8810422449,15.8810661505,15.8810900558, +15.8811139607,15.8811378652,15.8811617692,15.8811856729,15.8812095762,15.8812334791,15.8812573816,15.8812812837,15.8813051854,15.8813290867,15.8813529876,15.8813768882,15.8814007883,15.881424688,15.8814485873,15.8814724863, +15.8814963848,15.881520283,15.8815441807,15.8815680781,15.881591975,15.8816158716,15.8816397677,15.8816636635,15.8816875589,15.8817114538,15.8817353484,15.8817592426,15.8817831364,15.8818070298,15.8818309228,15.8818548154, +15.8818787076,15.8819025994,15.8819264908,15.8819503818,15.8819742725,15.8819981627,15.8820220525,15.882045942,15.882069831,15.8820937197,15.8821176079,15.8821414958,15.8821653832,15.8821892703,15.8822131569,15.8822370432, +15.8822609291,15.8822848146,15.8823086997,15.8823325844,15.8823564687,15.8823803526,15.8824042361,15.8824281192,15.8824520019,15.8824758842,15.8824997661,15.8825236477,15.8825475288,15.8825714095,15.8825952899,15.8826191698, +15.8826430494,15.8826669285,15.8826908073,15.8827146856,15.8827385636,15.8827624412,15.8827863184,15.8828101952,15.8828340715,15.8828579475,15.8828818231,15.8829056983,15.8829295732,15.8829534476,15.8829773216,15.8830011952, +15.8830250684,15.8830489413,15.8830728137,15.8830966858,15.8831205574,15.8831444287,15.8831682995,15.88319217,15.8832160401,15.8832399097,15.883263779,15.8832876479,15.8833115164,15.8833353845,15.8833592522,15.8833831195, +15.8834069864,15.8834308529,15.883454719,15.8834785847,15.8835024501,15.883526315,15.8835501796,15.8835740437,15.8835979075,15.8836217708,15.8836456338,15.8836694963,15.8836933585,15.8837172203,15.8837410817,15.8837649427, +15.8837888033,15.8838126635,15.8838365233,15.8838603827,15.8838842417,15.8839081003,15.8839319585,15.8839558164,15.8839796738,15.8840035309,15.8840273875,15.8840512438,15.8840750996,15.8840989551,15.8841228102,15.8841466648, +15.8841705191,15.884194373,15.8842182265,15.8842420796,15.8842659323,15.8842897846,15.8843136365,15.884337488,15.8843613392,15.8843851899,15.8844090402,15.8844328902,15.8844567397,15.8844805889,15.8845044376,15.884528286, +15.884552134,15.8845759816,15.8845998288,15.8846236755,15.8846475219,15.8846713679,15.8846952135,15.8847190588,15.8847429036,15.884766748,15.884790592,15.8848144357,15.8848382789,15.8848621218,15.8848859642,15.8849098063, +15.8849336479,15.8849574892,15.8849813301,15.8850051706,15.8850290107,15.8850528504,15.8850766897,15.8851005286,15.8851243671,15.8851482052,15.885172043,15.8851958803,15.8852197172,15.8852435538,15.8852673899,15.8852912257, +15.885315061,15.885338896,15.8853627306,15.8853865648,15.8854103986,15.885434232,15.885458065,15.8854818976,15.8855057298,15.8855295616,15.885553393,15.8855772241,15.8856010547,15.885624885,15.8856487148,15.8856725443, +15.8856963733,15.885720202,15.8857440303,15.8857678582,15.8857916857,15.8858155128,15.8858393395,15.8858631658,15.8858869917,15.8859108172,15.8859346424,15.8859584671,15.8859822914,15.8860061154,15.8860299389,15.8860537621, +15.8860775849,15.8861014072,15.8861252292,15.8861490508,15.886172872,15.8861966928,15.8862205132,15.8862443332,15.8862681529,15.8862919721,15.8863157909,15.8863396094,15.8863634274,15.8863872451,15.8864110624,15.8864348792, +15.8864586957,15.8864825118,15.8865063275,15.8865301428,15.8865539577,15.8865777722,15.8866015863,15.8866254,15.8866492134,15.8866730263,15.8866968389,15.886720651,15.8867444628,15.8867682741,15.8867920851,15.8868158957, +15.8868397059,15.8868635157,15.8868873251,15.8869111341,15.8869349427,15.8869587509,15.8869825588,15.8870063662,15.8870301732,15.8870539799,15.8870777862,15.887101592,15.8871253975,15.8871492026,15.8871730073,15.8871968116, +15.8872206155,15.887244419,15.8872682221,15.8872920248,15.8873158272,15.8873396291,15.8873634306,15.8873872318,15.8874110326,15.8874348329,15.8874586329,15.8874824325,15.8875062317,15.8875300305,15.8875538289,15.8875776269, +15.8876014245,15.8876252217,15.8876490186,15.887672815,15.8876966111,15.8877204067,15.887744202,15.8877679969,15.8877917913,15.8878155854,15.8878393791,15.8878631724,15.8878869653,15.8879107579,15.88793455,15.8879583417, +15.8879821331,15.888005924,15.8880297146,15.8880535047,15.8880772945,15.8881010839,15.8881248729,15.8881486615,15.8881724497,15.8881962375,15.8882200249,15.8882438119,15.8882675986,15.8882913848,15.8883151706,15.8883389561, +15.8883627412,15.8883865258,15.8884103101,15.888434094,15.8884578775,15.8884816606,15.8885054433,15.8885292257,15.8885530076,15.8885767891,15.8886005703,15.888624351,15.8886481314,15.8886719113,15.8886956909,15.8887194701, +15.8887432489,15.8887670273,15.8887908053,15.8888145829,15.8888383602,15.888862137,15.8888859134,15.8889096895,15.8889334651,15.8889572404,15.8889810153,15.8890047898,15.8890285638,15.8890523375,15.8890761109,15.8890998838, +15.8891236563,15.8891474284,15.8891712002,15.8891949715,15.8892187425,15.889242513,15.8892662832,15.889290053,15.8893138224,15.8893375914,15.88936136,15.8893851282,15.889408896,15.8894326635,15.8894564305,15.8894801972, +15.8895039634,15.8895277293,15.8895514948,15.8895752598,15.8895990245,15.8896227888,15.8896465527,15.8896703163,15.8896940794,15.8897178421,15.8897416045,15.8897653664,15.889789128,15.8898128891,15.8898366499,15.8898604103, +15.8898841703,15.8899079299,15.8899316891,15.8899554479,15.8899792064,15.8900029644,15.8900267221,15.8900504793,15.8900742362,15.8900979927,15.8901217487,15.8901455044,15.8901692597,15.8901930146,15.8902167692,15.8902405233, +15.890264277,15.8902880304,15.8903117833,15.8903355359,15.8903592881,15.8903830398,15.8904067912,15.8904305422,15.8904542928,15.890478043,15.8905017929,15.8905255423,15.8905492914,15.89057304,15.8905967883,15.8906205361, +15.8906442836,15.8906680307,15.8906917774,15.8907155237,15.8907392696,15.8907630152,15.8907867603,15.890810505,15.8908342494,15.8908579934,15.8908817369,15.8909054801,15.8909292229,15.8909529653,15.8909767073,15.8910004489, +15.8910241901,15.891047931,15.8910716714,15.8910954115,15.8911191512,15.8911428904,15.8911666293,15.8911903678,15.8912141059,15.8912378436,15.8912615809,15.8912853179,15.8913090544,15.8913327906,15.8913565263,15.8913802617, +15.8914039967,15.8914277313,15.8914514654,15.8914751993,15.8914989327,15.8915226657,15.8915463983,15.8915701306,15.8915938624,15.8916175939,15.891641325,15.8916650557,15.8916887859,15.8917125159,15.8917362454,15.8917599745, +15.8917837032,15.8918074316,15.8918311595,15.8918548871,15.8918786142,15.891902341,15.8919260674,15.8919497934,15.891973519,15.8919972442,15.8920209691,15.8920446935,15.8920684176,15.8920921412,15.8921158645,15.8921395874, +15.8921633099,15.892187032,15.8922107537,15.892234475,15.8922581959,15.8922819165,15.8923056366,15.8923293564,15.8923530757,15.8923767947,15.8924005133,15.8924242315,15.8924479493,15.8924716667,15.8924953838,15.8925191004, +15.8925428166,15.8925665325,15.892590248,15.8926139631,15.8926376777,15.892661392,15.892685106,15.8927088195,15.8927325326,15.8927562454,15.8927799577,15.8928036697,15.8928273812,15.8928510924,15.8928748032,15.8928985136, +15.8929222236,15.8929459333,15.8929696425,15.8929933513,15.8930170598,15.8930407679,15.8930644755,15.8930881828,15.8931118897,15.8931355962,15.8931593023,15.8931830081,15.8932067134,15.8932304184,15.8932541229,15.8932778271, +15.8933015309,15.8933252343,15.8933489373,15.8933726399,15.8933963421,15.8934200439,15.8934437454,15.8934674464,15.8934911471,15.8935148474,15.8935385472,15.8935622467,15.8935859459,15.8936096446,15.8936333429,15.8936570408, +15.8936807384,15.8937044356,15.8937281323,15.8937518287,15.8937755247,15.8937992203,15.8938229155,15.8938466103,15.8938703048,15.8938939988,15.8939176925,15.8939413858,15.8939650786,15.8939887711,15.8940124632,15.8940361549, +15.8940598463,15.8940835372,15.8941072278,15.8941309179,15.8941546077,15.8941782971,15.8942019861,15.8942256747,15.8942493629,15.8942730507,15.8942967381,15.8943204252,15.8943441118,15.8943677981,15.894391484,15.8944151695, +15.8944388546,15.8944625393,15.8944862236,15.8945099075,15.8945335911,15.8945572742,15.894580957,15.8946046394,15.8946283214,15.894652003,15.8946756842,15.894699365,15.8947230455,15.8947467255,15.8947704052,15.8947940844, +15.8948177633,15.8948414418,15.8948651199,15.8948887976,15.8949124749,15.8949361519,15.8949598284,15.8949835046,15.8950071804,15.8950308558,15.8950545307,15.8950782054,15.8951018796,15.8951255534,15.8951492268,15.8951728999, +15.8951965726,15.8952202448,15.8952439167,15.8952675882,15.8952912593,15.8953149301,15.8953386004,15.8953622703,15.8953859399,15.8954096091,15.8954332778,15.8954569462,15.8954806142,15.8955042819,15.8955279491,15.8955516159, +15.8955752824,15.8955989484,15.8956226141,15.8956462794,15.8956699443,15.8956936088,15.8957172729,15.8957409367,15.8957646,15.895788263,15.8958119255,15.8958355877,15.8958592495,15.8958829109,15.8959065719,15.8959302326, +15.8959538928,15.8959775527,15.8960012121,15.8960248712,15.8960485299,15.8960721882,15.8960958461,15.8961195036,15.8961431608,15.8961668175,15.8961904739,15.8962141299,15.8962377854,15.8962614406,15.8962850955,15.8963087499, +15.8963324039,15.8963560576,15.8963797108,15.8964033637,15.8964270162,15.8964506683,15.89647432,15.8964979713,15.8965216222,15.8965452728,15.8965689229,15.8965925727,15.8966162221,15.8966398711,15.8966635197,15.8966871679, +15.8967108157,15.8967344632,15.8967581102,15.8967817569,15.8968054032,15.8968290491,15.8968526946,15.8968763397,15.8968999844,15.8969236288,15.8969472727,15.8969709163,15.8969945595,15.8970182023,15.8970418447,15.8970654867, +15.8970891283,15.8971127696,15.8971364104,15.8971600509,15.897183691,15.8972073307,15.89723097,15.8972546089,15.8972782474,15.8973018856,15.8973255233,15.8973491607,15.8973727977,15.8973964343,15.8974200705,15.8974437063, +15.8974673417,15.8974909768,15.8975146114,15.8975382457,15.8975618796,15.8975855131,15.8976091462,15.8976327789,15.8976564113,15.8976800432,15.8977036748,15.8977273059,15.8977509367,15.8977745671,15.8977981971,15.8978218268, +15.897845456,15.8978690849,15.8978927133,15.8979163414,15.8979399691,15.8979635964,15.8979872233,15.8980108498,15.898034476,15.8980581017,15.8980817271,15.8981053521,15.8981289767,15.8981526009,15.8981762247,15.8981998482, +15.8982234712,15.8982470939,15.8982707162,15.898294338,15.8983179595,15.8983415807,15.8983652014,15.8983888217,15.8984124417,15.8984360613,15.8984596804,15.8984832992,15.8985069176,15.8985305357,15.8985541533,15.8985777705, +15.8986013874,15.8986250039,15.89864862,15.8986722357,15.898695851,15.8987194659,15.8987430805,15.8987666946,15.8987903084,15.8988139218,15.8988375348,15.8988611474,15.8988847596,15.8989083714,15.8989319829,15.8989555939, +15.8989792046,15.8990028149,15.8990264248,15.8990500343,15.8990736435,15.8990972522,15.8991208606,15.8991444685,15.8991680761,15.8991916833,15.8992152901,15.8992388966,15.8992625026,15.8992861083,15.8993097135,15.8993333184, +15.8993569229,15.899380527,15.8994041308,15.8994277341,15.899451337,15.8994749396,15.8994985418,15.8995221436,15.899545745,15.899569346,15.8995929467,15.8996165469,15.8996401468,15.8996637462,15.8996873453,15.899710944, +15.8997345424,15.8997581403,15.8997817378,15.899805335,15.8998289318,15.8998525282,15.8998761242,15.8998997198,15.899923315,15.8999469099,15.8999705043,15.8999940984,15.9000176921,15.9000412854,15.9000648783,15.9000884708, +15.900112063,15.9001356547,15.9001592461,15.9001828371,15.9002064277,15.9002300179,15.9002536077,15.9002771972,15.9003007862,15.9003243749,15.9003479632,15.9003715511,15.9003951386,15.9004187258,15.9004423125,15.9004658989, +15.9004894848,15.9005130704,15.9005366556,15.9005602404,15.9005838249,15.9006074089,15.9006309926,15.9006545759,15.9006781587,15.9007017412,15.9007253234,15.9007489051,15.9007724864,15.9007960674,15.900819648,15.9008432282, +15.900866808,15.9008903874,15.9009139664,15.9009375451,15.9009611233,15.9009847012,15.9010082787,15.9010318558,15.9010554326,15.9010790089,15.9011025848,15.9011261604,15.9011497356,15.9011733104,15.9011968848,15.9012204588, +15.9012440325,15.9012676057,15.9012911786,15.9013147511,15.9013383232,15.9013618949,15.9013854662,15.9014090372,15.9014326077,15.9014561779,15.9014797477,15.9015033171,15.9015268861,15.9015504548,15.901574023,15.9015975909, +15.9016211583,15.9016447254,15.9016682922,15.9016918585,15.9017154244,15.90173899,15.9017625551,15.9017861199,15.9018096843,15.9018332483,15.901856812,15.9018803752,15.9019039381,15.9019275006,15.9019510626,15.9019746243, +15.9019981857,15.9020217466,15.9020453072,15.9020688673,15.9020924271,15.9021159865,15.9021395455,15.9021631041,15.9021866624,15.9022102202,15.9022337777,15.9022573348,15.9022808915,15.9023044478,15.9023280038,15.9023515593, +15.9023751145,15.9023986693,15.9024222237,15.9024457777,15.9024693313,15.9024928845,15.9025164374,15.9025399899,15.902563542,15.9025870937,15.902610645,15.9026341959,15.9026577465,15.9026812967,15.9027048464,15.9027283958, +15.9027519449,15.9027754935,15.9027990417,15.9028225896,15.9028461371,15.9028696842,15.9028932309,15.9029167772,15.9029403231,15.9029638687,15.9029874139,15.9030109586,15.903034503,15.9030580471,15.9030815907,15.9031051339, +15.9031286768,15.9031522193,15.9031757614,15.9031993031,15.9032228444,15.9032463854,15.9032699259,15.9032934661,15.9033170059,15.9033405453,15.9033640843,15.903387623,15.9034111612,15.9034346991,15.9034582366,15.9034817737, +15.9035053104,15.9035288468,15.9035523827,15.9035759183,15.9035994535,15.9036229883,15.9036465227,15.9036700567,15.9036935904,15.9037171236,15.9037406565,15.903764189,15.9037877211,15.9038112529,15.9038347842,15.9038583152, +15.9038818457,15.9039053759,15.9039289057,15.9039524352,15.9039759642,15.9039994929,15.9040230211,15.904046549,15.9040700765,15.9040936037,15.9041171304,15.9041406568,15.9041641827,15.9041877083,15.9042112335,15.9042347584, +15.9042582828,15.9042818069,15.9043053305,15.9043288538,15.9043523767,15.9043758992,15.9043994214,15.9044229431,15.9044464645,15.9044699855,15.9044935061,15.9045170263,15.9045405462,15.9045640656,15.9045875847,15.9046111034, +15.9046346217,15.9046581396,15.9046816571,15.9047051743,15.904728691,15.9047522074,15.9047757234,15.9047992391,15.9048227543,15.9048462691,15.9048697836,15.9048932977,15.9049168114,15.9049403247,15.9049638377,15.9049873502, +15.9050108624,15.9050343742,15.9050578856,15.9050813966,15.9051049072,15.9051284175,15.9051519274,15.9051754369,15.905198946,15.9052224547,15.905245963,15.905269471,15.9052929786,15.9053164857,15.9053399926,15.905363499, +15.905387005,15.9054105107,15.905434016,15.9054575208,15.9054810254,15.9055045295,15.9055280332,15.9055515366,15.9055750396,15.9055985422,15.9056220444,15.9056455462,15.9056690476,15.9056925487,15.9057160494,15.9057395497, +15.9057630496,15.9057865491,15.9058100483,15.9058335471,15.9058570454,15.9058805434,15.9059040411,15.9059275383,15.9059510351,15.9059745316,15.9059980277,15.9060215234,15.9060450187,15.9060685137,15.9060920082,15.9061155024, +15.9061389962,15.9061624896,15.9061859826,15.9062094753,15.9062329675,15.9062564594,15.9062799509,15.906303442,15.9063269328,15.9063504231,15.9063739131,15.9063974027,15.9064208919,15.9064443807,15.9064678691,15.9064913572, +15.9065148448,15.9065383321,15.906561819,15.9065853056,15.9066087917,15.9066322775,15.9066557629,15.9066792478,15.9067027325,15.9067262167,15.9067497005,15.906773184,15.9067966671,15.9068201498,15.9068436321,15.9068671141, +15.9068905956,15.9069140768,15.9069375576,15.906961038,15.906984518,15.9070079977,15.9070314769,15.9070549558,15.9070784343,15.9071019124,15.9071253901,15.9071488675,15.9071723445,15.9071958211,15.9072192973,15.9072427731, +15.9072662485,15.9072897236,15.9073131983,15.9073366726,15.9073601465,15.90738362,15.9074070932,15.9074305659,15.9074540383,15.9074775103,15.9075009819,15.9075244532,15.907547924,15.9075713945,15.9075948646,15.9076183343, +15.9076418037,15.9076652726,15.9076887412,15.9077122094,15.9077356772,15.9077591446,15.9077826116,15.9078060783,15.9078295446,15.9078530105,15.907876476,15.9078999411,15.9079234059,15.9079468702,15.9079703342,15.9079937978, +15.9080172611,15.9080407239,15.9080641864,15.9080876484,15.9081111101,15.9081345715,15.9081580324,15.908181493,15.9082049531,15.9082284129,15.9082518723,15.9082753314,15.90829879,15.9083222483,15.9083457062,15.9083691637, +15.9083926208,15.9084160775,15.9084395339,15.9084629898,15.9084864454,15.9085099007,15.9085333555,15.9085568099,15.908580264,15.9086037177,15.908627171,15.9086506239,15.9086740765,15.9086975286,15.9087209804,15.9087444318, +15.9087678828,15.9087913335,15.9088147837,15.9088382336,15.9088616831,15.9088851322,15.908908581,15.9089320293,15.9089554773,15.9089789249,15.9090023721,15.9090258189,15.9090492654,15.9090727114,15.9090961571,15.9091196024, +15.9091430473,15.9091664919,15.909189936,15.9092133798,15.9092368232,15.9092602662,15.9092837089,15.9093071511,15.909330593,15.9093540345,15.9093774756,15.9094009163,15.9094243567,15.9094477967,15.9094712363,15.9094946755, +15.9095181143,15.9095415527,15.9095649908,15.9095884285,15.9096118658,15.9096353027,15.9096587393,15.9096821754,15.9097056112,15.9097290466,15.9097524816,15.9097759163,15.9097993505,15.9098227844,15.9098462179,15.909869651, +15.9098930838,15.9099165161,15.9099399481,15.9099633797,15.9099868109,15.9100102417,15.9100336722,15.9100571023,15.910080532,15.9101039613,15.9101273902,15.9101508188,15.9101742469,15.9101976747,15.9102211021,15.9102445292, +15.9102679558,15.9102913821,15.910314808,15.9103382335,15.9103616586,15.9103850834,15.9104085077,15.9104319317,15.9104553553,15.9104787785,15.9105022014,15.9105256238,15.9105490459,15.9105724676,15.910595889,15.9106193099, +15.9106427305,15.9106661507,15.9106895705,15.9107129899,15.9107364089,15.9107598276,15.9107832459,15.9108066638,15.9108300813,15.9108534984,15.9108769152,15.9109003316,15.9109237476,15.9109471632,15.9109705785,15.9109939933, +15.9110174078,15.9110408219,15.9110642356,15.911087649,15.9111110619,15.9111344745,15.9111578867,15.9111812985,15.91120471,15.911228121,15.9112515317,15.911274942,15.9112983519,15.9113217615,15.9113451707,15.9113685794, +15.9113919878,15.9114153959,15.9114388035,15.9114622108,15.9114856177,15.9115090242,15.9115324303,15.911555836,15.9115792414,15.9116026464,15.911626051,15.9116494552,15.9116728591,15.9116962625,15.9117196656,15.9117430683, +15.9117664707,15.9117898726,15.9118132742,15.9118366754,15.9118600762,15.9118834766,15.9119068767,15.9119302763,15.9119536756,15.9119770745,15.9120004731,15.9120238712,15.912047269,15.9120706664,15.9120940634,15.91211746, +15.9121408563,15.9121642522,15.9121876477,15.9122110428,15.9122344375,15.9122578319,15.9122812259,15.9123046195,15.9123280127,15.9123514055,15.912374798,15.9123981901,15.9124215818,15.9124449731,15.912468364,15.9124917546, +15.9125151448,15.9125385346,15.912561924,15.9125853131,15.9126087018,15.91263209,15.912655478,15.9126788655,15.9127022526,15.9127256394,15.9127490258,15.9127724118,15.9127957975,15.9128191827,15.9128425676,15.9128659521, +15.9128893362,15.91291272,15.9129361033,15.9129594863,15.9129828689,15.9130062512,15.913029633,15.9130530145,15.9130763956,15.9130997763,15.9131231566,15.9131465365,15.9131699161,15.9131932953,15.9132166741,15.9132400526, +15.9132634306,15.9132868083,15.9133101856,15.9133335625,15.9133569391,15.9133803152,15.913403691,15.9134270664,15.9134504415,15.9134738161,15.9134971904,15.9135205643,15.9135439378,15.9135673109,15.9135906837,15.9136140561, +15.913637428,15.9136607997,15.9136841709,15.9137075418,15.9137309123,15.9137542824,15.9137776521,15.9138010214,15.9138243904,15.913847759,15.9138711272,15.913894495,15.9139178625,15.9139412296,15.9139645963,15.9139879626, +15.9140113285,15.9140346941,15.9140580593,15.9140814241,15.9141047885,15.9141281526,15.9141515162,15.9141748795,15.9141982425,15.914221605,15.9142449671,15.9142683289,15.9142916903,15.9143150514,15.914338412,15.9143617723, +15.9143851322,15.9144084917,15.9144318508,15.9144552096,15.9144785679,15.9145019259,15.9145252835,15.9145486408,15.9145719976,15.9145953541,15.9146187102,15.914642066,15.9146654213,15.9146887763,15.9147121309,15.9147354851, +15.9147588389,15.9147821924,15.9148055455,15.9148288982,15.9148522505,15.9148756025,15.914898954,15.9149223052,15.914945656,15.9149690065,15.9149923565,15.9150157062,15.9150390555,15.9150624044,15.915085753,15.9151091012, +15.915132449,15.9151557964,15.9151791434,15.9152024901,15.9152258363,15.9152491822,15.9152725278,15.9152958729,15.9153192177,15.9153425621,15.9153659061,15.9153892497,15.915412593,15.9154359359,15.9154592784,15.9154826205, +15.9155059622,15.9155293036,15.9155526446,15.9155759852,15.9155993254,15.9156226653,15.9156460048,15.9156693439,15.9156926826,15.915716021,15.9157393589,15.9157626965,15.9157860337,15.9158093706,15.915832707,15.9158560431, +15.9158793788,15.9159027142,15.9159260491,15.9159493837,15.9159727179,15.9159960517,15.9160193851,15.9160427182,15.9160660509,15.9160893832,15.9161127151,15.9161360467,15.9161593779,15.9161827087,15.9162060391,15.9162293691, +15.9162526988,15.9162760281,15.916299357,15.9163226856,15.9163460137,15.9163693415,15.9163926689,15.9164159959,15.9164393226,15.9164626489,15.9164859748,15.9165093003,15.9165326254,15.9165559502,15.9165792746,15.9166025986, +15.9166259222,15.9166492455,15.9166725683,15.9166958909,15.916719213,15.9167425347,15.9167658561,15.9167891771,15.9168124977,15.916835818,15.9168591378,15.9168824573,15.9169057764,15.9169290951,15.9169524135,15.9169757315, +15.9169990491,15.9170223663,15.9170456832,15.9170689996,15.9170923157,15.9171156314,15.9171389468,15.9171622617,15.9171855763,15.9172088905,15.9172322044,15.9172555178,15.9172788309,15.9173021436,15.917325456,15.9173487679, +15.9173720795,15.9173953907,15.9174187015,15.9174420119,15.917465322,15.9174886317,15.917511941,15.9175352499,15.9175585585,15.9175818667,15.9176051745,15.9176284819,15.917651789,15.9176750957,15.917698402,15.9177217079, +15.9177450134,15.9177683186,15.9177916234,15.9178149278,15.9178382319,15.9178615355,15.9178848388,15.9179081417,15.9179314443,15.9179547464,15.9179780482,15.9180013496,15.9180246507,15.9180479513,15.9180712516,15.9180945515, +15.918117851,15.9181411502,15.918164449,15.9181877474,15.9182110454,15.918234343,15.9182576403,15.9182809372,15.9183042337,15.9183275298,15.9183508256,15.918374121,15.918397416,15.9184207106,15.9184440049,15.9184672988, +15.9184905923,15.9185138854,15.9185371782,15.9185604706,15.9185837626,15.9186070542,15.9186303454,15.9186536363,15.9186769268,15.9187002169,15.9187235067,15.9187467961,15.9187700851,15.9187933737,15.9188166619,15.9188399498, +15.9188632373,15.9188865244,15.9189098111,15.9189330975,15.9189563835,15.9189796691,15.9190029543,15.9190262392,15.9190495237,15.9190728078,15.9190960915,15.9191193749,15.9191426579,15.9191659405,15.9191892227,15.9192125045, +15.919235786,15.9192590671,15.9192823479,15.9193056282,15.9193289082,15.9193521878,15.919375467,15.9193987459,15.9194220243,15.9194453024,15.9194685802,15.9194918575,15.9195151345,15.9195384111,15.9195616873,15.9195849631, +15.9196082386,15.9196315137,15.9196547884,15.9196780628,15.9197013367,15.9197246103,15.9197478835,15.9197711564,15.9197944288,15.9198177009,15.9198409726,15.919864244,15.9198875149,15.9199107855,15.9199340557,15.9199573256, +15.919980595,15.9200038641,15.9200271328,15.9200504012,15.9200736691,15.9200969367,15.9201202039,15.9201434708,15.9201667372,15.9201900033,15.920213269,15.9202365344,15.9202597993,15.9202830639,15.9203063281,15.920329592, +15.9203528554,15.9203761185,15.9203993812,15.9204226435,15.9204459055,15.9204691671,15.9204924283,15.9205156891,15.9205389496,15.9205622097,15.9205854694,15.9206087287,15.9206319877,15.9206552463,15.9206785045,15.9207017623, +15.9207250198,15.9207482768,15.9207715335,15.9207947899,15.9208180458,15.9208413014,15.9208645566,15.9208878115,15.9209110659,15.92093432,15.9209575737,15.9209808271,15.92100408,15.9210273326,15.9210505848,15.9210738366, +15.9210970881,15.9211203392,15.9211435899,15.9211668402,15.9211900902,15.9212133398,15.921236589,15.9212598378,15.9212830863,15.9213063344,15.9213295821,15.9213528295,15.9213760764,15.921399323,15.9214225692,15.9214458151, +15.9214690605,15.9214923056,15.9215155503,15.9215387947,15.9215620387,15.9215852822,15.9216085255,15.9216317683,15.9216550108,15.9216782529,15.9217014946,15.921724736,15.9217479769,15.9217712175,15.9217944577,15.9218176976, +15.9218409371,15.9218641762,15.9218874149,15.9219106533,15.9219338912,15.9219571288,15.9219803661,15.9220036029,15.9220268394,15.9220500755,15.9220733112,15.9220965466,15.9221197816,15.9221430162,15.9221662504,15.9221894843, +15.9222127178,15.9222359509,15.9222591836,15.922282416,15.922305648,15.9223288796,15.9223521109,15.9223753417,15.9223985722,15.9224218023,15.9224450321,15.9224682615,15.9224914905,15.9225147191,15.9225379473,15.9225611752, +15.9225844027,15.9226076298,15.9226308566,15.922654083,15.922677309,15.9227005346,15.9227237599,15.9227469848,15.9227702093,15.9227934334,15.9228166572,15.9228398806,15.9228631036,15.9228863262,15.9229095485,15.9229327704, +15.9229559919,15.9229792131,15.9230024338,15.9230256542,15.9230488743,15.9230720939,15.9230953132,15.9231185321,15.9231417506,15.9231649688,15.9231881866,15.923211404,15.923234621,15.9232578377,15.923281054,15.9233042699, +15.9233274854,15.9233507006,15.9233739154,15.9233971298,15.9234203439,15.9234435575,15.9234667708,15.9234899838,15.9235131963,15.9235364085,15.9235596203,15.9235828317,15.9236060428,15.9236292535,15.9236524638,15.9236756737, +15.9236988833,15.9237220925,15.9237453013,15.9237685098,15.9237917178,15.9238149255,15.9238381329,15.9238613398,15.9238845464,15.9239077526,15.9239309584,15.9239541639,15.923977369,15.9240005737,15.924023778,15.924046982, +15.9240701856,15.9240933888,15.9241165917,15.9241397941,15.9241629962,15.924186198,15.9242093993,15.9242326003,15.9242558009,15.9242790011,15.924302201,15.9243254005,15.9243485996,15.9243717983,15.9243949967,15.9244181947, +15.9244413923,15.9244645896,15.9244877865,15.924510983,15.9245341791,15.9245573749,15.9245805703,15.9246037653,15.9246269599,15.9246501542,15.9246733481,15.9246965416,15.9247197347,15.9247429275,15.9247661199,15.9247893119, +15.9248125036,15.9248356949,15.9248588858,15.9248820763,15.9249052665,15.9249284563,15.9249516457,15.9249748348,15.9249980234,15.9250212117,15.9250443997,15.9250675872,15.9250907744,15.9251139612,15.9251371477,15.9251603337, +15.9251835194,15.9252067048,15.9252298897,15.9252530743,15.9252762585,15.9252994423,15.9253226258,15.9253458089,15.9253689916,15.9253921739,15.9254153559,15.9254385375,15.9254617187,15.9254848996,15.92550808,15.9255312601, +15.9255544399,15.9255776192,15.9256007982,15.9256239768,15.9256471551,15.925670333,15.9256935105,15.9257166876,15.9257398643,15.9257630407,15.9257862167,15.9258093924,15.9258325676,15.9258557425,15.925878917,15.9259020912, +15.925925265,15.9259484384,15.9259716114,15.9259947841,15.9260179564,15.9260411283,15.9260642998,15.926087471,15.9261106418,15.9261338122,15.9261569823,15.9261801519,15.9262033213,15.9262264902,15.9262496588,15.926272827, +15.9262959948,15.9263191622,15.9263423293,15.926365496,15.9263886623,15.9264118283,15.9264349939,15.9264581591,15.926481324,15.9265044884,15.9265276525,15.9265508163,15.9265739796,15.9265971426,15.9266203052,15.9266434675, +15.9266666293,15.9266897908,15.926712952,15.9267361127,15.9267592731,15.9267824331,15.9268055928,15.926828752,15.9268519109,15.9268750695,15.9268982276,15.9269213854,15.9269445428,15.9269676998,15.9269908565,15.9270140128, +15.9270371687,15.9270603243,15.9270834795,15.9271066343,15.9271297887,15.9271529428,15.9271760965,15.9271992498,15.9272224027,15.9272455553,15.9272687075,15.9272918593,15.9273150108,15.9273381619,15.9273613126,15.927384463, +15.9274076129,15.9274307626,15.9274539118,15.9274770607,15.9275002091,15.9275233573,15.927546505,15.9275696524,15.9275927994,15.927615946,15.9276390923,15.9276622382,15.9276853837,15.9277085289,15.9277316736,15.927754818, +15.9277779621,15.9278011057,15.927824249,15.927847392,15.9278705345,15.9278936767,15.9279168185,15.9279399599,15.927963101,15.9279862417,15.928009382,15.928032522,15.9280556616,15.9280788008,15.9281019396,15.9281250781, +15.9281482162,15.9281713539,15.9281944912,15.9282176282,15.9282407648,15.9282639011,15.928287037,15.9283101725,15.9283333076,15.9283564423,15.9283795767,15.9284027107,15.9284258444,15.9284489777,15.9284721106,15.9284952431, +15.9285183753,15.928541507,15.9285646385,15.9285877695,15.9286109002,15.9286340305,15.9286571604,15.92868029,15.9287034192,15.928726548,15.9287496765,15.9287728046,15.9287959323,15.9288190596,15.9288421866,15.9288653132, +15.9288884394,15.9289115653,15.9289346907,15.9289578159,15.9289809406,15.929004065,15.929027189,15.9290503126,15.9290734359,15.9290965588,15.9291196813,15.9291428034,15.9291659252,15.9291890466,15.9292121677,15.9292352883, +15.9292584086,15.9292815286,15.9293046481,15.9293277673,15.9293508861,15.9293740046,15.9293971226,15.9294202403,15.9294433577,15.9294664746,15.9294895912,15.9295127075,15.9295358233,15.9295589388,15.9295820539,15.9296051687, +15.929628283,15.929651397,15.9296745107,15.9296976239,15.9297207368,15.9297438493,15.9297669615,15.9297900733,15.9298131847,15.9298362957,15.9298594064,15.9298825167,15.9299056266,15.9299287362,15.9299518453,15.9299749542, +15.9299980626,15.9300211707,15.9300442784,15.9300673857,15.9300904927,15.9301135993,15.9301367055,15.9301598114,15.9301829169,15.930206022,15.9302291267,15.9302522311,15.9302753351,15.9302984387,15.930321542,15.9303446449, +15.9303677474,15.9303908496,15.9304139514,15.9304370528,15.9304601538,15.9304832545,15.9305063548,15.9305294548,15.9305525543,15.9305756535,15.9305987524,15.9306218508,15.9306449489,15.9306680466,15.930691144,15.930714241, +15.9307373376,15.9307604338,15.9307835297,15.9308066252,15.9308297203,15.9308528151,15.9308759095,15.9308990035,15.9309220971,15.9309451904,15.9309682833,15.9309913759,15.931014468,15.9310375598,15.9310606513,15.9310837423, +15.931106833,15.9311299234,15.9311530133,15.9311761029,15.9311991921,15.931222281,15.9312453694,15.9312684575,15.9312915453,15.9313146326,15.9313377196,15.9313608063,15.9313838925,15.9314069784,15.931430064,15.9314531491, +15.9314762339,15.9314993183,15.9315224023,15.931545486,15.9315685693,15.9315916523,15.9316147348,15.931637817,15.9316608989,15.9316839803,15.9317070614,15.9317301421,15.9317532225,15.9317763025,15.9317993821,15.9318224613, +15.9318455402,15.9318686187,15.9318916968,15.9319147746,15.931937852,15.931960929,15.9319840057,15.932007082,15.9320301579,15.9320532334,15.9320763086,15.9320993834,15.9321224579,15.932145532,15.9321686057,15.932191679, +15.932214752,15.9322378246,15.9322608968,15.9322839687,15.9323070402,15.9323301113,15.932353182,15.9323762524,15.9323993224,15.9324223921,15.9324454614,15.9324685303,15.9324915988,15.932514667,15.9325377348,15.9325608022, +15.9325838693,15.932606936,15.9326300023,15.9326530683,15.9326761339,15.9326991991,15.9327222639,15.9327453284,15.9327683925,15.9327914563,15.9328145197,15.9328375827,15.9328606453,15.9328837076,15.9329067695,15.932929831, +15.9329528922,15.932975953,15.9329990134,15.9330220735,15.9330451332,15.9330681925,15.9330912515,15.93311431,15.9331373683,15.9331604261,15.9331834836,15.9332065407,15.9332295974,15.9332526538,15.9332757098,15.9332987655, +15.9333218207,15.9333448756,15.9333679302,15.9333909843,15.9334140381,15.9334370916,15.9334601446,15.9334831973,15.9335062496,15.9335293016,15.9335523532,15.9335754044,15.9335984552,15.9336215057,15.9336445558,15.9336676056, +15.933690655,15.933713704,15.9337367526,15.9337598009,15.9337828488,15.9338058963,15.9338289435,15.9338519903,15.9338750367,15.9338980828,15.9339211285,15.9339441738,15.9339672187,15.9339902633,15.9340133076,15.9340363514, +15.9340593949,15.934082438,15.9341054808,15.9341285232,15.9341515652,15.9341746068,15.9341976481,15.934220689,15.9342437295,15.9342667697,15.9342898095,15.934312849,15.934335888,15.9343589267,15.9343819651,15.934405003, +15.9344280406,15.9344510779,15.9344741147,15.9344971512,15.9345201873,15.9345432231,15.9345662585,15.9345892935,15.9346123282,15.9346353625,15.9346583964,15.9346814299,15.9347044631,15.9347274959,15.9347505284,15.9347735605, +15.9347965922,15.9348196235,15.9348426545,15.9348656851,15.9348887154,15.9349117452,15.9349347747,15.9349578039,15.9349808327,15.9350038611,15.9350268891,15.9350499168,15.9350729441,15.935095971,15.9351189976,15.9351420238, +15.9351650496,15.9351880751,15.9352111002,15.9352341249,15.9352571493,15.9352801733,15.9353031969,15.9353262201,15.935349243,15.9353722656,15.9353952877,15.9354183095,15.9354413309,15.935464352,15.9354873727,15.935510393, +15.935533413,15.9355564325,15.9355794518,15.9356024706,15.9356254891,15.9356485072,15.935671525,15.9356945423,15.9357175594,15.935740576,15.9357635923,15.9357866082,15.9358096238,15.9358326389,15.9358556537,15.9358786682, +15.9359016823,15.935924696,15.9359477093,15.9359707223,15.9359937349,15.9360167472,15.936039759,15.9360627705,15.9360857817,15.9361087925,15.9361318029,15.9361548129,15.9361778226,15.9362008319,15.9362238408,15.9362468494, +15.9362698576,15.9362928654,15.9363158729,15.93633888,15.9363618868,15.9363848931,15.9364078991,15.9364309048,15.93645391,15.9364769149,15.9364999195,15.9365229237,15.9365459275,15.9365689309,15.936591934,15.9366149367, +15.936637939,15.936660941,15.9366839426,15.9367069438,15.9367299447,15.9367529452,15.9367759453,15.9367989451,15.9368219445,15.9368449435,15.9368679422,15.9368909405,15.9369139384,15.936936936,15.9369599332,15.93698293, +15.9370059265,15.9370289226,15.9370519184,15.9370749137,15.9370979087,15.9371209034,15.9371438976,15.9371668915,15.9371898851,15.9372128783,15.9372358711,15.9372588635,15.9372818556,15.9373048473,15.9373278386,15.9373508296, +15.9373738202,15.9373968104,15.9374198003,15.9374427898,15.937465779,15.9374887677,15.9375117561,15.9375347442,15.9375577319,15.9375807192,15.9376037061,15.9376266927,15.9376496789,15.9376726647,15.9376956502,15.9377186353, +15.9377416201,15.9377646045,15.9377875885,15.9378105721,15.9378335554,15.9378565383,15.9378795209,15.937902503,15.9379254849,15.9379484663,15.9379714474,15.9379944281,15.9380174085,15.9380403885,15.9380633681,15.9380863473, +15.9381093262,15.9381323047,15.9381552829,15.9381782607,15.9382012381,15.9382242152,15.9382471919,15.9382701682,15.9382931442,15.9383161197,15.938339095,15.9383620698,15.9383850443,15.9384080185,15.9384309922,15.9384539656, +15.9384769387,15.9384999113,15.9385228836,15.9385458556,15.9385688271,15.9385917983,15.9386147692,15.9386377397,15.9386607098,15.9386836795,15.9387066489,15.9387296179,15.9387525865,15.9387755548,15.9387985227,15.9388214903, +15.9388444575,15.9388674243,15.9388903907,15.9389133568,15.9389363225,15.9389592879,15.9389822529,15.9390052175,15.9390281818,15.9390511457,15.9390741092,15.9390970723,15.9391200351,15.9391429976,15.9391659596,15.9391889213, +15.9392118827,15.9392348436,15.9392578042,15.9392807645,15.9393037243,15.9393266839,15.939349643,15.9393726018,15.9393955602,15.9394185182,15.9394414759,15.9394644332,15.9394873902,15.9395103468,15.939533303,15.9395562588, +15.9395792143,15.9396021694,15.9396251242,15.9396480786,15.9396710326,15.9396939863,15.9397169396,15.9397398925,15.9397628451,15.9397857973,15.9398087491,15.9398317006,15.9398546517,15.9398776024,15.9399005528,15.9399235028, +15.9399464525,15.9399694017,15.9399923507,15.9400152992,15.9400382474,15.9400611952,15.9400841427,15.9401070898,15.9401300365,15.9401529828,15.9401759288,15.9401988745,15.9402218197,15.9402447646,15.9402677092,15.9402906533, +15.9403135971,15.9403365406,15.9403594837,15.9403824264,15.9404053687,15.9404283107,15.9404512523,15.9404741936,15.9404971345,15.940520075,15.9405430151,15.9405659549,15.9405888944,15.9406118334,15.9406347721,15.9406577105, +15.9406806484,15.940703586,15.9407265233,15.9407494601,15.9407723967,15.9407953328,15.9408182686,15.940841204,15.940864139,15.9408870737,15.9409100081,15.940932942,15.9409558756,15.9409788088,15.9410017417,15.9410246742, +15.9410476063,15.9410705381,15.9410934695,15.9411164006,15.9411393312,15.9411622616,15.9411851915,15.9412081211,15.9412310503,15.9412539792,15.9412769076,15.9412998358,15.9413227635,15.9413456909,15.941368618,15.9413915446, +15.9414144709,15.9414373969,15.9414603225,15.9414832477,15.9415061725,15.941529097,15.9415520211,15.9415749449,15.9415978683,15.9416207913,15.941643714,15.9416666363,15.9416895582,15.9417124798,15.941735401,15.9417583218, +15.9417812423,15.9418041624,15.9418270821,15.9418500015,15.9418729205,15.9418958392,15.9419187575,15.9419416754,15.941964593,15.9419875102,15.942010427,15.9420333435,15.9420562596,15.9420791753,15.9421020907,15.9421250057, +15.9421479204,15.9421708347,15.9421937486,15.9422166622,15.9422395754,15.9422624882,15.9422854007,15.9423083128,15.9423312245,15.9423541359,15.9423770469,15.9423999575,15.9424228678,15.9424457778,15.9424686873,15.9424915965, +15.9425145053,15.9425374138,15.9425603219,15.9425832296,15.942606137,15.942629044,15.9426519507,15.942674857,15.9426977629,15.9427206684,15.9427435736,15.9427664785,15.9427893829,15.942812287,15.9428351908,15.9428580941, +15.9428809972,15.9429038998,15.9429268021,15.942949704,15.9429726056,15.9429955068,15.9430184076,15.9430413081,15.9430642082,15.9430871079,15.9431100073,15.9431329063,15.9431558049,15.9431787032,15.9432016011,15.9432244987, +15.9432473959,15.9432702927,15.9432931892,15.9433160853,15.943338981,15.9433618764,15.9433847714,15.9434076661,15.9434305604,15.9434534543,15.9434763479,15.9434992411,15.9435221339,15.9435450264,15.9435679185,15.9435908102, +15.9436137016,15.9436365926,15.9436594833,15.9436823736,15.9437052635,15.9437281531,15.9437510423,15.9437739311,15.9437968196,15.9438197077,15.9438425955,15.9438654829,15.9438883699,15.9439112565,15.9439341428,15.9439570288, +15.9439799143,15.9440027996,15.9440256844,15.9440485689,15.944071453,15.9440943368,15.9441172202,15.9441401032,15.9441629859,15.9441858682,15.9442087501,15.9442316317,15.9442545129,15.9442773938,15.9443002742,15.9443231544, +15.9443460341,15.9443689135,15.9443917926,15.9444146713,15.9444375496,15.9444604275,15.9444833051,15.9445061823,15.9445290592,15.9445519357,15.9445748118,15.9445976876,15.944620563,15.9446434381,15.9446663128,15.9446891871, +15.944712061,15.9447349346,15.9447578079,15.9447806808,15.9448035533,15.9448264254,15.9448492972,15.9448721686,15.9448950397,15.9449179104,15.9449407807,15.9449636507,15.9449865203,15.9450093895,15.9450322584,15.9450551269, +15.9450779951,15.9451008629,15.9451237303,15.9451465974,15.9451694641,15.9451923305,15.9452151965,15.9452380621,15.9452609273,15.9452837922,15.9453066568,15.9453295209,15.9453523848,15.9453752482,15.9453981113,15.945420974, +15.9454438364,15.9454666984,15.94548956,15.9455124213,15.9455352822,15.9455581428,15.9455810029,15.9456038628,15.9456267222,15.9456495813,15.9456724401,15.9456952984,15.9457181565,15.9457410141,15.9457638714,15.9457867283, +15.9458095849,15.9458324411,15.9458552969,15.9458781524,15.9459010075,15.9459238623,15.9459467167,15.9459695707,15.9459924244,15.9460152777,15.9460381307,15.9460609832,15.9460838355,15.9461066873,15.9461295388,15.9461523899, +15.9461752407,15.9461980911,15.9462209412,15.9462437909,15.9462666402,15.9462894892,15.9463123378,15.946335186,15.9463580339,15.9463808814,15.9464037286,15.9464265754,15.9464494218,15.9464722679,15.9464951136,15.9465179589, +15.9465408039,15.9465636485,15.9465864928,15.9466093367,15.9466321802,15.9466550234,15.9466778662,15.9467007087,15.9467235507,15.9467463925,15.9467692338,15.9467920749,15.9468149155,15.9468377558,15.9468605957,15.9468834353, +15.9469062745,15.9469291133,15.9469519518,15.9469747899,15.9469976276,15.947020465,15.9470433021,15.9470661387,15.947088975,15.947111811,15.9471346466,15.9471574818,15.9471803166,15.9472031511,15.9472259853,15.947248819, +15.9472716525,15.9472944855,15.9473173182,15.9473401505,15.9473629825,15.9473858141,15.9474086454,15.9474314762,15.9474543068,15.9474771369,15.9474999667,15.9475227962,15.9475456252,15.947568454,15.9475912823,15.9476141103, +15.947636938,15.9476597652,15.9476825921,15.9477054187,15.9477282449,15.9477510707,15.9477738962,15.9477967213,15.947819546,15.9478423704,15.9478651944,15.9478880181,15.9479108414,15.9479336643,15.9479564869,15.9479793091, +15.948002131,15.9480249525,15.9480477736,15.9480705944,15.9480934148,15.9481162348,15.9481390545,15.9481618739,15.9481846928,15.9482075114,15.9482303297,15.9482531476,15.9482759651,15.9482987823,15.9483215991,15.9483444155, +15.9483672316,15.9483900473,15.9484128627,15.9484356777,15.9484584923,15.9484813066,15.9485041205,15.9485269341,15.9485497472,15.9485725601,15.9485953726,15.9486181847,15.9486409964,15.9486638078,15.9486866188,15.9487094295, +15.9487322398,15.9487550498,15.9487778594,15.9488006686,15.9488234775,15.948846286,15.9488690941,15.9488919019,15.9489147093,15.9489375164,15.9489603231,15.9489831294,15.9490059354,15.949028741,15.9490515463,15.9490743512, +15.9490971557,15.9491199599,15.9491427637,15.9491655672,15.9491883703,15.949211173,15.9492339754,15.9492567774,15.9492795791,15.9493023804,15.9493251813,15.9493479819,15.9493707821,15.949393582,15.9494163815,15.9494391806, +15.9494619794,15.9494847778,15.9495075758,15.9495303735,15.9495531709,15.9495759678,15.9495987644,15.9496215607,15.9496443566,15.9496671521,15.9496899473,15.9497127421,15.9497355366,15.9497583306,15.9497811244,15.9498039177, +15.9498267108,15.9498495034,15.9498722957,15.9498950876,15.9499178792,15.9499406704,15.9499634613,15.9499862518,15.9500090419,15.9500318317,15.9500546211,15.9500774101,15.9501001988,15.9501229871,15.9501457751,15.9501685627, +15.95019135,15.9502141369,15.9502369234,15.9502597096,15.9502824954,15.9503052808,15.9503280659,15.9503508507,15.950373635,15.950396419,15.9504192027,15.950441986,15.9504647689,15.9504875515,15.9505103337,15.9505331156, +15.950555897,15.9505786782,15.950601459,15.9506242394,15.9506470194,15.9506697991,15.9506925785,15.9507153574,15.950738136,15.9507609143,15.9507836922,15.9508064697,15.9508292469,15.9508520237,15.9508748002,15.9508975763, +15.950920352,15.9509431274,15.9509659024,15.9509886771,15.9510114514,15.9510342253,15.9510569989,15.9510797721,15.951102545,15.9511253175,15.9511480896,15.9511708614,15.9511936329,15.9512164039,15.9512391746,15.951261945, +15.951284715,15.9513074846,15.9513302539,15.9513530228,15.9513757913,15.9513985595,15.9514213273,15.9514440948,15.9514668619,15.9514896287,15.9515123951,15.9515351611,15.9515579268,15.9515806921,15.9516034571,15.9516262217, +15.9516489859,15.9516717498,15.9516945133,15.9517172765,15.9517400393,15.9517628017,15.9517855638,15.9518083255,15.9518310869,15.9518538479,15.9518766085,15.9518993688,15.9519221288,15.9519448883,15.9519676475,15.9519904064, +15.9520131649,15.952035923,15.9520586808,15.9520814382,15.9521041953,15.952126952,15.9521497083,15.9521724643,15.9521952199,15.9522179752,15.9522407301,15.9522634846,15.9522862388,15.9523089926,15.9523317461,15.9523544992, +15.952377252,15.9524000044,15.9524227564,15.9524455081,15.9524682594,15.9524910103,15.9525137609,15.9525365112,15.9525592611,15.9525820106,15.9526047597,15.9526275085,15.952650257,15.9526730051,15.9526957528,15.9527185002, +15.9527412472,15.9527639938,15.9527867401,15.9528094861,15.9528322316,15.9528549769,15.9528777217,15.9529004662,15.9529232104,15.9529459541,15.9529686976,15.9529914406,15.9530141833,15.9530369257,15.9530596677,15.9530824093, +15.9531051506,15.9531278915,15.9531506321,15.9531733723,15.9531961121,15.9532188516,15.9532415907,15.9532643295,15.9532870679,15.9533098059,15.9533325436,15.9533552809,15.9533780179,15.9534007545,15.9534234908,15.9534462267, +15.9534689622,15.9534916974,15.9535144322,15.9535371667,15.9535599008,15.9535826346,15.9536053679,15.953628101,15.9536508336,15.953673566,15.9536962979,15.9537190295,15.9537417608,15.9537644916,15.9537872222,15.9538099523, +15.9538326821,15.9538554116,15.9538781407,15.9539008694,15.9539235978,15.9539463258,15.9539690535,15.9539917808,15.9540145077,15.9540372343,15.9540599605,15.9540826864,15.9541054119,15.9541281371,15.9541508619,15.9541735863, +15.9541963104,15.9542190341,15.9542417575,15.9542644805,15.9542872031,15.9543099254,15.9543326474,15.9543553689,15.9543780901,15.954400811,15.9544235315,15.9544462516,15.9544689714,15.9544916909,15.9545144099,15.9545371286, +15.954559847,15.954582565,15.9546052826,15.9546279999,15.9546507168,15.9546734334,15.9546961496,15.9547188655,15.954741581,15.9547642961,15.9547870109,15.9548097253,15.9548324394,15.9548551531,15.9548778664,15.9549005794, +15.954923292,15.9549460043,15.9549687162,15.9549914278,15.955014139,15.9550368498,15.9550595603,15.9550822704,15.9551049802,15.9551276896,15.9551503987,15.9551731074,15.9551958157,15.9552185237,15.9552412313,15.9552639386, +15.9552866455,15.9553093521,15.9553320583,15.9553547641,15.9553774696,15.9554001747,15.9554228795,15.9554455839,15.955468288,15.9554909917,15.955513695,15.955536398,15.9555591006,15.9555818029,15.9556045048,15.9556272063, +15.9556499075,15.9556726084,15.9556953088,15.955718009,15.9557407087,15.9557634081,15.9557861072,15.9558088059,15.9558315042,15.9558542022,15.9558768998,15.9558995971,15.955922294,15.9559449906,15.9559676868,15.9559903826, +15.9560130781,15.9560357732,15.956058468,15.9560811624,15.9561038564,15.9561265501,15.9561492435,15.9561719365,15.9561946291,15.9562173214,15.9562400133,15.9562627048,15.956285396,15.9563080869,15.9563307774,15.9563534675, +15.9563761572,15.9563988467,15.9564215357,15.9564442244,15.9564669128,15.9564896008,15.9565122884,15.9565349757,15.9565576626,15.9565803491,15.9566030353,15.9566257212,15.9566484067,15.9566710918,15.9566937766,15.956716461, +15.9567391451,15.9567618288,15.9567845121,15.9568071951,15.9568298777,15.95685256,15.9568752419,15.9568979235,15.9569206047,15.9569432856,15.9569659661,15.9569886462,15.957011326,15.9570340054,15.9570566845,15.9570793632, +15.9571020416,15.9571247196,15.9571473972,15.9571700745,15.9571927514,15.957215428,15.9572381042,15.9572607801,15.9572834556,15.9573061307,15.9573288055,15.95735148,15.957374154,15.9573968278,15.9574195011,15.9574421742, +15.9574648468,15.9574875191,15.957510191,15.9575328626,15.9575555339,15.9575782047,15.9576008753,15.9576235454,15.9576462152,15.9576688847,15.9576915538,15.9577142225,15.9577368909,15.9577595589,15.9577822266,15.9578048939, +15.9578275608,15.9578502274,15.9578728937,15.9578955596,15.9579182251,15.9579408903,15.9579635551,15.9579862196,15.9580088837,15.9580315474,15.9580542108,15.9580768738,15.9580995365,15.9581221988,15.9581448608,15.9581675224, +15.9581901837,15.9582128446,15.9582355051,15.9582581653,15.9582808252,15.9583034846,15.9583261438,15.9583488025,15.9583714609,15.958394119,15.9584167767,15.958439434,15.958462091,15.9584847477,15.9585074039,15.9585300599, +15.9585527154,15.9585753706,15.9585980255,15.95862068,15.9586433341,15.9586659879,15.9586886413,15.9587112944,15.9587339471,15.9587565995,15.9587792515,15.9588019032,15.9588245545,15.9588472054,15.958869856,15.9588925062, +15.9589151561,15.9589378056,15.9589604548,15.9589831036,15.959005752,15.9590284001,15.9590510479,15.9590736953,15.9590963423,15.959118989,15.9591416353,15.9591642812,15.9591869268,15.9592095721,15.959232217,15.9592548615, +15.9592775057,15.9593001496,15.959322793,15.9593454361,15.9593680789,15.9593907213,15.9594133634,15.9594360051,15.9594586464,15.9594812874,15.959503928,15.9595265683,15.9595492082,15.9595718478,15.959594487,15.9596171259, +15.9596397644,15.9596624025,15.9596850403,15.9597076777,15.9597303148,15.9597529515,15.9597755879,15.9597982239,15.9598208596,15.9598434949,15.9598661298,15.9598887644,15.9599113987,15.9599340325,15.9599566661,15.9599792992, +15.9600019321,15.9600245645,15.9600471966,15.9600698284,15.9600924598,15.9601150908,15.9601377215,15.9601603519,15.9601829818,15.9602056115,15.9602282407,15.9602508696,15.9602734982,15.9602961264,15.9603187542,15.9603413817, +15.9603640089,15.9603866357,15.9604092621,15.9604318882,15.9604545139,15.9604771392,15.9604997643,15.9605223889,15.9605450132,15.9605676372,15.9605902607,15.960612884,15.9606355069,15.9606581294,15.9606807516,15.9607033734, +15.9607259948,15.9607486159,15.9607712367,15.9607938571,15.9608164771,15.9608390968,15.9608617162,15.9608843351,15.9609069538,15.960929572,15.96095219,15.9609748075,15.9609974247,15.9610200416,15.9610426581,15.9610652742, +15.96108789,15.9611105054,15.9611331205,15.9611557352,15.9611783496,15.9612009636,15.9612235773,15.9612461906,15.9612688035,15.9612914161,15.9613140284,15.9613366403,15.9613592518,15.961381863,15.9614044738,15.9614270843, +15.9614496944,15.9614723042,15.9614949136,15.9615175226,15.9615401313,15.9615627397,15.9615853477,15.9616079553,15.9616305626,15.9616531695,15.9616757761,15.9616983823,15.9617209882,15.9617435937,15.9617661988,15.9617888036, +15.9618114081,15.9618340122,15.9618566159,15.9618792193,15.9619018223,15.961924425,15.9619470273,15.9619696293,15.9619922309,15.9620148322,15.9620374331,15.9620600337,15.9620826339,15.9621052337,15.9621278332,15.9621504323, +15.9621730311,15.9621956295,15.9622182276,15.9622408253,15.9622634227,15.9622860197,15.9623086164,15.9623312127,15.9623538086,15.9623764042,15.9623989995,15.9624215944,15.9624441889,15.9624667831,15.9624893769,15.9625119704, +15.9625345635,15.9625571563,15.9625797487,15.9626023408,15.9626249325,15.9626475238,15.9626701148,15.9626927055,15.9627152957,15.9627378857,15.9627604753,15.9627830645,15.9628056534,15.9628282419,15.9628508301,15.9628734179, +15.9628960053,15.9629185924,15.9629411792,15.9629637656,15.9629863516,15.9630089373,15.9630315227,15.9630541077,15.9630766923,15.9630992766,15.9631218605,15.9631444441,15.9631670273,15.9631896102,15.9632121927,15.9632347748, +15.9632573566,15.9632799381,15.9633025192,15.9633250999,15.9633476803,15.9633702604,15.96339284,15.9634154194,15.9634379983,15.963460577,15.9634831552,15.9635057332,15.9635283107,15.9635508879,15.9635734648,15.9635960413, +15.9636186174,15.9636411932,15.9636637687,15.9636863438,15.9637089185,15.9637314929,15.9637540669,15.9637766406,15.9637992139,15.9638217869,15.9638443595,15.9638669318,15.9638895037,15.9639120753,15.9639346465,15.9639572173, +15.9639797878,15.964002358,15.9640249278,15.9640474972,15.9640700663,15.964092635,15.9641152034,15.9641377714,15.9641603391,15.9641829064,15.9642054734,15.96422804,15.9642506063,15.9642731722,15.9642957377,15.9643183029, +15.9643408678,15.9643634323,15.9643859964,15.9644085602,15.9644311237,15.9644536868,15.9644762495,15.9644988119,15.9645213739,15.9645439356,15.9645664969,15.9645890579,15.9646116185,15.9646341787,15.9646567387,15.9646792982, +15.9647018574,15.9647244163,15.9647469748,15.9647695329,15.9647920907,15.9648146482,15.9648372052,15.964859762,15.9648823184,15.9649048744,15.9649274301,15.9649499854,15.9649725404,15.964995095,15.9650176493,15.9650402032, +15.9650627567,15.96508531,15.9651078628,15.9651304153,15.9651529675,15.9651755193,15.9651980707,15.9652206218,15.9652431726,15.9652657229,15.965288273,15.9653108227,15.965333372,15.965355921,15.9653784696,15.9654010179, +15.9654235658,15.9654461134,15.9654686606,15.9654912075,15.965513754,15.9655363001,15.9655588459,15.9655813914,15.9656039365,15.9656264813,15.9656490257,15.9656715697,15.9656941134,15.9657166567,15.9657391997,15.9657617424, +15.9657842847,15.9658068266,15.9658293682,15.9658519094,15.9658744503,15.9658969908,15.965919531,15.9659420708,15.9659646103,15.9659871494,15.9660096882,15.9660322266,15.9660547646,15.9660773023,15.9660998397,15.9661223767, +15.9661449133,15.9661674496,15.9661899856,15.9662125212,15.9662350564,15.9662575913,15.9662801259,15.9663026601,15.9663251939,15.9663477274,15.9663702605,15.9663927933,15.9664153257,15.9664378578,15.9664603895,15.9664829209, +15.9665054519,15.9665279826,15.9665505129,15.9665730429,15.9665955725,15.9666181017,15.9666406306,15.9666631592,15.9666856874,15.9667082153,15.9667307428,15.9667532699,15.9667757967,15.9667983232,15.9668208493,15.966843375, +15.9668659004,15.9668884254,15.9669109501,15.9669334745,15.9669559984,15.9669785221,15.9670010454,15.9670235683,15.9670460909,15.9670686131,15.967091135,15.9671136565,15.9671361777,15.9671586985,15.967181219,15.9672037391, +15.9672262588,15.9672487783,15.9672712973,15.967293816,15.9673163344,15.9673388524,15.9673613701,15.9673838874,15.9674064043,15.9674289209,15.9674514372,15.9674739531,15.9674964686,15.9675189838,15.9675414987,15.9675640132, +15.9675865273,15.9676090411,15.9676315545,15.9676540676,15.9676765804,15.9676990927,15.9677216048,15.9677441165,15.9677666278,15.9677891388,15.9678116494,15.9678341597,15.9678566696,15.9678791792,15.9679016884,15.9679241973, +15.9679467058,15.967969214,15.9679917218,15.9680142293,15.9680367364,15.9680592432,15.9680817496,15.9681042556,15.9681267614,15.9681492667,15.9681717717,15.9681942764,15.9682167807,15.9682392847,15.9682617883,15.9682842915, +15.9683067944,15.968329297,15.9683517992,15.968374301,15.9683968025,15.9684193037,15.9684418045,15.9684643049,15.968486805,15.9685093048,15.9685318042,15.9685543032,15.9685768019,15.9685993003,15.9686217983,15.9686442959, +15.9686667932,15.9686892901,15.9687117867,15.968734283,15.9687567789,15.9687792744,15.9688017696,15.9688242644,15.9688467589,15.968869253,15.9688917468,15.9689142402,15.9689367333,15.9689592261,15.9689817184,15.9690042105, +15.9690267022,15.9690491935,15.9690716845,15.9690941751,15.9691166654,15.9691391553,15.9691616449,15.9691841341,15.969206623,15.9692291115,15.9692515997,15.9692740875,15.969296575,15.9693190621,15.9693415489,15.9693640353, +15.9693865213,15.9694090071,15.9694314924,15.9694539775,15.9694764621,15.9694989464,15.9695214304,15.969543914,15.9695663973,15.9695888802,15.9696113628,15.969633845,15.9696563269,15.9696788084,15.9697012895,15.9697237704, +15.9697462508,15.9697687309,15.9697912107,15.9698136901,15.9698361692,15.9698586479,15.9698811262,15.9699036043,15.9699260819,15.9699485592,15.9699710362,15.9699935128,15.9700159891,15.970038465,15.9700609405,15.9700834158, +15.9701058906,15.9701283651,15.9701508393,15.9701733131,15.9701957866,15.9702182597,15.9702407324,15.9702632048,15.9702856769,15.9703081486,15.97033062,15.970353091,15.9703755616,15.9703980319,15.9704205019,15.9704429715, +15.9704654408,15.9704879097,15.9705103783,15.9705328465,15.9705553143,15.9705777818,15.970600249,15.9706227158,15.9706451823,15.9706676484,15.9706901141,15.9707125796,15.9707350446,15.9707575093,15.9707799737,15.9708024377, +15.9708249014,15.9708473647,15.9708698276,15.9708922903,15.9709147525,15.9709372144,15.970959676,15.9709821372,15.9710045981,15.9710270586,15.9710495188,15.9710719786,15.971094438,15.9711168972,15.9711393559,15.9711618143, +15.9711842724,15.9712067301,15.9712291875,15.9712516445,15.9712741012,15.9712965575,15.9713190135,15.9713414691,15.9713639244,15.9713863793,15.9714088339,15.9714312881,15.971453742,15.9714761955,15.9714986487,15.9715211015, +15.971543554,15.9715660061,15.9715884579,15.9716109093,15.9716333604,15.9716558111,15.9716782615,15.9717007115,15.9717231612,15.9717456105,15.9717680595,15.9717905081,15.9718129564,15.9718354043,15.9718578519,15.9718802992, +15.971902746,15.9719251926,15.9719476388,15.9719700846,15.9719925301,15.9720149752,15.97203742,15.9720598645,15.9720823086,15.9721047523,15.9721271957,15.9721496387,15.9721720814,15.9721945238,15.9722169658,15.9722394074, +15.9722618487,15.9722842897,15.9723067303,15.9723291705,15.9723516104,15.97237405,15.9723964892,15.9724189281,15.9724413666,15.9724638047,15.9724862425,15.97250868,15.9725311171,15.9725535539,15.9725759903,15.9725984263, +15.9726208621,15.9726432974,15.9726657324,15.9726881671,15.9727106014,15.9727330354,15.972755469,15.9727779023,15.9728003352,15.9728227678,15.9728452,15.9728676319,15.9728900634,15.9729124946,15.9729349254,15.9729573559, +15.9729797861,15.9730022159,15.9730246453,15.9730470744,15.9730695031,15.9730919315,15.9731143596,15.9731367872,15.9731592146,15.9731816416,15.9732040682,15.9732264945,15.9732489205,15.9732713461,15.9732937713,15.9733161962, +15.9733386208,15.973361045,15.9733834689,15.9734058924,15.9734283155,15.9734507384,15.9734731608,15.9734955829,15.9735180047,15.9735404261,15.9735628472,15.9735852679,15.9736076883,15.9736301083,15.973652528,15.9736749473, +15.9736973663,15.9737197849,15.9737422032,15.9737646212,15.9737870387,15.973809456,15.9738318729,15.9738542894,15.9738767056,15.9738991215,15.973921537,15.9739439521,15.9739663669,15.9739887814,15.9740111955,15.9740336092, +15.9740560226,15.9740784357,15.9741008484,15.9741232608,15.9741456728,15.9741680844,15.9741904958,15.9742129067,15.9742353174,15.9742577276,15.9742801376,15.9743025471,15.9743249564,15.9743473652,15.9743697738,15.974392182, +15.9744145898,15.9744369973,15.9744594044,15.9744818112,15.9745042177,15.9745266238,15.9745490295,15.9745714349,15.97459384,15.9746162447,15.974638649,15.9746610531,15.9746834567,15.97470586,15.974728263,15.9747506656, +15.9747730679,15.9747954698,15.9748178714,15.9748402726,15.9748626735,15.974885074,15.9749074742,15.974929874,15.9749522735,15.9749746727,15.9749970715,15.9750194699,15.975041868,15.9750642658,15.9750866632,15.9751090602, +15.9751314569,15.9751538533,15.9751762493,15.975198645,15.9752210403,15.9752434352,15.9752658299,15.9752882241,15.9753106181,15.9753330116,15.9753554049,15.9753777977,15.9754001903,15.9754225825,15.9754449743,15.9754673658, +15.9754897569,15.9755121477,15.9755345382,15.9755569283,15.975579318,15.9756017075,15.9756240965,15.9756464852,15.9756688736,15.9756912616,15.9757136493,15.9757360366,15.9757584236,15.9757808102,15.9758031965,15.9758255824, +15.975847968,15.9758703532,15.9758927381,15.9759151227,15.9759375069,15.9759598907,15.9759822742,15.9760046574,15.9760270402,15.9760494226,15.9760718048,15.9760941865,15.9761165679,15.976138949,15.9761613297,15.9761837101, +15.9762060901,15.9762284698,15.9762508492,15.9762732282,15.9762956068,15.9763179851,15.976340363,15.9763627406,15.9763851179,15.9764074948,15.9764298714,15.9764522476,15.9764746234,15.9764969989,15.9765193741,15.9765417489, +15.9765641234,15.9765864975,15.9766088713,15.9766312448,15.9766536179,15.9766759906,15.976698363,15.976720735,15.9767431067,15.9767654781,15.9767878491,15.9768102198,15.9768325901,15.97685496,15.9768773297,15.9768996989, +15.9769220679,15.9769444364,15.9769668047,15.9769891725,15.9770115401,15.9770339073,15.9770562741,15.9770786406,15.9771010068,15.9771233726,15.977145738,15.9771681031,15.9771904679,15.9772128323,15.9772351964,15.9772575601, +15.9772799235,15.9773022865,15.9773246492,15.9773470116,15.9773693735,15.9773917352,15.9774140965,15.9774364574,15.977458818,15.9774811783,15.9775035382,15.9775258978,15.977548257,15.9775706159,15.9775929744,15.9776153326, +15.9776376904,15.9776600479,15.977682405,15.9777047618,15.9777271183,15.9777494744,15.9777718301,15.9777941855,15.9778165406,15.9778388953,15.9778612497,15.9778836037,15.9779059574,15.9779283107,15.9779506637,15.9779730163, +15.9779953686,15.9780177206,15.9780400722,15.9780624234,15.9780847743,15.9781071249,15.9781294751,15.9781518249,15.9781741745,15.9781965236,15.9782188725,15.978241221,15.9782635691,15.9782859169,15.9783082643,15.9783306114, +15.9783529582,15.9783753046,15.9783976506,15.9784199963,15.9784423417,15.9784646867,15.9784870314,15.9785093757,15.9785317197,15.9785540633,15.9785764066,15.9785987496,15.9786210922,15.9786434344,15.9786657763,15.9786881179, +15.9787104591,15.9787328,15.9787551405,15.9787774807,15.9787998205,15.97882216,15.9788444991,15.9788668379,15.9788891764,15.9789115145,15.9789338522,15.9789561896,15.9789785267,15.9790008634,15.9790231998,15.9790455358, +15.9790678715,15.9790902068,15.9791125418,15.9791348764,15.9791572107,15.9791795447,15.9792018783,15.9792242116,15.9792465445,15.979268877,15.9792912093,15.9793135411,15.9793358727,15.9793582039,15.9793805347,15.9794028652, +15.9794251953,15.9794475251,15.9794698546,15.9794921837,15.9795145125,15.9795368409,15.979559169,15.9795814967,15.9796038241,15.9796261511,15.9796484778,15.9796708042,15.9796931302,15.9797154558,15.9797377811,15.9797601061, +15.9797824307,15.979804755,15.9798270789,15.9798494025,15.9798717257,15.9798940486,15.9799163712,15.9799386934,15.9799610152,15.9799833367,15.9800056579,15.9800279787,15.9800502992,15.9800726193,15.9800949391,15.9801172585, +15.9801395776,15.9801618964,15.9801842148,15.9802065328,15.9802288506,15.9802511679,15.9802734849,15.9802958016,15.980318118,15.9803404339,15.9803627496,15.9803850649,15.9804073798,15.9804296944,15.9804520087,15.9804743226, +15.9804966362,15.9805189494,15.9805412623,15.9805635748,15.980585887,15.9806081989,15.9806305104,15.9806528215,15.9806751323,15.9806974428,15.9807197529,15.9807420627,15.9807643721,15.9807866812,15.9808089899,15.9808312983, +15.9808536064,15.9808759141,15.9808982214,15.9809205285,15.9809428351,15.9809651415,15.9809874474,15.9810097531,15.9810320584,15.9810543633,15.9810766679,15.9810989722,15.9811212761,15.9811435796,15.9811658829,15.9811881857, +15.9812104883,15.9812327905,15.9812550923,15.9812773938,15.981299695,15.9813219958,15.9813442962,15.9813665963,15.9813888961,15.9814111955,15.9814334946,15.9814557934,15.9814780918,15.9815003898,15.9815226875,15.9815449849, +15.9815672819,15.9815895786,15.9816118749,15.9816341709,15.9816564665,15.9816787618,15.9817010568,15.9817233514,15.9817456456,15.9817679396,15.9817902331,15.9818125263,15.9818348192,15.9818571118,15.981879404,15.9819016958, +15.9819239873,15.9819462785,15.9819685693,15.9819908598,15.9820131499,15.9820354397,15.9820577291,15.9820800182,15.982102307,15.9821245954,15.9821468834,15.9821691711,15.9821914585,15.9822137455,15.9822360322,15.9822583186, +15.9822806046,15.9823028902,15.9823251755,15.9823474605,15.9823697451,15.9823920294,15.9824143133,15.9824365969,15.9824588801,15.982481163,15.9825034456,15.9825257278,15.9825480097,15.9825702912,15.9825925723,15.9826148532, +15.9826371337,15.9826594138,15.9826816936,15.9827039731,15.9827262522,15.982748531,15.9827708094,15.9827930875,15.9828153652,15.9828376426,15.9828599196,15.9828821963,15.9829044727,15.9829267487,15.9829490244,15.9829712997, +15.9829935747,15.9830158493,15.9830381236,15.9830603976,15.9830826712,15.9831049445,15.9831272174,15.98314949,15.9831717622,15.9831940341,15.9832163056,15.9832385768,15.9832608477,15.9832831182,15.9833053884,15.9833276582, +15.9833499277,15.9833721968,15.9833944656,15.9834167341,15.9834390022,15.9834612699,15.9834835374,15.9835058044,15.9835280712,15.9835503376,15.9835726036,15.9835948693,15.9836171347,15.9836393997,15.9836616643,15.9836839287, +15.9837061927,15.9837284563,15.9837507196,15.9837729826,15.9837952452,15.9838175074,15.9838397693,15.9838620309,15.9838842922,15.9839065531,15.9839288136,15.9839510738,15.9839733337,15.9839955932,15.9840178524,15.9840401112, +15.9840623697,15.9840846278,15.9841068856,15.9841291431,15.9841514002,15.984173657,15.9841959134,15.9842181695,15.9842404252,15.9842626806,15.9842849357,15.9843071904,15.9843294448,15.9843516988,15.9843739525,15.9843962058, +15.9844184588,15.9844407115,15.9844629638,15.9844852157,15.9845074673,15.9845297186,15.9845519696,15.9845742202,15.9845964704,15.9846187203,15.9846409699,15.9846632191,15.984685468,15.9847077165,15.9847299647,15.9847522125, +15.98477446,15.9847967072,15.984818954,15.9848412005,15.9848634466,15.9848856924,15.9849079379,15.984930183,15.9849524277,15.9849746721,15.9849969162,15.98501916,15.9850414033,15.9850636464,15.9850858891,15.9851081315, +15.9851303735,15.9851526151,15.9851748565,15.9851970975,15.9852193381,15.9852415784,15.9852638184,15.985286058,15.9853082973,15.9853305362,15.9853527748,15.985375013,15.9853972509,15.9854194885,15.9854417257,15.9854639626, +15.9854861991,15.9855084353,15.9855306711,15.9855529066,15.9855751418,15.9855973766,15.9856196111,15.9856418452,15.985664079,15.9856863125,15.9857085456,15.9857307783,15.9857530108,15.9857752428,15.9857974746,15.985819706, +15.985841937,15.9858641677,15.9858863981,15.9859086281,15.9859308578,15.9859530871,15.9859753161,15.9859975448,15.9860197731,15.986042001,15.9860642287,15.9860864559,15.9861086829,15.9861309095,15.9861531357,15.9861753616, +15.9861975872,15.9862198124,15.9862420373,15.9862642619,15.9862864861,15.9863087099,15.9863309334,15.9863531566,15.9863753794,15.9863976019,15.9864198241,15.9864420459,15.9864642673,15.9864864885,15.9865087092,15.9865309297, +15.9865531498,15.9865753695,15.9865975889,15.986619808,15.9866420267,15.9866642451,15.9866864631,15.9867086808,15.9867308982,15.9867531152,15.9867753319,15.9867975482,15.9868197642,15.9868419798,15.9868641951,15.9868864101, +15.9869086247,15.986930839,15.9869530529,15.9869752665,15.9869974797,15.9870196927,15.9870419052,15.9870641174,15.9870863293,15.9871085409,15.9871307521,15.9871529629,15.9871751734,15.9871973836,15.9872195934,15.9872418029, +15.9872640121,15.9872862209,15.9873084293,15.9873306375,15.9873528452,15.9873750527,15.9873972598,15.9874194665,15.9874416729,15.987463879,15.9874860847,15.9875082901,15.9875304952,15.9875526999,15.9875749042,15.9875971082, +15.9876193119,15.9876415153,15.9876637183,15.9876859209,15.9877081232,15.9877303252,15.9877525268,15.9877747281,15.987796929,15.9878191296,15.9878413299,15.9878635298,15.9878857294,15.9879079286,15.9879301275,15.9879523261, +15.9879745243,15.9879967222,15.9880189197,15.9880411169,15.9880633137,15.9880855102,15.9881077064,15.9881299022,15.9881520977,15.9881742928,15.9881964876,15.9882186821,15.9882408762,15.98826307,15.9882852634,15.9883074565, +15.9883296492,15.9883518416,15.9883740337,15.9883962254,15.9884184168,15.9884406078,15.9884627985,15.9884849889,15.9885071789,15.9885293686,15.9885515579,15.9885737469,15.9885959356,15.9886181239,15.9886403119,15.9886624995, +15.9886846868,15.9887068737,15.9887290603,15.9887512466,15.9887734325,15.9887956181,15.9888178033,15.9888399882,15.9888621728,15.988884357,15.9889065409,15.9889287244,15.9889509076,15.9889730905,15.988995273,15.9890174551, +15.989039637,15.9890618184,15.9890839996,15.9891061804,15.9891283609,15.989150541,15.9891727208,15.9891949002,15.9892170793,15.9892392581,15.9892614365,15.9892836146,15.9893057923,15.9893279697,15.9893501468,15.9893723235, +15.9893944998,15.9894166759,15.9894388516,15.9894610269,15.9894832019,15.9895053766,15.9895275509,15.9895497249,15.9895718986,15.9895940719,15.9896162448,15.9896384175,15.9896605897,15.9896827617,15.9897049333,15.9897271045, +15.9897492755,15.989771446,15.9897936163,15.9898157862,15.9898379557,15.989860125,15.9898822938,15.9899044624,15.9899266306,15.9899487984,15.9899709659,15.9899931331,15.9900152999,15.9900374664,15.9900596326,15.9900817984, +15.9901039639,15.990126129,15.9901482938,15.9901704582,15.9901926223,15.9902147861,15.9902369495,15.9902591126,15.9902812754,15.9903034378,15.9903255998,15.9903477616,15.9903699229,15.990392084,15.9904142447,15.9904364051, +15.9904585651,15.9904807248,15.9905028841,15.9905250431,15.9905472018,15.9905693601,15.9905915181,15.9906136757,15.990635833,15.99065799,15.9906801466,15.9907023029,15.9907244588,15.9907466144,15.9907687697,15.9907909246, +15.9908130792,15.9908352334,15.9908573873,15.9908795408,15.9909016941,15.9909238469,15.9909459995,15.9909681517,15.9909903035,15.991012455,15.9910346062,15.9910567571,15.9910789076,15.9911010577,15.9911232075,15.991145357, +15.9911675061,15.9911896549,15.9912118034,15.9912339515,15.9912560993,15.9912782467,15.9913003938,15.9913225406,15.991344687,15.9913668331,15.9913889788,15.9914111242,15.9914332693,15.991455414,15.9914775583,15.9914997024, +15.9915218461,15.9915439894,15.9915661324,15.9915882751,15.9916104175,15.9916325595,15.9916547011,15.9916768424,15.9916989834,15.9917211241,15.9917432643,15.9917654043,15.9917875439,15.9918096832,15.9918318221,15.9918539607, +15.991876099,15.9918982369,15.9919203745,15.9919425117,15.9919646486,15.9919867852,15.9920089214,15.9920310573,15.9920531929,15.9920753281,15.9920974629,15.9921195974,15.9921417316,15.9921638655,15.992185999,15.9922081321, +15.992230265,15.9922523975,15.9922745296,15.9922966614,15.9923187929,15.992340924,15.9923630548,15.9923851852,15.9924073153,15.9924294451,15.9924515745,15.9924737036,15.9924958324,15.9925179608,15.9925400889,15.9925622166, +15.992584344,15.9926064711,15.9926285978,15.9926507242,15.9926728502,15.9926949759,15.9927171012,15.9927392263,15.9927613509,15.9927834753,15.9928055993,15.9928277229,15.9928498463,15.9928719693,15.9928940919,15.9929162142, +15.9929383362,15.9929604578,15.9929825791,15.9930047,15.9930268206,15.9930489409,15.9930710608,15.9930931804,15.9931152997,15.9931374186,15.9931595372,15.9931816554,15.9932037733,15.9932258909,15.9932480081,15.9932701249, +15.9932922415,15.9933143577,15.9933364736,15.9933585891,15.9933807043,15.9934028191,15.9934249336,15.9934470478,15.9934691616,15.9934912751,15.9935133882,15.993535501,15.9935576135,15.9935797257,15.9936018374,15.9936239489, +15.99364606,15.9936681708,15.9936902812,15.9937123913,15.9937345011,15.9937566105,15.9937787196,15.9938008283,15.9938229367,15.9938450448,15.9938671525,15.9938892599,15.993911367,15.9939334737,15.9939555801,15.9939776861, +15.9939997918,15.9940218971,15.9940440022,15.9940661068,15.9940882112,15.9941103152,15.9941324189,15.9941545222,15.9941766252,15.9941987278,15.9942208301,15.9942429321,15.9942650337,15.994287135,15.994309236,15.9943313366, +15.9943534369,15.9943755368,15.9943976364,15.9944197357,15.9944418346,15.9944639332,15.9944860314,15.9945081293,15.9945302269,15.9945523241,15.994574421,15.9945965176,15.9946186138,15.9946407097,15.9946628052,15.9946849004, +15.9947069953,15.9947290898,15.994751184,15.9947732778,15.9947953713,15.9948174645,15.9948395573,15.9948616498,15.994883742,15.9949058338,15.9949279253,15.9949500164,15.9949721072,15.9949941977,15.9950162878,15.9950383776, +15.995060467,15.9950825561,15.9951046449,15.9951267334,15.9951488214,15.9951709092,15.9951929966,15.9952150837,15.9952371704,15.9952592569,15.9952813429,15.9953034287,15.995325514,15.9953475991,15.9953696838,15.9953917682, +15.9954138522,15.9954359359,15.9954580193,15.9954801023,15.995502185,15.9955242673,15.9955463494,15.995568431,15.9955905124,15.9956125934,15.995634674,15.9956567543,15.9956788343,15.995700914,15.9957229933,15.9957450722, +15.9957671509,15.9957892292,15.9958113071,15.9958333847,15.995855462,15.995877539,15.9958996156,15.9959216918,15.9959437678,15.9959658434,15.9959879186,15.9960099935,15.9960320681,15.9960541423,15.9960762162,15.9960982898, +15.996120363,15.9961424359,15.9961645085,15.9961865807,15.9962086526,15.9962307241,15.9962527953,15.9962748662,15.9962969367,15.9963190069,15.9963410767,15.9963631462,15.9963852154,15.9964072842,15.9964293527,15.9964514209, +15.9964734887,15.9964955562,15.9965176234,15.9965396902,15.9965617567,15.9965838228,15.9966058886,15.9966279541,15.9966500192,15.996672084,15.9966941484,15.9967162125,15.9967382763,15.9967603397,15.9967824028,15.9968044656, +15.996826528,15.9968485901,15.9968706519,15.9968927133,15.9969147743,15.9969368351,15.9969588955,15.9969809555,15.9970030153,15.9970250747,15.9970471337,15.9970691924,15.9970912508,15.9971133088,15.9971353665,15.9971574239, +15.9971794809,15.9972015376,15.997223594,15.99724565,15.9972677057,15.997289761,15.997311816,15.9973338707,15.997355925,15.997377979,15.9974000327,15.997422086,15.997444139,15.9974661916,15.9974882439,15.9975102959, +15.9975323475,15.9975543988,15.9975764498,15.9975985004,15.9976205507,15.9976426006,15.9976646502,15.9976866995,15.9977087485,15.9977307971,15.9977528453,15.9977748933,15.9977969408,15.9978189881,15.997841035,15.9978630816, +15.9978851278,15.9979071737,15.9979292193,15.9979512645,15.9979733094,15.997995354,15.9980173982,15.9980394421,15.9980614856,15.9980835288,15.9981055717,15.9981276143,15.9981496565,15.9981716983,15.9981937398,15.998215781, +15.9982378219,15.9982598624,15.9982819026,15.9983039424,15.9983259819,15.9983480211,15.9983700599,15.9983920984,15.9984141366,15.9984361744,15.9984582119,15.998480249,15.9985022859,15.9985243223,15.9985463585,15.9985683943, +15.9985904297,15.9986124649,15.9986344997,15.9986565341,15.9986785682,15.998700602,15.9987226355,15.9987446686,15.9987667014,15.9987887338,15.9988107659,15.9988327977,15.9988548291,15.9988768602,15.9988988909,15.9989209214, +15.9989429514,15.9989649812,15.9989870106,15.9990090397,15.9990310684,15.9990530968,15.9990751249,15.9990971526,15.99911918,15.9991412071,15.9991632338,15.9991852602,15.9992072862,15.9992293119,15.9992513373,15.9992733623, +15.999295387,15.9993174114,15.9993394354,15.9993614591,15.9993834825,15.9994055055,15.9994275282,15.9994495505,15.9994715725,15.9994935942,15.9995156155,15.9995376366,15.9995596572,15.9995816776,15.9996036975,15.9996257172, +15.9996477365,15.9996697555,15.9996917742,15.9997137925,15.9997358105,15.9997578281,15.9997798454,15.9998018624,15.999823879,15.9998458953,15.9998679113,15.9998899269,15.9999119422,15.9999339572,15.9999559718,15.9999779861 +]; diff --git a/rust/vendor/brotli/src/enc/vectorization.rs b/rust/vendor/brotli/src/enc/vectorization.rs new file mode 100755 index 0000000..cc9fbaf --- /dev/null +++ b/rust/vendor/brotli/src/enc/vectorization.rs @@ -0,0 +1,49 @@ +#![allow(unknown_lints)] +#![allow(unused_macros)] + +use enc::{v8, s8}; +use enc::util::FastLog2; +pub type Mem256f = v8; +pub type Mem256i = s8; +pub type v256 = v8; +pub type v256i = s8; +pub fn sum8(x: v256) -> f32 { + x.extract(0) + x.extract(1) + x.extract(2) + x.extract(3) + + x.extract(4) + x.extract(5) + x.extract(6) + x.extract(7) +} + +pub fn sum8i(x: v256i) -> i32 { + x.extract(0).wrapping_add(x.extract(1)).wrapping_add( x.extract(2)).wrapping_add( x.extract(3)).wrapping_add( + x.extract(4)).wrapping_add( x.extract(5)).wrapping_add( x.extract(6)).wrapping_add(x.extract(7)) +} + +pub fn log2i(x: v256i) -> v256 { + v256::new(FastLog2(x.extract(0) as u64), + FastLog2(x.extract(1) as u64), + FastLog2(x.extract(2) as u64), + FastLog2(x.extract(3) as u64), + FastLog2(x.extract(4) as u64), + FastLog2(x.extract(5) as u64), + FastLog2(x.extract(6) as u64), + FastLog2(x.extract(7) as u64)) +} +pub fn cast_i32_to_f32(x: v256i) -> v256 { + v256::new(x.extract(0) as f32, + x.extract(1) as f32, + x.extract(2) as f32, + x.extract(3) as f32, + x.extract(4) as f32, + x.extract(5) as f32, + x.extract(6) as f32, + x.extract(7) as f32) +} +pub fn cast_f32_to_i32(x: v256) -> v256i { + v256i::new(x.extract(0) as i32, + x.extract(1) as i32, + x.extract(2) as i32, + x.extract(3) as i32, + x.extract(4) as i32, + x.extract(5) as i32, + x.extract(6) as i32, + x.extract(7) as i32) +} diff --git a/rust/vendor/brotli/src/enc/weights.rs b/rust/vendor/brotli/src/enc/weights.rs new file mode 100644 index 0000000..f279a43 --- /dev/null +++ b/rust/vendor/brotli/src/enc/weights.rs @@ -0,0 +1,136 @@ +use core; +pub type Prob = u16; + +pub const BLEND_FIXED_POINT_PRECISION : i8 = 15; +#[allow(dead_code)] +pub const LOG2_SCALE : i32 = 15; +#[derive(Debug,Copy, Clone)] +pub struct Weights { + model_weights: [i32;2], + mixing_param: u8, + normalized_weight: Prob, +} +impl Default for Weights { + fn default() -> Self { + Self::new() + } +} +impl Weights { + pub fn new() -> Self { + Weights { + model_weights:[1;2], + mixing_param: 1, + normalized_weight: 1 << (BLEND_FIXED_POINT_PRECISION - 1), + } + } + #[allow(unused)] + #[inline(always)] + pub fn update(&mut self, model_probs: [Prob; 2], weighted_prob: Prob) { + debug_assert!(self.mixing_param != 0); + normalize_weights(&mut self.model_weights); + let w0new = compute_new_weight(model_probs, + weighted_prob, + self.model_weights, + false, + self.mixing_param - 1); + let w1new = compute_new_weight(model_probs, + weighted_prob, + self.model_weights, + true, + self.mixing_param - 1); + self.model_weights = [w0new, w1new]; + self.normalized_weight = compute_normalized_weight(self.model_weights); + } + #[allow(dead_code)] + #[inline(always)] + pub fn norm_weight(&self) -> Prob { + self.normalized_weight + } +} + +#[allow(dead_code)] +#[inline(always)] +fn compute_normalized_weight(model_weights: [i32;2]) -> Prob { + let total = i64::from(model_weights[0]) + i64::from(model_weights[1]); + let leading_zeros = total.leading_zeros(); + let shift = core::cmp::max(56 - (leading_zeros as i8), 0); + let total_8bit = total >> shift; + /*::probability::numeric::fast_divide_16bit_by_8bit( + ((model_weights[0] >> shift) as u16)<< 8, + ::probability::numeric::lookup_divisor8(total_8bit as u8)) << (BLEND_FIXED_POINT_PRECISION - 8) + */ + ((((model_weights[0] >> shift) as u16)<< 8) / total_8bit as u16/*fixme??*/) << (BLEND_FIXED_POINT_PRECISION - 8) +} + +#[allow(dead_code)] +#[cold] +fn fix_weights(weights: &mut [i32;2]) { + let ilog = 32 - core::cmp::min(weights[0].leading_zeros(), + weights[1].leading_zeros()); + let max_log = 24; + if ilog >= max_log { + weights[0] >>= ilog - max_log; + weights[1] >>= ilog - max_log; + } +} + +#[allow(dead_code)] +#[inline(always)] +fn normalize_weights(weights: &mut [i32;2]) { + if ((weights[0]|weights[1])&0x7f000000) != 0 { + fix_weights(weights); + } +} + +#[allow(dead_code)] +#[cfg(features="floating_point_context_mixing")] +fn compute_new_weight(probs: [Prob; 2], + weighted_prob: Prob, + weights: [i32;2], + index_equal_1: bool, + _speed: u8) -> i32{ // speed ranges from 1 to 14 inclusive + let index = index_equal_1 as usize; + let n1i = probs[index] as f64 / ((1i64 << LOG2_SCALE) as f64); + //let n0i = 1.0f64 - n1i; + let ni = 1.0f64; + let s1 = weighted_prob as f64 / ((1i64 << LOG2_SCALE) as f64); + let s0 = 1.0f64 - s1; + let s = 1.0f64; + //let p0 = s0; + let p1 = s1; + let wi = weights[index] as f64 / ((1i64 << LOG2_SCALE) as f64); + let mut wi_new = wi + (1.0 - p1) * (s * n1i - s1 * ni) / (s0 * s1); + let eps = 0.00001f64; + if !(wi_new > eps) { + wi_new = eps; + } + (wi_new * ((1i64 << LOG2_SCALE) as f64)) as i32 +} + +#[allow(dead_code)] +#[cfg(not(features="floating_point_context_mixing"))] +#[inline(always)] +fn compute_new_weight(probs: [Prob; 2], + weighted_prob: Prob, + weights: [i32;2], + index_equal_1: bool, + _speed: u8) -> i32{ // speed ranges from 1 to 14 inclusive + let index = index_equal_1 as usize; + let full_model_sum_p1 = i64::from(weighted_prob); + let full_model_total = 1i64 << LOG2_SCALE; + let full_model_sum_p0 = full_model_total.wrapping_sub(i64::from(weighted_prob)); + let n1i = i64::from(probs[index]); + let ni = 1i64 << LOG2_SCALE; + let error = full_model_total.wrapping_sub(full_model_sum_p1); + let wi = i64::from(weights[index]); + let efficacy = full_model_total.wrapping_mul(n1i) - full_model_sum_p1.wrapping_mul(ni); + //let geometric_probabilities = full_model_sum_p1 * full_model_sum_p0; + let log_geometric_probabilities = 64 - (full_model_sum_p1.wrapping_mul(full_model_sum_p0)).leading_zeros(); + //let scaled_geometric_probabilities = geometric_probabilities * S; + //let new_weight_adj = (error * efficacy) >> log_geometric_probabilities;// / geometric_probabilities; + //let new_weight_adj = (error * efficacy)/(full_model_sum_p1 * full_model_sum_p0); + let new_weight_adj = (error.wrapping_mul(efficacy)) >> log_geometric_probabilities; +// assert!(wi + new_weight_adj < (1i64 << 31)); + //print!("{} -> {} due to {:?} vs {}\n", wi as f64 / (weights[0] + weights[1]) as f64, (wi + new_weight_adj) as f64 /(weights[0] as i64 + new_weight_adj as i64 + weights[1] as i64) as f64, probs[index], weighted_prob); + core::cmp::max(1,wi.wrapping_add(new_weight_adj) as i32) +} diff --git a/rust/vendor/brotli/src/enc/worker_pool.rs b/rust/vendor/brotli/src/enc/worker_pool.rs new file mode 100755 index 0000000..f380c62 --- /dev/null +++ b/rust/vendor/brotli/src/enc/worker_pool.rs @@ -0,0 +1,321 @@ +#![cfg(feature="std")] +use core::mem; +use std; + +use std::sync:: { + Arc, + Mutex, + Condvar, +}; +use alloc::{SliceWrapper, Allocator}; +use enc::BrotliAlloc; +use enc::BrotliEncoderParams; +use enc::backward_references::UnionHasher; +use enc::threading::{ + CompressMulti, + SendAlloc, + InternalSendAlloc, + BatchSpawnableLite, + Joinable, + Owned, + CompressionThreadResult, + InternalOwned, + BrotliEncoderThreadError, +}; +use enc::fixed_queue::{MAX_THREADS, FixedQueue}; +// in-place thread create + +use std::sync::RwLock; + + + + +struct JobReply { + result:T, + work_id: u64, +} + +struct JobRequest { + func: fn(ExtraInput, usize, usize, &U, Alloc) -> ReturnValue, + extra_input: ExtraInput, + index: usize, + thread_size: usize, + data: Arc>, + alloc: Alloc, + work_id: u64, +} + + +struct WorkQueue { + jobs: FixedQueue>, + results: FixedQueue>, + shutdown: bool, + immediate_shutdown: bool, + num_in_progress: usize, + cur_work_id: u64, +} +impl Default for WorkQueue { + fn default() -> Self { + WorkQueue { + jobs: FixedQueue::default(), + results: FixedQueue::default(), + num_in_progress: 0, + immediate_shutdown: false, + shutdown:false, + cur_work_id: 0, + } + } +} + +pub struct GuardedQueue(Arc<(Mutex>, Condvar)>); +pub struct WorkerPool { + queue: GuardedQueue, + join: [Option>;MAX_THREADS], +} + +impl Drop for WorkerPool { + fn drop(&mut self) { + { + let &(ref lock, ref cvar) = &*self.queue.0; + let mut local_queue = lock.lock().unwrap(); + local_queue.immediate_shutdown = true; + cvar.notify_all(); + } + for thread_handle in self.join.iter_mut() { + if let Some(th) = mem::replace(thread_handle, None) { + th.join().unwrap(); + } + } + } +} +impl WorkerPool { + fn do_work(queue:Arc<(Mutex>, Condvar)>) { + loop { + let ret; + { // need to drop possible job before the final lock is taken, + // so refcount of possible_job Arc is 0 by the time the job is delivered + // to the caller. We basically need a barrier (the lock) to happen + // after the destructor that decrefs possible_job + let possible_job; + { + let &(ref lock, ref cvar) = &*queue; + let mut local_queue = lock.lock().unwrap(); + if local_queue.immediate_shutdown { + break; + } + possible_job = if let Some(res) = local_queue.jobs.pop() { + cvar.notify_all(); + local_queue.num_in_progress += 1; + res + } else { + if local_queue.shutdown{ + break; + } else { + let _ = cvar.wait(local_queue); // unlock immediately, unfortunately + continue; + } + }; + } + ret = if let Ok(job_data) = possible_job.data.read() { + JobReply{ + result: (possible_job.func)(possible_job.extra_input, + possible_job.index, + possible_job.thread_size, + &*job_data, + possible_job.alloc), + work_id:possible_job.work_id, + } + } else{ + break; // poisoned lock + }; + } + { + let &(ref lock, ref cvar) = &*queue; + let mut local_queue = lock.lock().unwrap(); + local_queue.num_in_progress -= 1; + local_queue.results.push(ret).unwrap(); + cvar.notify_all(); + } + } + } + fn _push_job(&mut self, job:JobRequest) { + let &(ref lock, ref cvar) = &*self.queue.0; + let mut local_queue = lock.lock().unwrap(); + loop { + if local_queue.jobs.size() + local_queue.num_in_progress + local_queue.results.size() < MAX_THREADS { + local_queue.jobs.push(job).unwrap(); + cvar.notify_all(); + break; + } + local_queue = cvar.wait(local_queue).unwrap(); + } + + } + fn _try_push_job(&mut self, job:JobRequest)->Result<(),JobRequest> { + let &(ref lock, ref cvar) = &*self.queue.0; + let mut local_queue = lock.lock().unwrap(); + if local_queue.jobs.size() + local_queue.num_in_progress + local_queue.results.size() < MAX_THREADS { + local_queue.jobs.push(job).unwrap(); + cvar.notify_all(); + Ok(()) + } else { + Err(job) + } + } + fn start(queue:Arc<(Mutex>, Condvar)>) -> std::thread::JoinHandle<()> { + std::thread::spawn(move || Self::do_work(queue)) + } + pub fn new(num_threads: usize) -> Self { + let queue = Arc::new((Mutex::new(WorkQueue::default()), Condvar::new())); + WorkerPool{ + queue: GuardedQueue(queue.clone()), + join:[ + Some(Self::start(queue.clone())), + if 1 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 2 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 3 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 4 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 5 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 6 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 7 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 8 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 9 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 10 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 11 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 12 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 13 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 14 < num_threads { Some(Self::start(queue.clone())) } else {None}, + if 15 < num_threads { Some(Self::start(queue.clone())) } else {None}, + ], + } + } +} + + +pub fn new_work_pool+Send+'static+Sync>( + num_threads:usize, +) -> WorkerPool, + UnionHasher, + Alloc, + (SliceW, BrotliEncoderParams)> + where >::AllocatedMemory:Send+'static, + >::AllocatedMemory: Send+Sync, + >::AllocatedMemory: Send+Sync { + WorkerPool::new(num_threads) +} + +pub struct WorkerJoinable { + queue: GuardedQueue, + work_id: u64, +} +impl Joinable for WorkerJoinable { + fn join(self) -> Result { + let &(ref lock, ref cvar) = &*self.queue.0; + let mut local_queue = lock.lock().unwrap(); + loop { + match local_queue.results.remove(|data:&Option>|if let Some(ref item) = *data { item.work_id == self.work_id} else {false}) { + Some(matched) => return Ok(matched.result), + None => local_queue = cvar.wait(local_queue).unwrap(), + }; + } + } +} + + +impl BatchSpawnableLite for WorkerPool + where >::AllocatedMemory:Send+'static, + >::AllocatedMemory: Send+Sync, + >::AllocatedMemory: Send+Sync { + type FinalJoinHandle = Arc>; + type JoinHandle = WorkerJoinable; + + fn make_spawner( + &mut self, + input: &mut Owned, + ) -> Self::FinalJoinHandle { + std::sync::Arc::>::new(RwLock::new(mem::replace(input, Owned(InternalOwned::Borrowed)).unwrap())) + } + fn spawn( + &mut self, + locked_input: &mut Self::FinalJoinHandle, + work:&mut SendAlloc, + index: usize, + num_threads: usize, + f: fn(ExtraInput, usize, usize, &U, Alloc) -> ReturnValue, + ) { + assert!(num_threads <= MAX_THREADS); + let &(ref lock, ref cvar) = &*self.queue.0; + let mut local_queue = lock.lock().unwrap(); + loop { + if local_queue.jobs.size() + local_queue.num_in_progress + local_queue.results.size() <= MAX_THREADS { + let work_id = local_queue.cur_work_id; + local_queue.cur_work_id += 1; + let (local_alloc, local_extra) = work.replace_with_default(); + local_queue.jobs.push(JobRequest{ + func:f, + extra_input:local_extra, + index: index, + thread_size: num_threads, + data: locked_input.clone(), + alloc: local_alloc, + work_id:work_id, + }).unwrap(); + *work = SendAlloc(InternalSendAlloc::Join(WorkerJoinable{queue:GuardedQueue(self.queue.0.clone()), work_id:work_id})); + cvar.notify_all(); + break; + } else{ + local_queue = cvar.wait(local_queue).unwrap(); // hope room frees up + } + } + } +} + + +pub fn compress_worker_pool+Send+'static+Sync> ( + params:&BrotliEncoderParams, + owned_input: &mut Owned, + output: &mut [u8], + alloc_per_thread:&mut [SendAlloc, + UnionHasher, + Alloc, + , UnionHasher, Alloc, (SliceW, BrotliEncoderParams)> as BatchSpawnableLite, UnionHasher, Alloc, (SliceW, BrotliEncoderParams)>>::JoinHandle>], + work_pool: &mut WorkerPool, UnionHasher, Alloc, (SliceW, BrotliEncoderParams)>, +) -> Result + where >::AllocatedMemory: Send, + >::AllocatedMemory: Send+Sync, + >::AllocatedMemory: Send+Sync { + CompressMulti(params, owned_input, output, alloc_per_thread, work_pool) +} + +// out of place thread create diff --git a/rust/vendor/brotli/src/enc/writer.rs b/rust/vendor/brotli/src/enc/writer.rs new file mode 100755 index 0000000..c484909 --- /dev/null +++ b/rust/vendor/brotli/src/enc/writer.rs @@ -0,0 +1,296 @@ +#![cfg_attr(not(feature="std"), allow(unused_imports))] +use core; +use super::encode::{BrotliEncoderCreateInstance, BrotliEncoderDestroyInstance, + BrotliEncoderParameter, BrotliEncoderSetParameter, BrotliEncoderOperation, + BrotliEncoderStateStruct, BrotliEncoderCompressStream, BrotliEncoderIsFinished, + BrotliEncoderHasMoreOutput}; +use super::backward_references::BrotliEncoderParams; +use brotli_decompressor::CustomWrite; +use super::interface; +#[cfg(feature="std")] +pub use brotli_decompressor::{IntoIoWriter, IoWriterWrapper}; +use super::combined_alloc::BrotliAlloc; +pub use alloc::{AllocatedStackMemory, Allocator, SliceWrapper, SliceWrapperMut, StackAllocator}; +#[cfg(feature="std")] +pub use alloc_stdlib::StandardAlloc; +#[cfg(feature="std")] +use std::io; + +#[cfg(feature="std")] +use std::io::{Write, Error, ErrorKind}; + + + +#[cfg(feature="std")] +pub struct CompressorWriterCustomAlloc, + Alloc: BrotliAlloc> ( + CompressorWriterCustomIo, + BufferType, + Alloc>); + + +#[cfg(feature="std")] +impl, + Alloc: BrotliAlloc> + CompressorWriterCustomAlloc + { + + pub fn new(w: W, buffer : BufferType, + alloc: Alloc, + q: u32, + lgwin: u32) -> Self { + CompressorWriterCustomAlloc::( + CompressorWriterCustomIo::, + BufferType, + Alloc>::new( + IntoIoWriter::(w), + buffer, + alloc, + Error::new(ErrorKind::InvalidData, + "Invalid Data"), + q, lgwin)) + } + + pub fn get_ref(&self) -> &W { + &self.0.get_ref().0 + } + pub fn get_mut(&mut self) -> &mut W { + &mut self.0.get_mut().0 + } + pub fn into_inner(self) -> W { + self.0.into_inner().0 + } +} + +#[cfg(feature="std")] +impl, + Alloc: BrotliAlloc> + Write for CompressorWriterCustomAlloc { + fn write(&mut self, buf: &[u8]) -> Result { + self.0.write(buf) + } + fn flush(&mut self) -> Result<(), Error> { + self.0.flush() + } +} + + +#[cfg(feature="std")] +pub struct CompressorWriter(CompressorWriterCustomAlloc>::AllocatedMemory, + StandardAlloc>); + + +#[cfg(feature="std")] +impl CompressorWriter { + pub fn new(w: W, buffer_size: usize, q: u32, lgwin: u32) -> Self { + let mut alloc = StandardAlloc::default(); + let buffer = >::alloc_cell(&mut alloc, if buffer_size == 0 { 4096} else {buffer_size}); + CompressorWriter::(CompressorWriterCustomAlloc::new(w, + buffer, + alloc, + q, + lgwin)) + } + + pub fn with_params(w: W, buffer_size: usize, params: &BrotliEncoderParams) -> Self { + let mut writer = Self::new(w, buffer_size, params.quality as u32, params.lgwin as u32); + (writer.0).0.state.params = params.clone(); + writer + } + + pub fn get_ref(&self) -> &W { + self.0.get_ref() + } + pub fn get_mut(&mut self) -> &mut W { + self.0.get_mut() + } + pub fn into_inner(self) -> W { + self.0.into_inner() + } +} + + + +#[cfg(feature="std")] +impl Write for CompressorWriter { + fn write(&mut self, buf: &[u8]) -> Result { + self.0.write(buf) + } + fn flush(&mut self) -> Result<(), Error> { + self.0.flush() + } +} + +pub struct CompressorWriterCustomIo, + BufferType: SliceWrapperMut, + Alloc: BrotliAlloc> +{ + output_buffer: BufferType, + total_out: Option, + output: Option, + error_if_invalid_data: Option, + state: BrotliEncoderStateStruct, +} +pub fn write_all>(writer: &mut W, mut buf : &[u8]) -> Result<(), ErrType> { + while buf.len() != 0 { + match writer.write(buf) { + Ok(bytes_written) => buf = &buf[bytes_written..], + Err(e) => return Err(e), + } + } + Ok(()) +} +impl, + BufferType : SliceWrapperMut, + Alloc: BrotliAlloc> +CompressorWriterCustomIo +{ + + pub fn new(w: W, buffer : BufferType, + alloc : Alloc, + invalid_data_error_type : ErrType, + q: u32, + lgwin: u32) -> Self { + let mut ret = CompressorWriterCustomIo{ + output_buffer : buffer, + total_out : Some(0), + output: Some(w), + state : BrotliEncoderCreateInstance(alloc), + error_if_invalid_data : Some(invalid_data_error_type), + }; + BrotliEncoderSetParameter(&mut ret.state, + BrotliEncoderParameter::BROTLI_PARAM_QUALITY, + q as (u32)); + BrotliEncoderSetParameter(&mut ret.state, + BrotliEncoderParameter::BROTLI_PARAM_LGWIN, + lgwin as (u32)); + + ret + } + fn flush_or_close(&mut self, op:BrotliEncoderOperation) -> Result<(), ErrType>{ + let mut nop_callback = |_data:&mut interface::PredictionModeContextMap, + _cmds: &mut [interface::StaticCommand], + _mb: interface::InputPair, _mfv: &mut Alloc|(); + + loop { + let mut avail_in : usize = 0; + let mut input_offset : usize = 0; + let mut avail_out : usize = self.output_buffer.slice_mut().len(); + let mut output_offset : usize = 0; + let ret = BrotliEncoderCompressStream( + &mut self.state, + op, + &mut avail_in, + &[], + &mut input_offset, + &mut avail_out, + self.output_buffer.slice_mut(), + &mut output_offset, + &mut self.total_out, + &mut nop_callback); + if output_offset > 0 { + match write_all(self.output.as_mut().unwrap(), &self.output_buffer.slice_mut()[..output_offset]) { + Ok(_) => {}, + Err(e) => return Err(e), + } + } + if ret <= 0 { + return Err(self.error_if_invalid_data.take().unwrap()); + } + if let BrotliEncoderOperation::BROTLI_OPERATION_FLUSH = op { + if BrotliEncoderHasMoreOutput(&mut self.state) != 0 { + continue; + } + return Ok(()); + } + if BrotliEncoderIsFinished(&mut self.state) != 0 { + return Ok(()); + } + } + } + + pub fn get_ref(&self) -> &W { + self.output.as_ref().unwrap() + } + pub fn get_mut(&mut self) -> &mut W { + self.output.as_mut().unwrap() + } + pub fn into_inner(mut self) -> W { + match self.flush_or_close(BrotliEncoderOperation::BROTLI_OPERATION_FINISH) { + Ok(_) => {}, + Err(_) => {}, + } + core::mem::replace(&mut self.output, None).unwrap() + } +} + +impl, + BufferType : SliceWrapperMut, + Alloc: BrotliAlloc> Drop for +CompressorWriterCustomIo { + fn drop(&mut self) { + if self.output.is_some() { + match self.flush_or_close(BrotliEncoderOperation::BROTLI_OPERATION_FINISH) { + Ok(_) => {}, + Err(_) => {}, + } + } + BrotliEncoderDestroyInstance(&mut self.state); + } +} +impl, + BufferType : SliceWrapperMut, + Alloc: BrotliAlloc> CustomWrite for +CompressorWriterCustomIo { + fn write(&mut self, buf: & [u8]) -> Result { + let mut nop_callback = |_data:&mut interface::PredictionModeContextMap, + _cmds: &mut [interface::StaticCommand], + _mb: interface::InputPair, _mfv: &mut Alloc|(); + let mut avail_in = buf.len(); + let mut input_offset : usize = 0; + while avail_in != 0 { + let mut output_offset = 0; + let mut avail_out = self.output_buffer.slice_mut().len(); + let ret = BrotliEncoderCompressStream( + &mut self.state, + BrotliEncoderOperation::BROTLI_OPERATION_PROCESS, + &mut avail_in, + &buf[..], + &mut input_offset, + &mut avail_out, + self.output_buffer.slice_mut(), + &mut output_offset, + &mut self.total_out, + &mut nop_callback); + if output_offset > 0 { + match write_all(self.output.as_mut().unwrap(), &self.output_buffer.slice_mut()[..output_offset]) { + Ok(_) => {}, + Err(e) => return Err(e), + } + } + if ret <= 0 { + return Err(self.error_if_invalid_data.take().unwrap()); + } + } + Ok(buf.len()) + } + fn flush(&mut self) -> Result<(), ErrType > { + match self.flush_or_close(BrotliEncoderOperation::BROTLI_OPERATION_FLUSH) { + Ok(_) => {}, + Err(e) => return Err(e), + } + self.output.as_mut().unwrap().flush() + } +} diff --git a/rust/vendor/brotli/src/ffi/alloc_util.rs b/rust/vendor/brotli/src/ffi/alloc_util.rs new file mode 100644 index 0000000..3d024a0 --- /dev/null +++ b/rust/vendor/brotli/src/ffi/alloc_util.rs @@ -0,0 +1,66 @@ +use alloc::{Allocator,SliceWrapper,SliceWrapperMut}; + +use ::enc::BrotliAlloc; +use brotli_decompressor::ffi::alloc_util::SubclassableAllocator; + + + + + + + +pub struct BrotliSubclassableAllocator(SubclassableAllocator); + +impl BrotliSubclassableAllocator { + pub fn new(s:SubclassableAllocator) -> BrotliSubclassableAllocator { + BrotliSubclassableAllocator(s) + } +} + +#[derive(Default)] +pub struct SendableMemoryBlock(>::AllocatedMemory); +impl SliceWrapperMut for SendableMemoryBlock { + fn slice_mut(&mut self) -> &mut [T] { + self.0.slice_mut() + } +} +impl SliceWrapper for SendableMemoryBlock { + fn slice(&self) -> &[T] { + self.0.slice() + } +} +impl Allocator for BrotliSubclassableAllocator { + type AllocatedMemory = SendableMemoryBlock; + fn alloc_cell(&mut self, s:usize) -> Self::AllocatedMemory { + SendableMemoryBlock(self.0.alloc_cell(s)) + } + fn free_cell(&mut self, data:Self::AllocatedMemory) { + self.0.free_cell(data.0) + } +} + + +impl BrotliAlloc for BrotliSubclassableAllocator { +} +#[cfg(not(feature="safe"))] +unsafe impl Send for BrotliSubclassableAllocator{} + + +#[cfg(not(feature="safe"))] +unsafe impl Send for SendableMemoryBlock{} + + + +#[cfg(not(feature="std"))] +#[cfg(feature="no-stdlib-ffi-binding")] +#[panic_handler] +extern fn panic_impl(_: &::core::panic::PanicInfo) -> ! { + loop {} +} + +#[cfg(not(feature="std"))] +#[cfg(feature="no-stdlib-ffi-binding")] +#[lang = "eh_personality"] +extern "C" fn eh_personality() { +} + diff --git a/rust/vendor/brotli/src/ffi/broccoli.rs b/rust/vendor/brotli/src/ffi/broccoli.rs new file mode 100644 index 0000000..65a694e --- /dev/null +++ b/rust/vendor/brotli/src/ffi/broccoli.rs @@ -0,0 +1,135 @@ +use core; +pub use brotli_decompressor::ffi::interface::{ + c_void +}; +use brotli_decompressor::ffi::{ + slice_from_raw_parts_or_nil, + slice_from_raw_parts_or_nil_mut, +}; +use concat::BroCatli; +pub use concat::BroCatliResult; +pub type BroccoliResult = BroCatliResult; +// a tool to concatenate brotli files together + +#[repr(C)] +pub struct BroccoliState { + more_data: *mut c_void, + current_data: [u8;120], +} + +impl Clone for BroccoliState { + fn clone(&self) -> BroccoliState { + let mut cd = [0u8; 120]; + cd.clone_from_slice(&self.current_data[..]); + BroccoliState{ + more_data:self.more_data, + current_data:cd, + } + } +} + +impl Copy for BroccoliState{} + +impl Default for BroccoliState { + fn default() -> BroccoliState { + BroCatli::new().into() + } +} +impl From for BroccoliState { + fn from(data: BroCatli) -> BroccoliState { + let mut buffer = [0u8; 120]; + data.serialize_to_buffer(&mut buffer[..]).unwrap(); + BroccoliState{ + more_data: core::ptr::null_mut(), + current_data:buffer, + } + } +} +impl Into for BroccoliState { + fn into(self) -> BroCatli { + BroCatli::deserialize_from_buffer(&self.current_data[..]).unwrap() + } +} + +#[no_mangle] +pub extern fn BroccoliCreateInstance() -> BroccoliState { + BroCatli::new().into() +} +#[no_mangle] +pub extern fn BroccoliCreateInstanceWithWindowSize(window_size: u8) -> BroccoliState { + BroCatli::new_with_window_size(window_size).into() +} +#[no_mangle] +pub extern fn BroccoliDestroyInstance(_state: BroccoliState) { +} + +#[no_mangle] +pub unsafe extern fn BroccoliNewBrotliFile(state: *mut BroccoliState) { + let mut bro_catli: BroCatli = (*state).into(); + bro_catli.new_brotli_file(); + *state = BroccoliState::from(bro_catli); +} + +#[no_mangle] +pub unsafe extern fn BroccoliConcatStream( + state: *mut BroccoliState, + available_in: *mut usize, + input_buf_ptr: *mut*const u8, + available_out: *mut usize, + output_buf_ptr: *mut*mut u8) -> BroccoliResult { + let input_buf = slice_from_raw_parts_or_nil(*input_buf_ptr, *available_in); + let output_buf = slice_from_raw_parts_or_nil_mut(*output_buf_ptr, *available_out); + let mut input_offset = 0usize; + let mut output_offset = 0usize; + let mut bro_catli: BroCatli = (*state).into(); + let ret = bro_catli.stream(input_buf, &mut input_offset, output_buf, &mut output_offset); + *input_buf_ptr = (*input_buf_ptr).offset(input_offset as isize); + *output_buf_ptr = (*output_buf_ptr).offset(output_offset as isize); + *available_in -= input_offset; + *available_out -= output_offset; + *state = BroccoliState::from(bro_catli); + ret +} + +#[no_mangle] +pub unsafe extern fn BroccoliConcatStreaming( + state: *mut BroccoliState, + available_in: *mut usize, + mut input_buf: *const u8, + available_out: *mut usize, + mut output_buf: *mut u8) -> BroccoliResult { + BroccoliConcatStream( + state, + available_in, + &mut input_buf, + available_out, + &mut output_buf) + +} + +#[no_mangle] +pub unsafe extern fn BroccoliConcatFinish( + state: *mut BroccoliState, + available_out: *mut usize, + output_buf_ptr: *mut*mut u8) -> BroCatliResult { + let output_buf = slice_from_raw_parts_or_nil_mut(*output_buf_ptr, *available_out); + let mut output_offset = 0usize; + let mut bro_catli: BroCatli = (*state).into(); + let ret = bro_catli.finish(output_buf, &mut output_offset); + *output_buf_ptr = (*output_buf_ptr).offset(output_offset as isize); + *available_out -= output_offset; + *state = BroccoliState::from(bro_catli); + ret +} + +// exactly the same as BrotliConcatFinish but without the indirect +#[no_mangle] +pub unsafe extern fn BroccoliConcatFinished( + state: *mut BroccoliState, + available_out: *mut usize, + mut output_buf: *mut u8) -> BroCatliResult { + BroccoliConcatFinish( + state, + available_out, + &mut output_buf) +} diff --git a/rust/vendor/brotli/src/ffi/compressor.rs b/rust/vendor/brotli/src/ffi/compressor.rs new file mode 100755 index 0000000..f5e127c --- /dev/null +++ b/rust/vendor/brotli/src/ffi/compressor.rs @@ -0,0 +1,393 @@ +#![cfg(not(feature="safe"))] + +#[cfg(feature="std")] +use std::{panic,thread, io}; +#[cfg(feature="std")] +use std::io::Write; + +use core; +use brotli_decompressor::ffi::alloc_util; +use brotli_decompressor::ffi::alloc_util::SubclassableAllocator; +use brotli_decompressor::ffi::interface::{ + brotli_alloc_func, + brotli_free_func, + CAllocator, + c_void, +}; +use brotli_decompressor::ffi::{ + slice_from_raw_parts_or_nil, + slice_from_raw_parts_or_nil_mut, +}; +use ::enc::encode::BrotliEncoderStateStruct; +use super::alloc_util::BrotliSubclassableAllocator; + +#[repr(C)] +pub enum BrotliEncoderOperation { + BROTLI_OPERATION_PROCESS = 0, + BROTLI_OPERATION_FLUSH = 1, + BROTLI_OPERATION_FINISH = 2, + BROTLI_OPERATION_EMIT_METADATA = 3, +} + +#[repr(C)] +pub enum BrotliEncoderMode { + BROTLI_MODE_GENERIC = 0, + BROTLI_MODE_TEXT = 1, + BROTLI_MODE_FONT = 2, + BROTLI_MODE_FORCE_LSB_PRIOR = 3, + BROTLI_MODE_FORCE_MSB_PRIOR = 4, + BROTLI_MODE_FORCE_UTF8_PRIOR = 5, + BROTLI_MODE_FORCE_SIGNED_PRIOR = 6, +} + +#[repr(C)] +pub struct BrotliEncoderState { + pub custom_allocator: CAllocator, + pub compressor: BrotliEncoderStateStruct, +} + +#[cfg(not(feature="std"))] +fn brotli_new_compressor_without_custom_alloc(_to_box: BrotliEncoderState) -> *mut BrotliEncoderState{ + panic!("Must supply allocators if calling divans when compiled without features=std"); +} + +#[cfg(feature="std")] +fn brotli_new_compressor_without_custom_alloc(to_box: BrotliEncoderState) -> *mut BrotliEncoderState{ + alloc_util::Box::::into_raw( + alloc_util::Box::::new(to_box)) +} +#[cfg(feature="std")] +unsafe fn free_compressor_no_custom_alloc(state_ptr: *mut BrotliEncoderState) { + let _state = alloc_util::Box::from_raw(state_ptr); +} + +#[cfg(not(feature="std"))] +unsafe fn free_compressor_no_custom_alloc(_state_ptr: *mut BrotliEncoderState) { + unreachable!(); +} + + + + +#[no_mangle] +pub unsafe extern fn BrotliEncoderCreateInstance( + alloc_func: brotli_alloc_func, + free_func: brotli_free_func, + opaque: *mut c_void, +) -> *mut BrotliEncoderState { + match catch_panic_cstate(|| { + let allocators = CAllocator { + alloc_func:alloc_func, + free_func:free_func, + opaque:opaque, + }; + let to_box = BrotliEncoderState { + custom_allocator: allocators.clone(), + compressor: ::enc::encode::BrotliEncoderCreateInstance( + BrotliSubclassableAllocator::new( + SubclassableAllocator::new(allocators.clone())), + ), + }; + if let Some(alloc) = alloc_func { + if free_func.is_none() { + panic!("either both alloc and free must exist or neither"); + } + let ptr = alloc(allocators.opaque, core::mem::size_of::()); + let brotli_decoder_state_ptr = core::mem::transmute::<*mut c_void, *mut BrotliEncoderState>(ptr); + core::ptr::write(brotli_decoder_state_ptr, to_box); + brotli_decoder_state_ptr + } else { + brotli_new_compressor_without_custom_alloc(to_box) + } + }) { + Ok(ret) => ret, + Err(err) => { + error_print(err); + core::ptr::null_mut() + } + } +} + +#[no_mangle] +pub unsafe extern fn BrotliEncoderSetParameter( + state_ptr: *mut BrotliEncoderState, + param: ::enc::encode::BrotliEncoderParameter, + value: u32, +) -> i32 { + ::enc::encode::BrotliEncoderSetParameter(&mut (*state_ptr).compressor, param, value) +} + +#[no_mangle] +pub unsafe extern fn BrotliEncoderDestroyInstance(state_ptr: *mut BrotliEncoderState) { + if state_ptr.is_null() { + return; + } + ::enc::encode::BrotliEncoderDestroyInstance(&mut (*state_ptr).compressor); + if let Some(_) = (*state_ptr).custom_allocator.alloc_func { + if let Some(free_fn) = (*state_ptr).custom_allocator.free_func { + let _to_free = core::ptr::read(state_ptr); + let ptr = core::mem::transmute::<*mut BrotliEncoderState, *mut c_void>(state_ptr); + free_fn((*state_ptr).custom_allocator.opaque, ptr); + } + } else { + free_compressor_no_custom_alloc(state_ptr); + } +} +#[no_mangle] +pub unsafe extern fn BrotliEncoderIsFinished( + state_ptr: *mut BrotliEncoderState, +) -> i32 { + ::enc::encode::BrotliEncoderIsFinished(&mut (*state_ptr).compressor) +} + +#[no_mangle] +pub unsafe extern fn BrotliEncoderHasMoreOutput( + state_ptr: *mut BrotliEncoderState, +) -> i32 { + ::enc::encode::BrotliEncoderHasMoreOutput(&mut (*state_ptr).compressor) +} + +#[no_mangle] +pub unsafe extern fn BrotliEncoderSetCustomDictionary( + state_ptr: *mut BrotliEncoderState, + size: usize, + dict: *const u8, +) { + if let Err(panic_err) = catch_panic(|| { + let dict_slice = slice_from_raw_parts_or_nil(dict, size); + ::enc::encode::BrotliEncoderSetCustomDictionary(&mut (*state_ptr).compressor, size, dict_slice); + 0 + }) { + error_print(panic_err); + } +} + +#[no_mangle] +pub unsafe extern fn BrotliEncoderTakeOutput( + state_ptr: *mut BrotliEncoderState, + size: *mut usize, +) -> *const u8 { + ::enc::encode::BrotliEncoderTakeOutput(&mut (*state_ptr).compressor, &mut *size).as_ptr() +} +#[no_mangle] +pub extern fn BrotliEncoderVersion() -> u32 { + ::enc::encode::BrotliEncoderVersion() +} +#[no_mangle] +pub extern fn BrotliEncoderMaxCompressedSize(input_size: usize) -> usize { + ::enc::encode::BrotliEncoderMaxCompressedSize(input_size) +} +#[no_mangle] +pub unsafe extern fn BrotliEncoderCompress( + quality: i32, + lgwin: i32, + mode: BrotliEncoderMode, + input_size: usize, + input_buffer: *const u8, + encoded_size: *mut usize, + encoded_buffer: *mut u8) -> i32 { + match catch_panic(|| { + let input_buf = slice_from_raw_parts_or_nil(input_buffer, input_size); + let encoded_buf = slice_from_raw_parts_or_nil_mut(encoded_buffer, *encoded_size); + let allocators = CAllocator { + alloc_func:None, + free_func:None, + opaque:core::ptr::null_mut(), + }; + let translated_mode = match mode { + BrotliEncoderMode::BROTLI_MODE_GENERIC => + ::enc::backward_references::BrotliEncoderMode::BROTLI_MODE_GENERIC, + BrotliEncoderMode::BROTLI_MODE_TEXT => + ::enc::backward_references::BrotliEncoderMode::BROTLI_MODE_TEXT, + BrotliEncoderMode::BROTLI_MODE_FONT => + ::enc::backward_references::BrotliEncoderMode::BROTLI_MODE_FONT, + BrotliEncoderMode::BROTLI_MODE_FORCE_LSB_PRIOR => + ::enc::backward_references::BrotliEncoderMode::BROTLI_FORCE_LSB_PRIOR, + BrotliEncoderMode::BROTLI_MODE_FORCE_MSB_PRIOR => + ::enc::backward_references::BrotliEncoderMode::BROTLI_FORCE_MSB_PRIOR, + BrotliEncoderMode::BROTLI_MODE_FORCE_UTF8_PRIOR => + ::enc::backward_references::BrotliEncoderMode::BROTLI_FORCE_UTF8_PRIOR, + BrotliEncoderMode::BROTLI_MODE_FORCE_SIGNED_PRIOR => + ::enc::backward_references::BrotliEncoderMode::BROTLI_FORCE_SIGNED_PRIOR, + }; + let mut m8 = BrotliSubclassableAllocator::new( + SubclassableAllocator::new(allocators.clone())); + let empty_m8 = BrotliSubclassableAllocator::new( + SubclassableAllocator::new(allocators.clone())); + + ::enc::encode::BrotliEncoderCompress( + empty_m8, + &mut m8, + quality, + lgwin, + translated_mode, + input_size, + input_buf, + &mut *encoded_size, + encoded_buf, + &mut |_a,_b,_c,_d|(), + ) + + }) { + Ok(ret) => ret, + Err(panic_err) => { + error_print(panic_err); + 0 + }, + } +} + +#[no_mangle] +pub unsafe extern fn BrotliEncoderCompressStreaming( + state_ptr: *mut BrotliEncoderState, + op: BrotliEncoderOperation, + available_in: *mut usize, + mut input_buf: *const u8, + available_out: *mut usize, + mut output_buf: *mut u8, +) -> i32 { + BrotliEncoderCompressStream(state_ptr, + op, + available_in, + &mut input_buf, + available_out, + &mut output_buf, + core::ptr::null_mut()) + +} + +#[no_mangle] +pub unsafe extern fn BrotliEncoderCompressStream( + state_ptr: *mut BrotliEncoderState, + op: BrotliEncoderOperation, + available_in: *mut usize, + input_buf_ptr: *mut*const u8, + available_out: *mut usize, + output_buf_ptr: *mut*mut u8, + total_out: *mut usize) -> i32 { + match catch_panic(|| { + let mut input_offset = 0usize; + let mut output_offset = 0usize; + let result; + let translated_op = match op { + BrotliEncoderOperation::BROTLI_OPERATION_PROCESS => + ::enc::encode::BrotliEncoderOperation::BROTLI_OPERATION_PROCESS, + BrotliEncoderOperation::BROTLI_OPERATION_FLUSH => + ::enc::encode::BrotliEncoderOperation::BROTLI_OPERATION_FLUSH, + BrotliEncoderOperation::BROTLI_OPERATION_FINISH => + ::enc::encode::BrotliEncoderOperation::BROTLI_OPERATION_FINISH, + BrotliEncoderOperation::BROTLI_OPERATION_EMIT_METADATA => + ::enc::encode::BrotliEncoderOperation::BROTLI_OPERATION_EMIT_METADATA, + }; + { + let (input_buf, input_any):(&[u8],bool) = if *available_in != 0 { + (slice_from_raw_parts_or_nil(*input_buf_ptr, *available_in), true) + } else { + (&[], false) + }; + let (output_buf, output_any):(&mut[u8],bool) = if *available_out != 0 { + (slice_from_raw_parts_or_nil_mut(*output_buf_ptr, *available_out), true) + } else { + (&mut [], false) + }; + let mut to = Some(0usize); + result = ::enc::encode::BrotliEncoderCompressStream( + &mut (*state_ptr).compressor, + translated_op, + &mut *available_in, + input_buf, + &mut input_offset, + &mut *available_out, + output_buf, + &mut output_offset, + &mut to, + &mut |_a,_b,_c,_d|(), + ); + if !total_out.is_null() { + *total_out = to.unwrap_or(0); + } + if input_any { + *input_buf_ptr = (*input_buf_ptr).offset(input_offset as isize); + } + if output_any { + *output_buf_ptr = (*output_buf_ptr).offset(output_offset as isize); + } + } + result + }) { + Ok(ret) => ret, + Err(panic_err) => { + error_print(panic_err); + 0 + }, + } +} + + +#[no_mangle] +pub unsafe extern fn BrotliEncoderMallocU8(state_ptr: *mut BrotliEncoderState, size: usize) -> *mut u8 { + if let Some(alloc_fn) = (*state_ptr).custom_allocator.alloc_func { + return core::mem::transmute::<*mut c_void, *mut u8>(alloc_fn((*state_ptr).custom_allocator.opaque, size)); + } else { + return alloc_util::alloc_stdlib(size); + } +} + +#[no_mangle] +pub unsafe extern fn BrotliEncoderFreeU8(state_ptr: *mut BrotliEncoderState, data: *mut u8, size: usize) { + if let Some(free_fn) = (*state_ptr).custom_allocator.free_func { + free_fn((*state_ptr).custom_allocator.opaque, core::mem::transmute::<*mut u8, *mut c_void>(data)); + } else { + alloc_util::free_stdlib(data, size); + } +} + +#[no_mangle] +pub unsafe extern fn BrotliEncoderMallocUsize(state_ptr: *mut BrotliEncoderState, size: usize) -> *mut usize { + if let Some(alloc_fn) = (*state_ptr).custom_allocator.alloc_func { + return core::mem::transmute::<*mut c_void, *mut usize>(alloc_fn((*state_ptr).custom_allocator.opaque, + size * core::mem::size_of::())); + } else { + return alloc_util::alloc_stdlib(size); + } +} +#[no_mangle] +pub unsafe extern fn BrotliEncoderFreeUsize(state_ptr: *mut BrotliEncoderState, data: *mut usize, size: usize) { + if let Some(free_fn) = (*state_ptr).custom_allocator.free_func { + free_fn((*state_ptr).custom_allocator.opaque, core::mem::transmute::<*mut usize, *mut c_void>(data)); + } else { + alloc_util::free_stdlib(data, size); + } +} + + + +#[cfg(all(feature="std", not(feature="pass-through-ffi-panics")))] +pub fn catch_panici32+panic::UnwindSafe>(f: F) -> thread::Result { + panic::catch_unwind(f) +} + +#[cfg(all(feature="std", not(feature="pass-through-ffi-panics")))] +fn catch_panic_cstate*mut BrotliEncoderState+panic::UnwindSafe>(f: F) -> thread::Result<*mut BrotliEncoderState> { + panic::catch_unwind(f) +} + +#[cfg(all(feature="std", not(feature="pass-through-ffi-panics")))] +fn error_print(err: Err) { + let _ign = writeln!(&mut io::stderr(), "Internal Error {:?}", err); +} + +// can't catch panics in a reliable way without std:: configure with panic=abort. These shouldn't happen +#[cfg(any(not(feature="std"), feature="pass-through-ffi-panics"))] +pub fn catch_panici32>(f: F) -> Result { + Ok(f()) +} + +#[cfg(any(not(feature="std"), feature="pass-through-ffi-panics"))] +fn catch_panic_cstate*mut BrotliEncoderState>(f: F) -> Result<*mut BrotliEncoderState, ()> { + Ok(f()) +} + +#[cfg(any(not(feature="std"), feature="pass-through-ffi-panics"))] +fn error_print(_err: Err) { +} diff --git a/rust/vendor/brotli/src/ffi/decompressor.rs b/rust/vendor/brotli/src/ffi/decompressor.rs new file mode 100644 index 0000000..4d435f2 --- /dev/null +++ b/rust/vendor/brotli/src/ffi/decompressor.rs @@ -0,0 +1,158 @@ +pub use brotli_decompressor::ffi; +pub use brotli_decompressor::{BrotliDecoderReturnInfo, HuffmanCode}; +pub use brotli_decompressor::ffi::interface::{ + brotli_alloc_func, + brotli_free_func, + c_void, +}; + +pub unsafe extern fn CBrotliDecoderCreateInstance( + alloc_func: brotli_alloc_func, + free_func: brotli_free_func, + opaque: *mut c_void, +) -> *mut ffi::BrotliDecoderState { + ffi::BrotliDecoderCreateInstance(alloc_func, free_func, opaque) +} + +pub unsafe extern fn CBrotliDecoderSetParameter(state_ptr: *mut ffi::BrotliDecoderState, + selector: ffi::interface::BrotliDecoderParameter, + value: u32) { + ffi::BrotliDecoderSetParameter(state_ptr, selector, value) +} + +#[cfg(feature="std")] // this requires a default allocator +pub unsafe extern fn CBrotliDecoderDecompress( + encoded_size: usize, + encoded_buffer: *const u8, + decoded_size: *mut usize, + decoded_buffer: *mut u8) -> ffi::interface::BrotliDecoderResult { + ffi::BrotliDecoderDecompress(encoded_size, encoded_buffer, decoded_size, decoded_buffer) +} + +pub unsafe extern fn CBrotliDecoderDecompressStream( + state_ptr: *mut ffi::BrotliDecoderState, + available_in: *mut usize, + input_buf_ptr: *mut*const u8, + available_out: *mut usize, + output_buf_ptr: *mut*mut u8, + total_out: *mut usize, +) -> ffi::interface::BrotliDecoderResult { +ffi::BrotliDecoderDecompressStream( + state_ptr, + available_in, + input_buf_ptr, + available_out, + output_buf_ptr, + total_out) +} + +pub unsafe extern fn CBrotliDecoderDecompressStreaming( + state_ptr: *mut ffi::BrotliDecoderState, + available_in: *mut usize, + input_buf_ptr: *const u8, + available_out: *mut usize, + output_buf_ptr: *mut u8, +) -> ffi::interface::BrotliDecoderResult { +ffi::BrotliDecoderDecompressStreaming( + state_ptr, + available_in, + input_buf_ptr, + available_out, + output_buf_ptr) +} + +pub unsafe extern fn CBrotliDecoderDecompressWithReturnInfo( + available_in: usize, + input_buf_ptr: *const u8, + available_out_and_scratch: usize, + output_buf_and_scratch: *mut u8, +) -> BrotliDecoderReturnInfo { +ffi::BrotliDecoderDecompressWithReturnInfo( + available_in, + input_buf_ptr, + available_out_and_scratch, + output_buf_and_scratch) +} + +pub unsafe extern fn CBrotliDecoderDecompressPrealloc( + available_in: usize, + input_buf_ptr: *const u8, + available_out: usize, + output_buf_ptr: *mut u8, + available_u8: usize, + u8_ptr: *mut u8, + available_u32: usize, + u32_ptr: *mut u32, + available_hc: usize, + hc_ptr: *mut HuffmanCode, +) -> BrotliDecoderReturnInfo { +ffi::BrotliDecoderDecompressPrealloc( + available_in, + input_buf_ptr, + available_out, + output_buf_ptr, + available_u8, + u8_ptr, + available_u32, + u32_ptr, + available_hc, + hc_ptr) +} + +pub unsafe extern fn CBrotliDecoderMallocU8(state_ptr: *mut ffi::BrotliDecoderState, size: usize) -> *mut u8 { + ffi::BrotliDecoderMallocU8(state_ptr, size) +} + +pub unsafe extern fn CBrotliDecoderFreeU8(state_ptr: *mut ffi::BrotliDecoderState, data: *mut u8, size: usize) { + ffi::BrotliDecoderFreeU8(state_ptr, data, size) +} + +pub unsafe extern fn CBrotliDecoderMallocUsize(state_ptr: *mut ffi::BrotliDecoderState, size: usize) -> *mut usize { + ffi::BrotliDecoderMallocUsize(state_ptr, size) +} + +pub unsafe extern fn CBrotliDecoderFreeUsize(state_ptr: *mut ffi::BrotliDecoderState, data: *mut usize, size: usize) { + ffi::BrotliDecoderFreeUsize(state_ptr, data, size) +} + +pub unsafe extern fn CBrotliDecoderDestroyInstance(state_ptr: *mut ffi::BrotliDecoderState) { + ffi::BrotliDecoderDestroyInstance(state_ptr) +} + +pub extern fn CBrotliDecoderVersion() -> u32 { + ffi::BrotliDecoderVersion() +} + +#[no_mangle] +pub extern fn CBrotliDecoderErrorString(c: ffi::BrotliDecoderErrorCode) -> *const u8 { + ffi::BrotliDecoderErrorString(c) +} + +#[no_mangle] +pub unsafe extern fn CBrotliDecoderHasMoreOutput(state_ptr: *const ffi::BrotliDecoderState) -> i32 { + ffi::BrotliDecoderHasMoreOutput(state_ptr) +} + +#[no_mangle] +pub unsafe extern fn CBrotliDecoderTakeOutput(state_ptr: *mut ffi::BrotliDecoderState, size: *mut usize) -> *const u8 { + ffi::BrotliDecoderTakeOutput(state_ptr, size) +} + + + +#[no_mangle] +pub unsafe extern fn CBrotliDecoderIsUsed(state_ptr: *const ffi::BrotliDecoderState) -> i32 { + ffi::BrotliDecoderIsUsed(state_ptr) +} +#[no_mangle] +pub unsafe extern fn CBrotliDecoderIsFinished(state_ptr: *const ffi::BrotliDecoderState) -> i32 { + ffi::BrotliDecoderIsFinished(state_ptr) +} +#[no_mangle] +pub unsafe extern fn CBrotliDecoderGetErrorCode(state_ptr: *const ffi::BrotliDecoderState) -> ffi::BrotliDecoderErrorCode { + ffi::BrotliDecoderGetErrorCode(state_ptr) +} +#[no_mangle] +pub unsafe extern fn CBrotliDecoderGetErrorString(state_ptr: *const ffi::BrotliDecoderState) -> *const u8 { + ffi::BrotliDecoderGetErrorString(state_ptr) +} diff --git a/rust/vendor/brotli/src/ffi/mod.rs b/rust/vendor/brotli/src/ffi/mod.rs new file mode 100644 index 0000000..65d27af --- /dev/null +++ b/rust/vendor/brotli/src/ffi/mod.rs @@ -0,0 +1,5 @@ +pub mod alloc_util; +pub mod decompressor; +pub mod compressor; +pub mod broccoli; +pub mod multicompress; diff --git a/rust/vendor/brotli/src/ffi/multicompress/mod.rs b/rust/vendor/brotli/src/ffi/multicompress/mod.rs new file mode 100755 index 0000000..380b054 --- /dev/null +++ b/rust/vendor/brotli/src/ffi/multicompress/mod.rs @@ -0,0 +1,393 @@ +#![cfg(not(feature="safe"))] +#[cfg(feature="std")] +use std::{panic,thread, io}; +#[cfg(feature="std")] +use std::io::Write; +mod test; +use core; +#[allow(unused_imports)] +use brotli_decompressor; +use super::compressor; +use ::enc::encode::{BrotliEncoderCreateInstance, + BrotliEncoderOperation, + BrotliEncoderSetParameter, + BrotliEncoderCompressStream, + BrotliEncoderIsFinished, + BrotliEncoderDestroyInstance, +}; +use brotli_decompressor::ffi::alloc_util::SubclassableAllocator; +use brotli_decompressor::ffi::interface::{ + brotli_alloc_func, + brotli_free_func, + CAllocator, + c_void, +}; +use brotli_decompressor::ffi::{ + slice_from_raw_parts_or_nil, + slice_from_raw_parts_or_nil_mut, +}; + +use super::alloc_util::BrotliSubclassableAllocator; +use ::enc; +use ::enc::backward_references::{BrotliEncoderParams, UnionHasher}; +use ::enc::encode::{BrotliEncoderParameter, set_parameter}; +use ::enc::threading::{SendAlloc,Owned}; +use alloc::SliceWrapper; +pub const MAX_THREADS: usize = 16; + +struct SliceRef<'a> (&'a [u8]); +impl<'a> SliceWrapper for SliceRef<'a> { + fn slice(&self) -> &[u8] { self.0 } +} + +macro_rules! make_send_alloc { + ($alloc_func: expr, $free_func: expr, $opaque: expr) => ( + SendAlloc::new(BrotliSubclassableAllocator::new( + SubclassableAllocator::new( + CAllocator{ + alloc_func:$alloc_func, + free_func:$free_func, + opaque:$opaque, + })), UnionHasher::Uninit) + ) +} +#[no_mangle] +pub extern fn BrotliEncoderMaxCompressedSizeMulti(input_size: usize, num_threads: usize) -> usize { + ::enc::encode::BrotliEncoderMaxCompressedSizeMulti(input_size, num_threads) +} + +fn help_brotli_encoder_compress_single( + param_keys: &[BrotliEncoderParameter], + param_values: &[u32], + input: &[u8], + output: &mut[u8], + encoded_size: &mut usize, + m8: BrotliSubclassableAllocator, +) -> i32 { + let mut encoder = BrotliEncoderCreateInstance(m8); + for (p, v) in param_keys.iter().zip(param_values.iter()) { + BrotliEncoderSetParameter(&mut encoder, *p, *v); + } + let mut result; + let mut available_in = input.len(); + let mut next_in_offset = 0usize; + let mut available_out = output.len(); + let mut next_out_offset = 0usize; + let mut total_out = Some(0usize); + result = BrotliEncoderCompressStream(&mut encoder, + BrotliEncoderOperation::BROTLI_OPERATION_FINISH, + &mut available_in, + input, + &mut next_in_offset, + &mut available_out, + output, + &mut next_out_offset, + &mut total_out, + &mut |_a,_b,_c,_d|()); + if BrotliEncoderIsFinished(&encoder) == 0 { + result = 0i32; + } + *encoded_size = total_out.unwrap(); + BrotliEncoderDestroyInstance(&mut encoder); + result +} + +#[no_mangle] +pub unsafe extern fn BrotliEncoderCompressMulti( + num_params: usize, + param_keys: *const BrotliEncoderParameter, + param_values: *const u32, + input_size: usize, + input: *const u8, + encoded_size: *mut usize, + encoded: *mut u8, + desired_num_threads: usize, + alloc_func: brotli_alloc_func, + free_func: brotli_free_func, + alloc_opaque_per_thread: *mut*mut c_void, +) -> i32 { + if desired_num_threads == 0 { + return 0; + } + let num_threads = core::cmp::min(desired_num_threads, MAX_THREADS); + match compressor::catch_panic(|| { + let param_keys_slice = slice_from_raw_parts_or_nil(param_keys, num_params); + let param_values_slice = slice_from_raw_parts_or_nil(param_values, num_params); + let input_slice = slice_from_raw_parts_or_nil(input, input_size); + let output_slice = slice_from_raw_parts_or_nil_mut(encoded, *encoded_size); + if num_threads == 1 { + let allocators = CAllocator { + alloc_func:alloc_func, + free_func:free_func, + opaque:if alloc_opaque_per_thread.is_null() {core::ptr::null_mut()} else {*alloc_opaque_per_thread}, + }; + let m8 = BrotliSubclassableAllocator::new( + SubclassableAllocator::new(allocators.clone())); + return help_brotli_encoder_compress_single( + param_keys_slice, + param_values_slice, + input_slice, + output_slice, + &mut *encoded_size, + m8, + ) + } + let null_opaques = [core::ptr::null_mut::();MAX_THREADS]; + let alloc_opaque = if alloc_opaque_per_thread.is_null() { + &null_opaques[..] + } else { + slice_from_raw_parts_or_nil(alloc_opaque_per_thread, desired_num_threads) + }; + let mut params = BrotliEncoderParams::default(); + for (k,v) in param_keys_slice.iter().zip(param_values_slice.iter()) { + if set_parameter(&mut params, *k, *v) == 0 { + return 0; + } + } + let mut alloc_array:[_;MAX_THREADS] = [ + make_send_alloc!(alloc_func, free_func, alloc_opaque[0]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[1%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[2%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[3%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[4%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[5%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[6%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[7%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[8%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[9%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[10%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[11%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[12%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[13%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[14%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[15%desired_num_threads]), + ]; + + let owned_input = &mut Owned::new(SliceRef(input_slice)); + let res = enc::compress_multi_no_threadpool( + ¶ms, + owned_input, + output_slice, + &mut alloc_array[..num_threads], + ); + match res { + Ok(size) => { + *encoded_size = size; + return 1; + }, + Err(_err) => { + return 0; + } + } + }) { + Ok(ret) => return ret, + Err(panic_err) => { + error_print(panic_err); + return 0; + }, + } +} + +#[repr(C)] +pub struct BrotliEncoderWorkPool { + custom_allocator: CAllocator, + work_pool: enc::WorkerPool, + UnionHasher, + BrotliSubclassableAllocator, + (SliceRef<'static>, BrotliEncoderParams)>, +} + +#[cfg(not(feature="std"))] +fn brotli_new_work_pool_without_custom_alloc(_to_box: BrotliEncoderWorkPool) -> *mut BrotliEncoderWorkPool{ + panic!("Must supply allocators if calling divans when compiled without features=std"); +} + +#[cfg(feature="std")] +fn brotli_new_work_pool_without_custom_alloc(to_box: BrotliEncoderWorkPool) -> *mut BrotliEncoderWorkPool{ + brotli_decompressor::ffi::alloc_util::Box::::into_raw( + brotli_decompressor::ffi::alloc_util::Box::::new(to_box)) +} +#[no_mangle] +pub unsafe extern fn BrotliEncoderCreateWorkPool( + num_threads: usize, + alloc_func: brotli_alloc_func, + free_func: brotli_free_func, + opaque: *mut c_void, +) -> *mut BrotliEncoderWorkPool { + match catch_panic_wstate(|| { + let allocators = CAllocator { + + alloc_func:alloc_func, + free_func:free_func, + opaque:opaque, + }; + let to_box = BrotliEncoderWorkPool { + custom_allocator: allocators.clone(), + work_pool: enc::new_work_pool(core::cmp::min(num_threads, MAX_THREADS)), + }; + if let Some(alloc) = alloc_func { + if free_func.is_none() { + panic!("either both alloc and free must exist or neither"); + } + let ptr = alloc(allocators.opaque, core::mem::size_of::()); + let brotli_work_pool_ptr = core::mem::transmute::<*mut c_void, *mut BrotliEncoderWorkPool>(ptr); + core::ptr::write(brotli_work_pool_ptr, to_box); + brotli_work_pool_ptr + } else { + brotli_new_work_pool_without_custom_alloc(to_box) + } + }) { + Ok(ret) => ret, + Err(err) => { + error_print(err); + core::ptr::null_mut() + } + } +} +#[cfg(feature="std")] +unsafe fn free_work_pool_no_custom_alloc(_work_pool: *mut BrotliEncoderWorkPool) { + let _state = brotli_decompressor::ffi::alloc_util::Box::from_raw(_work_pool); +} + +#[cfg(not(feature="std"))] +unsafe fn free_work_pool_no_custom_alloc(_work_pool: *mut BrotliEncoderWorkPool) { + unreachable!(); +} +struct UnsafeUnwindBox(*mut BrotliEncoderWorkPool); +#[cfg(all(feature="std", not(feature="pass-through-ffi-panics")))] +impl panic::RefUnwindSafe for UnsafeUnwindBox{} + +#[no_mangle] +pub unsafe extern fn BrotliEncoderDestroyWorkPool(work_pool_ptr: *mut BrotliEncoderWorkPool) { + let wpp = UnsafeUnwindBox(work_pool_ptr); + if let Err(panic_err) = compressor::catch_panic(|| { + if let Some(_) = (*wpp.0).custom_allocator.alloc_func { + if let Some(free_fn) = (*wpp.0).custom_allocator.free_func { + let _to_free = core::ptr::read(wpp.0); + let ptr = core::mem::transmute::<*mut BrotliEncoderWorkPool, *mut c_void>(wpp.0); + free_fn((*wpp.0).custom_allocator.opaque, ptr); + } + } else { + free_work_pool_no_custom_alloc(wpp.0); + } + 0 + }) { + error_print(panic_err); + } +} +#[no_mangle] +pub unsafe extern fn BrotliEncoderCompressWorkPool( + work_pool: *mut BrotliEncoderWorkPool, + num_params: usize, + param_keys: *const BrotliEncoderParameter, + param_values: *const u32, + input_size: usize, + input: *const u8, + encoded_size: *mut usize, + encoded: *mut u8, + desired_num_threads: usize, + alloc_func: brotli_alloc_func, + free_func: brotli_free_func, + alloc_opaque_per_thread: *mut*mut c_void, +) -> i32 { + if desired_num_threads == 0 { + return 0; + } + if work_pool.is_null() { + match compressor::catch_panic(|| BrotliEncoderCompressMulti( + num_params, + param_keys, + param_values, + input_size, + input, + encoded_size, + encoded, + desired_num_threads, + alloc_func, + free_func, + alloc_opaque_per_thread)) { + Ok(ret) => return ret, // no panic + Err(panic_err) => { + error_print(panic_err); // print panic + return 0; // fail + } + } + } + let work_pool_wrapper = UnsafeUnwindBox(work_pool); + match compressor::catch_panic(|| { + let null_opaques = [core::ptr::null_mut::();MAX_THREADS]; + let alloc_opaque = if alloc_opaque_per_thread.is_null() { + &null_opaques[..] + } else { + slice_from_raw_parts_or_nil(alloc_opaque_per_thread, desired_num_threads) + }; + let param_keys_slice = slice_from_raw_parts_or_nil(param_keys, num_params); + let param_values_slice = slice_from_raw_parts_or_nil(param_values, num_params); + let mut params = BrotliEncoderParams::default(); + for (k,v) in param_keys_slice.iter().zip(param_values_slice.iter()) { + if set_parameter(&mut params, *k, *v) == 0 { + return 0; + } + } + let num_threads = core::cmp::min(desired_num_threads, MAX_THREADS); + let mut alloc_array:[_;MAX_THREADS] = [ + make_send_alloc!(alloc_func, free_func, alloc_opaque[0]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[1%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[2%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[3%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[4%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[5%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[6%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[7%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[8%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[9%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[10%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[11%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[12%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[13%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[14%desired_num_threads]), + make_send_alloc!(alloc_func, free_func, alloc_opaque[15%desired_num_threads]), + ]; + let res = enc::compress_worker_pool( + ¶ms, + &mut Owned::new(SliceRef(slice_from_raw_parts_or_nil(input, input_size))), + slice_from_raw_parts_or_nil_mut(encoded, *encoded_size), + &mut alloc_array[..num_threads], + &mut (*work_pool_wrapper.0).work_pool, + ); + match res { + Ok(size) => { + *encoded_size = size; + return 1; + }, + Err(_err) => { + return 0; + }, + } + }) { + Ok(ret) => ret, // no panic + Err(panic_err) => { + error_print(panic_err); // print panic + 0 // fail + }, + } +} + +#[cfg(all(feature="std", not(feature="pass-through-ffi-panics")))] +fn catch_panic_wstate*mut BrotliEncoderWorkPool+panic::UnwindSafe>(f: F) -> thread::Result<*mut BrotliEncoderWorkPool> { + panic::catch_unwind(f) +} + +#[cfg(all(feature="std", not(feature="pass-through-ffi-panics")))] +fn error_print(err: Err) { + let _ign = writeln!(&mut io::stderr(), "Internal Error {:?}", err); +} + +#[cfg(any(not(feature="std"), feature="pass-through-ffi-panics"))] +fn catch_panic_wstate*mut BrotliEncoderWorkPool>(f: F) -> Result<*mut BrotliEncoderWorkPool, ()> { + Ok(f()) +} + +#[cfg(any(not(feature="std"), feature="pass-through-ffi-panics"))] +fn error_print(_err: Err) { +} diff --git a/rust/vendor/brotli/src/ffi/multicompress/test.rs b/rust/vendor/brotli/src/ffi/multicompress/test.rs new file mode 100755 index 0000000..89af6da --- /dev/null +++ b/rust/vendor/brotli/src/ffi/multicompress/test.rs @@ -0,0 +1,250 @@ +#![cfg(test)] +#![cfg(feature="std")] +use super::*; +use ::enc::encode::BrotliEncoderParameter; +use core; +#[test] +fn test_compress_workpool() { + let input = [102, 114, 111, 109, 32, 99, 116, 121, 112, 101, 115, 32, 105, 109, 112, 111, 114, 116, 32, 42, 10, 10, 99, 108, 97, 115, 115, 32, 69, 110, 117, 109, 84, 121, 112, 101, 40, 116, 121, 112, 101, 40, 99, 95, 117, 105, 110, 116, 41, 41, 58, 10, 32, 32, 32, 32, 100, 101, 102, 32, 95, 95, 110, 101, 119, 95, 95, 40, 109, 101, 116, 97, 99, 108, 115, 41, 58, 10, 32, 32, 32, 32, 32, 32, 32, 32, 112, 97, 115, 115, 10]; + let params = [BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_LGWIN, BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, BrotliEncoderParameter::BROTLI_PARAM_Q9_5]; + let values = [11u32,16u32,91u32,0u32,0u32,0u32]; + let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(input.len(), 4); + let mut encoded_backing = [0u8;145]; + let encoded = &mut encoded_backing[..encoded_size]; + let ret = unsafe { + let wp = BrotliEncoderCreateWorkPool(8, None, None, core::ptr::null_mut()); + let inner_ret = BrotliEncoderCompressWorkPool( + wp, + params.len(), + params[..].as_ptr(), + values[..].as_ptr(), + input.len(), + input[..].as_ptr(), + &mut encoded_size, + encoded.as_mut_ptr(), + 4, + None, + None, + core::ptr::null_mut()); + BrotliEncoderDestroyWorkPool(wp); + inner_ret + }; + assert_eq!(ret, 1); + let mut rt_size = 256; + let mut rt_buffer = [0u8;256]; + let ret2 = unsafe { + super::super::decompressor::CBrotliDecoderDecompress(encoded_size, encoded.as_ptr(), + &mut rt_size, rt_buffer.as_mut_ptr()) + }; + match ret2 { + super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { + }, + _ => panic!("{}", ret2 as i32), + } + assert_eq!(rt_size, input.len()); + assert_eq!(&rt_buffer[..rt_size], &input[..]); +} + +#[test] +fn test_compress_empty_workpool() { + let input = []; + let params = [BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_LGWIN, BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, BrotliEncoderParameter::BROTLI_PARAM_Q9_5]; + let values = [3u32,16u32,91u32,0u32,0u32,0u32]; + let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(input.len(), 4); + let mut encoded_backing = [0u8;145]; + let encoded = &mut encoded_backing[..encoded_size]; + let ret = unsafe { + let wp = BrotliEncoderCreateWorkPool(8, None, None, core::ptr::null_mut()); + let inner_ret = BrotliEncoderCompressWorkPool( + wp, + params.len(), + params[..].as_ptr(), + values[..].as_ptr(), + input.len(), + input[..].as_ptr(), + &mut encoded_size, + encoded.as_mut_ptr(), + 4, + None, + None, + core::ptr::null_mut()); + BrotliEncoderDestroyWorkPool(wp); + inner_ret + }; + assert_eq!(ret, 1); + let mut rt_size = 256; + let mut rt_buffer = [0u8;256]; + assert!(encoded_size != 0); + let ret2 = unsafe { + super::super::decompressor::CBrotliDecoderDecompress(encoded_size, encoded.as_ptr(), + &mut rt_size, rt_buffer.as_mut_ptr()) + }; + match ret2 { + super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { + }, + _ => panic!("{}", ret2 as i32), + } + assert_eq!(rt_size, input.len()); + assert_eq!(&rt_buffer[..rt_size], &input[..]); +} + + +#[test] +fn test_compress_empty_multi_raw() { + let input = []; + let params = [BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_LGWIN, BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, BrotliEncoderParameter::BROTLI_PARAM_Q9_5]; + let values = [3u32,16u32,0u32,0u32,0u32,0u32]; + let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(input.len(), 4); + let mut encoded_backing = [0u8;145]; + let encoded = &mut encoded_backing[..encoded_size]; + let ret = unsafe { + BrotliEncoderCompressMulti( + params.len(), + params[..].as_ptr(), + values[..].as_ptr(), + input.len(), + input[..].as_ptr(), + &mut encoded_size, + encoded.as_mut_ptr(), + 4, + None, + None, + core::ptr::null_mut()) + }; + assert_eq!(ret, 1); + let mut rt_size = 256; + let mut rt_buffer = [0u8;256]; + assert!(encoded_size != 0); + let ret2 = unsafe { + super::super::decompressor::CBrotliDecoderDecompress(encoded_size, encoded.as_ptr(), + &mut rt_size, rt_buffer.as_mut_ptr()) + }; + match ret2 { + super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { + }, + _ => panic!("{}", ret2 as i32), + } + assert_eq!(rt_size, input.len()); + assert_eq!(&rt_buffer[..rt_size], &input[..]); +} + +#[test] +fn test_compress_null_multi_raw() { + let params = [BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_LGWIN, BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, BrotliEncoderParameter::BROTLI_PARAM_Q9_5]; + let values = [3u32,16u32,0u32,0u32,0u32,0u32]; + let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(0, 4); + let mut encoded_backing = [0u8;145]; + let encoded = &mut encoded_backing[..encoded_size]; + let ret = unsafe { + BrotliEncoderCompressMulti( + params.len(), + params[..].as_ptr(), + values[..].as_ptr(), + 0, + core::ptr::null(), + &mut encoded_size, + encoded.as_mut_ptr(), + 4, + None, + None, + core::ptr::null_mut()) + }; + assert_eq!(ret, 1); + let mut rt_size = 256; + let mut rt_buffer = [0u8;256]; + assert!(encoded_size != 0); + let ret2 = unsafe { + super::super::decompressor::CBrotliDecoderDecompress(encoded_size, encoded.as_ptr(), + &mut rt_size, rt_buffer.as_mut_ptr()) + }; + match ret2 { + super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { + }, + _ => panic!("{}", ret2 as i32), + } + assert_eq!(rt_size, 0); +} + + + +#[test] +fn test_compress_empty_multi_raw_one_thread() { + let input = []; + let params = [BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_Q9_5, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_APPENDABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, ]; + let values = [10u32,1u32,1u32,1u32,1u32]; + let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(input.len(), 1); + let mut encoded_backing = [0u8;25]; + let encoded = &mut encoded_backing[..encoded_size]; + assert_eq!(params.len(), 5); + assert_eq!(encoded_size, 25); + let ret = unsafe { + BrotliEncoderCompressMulti( + params.len(), + params[..].as_ptr(), + values[..].as_ptr(), + input.len(), + input[..].as_ptr(), + &mut encoded_size, + encoded.as_mut_ptr(), + 1, + None, + None, + core::ptr::null_mut()) + }; + assert_eq!(ret, 1); + let mut rt_size = 256; + let mut rt_buffer = [0u8;256]; + assert!(encoded_size != 0); + let ret2 = unsafe { + super::super::decompressor::CBrotliDecoderDecompress(encoded_size, encoded.as_ptr(), + &mut rt_size, rt_buffer.as_mut_ptr()) + }; + match ret2 { + super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { + }, + _ => panic!("{}", ret2 as i32), + } + assert_eq!(rt_size, input.len()); + assert_eq!(&rt_buffer[..rt_size], &input[..]); +} + + +#[test] +fn test_compress_empty_multi_catable() { + let input = []; + let params = [BrotliEncoderParameter::BROTLI_PARAM_QUALITY, BrotliEncoderParameter::BROTLI_PARAM_LGWIN, BrotliEncoderParameter::BROTLI_PARAM_SIZE_HINT, BrotliEncoderParameter::BROTLI_PARAM_CATABLE, BrotliEncoderParameter::BROTLI_PARAM_MAGIC_NUMBER, BrotliEncoderParameter::BROTLI_PARAM_Q9_5]; + let values = [3u32,16u32,0u32,1u32,1u32,0u32]; + let mut encoded_size = BrotliEncoderMaxCompressedSizeMulti(input.len(), 4); + let mut encoded_backing = [0u8;145]; + let encoded = &mut encoded_backing[..encoded_size]; + let ret = unsafe { + BrotliEncoderCompressMulti( + params.len(), + params[..].as_ptr(), + values[..].as_ptr(), + input.len(), + input[..].as_ptr(), + &mut encoded_size, + encoded.as_mut_ptr(), + 4, + None, + None, + core::ptr::null_mut()) + }; + assert_eq!(ret, 1); + let mut rt_size = 256; + let mut rt_buffer = [0u8;256]; + assert!(encoded_size != 0); + let ret2 = unsafe { + super::super::decompressor::CBrotliDecoderDecompress(encoded_size, encoded.as_ptr(), + &mut rt_size, rt_buffer.as_mut_ptr()) + }; + match ret2 { + super::super::decompressor::ffi::interface::BrotliDecoderResult::BROTLI_DECODER_RESULT_SUCCESS => { + }, + _ => panic!("{:?}", ret2 as i32), + } + assert_eq!(rt_size, input.len()); + assert_eq!(&rt_buffer[..rt_size], &input[..]); +} + diff --git a/rust/vendor/brotli/src/lib.rs b/rust/vendor/brotli/src/lib.rs new file mode 100755 index 0000000..ac8ca08 --- /dev/null +++ b/rust/vendor/brotli/src/lib.rs @@ -0,0 +1,94 @@ +#![no_std] +#![allow(non_snake_case)] +#![allow(unused_parens)] +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(non_upper_case_globals)] +#![cfg_attr(feature="benchmark", feature(test))] +#![cfg_attr(feature="no-stdlib-ffi-binding",cfg_attr(not(feature="std"), feature(lang_items)))] +#[macro_use] +// <-- for debugging, remove xprintln from bit_reader and replace with println +#[cfg(feature="std")] +extern crate std; +#[cfg(feature="simd")] +extern crate packed_simd_2; +#[cfg(feature="std")] +extern crate alloc_stdlib; +#[allow(unused_imports)] +#[macro_use] +extern crate alloc_no_stdlib as alloc; +extern crate brotli_decompressor; +pub use alloc::{AllocatedStackMemory, Allocator, SliceWrapper, SliceWrapperMut, StackAllocator}; +pub const VERSION: u8 = 1; +#[cfg(feature="std")] +pub use alloc_stdlib::HeapAlloc; +pub mod enc; +pub use self::enc::combined_alloc::CombiningAllocator; +pub mod concat; +pub use brotli_decompressor::transform; +pub use brotli_decompressor::dictionary; +pub use brotli_decompressor::reader; +pub use brotli_decompressor::writer; +pub use brotli_decompressor::BrotliState; +pub use brotli_decompressor::reader::{DecompressorCustomIo}; +pub use brotli_decompressor::HuffmanCode; // so we can make custom allocator for decompression +pub use brotli_decompressor::transform::TransformDictionaryWord; +#[cfg(feature="std")] +pub use brotli_decompressor::reader::{Decompressor}; + +pub use brotli_decompressor::writer::{DecompressorWriterCustomIo}; + +#[cfg(feature="std")] +pub use brotli_decompressor::writer::{DecompressorWriter}; + +pub use brotli_decompressor::io_wrappers::{CustomRead, CustomWrite}; + +#[cfg(feature="std")] +pub use brotli_decompressor::io_wrappers::{IntoIoReader, IoReaderWrapper, IoWriterWrapper}; +pub use enc::interface; +pub use enc::input_pair::InputReference; +pub use enc::input_pair::InputReferenceMut; +pub use enc::input_pair::InputPair; +pub use enc::interface::SliceOffset; +pub use enc::interface::thaw; +pub use enc::interface::thaw_pair; +#[cfg(feature="ffi-api")] +pub mod ffi; +// interface +// pub fn BrotliDecompressStream(mut available_in: &mut usize, +// input_offset: &mut usize, +// input: &[u8], +// mut available_out: &mut usize, +// mut output_offset: &mut usize, +// mut output: &mut [u8], +// mut total_out: &mut usize, +// mut s: &mut BrotliState); + +pub use brotli_decompressor::{BrotliDecompressStream, BrotliResult}; +#[cfg(feature="std")] +pub use enc::{BrotliCompress, BrotliCompressCustomAlloc}; +pub use enc::{BrotliCompressCustomIo, BrotliCompressCustomIoCustomDict}; + +#[cfg(feature="std")] +pub use enc::reader::{CompressorReader}; +pub use enc::reader::{CompressorReaderCustomIo}; + + +#[cfg(feature="std")] +pub use enc::writer::{CompressorWriter}; +pub use enc::writer::{CompressorWriterCustomIo}; + + +#[cfg(feature="std")] +pub use brotli_decompressor::BrotliDecompress; + + + +#[cfg(feature="std")] +pub use brotli_decompressor::BrotliDecompressCustomAlloc; + +pub use brotli_decompressor::BrotliDecompressCustomIo; +pub use brotli_decompressor::BrotliDecompressCustomIoCustomDict; + +#[cfg(feature="std")] +pub use brotli_decompressor::copy_from_to; diff --git a/rust/vendor/brotli/testdata/10x10y b/rust/vendor/brotli/testdata/10x10y new file mode 100644 index 0000000..3f9cf86 --- /dev/null +++ b/rust/vendor/brotli/testdata/10x10y @@ -0,0 +1 @@ +XXXXXXXXXXYYYYYYYYYY \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/64x b/rust/vendor/brotli/testdata/64x new file mode 100644 index 0000000..caa4171 --- /dev/null +++ b/rust/vendor/brotli/testdata/64x @@ -0,0 +1 @@ +XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/64x.compressed b/rust/vendor/brotli/testdata/64x.compressed new file mode 100644 index 0000000..74d0be1 Binary files /dev/null and b/rust/vendor/brotli/testdata/64x.compressed differ diff --git a/rust/vendor/brotli/testdata/aaabaaaa b/rust/vendor/brotli/testdata/aaabaaaa new file mode 100644 index 0000000..cdeb789 --- /dev/null +++ b/rust/vendor/brotli/testdata/aaabaaaa @@ -0,0 +1 @@ +aaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/alice29.txt b/rust/vendor/brotli/testdata/alice29.txt new file mode 100644 index 0000000..7033655 --- /dev/null +++ b/rust/vendor/brotli/testdata/alice29.txt @@ -0,0 +1,3609 @@ + + + + + ALICE'S ADVENTURES IN WONDERLAND + + Lewis Carroll + + THE MILLENNIUM FULCRUM EDITION 2.9 + + + + + CHAPTER I + + Down the Rabbit-Hole + + + Alice was beginning to get very tired of sitting by her sister +on the bank, and of having nothing to do: once or twice she had +peeped into the book her sister was reading, but it had no +pictures or conversations in it, `and what is the use of a book,' +thought Alice `without pictures or conversation?' + + So she was considering in her own mind (as well as she could, +for the hot day made her feel very sleepy and stupid), whether +the pleasure of making a daisy-chain would be worth the trouble +of getting up and picking the daisies, when suddenly a White +Rabbit with pink eyes ran close by her. + + There was nothing so VERY remarkable in that; nor did Alice +think it so VERY much out of the way to hear the Rabbit say to +itself, `Oh dear! Oh dear! I shall be late!' (when she thought +it over afterwards, it occurred to her that she ought to have +wondered at this, but at the time it all seemed quite natural); +but when the Rabbit actually TOOK A WATCH OUT OF ITS WAISTCOAT- +POCKET, and looked at it, and then hurried on, Alice started to +her feet, for it flashed across her mind that she had never +before seen a rabbit with either a waistcoat-pocket, or a watch to +take out of it, and burning with curiosity, she ran across the +field after it, and fortunately was just in time to see it pop +down a large rabbit-hole under the hedge. + + In another moment down went Alice after it, never once +considering how in the world she was to get out again. + + The rabbit-hole went straight on like a tunnel for some way, +and then dipped suddenly down, so suddenly that Alice had not a +moment to think about stopping herself before she found herself +falling down a very deep well. + + Either the well was very deep, or she fell very slowly, for she +had plenty of time as she went down to look about her and to +wonder what was going to happen next. First, she tried to look +down and make out what she was coming to, but it was too dark to +see anything; then she looked at the sides of the well, and +noticed that they were filled with cupboards and book-shelves; +here and there she saw maps and pictures hung upon pegs. She +took down a jar from one of the shelves as she passed; it was +labelled `ORANGE MARMALADE', but to her great disappointment it +was empty: she did not like to drop the jar for fear of killing +somebody, so managed to put it into one of the cupboards as she +fell past it. + + `Well!' thought Alice to herself, `after such a fall as this, I +shall think nothing of tumbling down stairs! How brave they'll +all think me at home! Why, I wouldn't say anything about it, +even if I fell off the top of the house!' (Which was very likely +true.) + + Down, down, down. Would the fall NEVER come to an end! `I +wonder how many miles I've fallen by this time?' she said aloud. +`I must be getting somewhere near the centre of the earth. Let +me see: that would be four thousand miles down, I think--' (for, +you see, Alice had learnt several things of this sort in her +lessons in the schoolroom, and though this was not a VERY good +opportunity for showing off her knowledge, as there was no one to +listen to her, still it was good practice to say it over) `--yes, +that's about the right distance--but then I wonder what Latitude +or Longitude I've got to?' (Alice had no idea what Latitude was, +or Longitude either, but thought they were nice grand words to +say.) + + Presently she began again. `I wonder if I shall fall right +THROUGH the earth! How funny it'll seem to come out among the +people that walk with their heads downward! The Antipathies, I +think--' (she was rather glad there WAS no one listening, this +time, as it didn't sound at all the right word) `--but I shall +have to ask them what the name of the country is, you know. +Please, Ma'am, is this New Zealand or Australia?' (and she tried +to curtsey as she spoke--fancy CURTSEYING as you're falling +through the air! Do you think you could manage it?) `And what +an ignorant little girl she'll think me for asking! No, it'll +never do to ask: perhaps I shall see it written up somewhere.' + + Down, down, down. There was nothing else to do, so Alice soon +began talking again. `Dinah'll miss me very much to-night, I +should think!' (Dinah was the cat.) `I hope they'll remember +her saucer of milk at tea-time. Dinah my dear! I wish you were +down here with me! There are no mice in the air, I'm afraid, but +you might catch a bat, and that's very like a mouse, you know. +But do cats eat bats, I wonder?' And here Alice began to get +rather sleepy, and went on saying to herself, in a dreamy sort of +way, `Do cats eat bats? Do cats eat bats?' and sometimes, `Do +bats eat cats?' for, you see, as she couldn't answer either +question, it didn't much matter which way she put it. She felt +that she was dozing off, and had just begun to dream that she +was walking hand in hand with Dinah, and saying to her very +earnestly, `Now, Dinah, tell me the truth: did you ever eat a +bat?' when suddenly, thump! thump! down she came upon a heap of +sticks and dry leaves, and the fall was over. + + Alice was not a bit hurt, and she jumped up on to her feet in a +moment: she looked up, but it was all dark overhead; before her +was another long passage, and the White Rabbit was still in +sight, hurrying down it. There was not a moment to be lost: +away went Alice like the wind, and was just in time to hear it +say, as it turned a corner, `Oh my ears and whiskers, how late +it's getting!' She was close behind it when she turned the +corner, but the Rabbit was no longer to be seen: she found +herself in a long, low hall, which was lit up by a row of lamps +hanging from the roof. + + There were doors all round the hall, but they were all locked; +and when Alice had been all the way down one side and up the +other, trying every door, she walked sadly down the middle, +wondering how she was ever to get out again. + + Suddenly she came upon a little three-legged table, all made of +solid glass; there was nothing on it except a tiny golden key, +and Alice's first thought was that it might belong to one of the +doors of the hall; but, alas! either the locks were too large, or +the key was too small, but at any rate it would not open any of +them. However, on the second time round, she came upon a low +curtain she had not noticed before, and behind it was a little +door about fifteen inches high: she tried the little golden key +in the lock, and to her great delight it fitted! + + Alice opened the door and found that it led into a small +passage, not much larger than a rat-hole: she knelt down and +looked along the passage into the loveliest garden you ever saw. +How she longed to get out of that dark hall, and wander about +among those beds of bright flowers and those cool fountains, but +she could not even get her head though the doorway; `and even if +my head would go through,' thought poor Alice, `it would be of +very little use without my shoulders. Oh, how I wish +I could shut up like a telescope! I think I could, if I only +know how to begin.' For, you see, so many out-of-the-way things +had happened lately, that Alice had begun to think that very few +things indeed were really impossible. + + There seemed to be no use in waiting by the little door, so she +went back to the table, half hoping she might find another key on +it, or at any rate a book of rules for shutting people up like +telescopes: this time she found a little bottle on it, (`which +certainly was not here before,' said Alice,) and round the neck +of the bottle was a paper label, with the words `DRINK ME' +beautifully printed on it in large letters. + + It was all very well to say `Drink me,' but the wise little +Alice was not going to do THAT in a hurry. `No, I'll look +first,' she said, `and see whether it's marked "poison" or not'; +for she had read several nice little histories about children who +had got burnt, and eaten up by wild beasts and other unpleasant +things, all because they WOULD not remember the simple rules +their friends had taught them: such as, that a red-hot poker +will burn you if you hold it too long; and that if you cut your +finger VERY deeply with a knife, it usually bleeds; and she had +never forgotten that, if you drink much from a bottle marked +`poison,' it is almost certain to disagree with you, sooner or +later. + + However, this bottle was NOT marked `poison,' so Alice ventured +to taste it, and finding it very nice, (it had, in fact, a sort +of mixed flavour of cherry-tart, custard, pine-apple, roast +turkey, toffee, and hot buttered toast,) she very soon finished +it off. + + * * * * * * * + + * * * * * * + + * * * * * * * + + `What a curious feeling!' said Alice; `I must be shutting up +like a telescope.' + + And so it was indeed: she was now only ten inches high, and +her face brightened up at the thought that she was now the right +size for going though the little door into that lovely garden. +First, however, she waited for a few minutes to see if she was +going to shrink any further: she felt a little nervous about +this; `for it might end, you know,' said Alice to herself, `in my +going out altogether, like a candle. I wonder what I should be +like then?' And she tried to fancy what the flame of a candle is +like after the candle is blown out, for she could not remember +ever having seen such a thing. + + After a while, finding that nothing more happened, she decided +on going into the garden at once; but, alas for poor Alice! when +she got to the door, she found he had forgotten the little golden +key, and when she went back to the table for it, she found she +could not possibly reach it: she could see it quite plainly +through the glass, and she tried her best to climb up one of the +legs of the table, but it was too slippery; and when she had +tired herself out with trying, the poor little thing sat down and +cried. + + `Come, there's no use in crying like that!' said Alice to +herself, rather sharply; `I advise you to leave off this minute!' +She generally gave herself very good advice, (though she very +seldom followed it), and sometimes she scolded herself so +severely as to bring tears into her eyes; and once she remembered +trying to box her own ears for having cheated herself in a game +of croquet she was playing against herself, for this curious +child was very fond of pretending to be two people. `But it's no +use now,' thought poor Alice, `to pretend to be two people! Why, +there's hardly enough of me left to make ONE respectable +person!' + + Soon her eye fell on a little glass box that was lying under +the table: she opened it, and found in it a very small cake, on +which the words `EAT ME' were beautifully marked in currants. +`Well, I'll eat it,' said Alice, `and if it makes me grow larger, +I can reach the key; and if it makes me grow smaller, I can creep +under the door; so either way I'll get into the garden, and I +don't care which happens!' + + She ate a little bit, and said anxiously to herself, `Which +way? Which way?', holding her hand on the top of her head to +feel which way it was growing, and she was quite surprised to +find that she remained the same size: to be sure, this generally +happens when one eats cake, but Alice had got so much into the +way of expecting nothing but out-of-the-way things to happen, +that it seemed quite dull and stupid for life to go on in the +common way. + + So she set to work, and very soon finished off the cake. + + * * * * * * * + + * * * * * * + + * * * * * * * + + + + + CHAPTER II + + The Pool of Tears + + + `Curiouser and curiouser!' cried Alice (she was so much +surprised, that for the moment she quite forgot how to speak good +English); `now I'm opening out like the largest telescope that +ever was! Good-bye, feet!' (for when she looked down at her +feet, they seemed to be almost out of sight, they were getting so +far off). `Oh, my poor little feet, I wonder who will put on +your shoes and stockings for you now, dears? I'm sure _I_ shan't +be able! I shall be a great deal too far off to trouble myself +about you: you must manage the best way you can; --but I must be +kind to them,' thought Alice, `or perhaps they won't walk the +way I want to go! Let me see: I'll give them a new pair of +boots every Christmas.' + + And she went on planning to herself how she would manage it. +`They must go by the carrier,' she thought; `and how funny it'll +seem, sending presents to one's own feet! And how odd the +directions will look! + + ALICE'S RIGHT FOOT, ESQ. + HEARTHRUG, + NEAR THE FENDER, + (WITH ALICE'S LOVE). + +Oh dear, what nonsense I'm talking!' + + Just then her head struck against the roof of the hall: in +fact she was now more than nine feet high, and she at once took +up the little golden key and hurried off to the garden door. + + Poor Alice! It was as much as she could do, lying down on one +side, to look through into the garden with one eye; but to get +through was more hopeless than ever: she sat down and began to +cry again. + + `You ought to be ashamed of yourself,' said Alice, `a great +girl like you,' (she might well say this), `to go on crying in +this way! Stop this moment, I tell you!' But she went on all +the same, shedding gallons of tears, until there was a large pool +all round her, about four inches deep and reaching half down the +hall. + + After a time she heard a little pattering of feet in the +distance, and she hastily dried her eyes to see what was coming. +It was the White Rabbit returning, splendidly dressed, with a +pair of white kid gloves in one hand and a large fan in the +other: he came trotting along in a great hurry, muttering to +himself as he came, `Oh! the Duchess, the Duchess! Oh! won't she +be savage if I've kept her waiting!' Alice felt so desperate +that she was ready to ask help of any one; so, when the Rabbit +came near her, she began, in a low, timid voice, `If you please, +sir--' The Rabbit started violently, dropped the white kid +gloves and the fan, and skurried away into the darkness as hard +as he could go. + + Alice took up the fan and gloves, and, as the hall was very +hot, she kept fanning herself all the time she went on talking: +`Dear, dear! How queer everything is to-day! And yesterday +things went on just as usual. I wonder if I've been changed in +the night? Let me think: was I the same when I got up this +morning? I almost think I can remember feeling a little +different. But if I'm not the same, the next question is, Who in +the world am I? Ah, THAT'S the great puzzle!' And she began +thinking over all the children she knew that were of the same age +as herself, to see if she could have been changed for any of +them. + + `I'm sure I'm not Ada,' she said, `for her hair goes in such +long ringlets, and mine doesn't go in ringlets at all; and I'm +sure I can't be Mabel, for I know all sorts of things, and she, +oh! she knows such a very little! Besides, SHE'S she, and I'm I, +and--oh dear, how puzzling it all is! I'll try if I know all the +things I used to know. Let me see: four times five is twelve, +and four times six is thirteen, and four times seven is--oh dear! +I shall never get to twenty at that rate! However, the +Multiplication Table doesn't signify: let's try Geography. +London is the capital of Paris, and Paris is the capital of Rome, +and Rome--no, THAT'S all wrong, I'm certain! I must have been +changed for Mabel! I'll try and say "How doth the little--"' +and she crossed her hands on her lap as if she were saying lessons, +and began to repeat it, but her voice sounded hoarse and +strange, and the words did not come the same as they used to do:-- + + `How doth the little crocodile + Improve his shining tail, + And pour the waters of the Nile + On every golden scale! + + `How cheerfully he seems to grin, + How neatly spread his claws, + And welcome little fishes in + With gently smiling jaws!' + + `I'm sure those are not the right words,' said poor Alice, and +her eyes filled with tears again as she went on, `I must be Mabel +after all, and I shall have to go and live in that poky little +house, and have next to no toys to play with, and oh! ever so +many lessons to learn! No, I've made up my mind about it; if I'm +Mabel, I'll stay down here! It'll be no use their putting their +heads down and saying "Come up again, dear!" I shall only look +up and say "Who am I then? Tell me that first, and then, if I +like being that person, I'll come up: if not, I'll stay down +here till I'm somebody else"--but, oh dear!' cried Alice, with a +sudden burst of tears, `I do wish they WOULD put their heads +down! I am so VERY tired of being all alone here!' + + As she said this she looked down at her hands, and was +surprised to see that she had put on one of the Rabbit's little +white kid gloves while she was talking. `How CAN I have done +that?' she thought. `I must be growing small again.' She got up +and went to the table to measure herself by it, and found that, +as nearly as she could guess, she was now about two feet high, +and was going on shrinking rapidly: she soon found out that the +cause of this was the fan she was holding, and she dropped it +hastily, just in time to avoid shrinking away altogether. + +`That WAS a narrow escape!' said Alice, a good deal frightened at +the sudden change, but very glad to find herself still in +existence; `and now for the garden!' and she ran with all speed +back to the little door: but, alas! the little door was shut +again, and the little golden key was lying on the glass table as +before, `and things are worse than ever,' thought the poor child, +`for I never was so small as this before, never! And I declare +it's too bad, that it is!' + + As she said these words her foot slipped, and in another +moment, splash! she was up to her chin in salt water. He first +idea was that she had somehow fallen into the sea, `and in that +case I can go back by railway,' she said to herself. (Alice had +been to the seaside once in her life, and had come to the general +conclusion, that wherever you go to on the English coast you find +a number of bathing machines in the sea, some children digging in +the sand with wooden spades, then a row of lodging houses, and +behind them a railway station.) However, she soon made out that +she was in the pool of tears which she had wept when she was nine +feet high. + + `I wish I hadn't cried so much!' said Alice, as she swam about, +trying to find her way out. `I shall be punished for it now, I +suppose, by being drowned in my own tears! That WILL be a queer +thing, to be sure! However, everything is queer to-day.' + + Just then she heard something splashing about in the pool a +little way off, and she swam nearer to make out what it was: at +first she thought it must be a walrus or hippopotamus, but then +she remembered how small she was now, and she soon made out that +it was only a mouse that had slipped in like herself. + + `Would it be of any use, now,' thought Alice, `to speak to this +mouse? Everything is so out-of-the-way down here, that I should +think very likely it can talk: at any rate, there's no harm in +trying.' So she began: `O Mouse, do you know the way out of +this pool? I am very tired of swimming about here, O Mouse!' +(Alice thought this must be the right way of speaking to a mouse: +she had never done such a thing before, but she remembered having +seen in her brother's Latin Grammar, `A mouse--of a mouse--to a +mouse--a mouse--O mouse!' The Mouse looked at her rather +inquisitively, and seemed to her to wink with one of its little +eyes, but it said nothing. + + `Perhaps it doesn't understand English,' thought Alice; `I +daresay it's a French mouse, come over with William the +Conqueror.' (For, with all her knowledge of history, Alice had +no very clear notion how long ago anything had happened.) So she +began again: `Ou est ma chatte?' which was the first sentence in +her French lesson-book. The Mouse gave a sudden leap out of the +water, and seemed to quiver all over with fright. `Oh, I beg +your pardon!' cried Alice hastily, afraid that she had hurt the +poor animal's feelings. `I quite forgot you didn't like cats.' + + `Not like cats!' cried the Mouse, in a shrill, passionate +voice. `Would YOU like cats if you were me?' + + `Well, perhaps not,' said Alice in a soothing tone: `don't be +angry about it. And yet I wish I could show you our cat Dinah: +I think you'd take a fancy to cats if you could only see her. +She is such a dear quiet thing,' Alice went on, half to herself, +as she swam lazily about in the pool, `and she sits purring so +nicely by the fire, licking her paws and washing her face--and +she is such a nice soft thing to nurse--and she's such a capital +one for catching mice--oh, I beg your pardon!' cried Alice again, +for this time the Mouse was bristling all over, and she felt +certain it must be really offended. `We won't talk about her any +more if you'd rather not.' + + `We indeed!' cried the Mouse, who was trembling down to the end +of his tail. `As if I would talk on such a subject! Our family +always HATED cats: nasty, low, vulgar things! Don't let me hear +the name again!' + + `I won't indeed!' said Alice, in a great hurry to change the +subject of conversation. `Are you--are you fond--of--of dogs?' +The Mouse did not answer, so Alice went on eagerly: `There is +such a nice little dog near our house I should like to show you! +A little bright-eyed terrier, you know, with oh, such long curly +brown hair! And it'll fetch things when you throw them, and +it'll sit up and beg for its dinner, and all sorts of things--I +can't remember half of them--and it belongs to a farmer, you +know, and he says it's so useful, it's worth a hundred pounds! +He says it kills all the rats and--oh dear!' cried Alice in a +sorrowful tone, `I'm afraid I've offended it again!' For the +Mouse was swimming away from her as hard as it could go, and +making quite a commotion in the pool as it went. + + So she called softly after it, `Mouse dear! Do come back +again, and we won't talk about cats or dogs either, if you don't +like them!' When the Mouse heard this, it turned round and swam +slowly back to her: its face was quite pale (with passion, Alice +thought), and it said in a low trembling voice, `Let us get to +the shore, and then I'll tell you my history, and you'll +understand why it is I hate cats and dogs.' + + It was high time to go, for the pool was getting quite crowded +with the birds and animals that had fallen into it: there were a +Duck and a Dodo, a Lory and an Eaglet, and several other curious +creatures. Alice led the way, and the whole party swam to the +shore. + + + + CHAPTER III + + A Caucus-Race and a Long Tale + + + They were indeed a queer-looking party that assembled on the +bank--the birds with draggled feathers, the animals with their +fur clinging close to them, and all dripping wet, cross, and +uncomfortable. + + The first question of course was, how to get dry again: they +had a consultation about this, and after a few minutes it seemed +quite natural to Alice to find herself talking familiarly with +them, as if she had known them all her life. Indeed, she had +quite a long argument with the Lory, who at last turned sulky, +and would only say, `I am older than you, and must know better'; +and this Alice would not allow without knowing how old it was, +and, as the Lory positively refused to tell its age, there was no +more to be said. + + At last the Mouse, who seemed to be a person of authority among +them, called out, `Sit down, all of you, and listen to me! I'LL +soon make you dry enough!' They all sat down at once, in a large +ring, with the Mouse in the middle. Alice kept her eyes +anxiously fixed on it, for she felt sure she would catch a bad +cold if she did not get dry very soon. + + `Ahem!' said the Mouse with an important air, `are you all ready? +This is the driest thing I know. Silence all round, if you please! +"William the Conqueror, whose cause was favoured by the pope, was +soon submitted to by the English, who wanted leaders, and had been +of late much accustomed to usurpation and conquest. Edwin and +Morcar, the earls of Mercia and Northumbria--"' + + `Ugh!' said the Lory, with a shiver. + + `I beg your pardon!' said the Mouse, frowning, but very +politely: `Did you speak?' + + `Not I!' said the Lory hastily. + + `I thought you did,' said the Mouse. `--I proceed. "Edwin and +Morcar, the earls of Mercia and Northumbria, declared for him: +and even Stigand, the patriotic archbishop of Canterbury, found +it advisable--"' + + `Found WHAT?' said the Duck. + + `Found IT,' the Mouse replied rather crossly: `of course you +know what "it" means.' + + `I know what "it" means well enough, when I find a thing,' said +the Duck: `it's generally a frog or a worm. The question is, +what did the archbishop find?' + + The Mouse did not notice this question, but hurriedly went on, +`"--found it advisable to go with Edgar Atheling to meet William +and offer him the crown. William's conduct at first was +moderate. But the insolence of his Normans--" How are you +getting on now, my dear?' it continued, turning to Alice as it +spoke. + + `As wet as ever,' said Alice in a melancholy tone: `it doesn't +seem to dry me at all.' + + `In that case,' said the Dodo solemnly, rising to its feet, `I +move that the meeting adjourn, for the immediate adoption of more +energetic remedies--' + + `Speak English!' said the Eaglet. `I don't know the meaning of +half those long words, and, what's more, I don't believe you do +either!' And the Eaglet bent down its head to hide a smile: +some of the other birds tittered audibly. + + `What I was going to say,' said the Dodo in an offended tone, +`was, that the best thing to get us dry would be a Caucus-race.' + + `What IS a Caucus-race?' said Alice; not that she wanted much +to know, but the Dodo had paused as if it thought that SOMEBODY +ought to speak, and no one else seemed inclined to say anything. + + `Why,' said the Dodo, `the best way to explain it is to do it.' +(And, as you might like to try the thing yourself, some winter +day, I will tell you how the Dodo managed it.) + + First it marked out a race-course, in a sort of circle, (`the +exact shape doesn't matter,' it said,) and then all the party +were placed along the course, here and there. There was no `One, +two, three, and away,' but they began running when they liked, +and left off when they liked, so that it was not easy to know +when the race was over. However, when they had been running half +an hour or so, and were quite dry again, the Dodo suddenly called +out `The race is over!' and they all crowded round it, panting, +and asking, `But who has won?' + + This question the Dodo could not answer without a great deal of +thought, and it sat for a long time with one finger pressed upon +its forehead (the position in which you usually see Shakespeare, +in the pictures of him), while the rest waited in silence. At +last the Dodo said, `EVERYBODY has won, and all must have +prizes.' + + `But who is to give the prizes?' quite a chorus of voices +asked. + + `Why, SHE, of course,' said the Dodo, pointing to Alice with +one finger; and the whole party at once crowded round her, +calling out in a confused way, `Prizes! Prizes!' + + Alice had no idea what to do, and in despair she put her hand +in her pocket, and pulled out a box of comfits, (luckily the salt +water had not got into it), and handed them round as prizes. +There was exactly one a-piece all round. + + `But she must have a prize herself, you know,' said the Mouse. + + `Of course,' the Dodo replied very gravely. `What else have +you got in your pocket?' he went on, turning to Alice. + + `Only a thimble,' said Alice sadly. + + `Hand it over here,' said the Dodo. + + Then they all crowded round her once more, while the Dodo +solemnly presented the thimble, saying `We beg your acceptance of +this elegant thimble'; and, when it had finished this short +speech, they all cheered. + + Alice thought the whole thing very absurd, but they all looked +so grave that she did not dare to laugh; and, as she could not +think of anything to say, she simply bowed, and took the thimble, +looking as solemn as she could. + + The next thing was to eat the comfits: this caused some noise +and confusion, as the large birds complained that they could not +taste theirs, and the small ones choked and had to be patted on +the back. However, it was over at last, and they sat down again +in a ring, and begged the Mouse to tell them something more. + + `You promised to tell me your history, you know,' said Alice, +`and why it is you hate--C and D,' she added in a whisper, half +afraid that it would be offended again. + + `Mine is a long and a sad tale!' said the Mouse, turning to +Alice, and sighing. + + `It IS a long tail, certainly,' said Alice, looking down with +wonder at the Mouse's tail; `but why do you call it sad?' And +she kept on puzzling about it while the Mouse was speaking, so +that her idea of the tale was something like this:-- + + `Fury said to a + mouse, That he + met in the + house, + "Let us + both go to + law: I will + prosecute + YOU. --Come, + I'll take no + denial; We + must have a + trial: For + really this + morning I've + nothing + to do." + Said the + mouse to the + cur, "Such + a trial, + dear Sir, + With + no jury + or judge, + would be + wasting + our + breath." + "I'll be + judge, I'll + be jury," + Said + cunning + old Fury: + "I'll + try the + whole + cause, + and + condemn + you + to + death."' + + + `You are not attending!' said the Mouse to Alice severely. +`What are you thinking of?' + + `I beg your pardon,' said Alice very humbly: `you had got to +the fifth bend, I think?' + + `I had NOT!' cried the Mouse, sharply and very angrily. + + `A knot!' said Alice, always ready to make herself useful, and +looking anxiously about her. `Oh, do let me help to undo it!' + + `I shall do nothing of the sort,' said the Mouse, getting up +and walking away. `You insult me by talking such nonsense!' + + `I didn't mean it!' pleaded poor Alice. `But you're so easily +offended, you know!' + + The Mouse only growled in reply. + + `Please come back and finish your story!' Alice called after +it; and the others all joined in chorus, `Yes, please do!' but +the Mouse only shook its head impatiently, and walked a little +quicker. + + `What a pity it wouldn't stay!' sighed the Lory, as soon as it +was quite out of sight; and an old Crab took the opportunity of +saying to her daughter `Ah, my dear! Let this be a lesson to you +never to lose YOUR temper!' `Hold your tongue, Ma!' said the +young Crab, a little snappishly. `You're enough to try the +patience of an oyster!' + + `I wish I had our Dinah here, I know I do!' said Alice aloud, +addressing nobody in particular. `She'd soon fetch it back!' + + `And who is Dinah, if I might venture to ask the question?' +said the Lory. + + Alice replied eagerly, for she was always ready to talk about +her pet: `Dinah's our cat. And she's such a capital one for +catching mice you can't think! And oh, I wish you could see her +after the birds! Why, she'll eat a little bird as soon as look +at it!' + + This speech caused a remarkable sensation among the party. +Some of the birds hurried off at once: one the old Magpie began +wrapping itself up very carefully, remarking, `I really must be +getting home; the night-air doesn't suit my throat!' and a Canary +called out in a trembling voice to its children, `Come away, my +dears! It's high time you were all in bed!' On various pretexts +they all moved off, and Alice was soon left alone. + + `I wish I hadn't mentioned Dinah!' she said to herself in a +melancholy tone. `Nobody seems to like her, down here, and I'm +sure she's the best cat in the world! Oh, my dear Dinah! I +wonder if I shall ever see you any more!' And here poor Alice +began to cry again, for she felt very lonely and low-spirited. +In a little while, however, she again heard a little pattering of +footsteps in the distance, and she looked up eagerly, half hoping +that the Mouse had changed his mind, and was coming back to +finish his story. + + + + CHAPTER IV + + The Rabbit Sends in a Little Bill + + + It was the White Rabbit, trotting slowly back again, and +looking anxiously about as it went, as if it had lost something; +and she heard it muttering to itself `The Duchess! The Duchess! +Oh my dear paws! Oh my fur and whiskers! She'll get me +executed, as sure as ferrets are ferrets! Where CAN I have +dropped them, I wonder?' Alice guessed in a moment that it was +looking for the fan and the pair of white kid gloves, and she +very good-naturedly began hunting about for them, but they were +nowhere to be seen--everything seemed to have changed since her +swim in the pool, and the great hall, with the glass table and +the little door, had vanished completely. + + Very soon the Rabbit noticed Alice, as she went hunting about, +and called out to her in an angry tone, `Why, Mary Ann, what ARE +you doing out here? Run home this moment, and fetch me a pair of +gloves and a fan! Quick, now!' And Alice was so much frightened +that she ran off at once in the direction it pointed to, without +trying to explain the mistake it had made. + + `He took me for his housemaid,' she said to herself as she ran. +`How surprised he'll be when he finds out who I am! But I'd +better take him his fan and gloves--that is, if I can find them.' +As she said this, she came upon a neat little house, on the door +of which was a bright brass plate with the name `W. RABBIT' +engraved upon it. She went in without knocking, and hurried +upstairs, in great fear lest she should meet the real Mary Ann, +and be turned out of the house before she had found the fan and +gloves. + + `How queer it seems,' Alice said to herself, `to be going +messages for a rabbit! I suppose Dinah'll be sending me on +messages next!' And she began fancying the sort of thing that +would happen: `"Miss Alice! Come here directly, and get ready +for your walk!" "Coming in a minute, nurse! But I've got to see +that the mouse doesn't get out." Only I don't think,' Alice went +on, `that they'd let Dinah stop in the house if it began ordering +people about like that!' + + By this time she had found her way into a tidy little room with +a table in the window, and on it (as she had hoped) a fan and two +or three pairs of tiny white kid gloves: she took up the fan and +a pair of the gloves, and was just going to leave the room, when +her eye fell upon a little bottle that stood near the looking- +glass. There was no label this time with the words `DRINK ME,' +but nevertheless she uncorked it and put it to her lips. `I know +SOMETHING interesting is sure to happen,' she said to herself, +`whenever I eat or drink anything; so I'll just see what this +bottle does. I do hope it'll make me grow large again, for +really I'm quite tired of being such a tiny little thing!' + + It did so indeed, and much sooner than she had expected: +before she had drunk half the bottle, she found her head pressing +against the ceiling, and had to stoop to save her neck from being +broken. She hastily put down the bottle, saying to herself +`That's quite enough--I hope I shan't grow any more--As it is, I +can't get out at the door--I do wish I hadn't drunk quite so +much!' + + Alas! it was too late to wish that! She went on growing, and +growing, and very soon had to kneel down on the floor: in +another minute there was not even room for this, and she tried +the effect of lying down with one elbow against the door, and the +other arm curled round her head. Still she went on growing, and, +as a last resource, she put one arm out of the window, and one +foot up the chimney, and said to herself `Now I can do no more, +whatever happens. What WILL become of me?' + + Luckily for Alice, the little magic bottle had now had its full +effect, and she grew no larger: still it was very uncomfortable, +and, as there seemed to be no sort of chance of her ever getting +out of the room again, no wonder she felt unhappy. + + `It was much pleasanter at home,' thought poor Alice, `when one +wasn't always growing larger and smaller, and being ordered about +by mice and rabbits. I almost wish I hadn't gone down that +rabbit-hole--and yet--and yet--it's rather curious, you know, +this sort of life! I do wonder what CAN have happened to me! +When I used to read fairy-tales, I fancied that kind of thing +never happened, and now here I am in the middle of one! There +ought to be a book written about me, that there ought! And when +I grow up, I'll write one--but I'm grown up now,' she added in a +sorrowful tone; `at least there's no room to grow up any more +HERE.' + + `But then,' thought Alice, `shall I NEVER get any older than I +am now? That'll be a comfort, one way--never to be an old woman- +-but then--always to have lessons to learn! Oh, I shouldn't like +THAT!' + + `Oh, you foolish Alice!' she answered herself. `How can you +learn lessons in here? Why, there's hardly room for YOU, and no +room at all for any lesson-books!' + + And so she went on, taking first one side and then the other, +and making quite a conversation of it altogether; but after a few +minutes she heard a voice outside, and stopped to listen. + + `Mary Ann! Mary Ann!' said the voice. `Fetch me my gloves +this moment!' Then came a little pattering of feet on the +stairs. Alice knew it was the Rabbit coming to look for her, and +she trembled till she shook the house, quite forgetting that she +was now about a thousand times as large as the Rabbit, and had no +reason to be afraid of it. + + Presently the Rabbit came up to the door, and tried to open it; +but, as the door opened inwards, and Alice's elbow was pressed +hard against it, that attempt proved a failure. Alice heard it +say to itself `Then I'll go round and get in at the window.' + + `THAT you won't' thought Alice, and, after waiting till she +fancied she heard the Rabbit just under the window, she suddenly +spread out her hand, and made a snatch in the air. She did not +get hold of anything, but she heard a little shriek and a fall, +and a crash of broken glass, from which she concluded that it was +just possible it had fallen into a cucumber-frame, or something +of the sort. + + Next came an angry voice--the Rabbit's--`Pat! Pat! Where are +you?' And then a voice she had never heard before, `Sure then +I'm here! Digging for apples, yer honour!' + + `Digging for apples, indeed!' said the Rabbit angrily. `Here! +Come and help me out of THIS!' (Sounds of more broken glass.) + + `Now tell me, Pat, what's that in the window?' + + `Sure, it's an arm, yer honour!' (He pronounced it `arrum.') + + `An arm, you goose! Who ever saw one that size? Why, it +fills the whole window!' + + `Sure, it does, yer honour: but it's an arm for all that.' + + `Well, it's got no business there, at any rate: go and take it +away!' + + There was a long silence after this, and Alice could only hear +whispers now and then; such as, `Sure, I don't like it, yer +honour, at all, at all!' `Do as I tell you, you coward!' and at +last she spread out her hand again, and made another snatch in +the air. This time there were TWO little shrieks, and more +sounds of broken glass. `What a number of cucumber-frames there +must be!' thought Alice. `I wonder what they'll do next! As for +pulling me out of the window, I only wish they COULD! I'm sure I +don't want to stay in here any longer!' + + She waited for some time without hearing anything more: at +last came a rumbling of little cartwheels, and the sound of a +good many voice all talking together: she made out the words: +`Where's the other ladder?--Why, I hadn't to bring but one; +Bill's got the other--Bill! fetch it here, lad!--Here, put 'em up +at this corner--No, tie 'em together first--they don't reach half +high enough yet--Oh! they'll do well enough; don't be particular- +-Here, Bill! catch hold of this rope--Will the roof bear?--Mind +that loose slate--Oh, it's coming down! Heads below!' (a loud +crash)--`Now, who did that?--It was Bill, I fancy--Who's to go +down the chimney?--Nay, I shan't! YOU do it!--That I won't, +then!--Bill's to go down--Here, Bill! the master says you're to +go down the chimney!' + + `Oh! So Bill's got to come down the chimney, has he?' said +Alice to herself. `Shy, they seem to put everything upon Bill! +I wouldn't be in Bill's place for a good deal: this fireplace is +narrow, to be sure; but I THINK I can kick a little!' + + She drew her foot as far down the chimney as she could, and +waited till she heard a little animal (she couldn't guess of what +sort it was) scratching and scrambling about in the chimney close +above her: then, saying to herself `This is Bill,' she gave one +sharp kick, and waited to see what would happen next. + + The first thing she heard was a general chorus of `There goes +Bill!' then the Rabbit's voice along--`Catch him, you by the +hedge!' then silence, and then another confusion of voices--`Hold +up his head--Brandy now--Don't choke him--How was it, old fellow? +What happened to you? Tell us all about it!' + + Last came a little feeble, squeaking voice, (`That's Bill,' +thought Alice,) `Well, I hardly know--No more, thank ye; I'm +better now--but I'm a deal too flustered to tell you--all I know +is, something comes at me like a Jack-in-the-box, and up I goes +like a sky-rocket!' + + `So you did, old fellow!' said the others. + + `We must burn the house down!' said the Rabbit's voice; and +Alice called out as loud as she could, `If you do. I'll set +Dinah at you!' + + There was a dead silence instantly, and Alice thought to +herself, `I wonder what they WILL do next! If they had any +sense, they'd take the roof off.' After a minute or two, they +began moving about again, and Alice heard the Rabbit say, `A +barrowful will do, to begin with.' + + `A barrowful of WHAT?' thought Alice; but she had not long to +doubt, for the next moment a shower of little pebbles came +rattling in at the window, and some of them hit her in the face. +`I'll put a stop to this,' she said to herself, and shouted out, +`You'd better not do that again!' which produced another dead +silence. + + Alice noticed with some surprise that the pebbles were all +turning into little cakes as they lay on the floor, and a bright +idea came into her head. `If I eat one of these cakes,' she +thought, `it's sure to make SOME change in my size; and as it +can't possibly make me larger, it must make me smaller, I +suppose.' + + So she swallowed one of the cakes, and was delighted to find +that she began shrinking directly. As soon as she was small +enough to get through the door, she ran out of the house, and +found quite a crowd of little animals and birds waiting outside. +The poor little Lizard, Bill, was in the middle, being held up by +two guinea-pigs, who were giving it something out of a bottle. +They all made a rush at Alice the moment she appeared; but she +ran off as hard as she could, and soon found herself safe in a +thick wood. + + `The first thing I've got to do,' said Alice to herself, as she +wandered about in the wood, `is to grow to my right size again; +and the second thing is to find my way into that lovely garden. +I think that will be the best plan.' + + It sounded an excellent plan, no doubt, and very neatly and +simply arranged; the only difficulty was, that she had not the +smallest idea how to set about it; and while she was peering +about anxiously among the trees, a little sharp bark just over +her head made her look up in a great hurry. + + An enormous puppy was looking down at her with large round +eyes, and feebly stretching out one paw, trying to touch her. +`Poor little thing!' said Alice, in a coaxing tone, and she tried +hard to whistle to it; but she was terribly frightened all the +time at the thought that it might be hungry, in which case it +would be very likely to eat her up in spite of all her coaxing. + + Hardly knowing what she did, she picked up a little bit of +stick, and held it out to the puppy; whereupon the puppy jumped +into the air off all its feet at once, with a yelp of delight, +and rushed at the stick, and made believe to worry it; then Alice +dodged behind a great thistle, to keep herself from being run +over; and the moment she appeared on the other side, the puppy +made another rush at the stick, and tumbled head over heels in +its hurry to get hold of it; then Alice, thinking it was very +like having a game of play with a cart-horse, and expecting every +moment to be trampled under its feet, ran round the thistle +again; then the puppy began a series of short charges at the +stick, running a very little way forwards each time and a long +way back, and barking hoarsely all the while, till at last it sat +down a good way off, panting, with its tongue hanging out of its +mouth, and its great eyes half shut. + + This seemed to Alice a good opportunity for making her escape; +so she set off at once, and ran till she was quite tired and out +of breath, and till the puppy's bark sounded quite faint in the +distance. + + `And yet what a dear little puppy it was!' said Alice, as she +leant against a buttercup to rest herself, and fanned herself +with one of the leaves: `I should have liked teaching it tricks +very much, if--if I'd only been the right size to do it! Oh +dear! I'd nearly forgotten that I've got to grow up again! Let +me see--how IS it to be managed? I suppose I ought to eat or +drink something or other; but the great question is, what?' + + The great question certainly was, what? Alice looked all round +her at the flowers and the blades of grass, but she did not see +anything that looked like the right thing to eat or drink under +the circumstances. There was a large mushroom growing near her, +about the same height as herself; and when she had looked under +it, and on both sides of it, and behind it, it occurred to her +that she might as well look and see what was on the top of it. + + She stretched herself up on tiptoe, and peeped over the edge of +the mushroom, and her eyes immediately met those of a large +caterpillar, that was sitting on the top with its arms folded, +quietly smoking a long hookah, and taking not the smallest notice +of her or of anything else. + + + + CHAPTER V + + Advice from a Caterpillar + + + The Caterpillar and Alice looked at each other for some time in +silence: at last the Caterpillar took the hookah out of its +mouth, and addressed her in a languid, sleepy voice. + + `Who are YOU?' said the Caterpillar. + + This was not an encouraging opening for a conversation. Alice +replied, rather shyly, `I--I hardly know, sir, just at present-- +at least I know who I WAS when I got up this morning, but I think +I must have been changed several times since then.' + + `What do you mean by that?' said the Caterpillar sternly. +`Explain yourself!' + + `I can't explain MYSELF, I'm afraid, sir' said Alice, `because +I'm not myself, you see.' + + `I don't see,' said the Caterpillar. + + `I'm afraid I can't put it more clearly,' Alice replied very +politely, `for I can't understand it myself to begin with; and +being so many different sizes in a day is very confusing.' + + `It isn't,' said the Caterpillar. + + `Well, perhaps you haven't found it so yet,' said Alice; `but +when you have to turn into a chrysalis--you will some day, you +know--and then after that into a butterfly, I should think you'll +feel it a little queer, won't you?' + + `Not a bit,' said the Caterpillar. + + `Well, perhaps your feelings may be different,' said Alice; +`all I know is, it would feel very queer to ME.' + + `You!' said the Caterpillar contemptuously. `Who are YOU?' + + Which brought them back again to the beginning of the +conversation. Alice felt a little irritated at the Caterpillar's +making such VERY short remarks, and she drew herself up and said, +very gravely, `I think, you ought to tell me who YOU are, first.' + + `Why?' said the Caterpillar. + + Here was another puzzling question; and as Alice could not +think of any good reason, and as the Caterpillar seemed to be in +a VERY unpleasant state of mind, she turned away. + + `Come back!' the Caterpillar called after her. `I've something +important to say!' + + This sounded promising, certainly: Alice turned and came back +again. + + `Keep your temper,' said the Caterpillar. + + `Is that all?' said Alice, swallowing down her anger as well as +she could. + + `No,' said the Caterpillar. + + Alice thought she might as well wait, as she had nothing else +to do, and perhaps after all it might tell her something worth +hearing. For some minutes it puffed away without speaking, but +at last it unfolded its arms, took the hookah out of its mouth +again, and said, `So you think you're changed, do you?' + + `I'm afraid I am, sir,' said Alice; `I can't remember things as +I used--and I don't keep the same size for ten minutes together!' + + `Can't remember WHAT things?' said the Caterpillar. + + `Well, I've tried to say "HOW DOTH THE LITTLE BUSY BEE," but it +all came different!' Alice replied in a very melancholy voice. + + `Repeat, "YOU ARE OLD, FATHER WILLIAM,"' said the Caterpillar. + + Alice folded her hands, and began:-- + + `You are old, Father William,' the young man said, + `And your hair has become very white; + And yet you incessantly stand on your head-- + Do you think, at your age, it is right?' + + `In my youth,' Father William replied to his son, + `I feared it might injure the brain; + But, now that I'm perfectly sure I have none, + Why, I do it again and again.' + + `You are old,' said the youth, `as I mentioned before, + And have grown most uncommonly fat; + Yet you turned a back-somersault in at the door-- + Pray, what is the reason of that?' + + `In my youth,' said the sage, as he shook his grey locks, + `I kept all my limbs very supple + By the use of this ointment--one shilling the box-- + Allow me to sell you a couple?' + + `You are old,' said the youth, `and your jaws are too weak + For anything tougher than suet; + Yet you finished the goose, with the bones and the beak-- + Pray how did you manage to do it?' + + `In my youth,' said his father, `I took to the law, + And argued each case with my wife; + And the muscular strength, which it gave to my jaw, + Has lasted the rest of my life.' + + `You are old,' said the youth, `one would hardly suppose + That your eye was as steady as ever; + Yet you balanced an eel on the end of your nose-- + What made you so awfully clever?' + + `I have answered three questions, and that is enough,' + Said his father; `don't give yourself airs! + Do you think I can listen all day to such stuff? + Be off, or I'll kick you down stairs!' + + + `That is not said right,' said the Caterpillar. + + `Not QUITE right, I'm afraid,' said Alice, timidly; `some of the +words have got altered.' + + `It is wrong from beginning to end,' said the Caterpillar +decidedly, and there was silence for some minutes. + + The Caterpillar was the first to speak. + + `What size do you want to be?' it asked. + + `Oh, I'm not particular as to size,' Alice hastily replied; +`only one doesn't like changing so often, you know.' + + `I DON'T know,' said the Caterpillar. + + Alice said nothing: she had never been so much contradicted in +her life before, and she felt that she was losing her temper. + + `Are you content now?' said the Caterpillar. + + `Well, I should like to be a LITTLE larger, sir, if you +wouldn't mind,' said Alice: `three inches is such a wretched +height to be.' + + `It is a very good height indeed!' said the Caterpillar +angrily, rearing itself upright as it spoke (it was exactly three +inches high). + + `But I'm not used to it!' pleaded poor Alice in a piteous tone. +And she thought of herself, `I wish the creatures wouldn't be so +easily offended!' + + `You'll get used to it in time,' said the Caterpillar; and it +put the hookah into its mouth and began smoking again. + + This time Alice waited patiently until it chose to speak again. +In a minute or two the Caterpillar took the hookah out of its +mouth and yawned once or twice, and shook itself. Then it got +down off the mushroom, and crawled away in the grass, merely +remarking as it went, `One side will make you grow taller, and +the other side will make you grow shorter.' + + `One side of WHAT? The other side of WHAT?' thought Alice to +herself. + + `Of the mushroom,' said the Caterpillar, just as if she had +asked it aloud; and in another moment it was out of sight. + + Alice remained looking thoughtfully at the mushroom for a +minute, trying to make out which were the two sides of it; and as +it was perfectly round, she found this a very difficult question. +However, at last she stretched her arms round it as far as they +would go, and broke off a bit of the edge with each hand. + + `And now which is which?' she said to herself, and nibbled a +little of the right-hand bit to try the effect: the next moment +she felt a violent blow underneath her chin: it had struck her +foot! + + She was a good deal frightened by this very sudden change, but +she felt that there was no time to be lost, as she was shrinking +rapidly; so she set to work at once to eat some of the other bit. +Her chin was pressed so closely against her foot, that there was +hardly room to open her mouth; but she did it at last, and +managed to swallow a morsel of the lefthand bit. + + + * * * * * * * + + * * * * * * + + * * * * * * * + + `Come, my head's free at last!' said Alice in a tone of +delight, which changed into alarm in another moment, when she +found that her shoulders were nowhere to be found: all she could +see, when she looked down, was an immense length of neck, which +seemed to rise like a stalk out of a sea of green leaves that lay +far below her. + + `What CAN all that green stuff be?' said Alice. `And where +HAVE my shoulders got to? And oh, my poor hands, how is it I +can't see you?' She was moving them about as she spoke, but no +result seemed to follow, except a little shaking among the +distant green leaves. + + As there seemed to be no chance of getting her hands up to her +head, she tried to get her head down to them, and was delighted +to find that her neck would bend about easily in any direction, +like a serpent. She had just succeeded in curving it down into a +graceful zigzag, and was going to dive in among the leaves, which +she found to be nothing but the tops of the trees under which she +had been wandering, when a sharp hiss made her draw back in a +hurry: a large pigeon had flown into her face, and was beating +her violently with its wings. + + `Serpent!' screamed the Pigeon. + + `I'm NOT a serpent!' said Alice indignantly. `Let me alone!' + + `Serpent, I say again!' repeated the Pigeon, but in a more +subdued tone, and added with a kind of sob, `I've tried every +way, and nothing seems to suit them!' + + `I haven't the least idea what you're talking about,' said +Alice. + + `I've tried the roots of trees, and I've tried banks, and I've +tried hedges,' the Pigeon went on, without attending to her; `but +those serpents! There's no pleasing them!' + + Alice was more and more puzzled, but she thought there was no +use in saying anything more till the Pigeon had finished. + + `As if it wasn't trouble enough hatching the eggs,' said the +Pigeon; `but I must be on the look-out for serpents night and +day! Why, I haven't had a wink of sleep these three weeks!' + + `I'm very sorry you've been annoyed,' said Alice, who was +beginning to see its meaning. + + `And just as I'd taken the highest tree in the wood,' continued +the Pigeon, raising its voice to a shriek, `and just as I was +thinking I should be free of them at last, they must needs come +wriggling down from the sky! Ugh, Serpent!' + + `But I'm NOT a serpent, I tell you!' said Alice. `I'm a--I'm +a--' + + `Well! WHAT are you?' said the Pigeon. `I can see you're +trying to invent something!' + + `I--I'm a little girl,' said Alice, rather doubtfully, as she +remembered the number of changes she had gone through that day. + + `A likely story indeed!' said the Pigeon in a tone of the +deepest contempt. `I've seen a good many little girls in my +time, but never ONE with such a neck as that! No, no! You're a +serpent; and there's no use denying it. I suppose you'll be +telling me next that you never tasted an egg!' + + `I HAVE tasted eggs, certainly,' said Alice, who was a very +truthful child; `but little girls eat eggs quite as much as +serpents do, you know.' + + `I don't believe it,' said the Pigeon; `but if they do, why +then they're a kind of serpent, that's all I can say.' + + This was such a new idea to Alice, that she was quite silent +for a minute or two, which gave the Pigeon the opportunity of +adding, `You're looking for eggs, I know THAT well enough; and +what does it matter to me whether you're a little girl or a +serpent?' + + `It matters a good deal to ME,' said Alice hastily; `but I'm +not looking for eggs, as it happens; and if I was, I shouldn't +want YOURS: I don't like them raw.' + + `Well, be off, then!' said the Pigeon in a sulky tone, as it +settled down again into its nest. Alice crouched down among the +trees as well as she could, for her neck kept getting entangled +among the branches, and every now and then she had to stop and +untwist it. After a while she remembered that she still held the +pieces of mushroom in her hands, and she set to work very +carefully, nibbling first at one and then at the other, and +growing sometimes taller and sometimes shorter, until she had +succeeded in bringing herself down to her usual height. + + It was so long since she had been anything near the right size, +that it felt quite strange at first; but she got used to it in a +few minutes, and began talking to herself, as usual. `Come, +there's half my plan done now! How puzzling all these changes +are! I'm never sure what I'm going to be, from one minute to +another! However, I've got back to my right size: the next +thing is, to get into that beautiful garden--how IS that to be +done, I wonder?' As she said this, she came suddenly upon an +open place, with a little house in it about four feet high. +`Whoever lives there,' thought Alice, `it'll never do to come +upon them THIS size: why, I should frighten them out of their +wits!' So she began nibbling at the righthand bit again, and did +not venture to go near the house till she had brought herself +down to nine inches high. + + + + CHAPTER VI + + Pig and Pepper + + + For a minute or two she stood looking at the house, and +wondering what to do next, when suddenly a footman in livery came +running out of the wood--(she considered him to be a footman +because he was in livery: otherwise, judging by his face only, +she would have called him a fish)--and rapped loudly at the door +with his knuckles. It was opened by another footman in livery, +with a round face, and large eyes like a frog; and both footmen, +Alice noticed, had powdered hair that curled all over their +heads. She felt very curious to know what it was all about, and +crept a little way out of the wood to listen. + + The Fish-Footman began by producing from under his arm a great +letter, nearly as large as himself, and this he handed over to +the other, saying, in a solemn tone, `For the Duchess. An +invitation from the Queen to play croquet.' The Frog-Footman +repeated, in the same solemn tone, only changing the order of the +words a little, `From the Queen. An invitation for the Duchess +to play croquet.' + + Then they both bowed low, and their curls got entangled +together. + + Alice laughed so much at this, that she had to run back into +the wood for fear of their hearing her; and when she next peeped +out the Fish-Footman was gone, and the other was sitting on the +ground near the door, staring stupidly up into the sky. + + Alice went timidly up to the door, and knocked. + + `There's no sort of use in knocking,' said the Footman, `and +that for two reasons. First, because I'm on the same side of the +door as you are; secondly, because they're making such a noise +inside, no one could possibly hear you.' And certainly there was +a most extraordinary noise going on within--a constant howling +and sneezing, and every now and then a great crash, as if a dish +or kettle had been broken to pieces. + + `Please, then,' said Alice, `how am I to get in?' + + `There might be some sense in your knocking,' the Footman went +on without attending to her, `if we had the door between us. For +instance, if you were INSIDE, you might knock, and I could let +you out, you know.' He was looking up into the sky all the time +he was speaking, and this Alice thought decidedly uncivil. `But +perhaps he can't help it,' she said to herself; `his eyes are so +VERY nearly at the top of his head. But at any rate he might +answer questions.--How am I to get in?' she repeated, aloud. + + `I shall sit here,' the Footman remarked, `till tomorrow--' + + At this moment the door of the house opened, and a large plate +came skimming out, straight at the Footman's head: it just +grazed his nose, and broke to pieces against one of the trees +behind him. + + `--or next day, maybe,' the Footman continued in the same tone, +exactly as if nothing had happened. + + `How am I to get in?' asked Alice again, in a louder tone. + + `ARE you to get in at all?' said the Footman. `That's the +first question, you know.' + + It was, no doubt: only Alice did not like to be told so. +`It's really dreadful,' she muttered to herself, `the way all the +creatures argue. It's enough to drive one crazy!' + + The Footman seemed to think this a good opportunity for +repeating his remark, with variations. `I shall sit here,' he +said, `on and off, for days and days.' + + `But what am I to do?' said Alice. + + `Anything you like,' said the Footman, and began whistling. + + `Oh, there's no use in talking to him,' said Alice desperately: +`he's perfectly idiotic!' And she opened the door and went in. + + The door led right into a large kitchen, which was full of +smoke from one end to the other: the Duchess was sitting on a +three-legged stool in the middle, nursing a baby; the cook was +leaning over the fire, stirring a large cauldron which seemed to +be full of soup. + + `There's certainly too much pepper in that soup!' Alice said to +herself, as well as she could for sneezing. + + There was certainly too much of it in the air. Even the +Duchess sneezed occasionally; and as for the baby, it was +sneezing and howling alternately without a moment's pause. The +only things in the kitchen that did not sneeze, were the cook, +and a large cat which was sitting on the hearth and grinning from +ear to ear. + + `Please would you tell me,' said Alice, a little timidly, for +she was not quite sure whether it was good manners for her to +speak first, `why your cat grins like that?' + + `It's a Cheshire cat,' said the Duchess, `and that's why. +Pig!' + + She said the last word with such sudden violence that Alice +quite jumped; but she saw in another moment that it was addressed +to the baby, and not to her, so she took courage, and went on +again:-- + + `I didn't know that Cheshire cats always grinned; in fact, I +didn't know that cats COULD grin.' + + `They all can,' said the Duchess; `and most of 'em do.' + + `I don't know of any that do,' Alice said very politely, +feeling quite pleased to have got into a conversation. + + `You don't know much,' said the Duchess; `and that's a fact.' + + Alice did not at all like the tone of this remark, and thought +it would be as well to introduce some other subject of +conversation. While she was trying to fix on one, the cook took +the cauldron of soup off the fire, and at once set to work +throwing everything within her reach at the Duchess and the baby +--the fire-irons came first; then followed a shower of saucepans, +plates, and dishes. The Duchess took no notice of them even when +they hit her; and the baby was howling so much already, that it +was quite impossible to say whether the blows hurt it or not. + + `Oh, PLEASE mind what you're doing!' cried Alice, jumping up +and down in an agony of terror. `Oh, there goes his PRECIOUS +nose'; as an unusually large saucepan flew close by it, and very +nearly carried it off. + + `If everybody minded their own business,' the Duchess said in a +hoarse growl, `the world would go round a deal faster than it +does.' + + `Which would NOT be an advantage,' said Alice, who felt very +glad to get an opportunity of showing off a little of her +knowledge. `Just think of what work it would make with the day +and night! You see the earth takes twenty-four hours to turn +round on its axis--' + + `Talking of axes,' said the Duchess, `chop off her head!' + + Alice glanced rather anxiously at the cook, to see if she meant +to take the hint; but the cook was busily stirring the soup, and +seemed not to be listening, so she went on again: `Twenty-four +hours, I THINK; or is it twelve? I--' + + `Oh, don't bother ME,' said the Duchess; `I never could abide +figures!' And with that she began nursing her child again, +singing a sort of lullaby to it as she did so, and giving it a +violent shake at the end of every line: + + `Speak roughly to your little boy, + And beat him when he sneezes: + He only does it to annoy, + Because he knows it teases.' + + CHORUS. + + (In which the cook and the baby joined):-- + + `Wow! wow! wow!' + + While the Duchess sang the second verse of the song, she kept +tossing the baby violently up and down, and the poor little thing +howled so, that Alice could hardly hear the words:-- + + `I speak severely to my boy, + I beat him when he sneezes; + For he can thoroughly enjoy + The pepper when he pleases!' + + CHORUS. + + `Wow! wow! wow!' + + `Here! you may nurse it a bit, if you like!' the Duchess said +to Alice, flinging the baby at her as she spoke. `I must go and +get ready to play croquet with the Queen,' and she hurried out of +the room. The cook threw a frying-pan after her as she went out, +but it just missed her. + + Alice caught the baby with some difficulty, as it was a queer- +shaped little creature, and held out its arms and legs in all +directions, `just like a star-fish,' thought Alice. The poor +little thing was snorting like a steam-engine when she caught it, +and kept doubling itself up and straightening itself out again, +so that altogether, for the first minute or two, it was as much +as she could do to hold it. + + As soon as she had made out the proper way of nursing it, +(which was to twist it up into a sort of knot, and then keep +tight hold of its right ear and left foot, so as to prevent its +undoing itself,) she carried it out into the open air. `IF I +don't take this child away with me,' thought Alice, `they're sure +to kill it in a day or two: wouldn't it be murder to leave it +behind?' She said the last words out loud, and the little thing +grunted in reply (it had left off sneezing by this time). `Don't +grunt,' said Alice; `that's not at all a proper way of expressing +yourself.' + + The baby grunted again, and Alice looked very anxiously into +its face to see what was the matter with it. There could be no +doubt that it had a VERY turn-up nose, much more like a snout +than a real nose; also its eyes were getting extremely small for +a baby: altogether Alice did not like the look of the thing at +all. `But perhaps it was only sobbing,' she thought, and looked +into its eyes again, to see if there were any tears. + + No, there were no tears. `If you're going to turn into a pig, +my dear,' said Alice, seriously, `I'll have nothing more to do +with you. Mind now!' The poor little thing sobbed again (or +grunted, it was impossible to say which), and they went on for +some while in silence. + + Alice was just beginning to think to herself, `Now, what am I +to do with this creature when I get it home?' when it grunted +again, so violently, that she looked down into its face in some +alarm. This time there could be NO mistake about it: it was +neither more nor less than a pig, and she felt that it would be +quite absurd for her to carry it further. + + So she set the little creature down, and felt quite relieved to +see it trot away quietly into the wood. `If it had grown up,' +she said to herself, `it would have made a dreadfully ugly child: +but it makes rather a handsome pig, I think.' And she began +thinking over other children she knew, who might do very well as +pigs, and was just saying to herself, `if one only knew the right +way to change them--' when she was a little startled by seeing +the Cheshire Cat sitting on a bough of a tree a few yards off. + + The Cat only grinned when it saw Alice. It looked good- +natured, she thought: still it had VERY long claws and a great +many teeth, so she felt that it ought to be treated with respect. + + `Cheshire Puss,' she began, rather timidly, as she did not at +all know whether it would like the name: however, it only +grinned a little wider. `Come, it's pleased so far,' thought +Alice, and she went on. `Would you tell me, please, which way I +ought to go from here?' + + `That depends a good deal on where you want to get to,' said +the Cat. + + `I don't much care where--' said Alice. + + `Then it doesn't matter which way you go,' said the Cat. + + `--so long as I get SOMEWHERE,' Alice added as an explanation. + + `Oh, you're sure to do that,' said the Cat, `if you only walk +long enough.' + + Alice felt that this could not be denied, so she tried another +question. `What sort of people live about here?' + + `In THAT direction,' the Cat said, waving its right paw round, +`lives a Hatter: and in THAT direction,' waving the other paw, +`lives a March Hare. Visit either you like: they're both mad.' + + `But I don't want to go among mad people,' Alice remarked. + + `Oh, you can't help that,' said the Cat: `we're all mad here. +I'm mad. You're mad.' + + `How do you know I'm mad?' said Alice. + + `You must be,' said the Cat, `or you wouldn't have come here.' + + Alice didn't think that proved it at all; however, she went on +`And how do you know that you're mad?' + + `To begin with,' said the Cat, `a dog's not mad. You grant +that?' + + `I suppose so,' said Alice. + + `Well, then,' the Cat went on, `you see, a dog growls when it's +angry, and wags its tail when it's pleased. Now I growl when I'm +pleased, and wag my tail when I'm angry. Therefore I'm mad.' + + `I call it purring, not growling,' said Alice. + + `Call it what you like,' said the Cat. `Do you play croquet +with the Queen to-day?' + + `I should like it very much,' said Alice, `but I haven't been +invited yet.' + + `You'll see me there,' said the Cat, and vanished. + + Alice was not much surprised at this, she was getting so used +to queer things happening. While she was looking at the place +where it had been, it suddenly appeared again. + + `By-the-bye, what became of the baby?' said the Cat. `I'd +nearly forgotten to ask.' + + `It turned into a pig,' Alice quietly said, just as if it had +come back in a natural way. + + `I thought it would,' said the Cat, and vanished again. + + Alice waited a little, half expecting to see it again, but it +did not appear, and after a minute or two she walked on in the +direction in which the March Hare was said to live. `I've seen +hatters before,' she said to herself; `the March Hare will be +much the most interesting, and perhaps as this is May it won't be +raving mad--at least not so mad as it was in March.' As she said +this, she looked up, and there was the Cat again, sitting on a +branch of a tree. + + `Did you say pig, or fig?' said the Cat. + + `I said pig,' replied Alice; `and I wish you wouldn't keep +appearing and vanishing so suddenly: you make one quite giddy.' + + `All right,' said the Cat; and this time it vanished quite +slowly, beginning with the end of the tail, and ending with the +grin, which remained some time after the rest of it had gone. + + `Well! I've often seen a cat without a grin,' thought Alice; +`but a grin without a cat! It's the most curious thing I ever +say in my life!' + + She had not gone much farther before she came in sight of the +house of the March Hare: she thought it must be the right house, +because the chimneys were shaped like ears and the roof was +thatched with fur. It was so large a house, that she did not +like to go nearer till she had nibbled some more of the lefthand +bit of mushroom, and raised herself to about two feet high: even +then she walked up towards it rather timidly, saying to herself +`Suppose it should be raving mad after all! I almost wish I'd +gone to see the Hatter instead!' + + + + CHAPTER VII + + A Mad Tea-Party + + + There was a table set out under a tree in front of the house, +and the March Hare and the Hatter were having tea at it: a +Dormouse was sitting between them, fast asleep, and the other two +were using it as a cushion, resting their elbows on it, and the +talking over its head. `Very uncomfortable for the Dormouse,' +thought Alice; `only, as it's asleep, I suppose it doesn't mind.' + + The table was a large one, but the three were all crowded +together at one corner of it: `No room! No room!' they cried +out when they saw Alice coming. `There's PLENTY of room!' said +Alice indignantly, and she sat down in a large arm-chair at one +end of the table. + + `Have some wine,' the March Hare said in an encouraging tone. + + Alice looked all round the table, but there was nothing on it +but tea. `I don't see any wine,' she remarked. + + `There isn't any,' said the March Hare. + + `Then it wasn't very civil of you to offer it,' said Alice +angrily. + + `It wasn't very civil of you to sit down without being +invited,' said the March Hare. + + `I didn't know it was YOUR table,' said Alice; `it's laid for a +great many more than three.' + + `Your hair wants cutting,' said the Hatter. He had been +looking at Alice for some time with great curiosity, and this was +his first speech. + + `You should learn not to make personal remarks,' Alice said +with some severity; `it's very rude.' + + The Hatter opened his eyes very wide on hearing this; but all +he SAID was, `Why is a raven like a writing-desk?' + + `Come, we shall have some fun now!' thought Alice. `I'm glad +they've begun asking riddles.--I believe I can guess that,' she +added aloud. + + `Do you mean that you think you can find out the answer to it?' +said the March Hare. + + `Exactly so,' said Alice. + + `Then you should say what you mean,' the March Hare went on. + + `I do,' Alice hastily replied; `at least--at least I mean what +I say--that's the same thing, you know.' + + `Not the same thing a bit!' said the Hatter. `You might just +as well say that "I see what I eat" is the same thing as "I eat +what I see"!' + + `You might just as well say,' added the March Hare, `that "I +like what I get" is the same thing as "I get what I like"!' + + `You might just as well say,' added the Dormouse, who seemed to +be talking in his sleep, `that "I breathe when I sleep" is the +same thing as "I sleep when I breathe"!' + + `It IS the same thing with you,' said the Hatter, and here the +conversation dropped, and the party sat silent for a minute, +while Alice thought over all she could remember about ravens and +writing-desks, which wasn't much. + + The Hatter was the first to break the silence. `What day of +the month is it?' he said, turning to Alice: he had taken his +watch out of his pocket, and was looking at it uneasily, shaking +it every now and then, and holding it to his ear. + + Alice considered a little, and then said `The fourth.' + + `Two days wrong!' sighed the Hatter. `I told you butter +wouldn't suit the works!' he added looking angrily at the March +Hare. + + `It was the BEST butter,' the March Hare meekly replied. + + `Yes, but some crumbs must have got in as well,' the Hatter +grumbled: `you shouldn't have put it in with the bread-knife.' + + The March Hare took the watch and looked at it gloomily: then +he dipped it into his cup of tea, and looked at it again: but he +could think of nothing better to say than his first remark, `It +was the BEST butter, you know.' + + Alice had been looking over his shoulder with some curiosity. +`What a funny watch!' she remarked. `It tells the day of the +month, and doesn't tell what o'clock it is!' + + `Why should it?' muttered the Hatter. `Does YOUR watch tell +you what year it is?' + + `Of course not,' Alice replied very readily: `but that's +because it stays the same year for such a long time together.' + + `Which is just the case with MINE,' said the Hatter. + + Alice felt dreadfully puzzled. The Hatter's remark seemed to +have no sort of meaning in it, and yet it was certainly English. +`I don't quite understand you,' she said, as politely as she +could. + + `The Dormouse is asleep again,' said the Hatter, and he poured +a little hot tea upon its nose. + + The Dormouse shook its head impatiently, and said, without +opening its eyes, `Of course, of course; just what I was going to +remark myself.' + + `Have you guessed the riddle yet?' the Hatter said, turning to +Alice again. + + `No, I give it up,' Alice replied: `what's the answer?' + + `I haven't the slightest idea,' said the Hatter. + + `Nor I,' said the March Hare. + + Alice sighed wearily. `I think you might do something better +with the time,' she said, `than waste it in asking riddles that +have no answers.' + + `If you knew Time as well as I do,' said the Hatter, `you +wouldn't talk about wasting IT. It's HIM.' + + `I don't know what you mean,' said Alice. + + `Of course you don't!' the Hatter said, tossing his head +contemptuously. `I dare say you never even spoke to Time!' + + `Perhaps not,' Alice cautiously replied: `but I know I have to +beat time when I learn music.' + + `Ah! that accounts for it,' said the Hatter. `He won't stand +beating. Now, if you only kept on good terms with him, he'd do +almost anything you liked with the clock. For instance, suppose +it were nine o'clock in the morning, just time to begin lessons: +you'd only have to whisper a hint to Time, and round goes the +clock in a twinkling! Half-past one, time for dinner!' + + (`I only wish it was,' the March Hare said to itself in a +whisper.) + + `That would be grand, certainly,' said Alice thoughtfully: +`but then--I shouldn't be hungry for it, you know.' + + `Not at first, perhaps,' said the Hatter: `but you could keep +it to half-past one as long as you liked.' + + `Is that the way YOU manage?' Alice asked. + + The Hatter shook his head mournfully. `Not I!' he replied. +`We quarrelled last March--just before HE went mad, you know--' +(pointing with his tea spoon at the March Hare,) `--it was at the +great concert given by the Queen of Hearts, and I had to sing + + "Twinkle, twinkle, little bat! + How I wonder what you're at!" + +You know the song, perhaps?' + + `I've heard something like it,' said Alice. + + `It goes on, you know,' the Hatter continued, `in this way:-- + + "Up above the world you fly, + Like a tea-tray in the sky. + Twinkle, twinkle--"' + +Here the Dormouse shook itself, and began singing in its sleep +`Twinkle, twinkle, twinkle, twinkle--' and went on so long that +they had to pinch it to make it stop. + + `Well, I'd hardly finished the first verse,' said the Hatter, +`when the Queen jumped up and bawled out, "He's murdering the +time! Off with his head!"' + + `How dreadfully savage!' exclaimed Alice. + + `And ever since that,' the Hatter went on in a mournful tone, +`he won't do a thing I ask! It's always six o'clock now.' + + A bright idea came into Alice's head. `Is that the reason so +many tea-things are put out here?' she asked. + + `Yes, that's it,' said the Hatter with a sigh: `it's always +tea-time, and we've no time to wash the things between whiles.' + + `Then you keep moving round, I suppose?' said Alice. + + `Exactly so,' said the Hatter: `as the things get used up.' + + `But what happens when you come to the beginning again?' Alice +ventured to ask. + + `Suppose we change the subject,' the March Hare interrupted, +yawning. `I'm getting tired of this. I vote the young lady +tells us a story.' + + `I'm afraid I don't know one,' said Alice, rather alarmed at +the proposal. + + `Then the Dormouse shall!' they both cried. `Wake up, +Dormouse!' And they pinched it on both sides at once. + + The Dormouse slowly opened his eyes. `I wasn't asleep,' he +said in a hoarse, feeble voice: `I heard every word you fellows +were saying.' + + `Tell us a story!' said the March Hare. + + `Yes, please do!' pleaded Alice. + + `And be quick about it,' added the Hatter, `or you'll be asleep +again before it's done.' + + `Once upon a time there were three little sisters,' the +Dormouse began in a great hurry; `and their names were Elsie, +Lacie, and Tillie; and they lived at the bottom of a well--' + + `What did they live on?' said Alice, who always took a great +interest in questions of eating and drinking. + + `They lived on treacle,' said the Dormouse, after thinking a +minute or two. + + `They couldn't have done that, you know,' Alice gently +remarked; `they'd have been ill.' + + `So they were,' said the Dormouse; `VERY ill.' + + Alice tried to fancy to herself what such an extraordinary ways +of living would be like, but it puzzled her too much, so she went +on: `But why did they live at the bottom of a well?' + + `Take some more tea,' the March Hare said to Alice, very +earnestly. + + `I've had nothing yet,' Alice replied in an offended tone, `so +I can't take more.' + + `You mean you can't take LESS,' said the Hatter: `it's very +easy to take MORE than nothing.' + + `Nobody asked YOUR opinion,' said Alice. + + `Who's making personal remarks now?' the Hatter asked +triumphantly. + + Alice did not quite know what to say to this: so she helped +herself to some tea and bread-and-butter, and then turned to the +Dormouse, and repeated her question. `Why did they live at the +bottom of a well?' + + The Dormouse again took a minute or two to think about it, and +then said, `It was a treacle-well.' + + `There's no such thing!' Alice was beginning very angrily, but +the Hatter and the March Hare went `Sh! sh!' and the Dormouse +sulkily remarked, `If you can't be civil, you'd better finish the +story for yourself.' + + `No, please go on!' Alice said very humbly; `I won't interrupt +again. I dare say there may be ONE.' + + `One, indeed!' said the Dormouse indignantly. However, he +consented to go on. `And so these three little sisters--they +were learning to draw, you know--' + + `What did they draw?' said Alice, quite forgetting her promise. + + `Treacle,' said the Dormouse, without considering at all this +time. + + `I want a clean cup,' interrupted the Hatter: `let's all move +one place on.' + + He moved on as he spoke, and the Dormouse followed him: the +March Hare moved into the Dormouse's place, and Alice rather +unwillingly took the place of the March Hare. The Hatter was the +only one who got any advantage from the change: and Alice was a +good deal worse off than before, as the March Hare had just upset +the milk-jug into his plate. + + Alice did not wish to offend the Dormouse again, so she began +very cautiously: `But I don't understand. Where did they draw +the treacle from?' + + `You can draw water out of a water-well,' said the Hatter; `so +I should think you could draw treacle out of a treacle-well--eh, +stupid?' + + `But they were IN the well,' Alice said to the Dormouse, not +choosing to notice this last remark. + + `Of course they were', said the Dormouse; `--well in.' + + This answer so confused poor Alice, that she let the Dormouse +go on for some time without interrupting it. + + `They were learning to draw,' the Dormouse went on, yawning and +rubbing its eyes, for it was getting very sleepy; `and they drew +all manner of things--everything that begins with an M--' + + `Why with an M?' said Alice. + + `Why not?' said the March Hare. + + Alice was silent. + + The Dormouse had closed its eyes by this time, and was going +off into a doze; but, on being pinched by the Hatter, it woke up +again with a little shriek, and went on: `--that begins with an +M, such as mouse-traps, and the moon, and memory, and muchness-- +you know you say things are "much of a muchness"--did you ever +see such a thing as a drawing of a muchness?' + + `Really, now you ask me,' said Alice, very much confused, `I +don't think--' + + `Then you shouldn't talk,' said the Hatter. + + This piece of rudeness was more than Alice could bear: she got +up in great disgust, and walked off; the Dormouse fell asleep +instantly, and neither of the others took the least notice of her +going, though she looked back once or twice, half hoping that +they would call after her: the last time she saw them, they were +trying to put the Dormouse into the teapot. + + `At any rate I'll never go THERE again!' said Alice as she +picked her way through the wood. `It's the stupidest tea-party I +ever was at in all my life!' + + Just as she said this, she noticed that one of the trees had a +door leading right into it. `That's very curious!' she thought. +`But everything's curious today. I think I may as well go in at +once.' And in she went. + + Once more she found herself in the long hall, and close to the +little glass table. `Now, I'll manage better this time,' she +said to herself, and began by taking the little golden key, and +unlocking the door that led into the garden. Then she went to +work nibbling at the mushroom (she had kept a piece of it in her +pocked) till she was about a foot high: then she walked down the +little passage: and THEN--she found herself at last in the +beautiful garden, among the bright flower-beds and the cool +fountains. + + + + CHAPTER VIII + + The Queen's Croquet-Ground + + + A large rose-tree stood near the entrance of the garden: the +roses growing on it were white, but there were three gardeners at +it, busily painting them red. Alice thought this a very curious +thing, and she went nearer to watch them, and just as she came up +to them she heard one of them say, `Look out now, Five! Don't go +splashing paint over me like that!' + + `I couldn't help it,' said Five, in a sulky tone; `Seven jogged +my elbow.' + + On which Seven looked up and said, `That's right, Five! Always +lay the blame on others!' + + `YOU'D better not talk!' said Five. `I heard the Queen say only +yesterday you deserved to be beheaded!' + + `What for?' said the one who had spoken first. + + `That's none of YOUR business, Two!' said Seven. + + `Yes, it IS his business!' said Five, `and I'll tell him--it +was for bringing the cook tulip-roots instead of onions.' + + Seven flung down his brush, and had just begun `Well, of all +the unjust things--' when his eye chanced to fall upon Alice, as +she stood watching them, and he checked himself suddenly: the +others looked round also, and all of them bowed low. + + `Would you tell me,' said Alice, a little timidly, `why you are +painting those roses?' + + Five and Seven said nothing, but looked at Two. Two began in a +low voice, `Why the fact is, you see, Miss, this here ought to +have been a RED rose-tree, and we put a white one in by mistake; +and if the Queen was to find it out, we should all have our heads +cut off, you know. So you see, Miss, we're doing our best, afore +she comes, to--' At this moment Five, who had been anxiously +looking across the garden, called out `The Queen! The Queen!' +and the three gardeners instantly threw themselves flat upon +their faces. There was a sound of many footsteps, and Alice +looked round, eager to see the Queen. + + First came ten soldiers carrying clubs; these were all shaped +like the three gardeners, oblong and flat, with their hands and +feet at the corners: next the ten courtiers; these were +ornamented all over with diamonds, and walked two and two, as the +soldiers did. After these came the royal children; there were +ten of them, and the little dears came jumping merrily along hand +in hand, in couples: they were all ornamented with hearts. Next +came the guests, mostly Kings and Queens, and among them Alice +recognised the White Rabbit: it was talking in a hurried nervous +manner, smiling at everything that was said, and went by without +noticing her. Then followed the Knave of Hearts, carrying the +King's crown on a crimson velvet cushion; and, last of all this +grand procession, came THE KING AND QUEEN OF HEARTS. + + Alice was rather doubtful whether she ought not to lie down on +her face like the three gardeners, but she could not remember +every having heard of such a rule at processions; `and besides, +what would be the use of a procession,' thought she, `if people +had all to lie down upon their faces, so that they couldn't see +it?' So she stood still where she was, and waited. + + When the procession came opposite to Alice, they all stopped +and looked at her, and the Queen said severely `Who is this?' +She said it to the Knave of Hearts, who only bowed and smiled in +reply. + + `Idiot!' said the Queen, tossing her head impatiently; and, +turning to Alice, she went on, `What's your name, child?' + + `My name is Alice, so please your Majesty,' said Alice very +politely; but she added, to herself, `Why, they're only a pack of +cards, after all. I needn't be afraid of them!' + + `And who are THESE?' said the Queen, pointing to the three +gardeners who were lying round the rosetree; for, you see, as +they were lying on their faces, and the pattern on their backs +was the same as the rest of the pack, she could not tell whether +they were gardeners, or soldiers, or courtiers, or three of her +own children. + + `How should I know?' said Alice, surprised at her own courage. +`It's no business of MINE.' + + The Queen turned crimson with fury, and, after glaring at her +for a moment like a wild beast, screamed `Off with her head! +Off--' + + `Nonsense!' said Alice, very loudly and decidedly, and the +Queen was silent. + + The King laid his hand upon her arm, and timidly said +`Consider, my dear: she is only a child!' + + The Queen turned angrily away from him, and said to the Knave +`Turn them over!' + + The Knave did so, very carefully, with one foot. + + `Get up!' said the Queen, in a shrill, loud voice, and the +three gardeners instantly jumped up, and began bowing to the +King, the Queen, the royal children, and everybody else. + + `Leave off that!' screamed the Queen. `You make me giddy.' +And then, turning to the rose-tree, she went on, `What HAVE you +been doing here?' + + `May it please your Majesty,' said Two, in a very humble tone, +going down on one knee as he spoke, `we were trying--' + + `I see!' said the Queen, who had meanwhile been examining the +roses. `Off with their heads!' and the procession moved on, +three of the soldiers remaining behind to execute the unfortunate +gardeners, who ran to Alice for protection. + + `You shan't be beheaded!' said Alice, and she put them into a +large flower-pot that stood near. The three soldiers wandered +about for a minute or two, looking for them, and then quietly +marched off after the others. + + `Are their heads off?' shouted the Queen. + + `Their heads are gone, if it please your Majesty!' the soldiers +shouted in reply. + + `That's right!' shouted the Queen. `Can you play croquet?' + + The soldiers were silent, and looked at Alice, as the question +was evidently meant for her. + + `Yes!' shouted Alice. + + `Come on, then!' roared the Queen, and Alice joined the +procession, wondering very much what would happen next. + + `It's--it's a very fine day!' said a timid voice at her side. +She was walking by the White Rabbit, who was peeping anxiously +into her face. + + `Very,' said Alice: `--where's the Duchess?' + + `Hush! Hush!' said the Rabbit in a low, hurried tone. He +looked anxiously over his shoulder as he spoke, and then raised +himself upon tiptoe, put his mouth close to her ear, and +whispered `She's under sentence of execution.' + + `What for?' said Alice. + + `Did you say "What a pity!"?' the Rabbit asked. + + `No, I didn't,' said Alice: `I don't think it's at all a pity. +I said "What for?"' + + `She boxed the Queen's ears--' the Rabbit began. Alice gave a +little scream of laughter. `Oh, hush!' the Rabbit whispered in a +frightened tone. `The Queen will hear you! You see, she came +rather late, and the Queen said--' + + `Get to your places!' shouted the Queen in a voice of thunder, +and people began running about in all directions, tumbling up +against each other; however, they got settled down in a minute or +two, and the game began. Alice thought she had never seen such a +curious croquet-ground in her life; it was all ridges and +furrows; the balls were live hedgehogs, the mallets live +flamingoes, and the soldiers had to double themselves up and to +stand on their hands and feet, to make the arches. + + The chief difficulty Alice found at first was in managing her +flamingo: she succeeded in getting its body tucked away, +comfortably enough, under her arm, with its legs hanging down, +but generally, just as she had got its neck nicely straightened +out, and was going to give the hedgehog a blow with its head, it +WOULD twist itself round and look up in her face, with such a +puzzled expression that she could not help bursting out laughing: +and when she had got its head down, and was going to begin again, +it was very provoking to find that the hedgehog had unrolled +itself, and was in the act of crawling away: besides all this, +there was generally a ridge or furrow in the way wherever she +wanted to send the hedgehog to, and, as the doubled-up soldiers +were always getting up and walking off to other parts of the +ground, Alice soon came to the conclusion that it was a very +difficult game indeed. + + The players all played at once without waiting for turns, +quarrelling all the while, and fighting for the hedgehogs; and in +a very short time the Queen was in a furious passion, and went +stamping about, and shouting `Off with his head!' or `Off with +her head!' about once in a minute. + + Alice began to feel very uneasy: to be sure, she had not as +yet had any dispute with the Queen, but she knew that it might +happen any minute, `and then,' thought she, `what would become of +me? They're dreadfully fond of beheading people here; the great +wonder is, that there's any one left alive!' + + She was looking about for some way of escape, and wondering +whether she could get away without being seen, when she noticed a +curious appearance in the air: it puzzled her very much at +first, but, after watching it a minute or two, she made it out to +be a grin, and she said to herself `It's the Cheshire Cat: now I +shall have somebody to talk to.' + + `How are you getting on?' said the Cat, as soon as there was +mouth enough for it to speak with. + + Alice waited till the eyes appeared, and then nodded. `It's no +use speaking to it,' she thought, `till its ears have come, or at +least one of them.' In another minute the whole head appeared, +and then Alice put down her flamingo, and began an account of the +game, feeling very glad she had someone to listen to her. The +Cat seemed to think that there was enough of it now in sight, and +no more of it appeared. + + `I don't think they play at all fairly,' Alice began, in rather +a complaining tone, `and they all quarrel so dreadfully one can't +hear oneself speak--and they don't seem to have any rules in +particular; at least, if there are, nobody attends to them--and +you've no idea how confusing it is all the things being alive; +for instance, there's the arch I've got to go through next +walking about at the other end of the ground--and I should have +croqueted the Queen's hedgehog just now, only it ran away when it +saw mine coming!' + + `How do you like the Queen?' said the Cat in a low voice. + + `Not at all,' said Alice: `she's so extremely--' Just then +she noticed that the Queen was close behind her, listening: so +she went on, `--likely to win, that it's hardly worth while +finishing the game.' + + The Queen smiled and passed on. + + `Who ARE you talking to?' said the King, going up to Alice, and +looking at the Cat's head with great curiosity. + + `It's a friend of mine--a Cheshire Cat,' said Alice: `allow me +to introduce it.' + + `I don't like the look of it at all,' said the King: `however, +it may kiss my hand if it likes.' + + `I'd rather not,' the Cat remarked. + + `Don't be impertinent,' said the King, `and don't look at me +like that!' He got behind Alice as he spoke. + + `A cat may look at a king,' said Alice. `I've read that in +some book, but I don't remember where.' + + `Well, it must be removed,' said the King very decidedly, and +he called the Queen, who was passing at the moment, `My dear! I +wish you would have this cat removed!' + + The Queen had only one way of settling all difficulties, great +or small. `Off with his head!' she said, without even looking +round. + + `I'll fetch the executioner myself,' said the King eagerly, and +he hurried off. + + Alice thought she might as well go back, and see how the game +was going on, as she heard the Queen's voice in the distance, +screaming with passion. She had already heard her sentence three +of the players to be executed for having missed their turns, and +she did not like the look of things at all, as the game was in +such confusion that she never knew whether it was her turn or +not. So she went in search of her hedgehog. + + The hedgehog was engaged in a fight with another hedgehog, +which seemed to Alice an excellent opportunity for croqueting one +of them with the other: the only difficulty was, that her +flamingo was gone across to the other side of the garden, where +Alice could see it trying in a helpless sort of way to fly up +into a tree. + + By the time she had caught the flamingo and brought it back, +the fight was over, and both the hedgehogs were out of sight: +`but it doesn't matter much,' thought Alice, `as all the arches +are gone from this side of the ground.' So she tucked it away +under her arm, that it might not escape again, and went back for +a little more conversation with her friend. + + When she got back to the Cheshire Cat, she was surprised to +find quite a large crowd collected round it: there was a dispute +going on between the executioner, the King, and the Queen, who +were all talking at once, while all the rest were quite silent, +and looked very uncomfortable. + + The moment Alice appeared, she was appealed to by all three to +settle the question, and they repeated their arguments to her, +though, as they all spoke at once, she found it very hard indeed +to make out exactly what they said. + + The executioner's argument was, that you couldn't cut off a +head unless there was a body to cut it off from: that he had +never had to do such a thing before, and he wasn't going to begin +at HIS time of life. + + The King's argument was, that anything that had a head could be +beheaded, and that you weren't to talk nonsense. + + The Queen's argument was, that if something wasn't done about +it in less than no time she'd have everybody executed, all round. +(It was this last remark that had made the whole party look so +grave and anxious.) + + Alice could think of nothing else to say but `It belongs to the +Duchess: you'd better ask HER about it.' + + `She's in prison,' the Queen said to the executioner: `fetch +her here.' And the executioner went off like an arrow. + + The Cat's head began fading away the moment he was gone, and, +by the time he had come back with the Dutchess, it had entirely +disappeared; so the King and the executioner ran wildly up and +down looking for it, while the rest of the party went back to the game. + + + + CHAPTER IX + + The Mock Turtle's Story + + + `You can't think how glad I am to see you again, you dear old +thing!' said the Duchess, as she tucked her arm affectionately +into Alice's, and they walked off together. + + Alice was very glad to find her in such a pleasant temper, and +thought to herself that perhaps it was only the pepper that had +made her so savage when they met in the kitchen. + + `When I'M a Duchess,' she said to herself, (not in a very +hopeful tone though), `I won't have any pepper in my kitchen AT +ALL. Soup does very well without--Maybe it's always pepper that +makes people hot-tempered,' she went on, very much pleased at +having found out a new kind of rule, `and vinegar that makes them +sour--and camomile that makes them bitter--and--and barley-sugar +and such things that make children sweet-tempered. I only wish +people knew that: then they wouldn't be so stingy about it, you +know--' + + She had quite forgotten the Duchess by this time, and was a +little startled when she heard her voice close to her ear. +`You're thinking about something, my dear, and that makes you +forget to talk. I can't tell you just now what the moral of that +is, but I shall remember it in a bit.' + + `Perhaps it hasn't one,' Alice ventured to remark. + + `Tut, tut, child!' said the Duchess. `Everything's got a +moral, if only you can find it.' And she squeezed herself up +closer to Alice's side as she spoke. + + Alice did not much like keeping so close to her: first, +because the Duchess was VERY ugly; and secondly, because she was +exactly the right height to rest her chin upon Alice's shoulder, +and it was an uncomfortably sharp chin. However, she did not +like to be rude, so she bore it as well as she could. + + `The game's going on rather better now,' she said, by way of +keeping up the conversation a little. + + `'Tis so,' said the Duchess: `and the moral of that is--"Oh, +'tis love, 'tis love, that makes the world go round!"' + + `Somebody said,' Alice whispered, `that it's done by everybody +minding their own business!' + + `Ah, well! It means much the same thing,' said the Duchess, +digging her sharp little chin into Alice's shoulder as she added, +`and the moral of THAT is--"Take care of the sense, and the +sounds will take care of themselves."' + + `How fond she is of finding morals in things!' Alice thought to +herself. + + `I dare say you're wondering why I don't put my arm round your +waist,' the Duchess said after a pause: `the reason is, that I'm +doubtful about the temper of your flamingo. Shall I try the +experiment?' + + `HE might bite,' Alice cautiously replied, not feeling at all +anxious to have the experiment tried. + + `Very true,' said the Duchess: `flamingoes and mustard both +bite. And the moral of that is--"Birds of a feather flock +together."' + + `Only mustard isn't a bird,' Alice remarked. + + `Right, as usual,' said the Duchess: `what a clear way you +have of putting things!' + + `It's a mineral, I THINK,' said Alice. + + `Of course it is,' said the Duchess, who seemed ready to agree +to everything that Alice said; `there's a large mustard-mine near +here. And the moral of that is--"The more there is of mine, the +less there is of yours."' + + `Oh, I know!' exclaimed Alice, who had not attended to this +last remark, `it's a vegetable. It doesn't look like one, but it +is.' + + `I quite agree with you,' said the Duchess; `and the moral of +that is--"Be what you would seem to be"--or if you'd like it put +more simply--"Never imagine yourself not to be otherwise than +what it might appear to others that what you were or might have +been was not otherwise than what you had been would have appeared +to them to be otherwise."' + + `I think I should understand that better,' Alice said very +politely, `if I had it written down: but I can't quite follow it +as you say it.' + + `That's nothing to what I could say if I chose,' the Duchess +replied, in a pleased tone. + + `Pray don't trouble yourself to say it any longer than that,' +said Alice. + + `Oh, don't talk about trouble!' said the Duchess. `I make you +a present of everything I've said as yet.' + + `A cheap sort of present!' thought Alice. `I'm glad they don't +give birthday presents like that!' But she did not venture to +say it out loud. + + `Thinking again?' the Duchess asked, with another dig of her +sharp little chin. + + `I've a right to think,' said Alice sharply, for she was +beginning to feel a little worried. + + `Just about as much right,' said the Duchess, `as pigs have to +fly; and the m--' + + But here, to Alice's great surprise, the Duchess's voice died +away, even in the middle of her favourite word `moral,' and the +arm that was linked into hers began to tremble. Alice looked up, +and there stood the Queen in front of them, with her arms folded, +frowning like a thunderstorm. + + `A fine day, your Majesty!' the Duchess began in a low, weak +voice. + + `Now, I give you fair warning,' shouted the Queen, stamping on +the ground as she spoke; `either you or your head must be off, +and that in about half no time! Take your choice!' + + The Duchess took her choice, and was gone in a moment. + + `Let's go on with the game,' the Queen said to Alice; and Alice +was too much frightened to say a word, but slowly followed her +back to the croquet-ground. + + The other guests had taken advantage of the Queen's absence, +and were resting in the shade: however, the moment they saw her, +they hurried back to the game, the Queen merely remarking that a +moment's delay would cost them their lives. + + All the time they were playing the Queen never left off +quarrelling with the other players, and shouting `Off with his +head!' or `Off with her head!' Those whom she sentenced were +taken into custody by the soldiers, who of course had to leave +off being arches to do this, so that by the end of half an hour +or so there were no arches left, and all the players, except the +King, the Queen, and Alice, were in custody and under sentence of +execution. + + Then the Queen left off, quite out of breath, and said to +Alice, `Have you seen the Mock Turtle yet?' + + `No,' said Alice. `I don't even know what a Mock Turtle is.' + + `It's the thing Mock Turtle Soup is made from,' said the Queen. + + `I never saw one, or heard of one,' said Alice. + + `Come on, then,' said the Queen, `and he shall tell you his +history,' + + As they walked off together, Alice heard the King say in a low +voice, to the company generally, `You are all pardoned.' `Come, +THAT'S a good thing!' she said to herself, for she had felt quite +unhappy at the number of executions the Queen had ordered. + + They very soon came upon a Gryphon, lying fast asleep in the +sun. (IF you don't know what a Gryphon is, look at the picture.) +`Up, lazy thing!' said the Queen, `and take this young lady to +see the Mock Turtle, and to hear his history. I must go back and +see after some executions I have ordered'; and she walked off, +leaving Alice alone with the Gryphon. Alice did not quite like +the look of the creature, but on the whole she thought it would +be quite as safe to stay with it as to go after that savage +Queen: so she waited. + + The Gryphon sat up and rubbed its eyes: then it watched the +Queen till she was out of sight: then it chuckled. `What fun!' +said the Gryphon, half to itself, half to Alice. + + `What IS the fun?' said Alice. + + `Why, SHE,' said the Gryphon. `It's all her fancy, that: they +never executes nobody, you know. Come on!' + + `Everybody says "come on!" here,' thought Alice, as she went +slowly after it: `I never was so ordered about in all my life, +never!' + + They had not gone far before they saw the Mock Turtle in the +distance, sitting sad and lonely on a little ledge of rock, and, +as they came nearer, Alice could hear him sighing as if his heart +would break. She pitied him deeply. `What is his sorrow?' she +asked the Gryphon, and the Gryphon answered, very nearly in the +same words as before, `It's all his fancy, that: he hasn't got +no sorrow, you know. Come on!' + + So they went up to the Mock Turtle, who looked at them with +large eyes full of tears, but said nothing. + + `This here young lady,' said the Gryphon, `she wants for to +know your history, she do.' + + `I'll tell it her,' said the Mock Turtle in a deep, hollow +tone: `sit down, both of you, and don't speak a word till I've +finished.' + + So they sat down, and nobody spoke for some minutes. Alice +thought to herself, `I don't see how he can EVEN finish, if he +doesn't begin.' But she waited patiently. + + `Once,' said the Mock Turtle at last, with a deep sigh, `I was +a real Turtle.' + + These words were followed by a very long silence, broken only +by an occasional exclamation of `Hjckrrh!' from the Gryphon, and +the constant heavy sobbing of the Mock Turtle. Alice was very +nearly getting up and saying, `Thank you, sir, for your +interesting story,' but she could not help thinking there MUST be +more to come, so she sat still and said nothing. + + `When we were little,' the Mock Turtle went on at last, more +calmly, though still sobbing a little now and then, `we went to +school in the sea. The master was an old Turtle--we used to call +him Tortoise--' + + `Why did you call him Tortoise, if he wasn't one?' Alice asked. + + `We called him Tortoise because he taught us,' said the Mock +Turtle angrily: `really you are very dull!' + + `You ought to be ashamed of yourself for asking such a simple +question,' added the Gryphon; and then they both sat silent and +looked at poor Alice, who felt ready to sink into the earth. At +last the Gryphon said to the Mock Turtle, `Drive on, old fellow! +Don't be all day about it!' and he went on in these words: + + `Yes, we went to school in the sea, though you mayn't believe +it--' + + `I never said I didn't!' interrupted Alice. + + `You did,' said the Mock Turtle. + + `Hold your tongue!' added the Gryphon, before Alice could speak +again. The Mock Turtle went on. + + `We had the best of educations--in fact, we went to school +every day--' + + `I'VE been to a day-school, too,' said Alice; `you needn't be +so proud as all that.' + + `With extras?' asked the Mock Turtle a little anxiously. + + `Yes,' said Alice, `we learned French and music.' + + `And washing?' said the Mock Turtle. + + `Certainly not!' said Alice indignantly. + + `Ah! then yours wasn't a really good school,' said the Mock +Turtle in a tone of great relief. `Now at OURS they had at the +end of the bill, "French, music, AND WASHING--extra."' + + `You couldn't have wanted it much,' said Alice; `living at the +bottom of the sea.' + + `I couldn't afford to learn it.' said the Mock Turtle with a +sigh. `I only took the regular course.' + + `What was that?' inquired Alice. + + `Reeling and Writhing, of course, to begin with,' the Mock +Turtle replied; `and then the different branches of Arithmetic-- +Ambition, Distraction, Uglification, and Derision.' + + `I never heard of "Uglification,"' Alice ventured to say. `What +is it?' + + The Gryphon lifted up both its paws in surprise. `What! Never +heard of uglifying!' it exclaimed. `You know what to beautify +is, I suppose?' + + `Yes,' said Alice doubtfully: `it means--to--make--anything-- +prettier.' + + `Well, then,' the Gryphon went on, `if you don't know what to +uglify is, you ARE a simpleton.' + + Alice did not feel encouraged to ask any more questions about +it, so she turned to the Mock Turtle, and said `What else had you +to learn?' + + `Well, there was Mystery,' the Mock Turtle replied, counting +off the subjects on his flappers, `--Mystery, ancient and modern, +with Seaography: then Drawling--the Drawling-master was an old +conger-eel, that used to come once a week: HE taught us +Drawling, Stretching, and Fainting in Coils.' + + `What was THAT like?' said Alice. + + `Well, I can't show it you myself,' the Mock Turtle said: `I'm +too stiff. And the Gryphon never learnt it.' + + `Hadn't time,' said the Gryphon: `I went to the Classics +master, though. He was an old crab, HE was.' + + `I never went to him,' the Mock Turtle said with a sigh: `he +taught Laughing and Grief, they used to say.' + + `So he did, so he did,' said the Gryphon, sighing in his turn; +and both creatures hid their faces in their paws. + + `And how many hours a day did you do lessons?' said Alice, in a +hurry to change the subject. + + `Ten hours the first day,' said the Mock Turtle: `nine the +next, and so on.' + + `What a curious plan!' exclaimed Alice. + + `That's the reason they're called lessons,' the Gryphon +remarked: `because they lessen from day to day.' + + This was quite a new idea to Alice, and she thought it over a +little before she made her next remark. `Then the eleventh day +must have been a holiday?' + + `Of course it was,' said the Mock Turtle. + + `And how did you manage on the twelfth?' Alice went on eagerly. + + `That's enough about lessons,' the Gryphon interrupted in a +very decided tone: `tell her something about the games now.' + + + + CHAPTER X + + The Lobster Quadrille + + + The Mock Turtle sighed deeply, and drew the back of one flapper +across his eyes. He looked at Alice, and tried to speak, but for +a minute or two sobs choked his voice. `Same as if he had a bone +in his throat,' said the Gryphon: and it set to work shaking him +and punching him in the back. At last the Mock Turtle recovered +his voice, and, with tears running down his cheeks, he went on +again:-- + + `You may not have lived much under the sea--' (`I haven't,' +said Alice)--`and perhaps you were never even introduced to a lobster--' +(Alice began to say `I once tasted--' but checked herself hastily, +and said `No, never') `--so you can have no idea what a delightful +thing a Lobster Quadrille is!' + + `No, indeed,' said Alice. `What sort of a dance is it?' + + `Why,' said the Gryphon, `you first form into a line along the +sea-shore--' + + `Two lines!' cried the Mock Turtle. `Seals, turtles, salmon, +and so on; then, when you've cleared all the jelly-fish out of +the way--' + + `THAT generally takes some time,' interrupted the Gryphon. + + `--you advance twice--' + + `Each with a lobster as a partner!' cried the Gryphon. + + `Of course,' the Mock Turtle said: `advance twice, set to +partners--' + + `--change lobsters, and retire in same order,' continued the +Gryphon. + + `Then, you know,' the Mock Turtle went on, `you throw the--' + + `The lobsters!' shouted the Gryphon, with a bound into the air. + + `--as far out to sea as you can--' + + `Swim after them!' screamed the Gryphon. + + `Turn a somersault in the sea!' cried the Mock Turtle, +capering wildly about. + + `Back to land again, and that's all the first figure,' said the +Mock Turtle, suddenly dropping his voice; and the two creatures, +who had been jumping about like mad things all this time, sat +down again very sadly and quietly, and looked at Alice. + + `It must be a very pretty dance,' said Alice timidly. + + `Would you like to see a little of it?' said the Mock Turtle. + + `Very much indeed,' said Alice. + + `Come, let's try the first figure!' said the Mock Turtle to the +Gryphon. `We can do without lobsters, you know. Which shall +sing?' + + `Oh, YOU sing,' said the Gryphon. `I've forgotten the words.' + + So they began solemnly dancing round and round Alice, every now +and then treading on her toes when they passed too close, and +waving their forepaws to mark the time, while the Mock Turtle +sang this, very slowly and sadly:-- + + +`"Will you walk a little faster?" said a whiting to a snail. +"There's a porpoise close behind us, and he's treading on my + tail. +See how eagerly the lobsters and the turtles all advance! +They are waiting on the shingle--will you come and join the +dance? + +Will you, won't you, will you, won't you, will you join the +dance? +Will you, won't you, will you, won't you, won't you join the +dance? + + +"You can really have no notion how delightful it will be +When they take us up and throw us, with the lobsters, out to + sea!" +But the snail replied "Too far, too far!" and gave a look + askance-- +Said he thanked the whiting kindly, but he would not join the + dance. + Would not, could not, would not, could not, would not join + the dance. + Would not, could not, would not, could not, could not join + the dance. + +`"What matters it how far we go?" his scaly friend replied. +"There is another shore, you know, upon the other side. +The further off from England the nearer is to France-- +Then turn not pale, beloved snail, but come and join the dance. + + Will you, won't you, will you, won't you, will you join the + dance? + Will you, won't you, will you, won't you, won't you join the + dance?"' + + + + `Thank you, it's a very interesting dance to watch,' said +Alice, feeling very glad that it was over at last: `and I do so +like that curious song about the whiting!' + + `Oh, as to the whiting,' said the Mock Turtle, `they--you've +seen them, of course?' + + `Yes,' said Alice, `I've often seen them at dinn--' she +checked herself hastily. + + `I don't know where Dinn may be,' said the Mock Turtle, `but +if you've seen them so often, of course you know what they're +like.' + + `I believe so,' Alice replied thoughtfully. `They have their +tails in their mouths--and they're all over crumbs.' + + `You're wrong about the crumbs,' said the Mock Turtle: +`crumbs would all wash off in the sea. But they HAVE their tails +in their mouths; and the reason is--' here the Mock Turtle +yawned and shut his eyes.--`Tell her about the reason and all +that,' he said to the Gryphon. + + `The reason is,' said the Gryphon, `that they WOULD go with +the lobsters to the dance. So they got thrown out to sea. So +they had to fall a long way. So they got their tails fast in +their mouths. So they couldn't get them out again. That's all.' + + `Thank you,' said Alice, `it's very interesting. I never knew +so much about a whiting before.' + + `I can tell you more than that, if you like,' said the +Gryphon. `Do you know why it's called a whiting?' + + `I never thought about it,' said Alice. `Why?' + + `IT DOES THE BOOTS AND SHOES.' the Gryphon replied very +solemnly. + + Alice was thoroughly puzzled. `Does the boots and shoes!' she +repeated in a wondering tone. + + `Why, what are YOUR shoes done with?' said the Gryphon. `I +mean, what makes them so shiny?' + + Alice looked down at them, and considered a little before she +gave her answer. `They're done with blacking, I believe.' + + `Boots and shoes under the sea,' the Gryphon went on in a deep +voice, `are done with a whiting. Now you know.' + + `And what are they made of?' Alice asked in a tone of great +curiosity. + + `Soles and eels, of course,' the Gryphon replied rather +impatiently: `any shrimp could have told you that.' + + `If I'd been the whiting,' said Alice, whose thoughts were +still running on the song, `I'd have said to the porpoise, "Keep +back, please: we don't want YOU with us!"' + + `They were obliged to have him with them,' the Mock Turtle +said: `no wise fish would go anywhere without a porpoise.' + + `Wouldn't it really?' said Alice in a tone of great surprise. + + `Of course not,' said the Mock Turtle: `why, if a fish came +to ME, and told me he was going a journey, I should say "With +what porpoise?"' + + `Don't you mean "purpose"?' said Alice. + + `I mean what I say,' the Mock Turtle replied in an offended +tone. And the Gryphon added `Come, let's hear some of YOUR +adventures.' + + `I could tell you my adventures--beginning from this morning,' +said Alice a little timidly: `but it's no use going back to +yesterday, because I was a different person then.' + + `Explain all that,' said the Mock Turtle. + + `No, no! The adventures first,' said the Gryphon in an +impatient tone: `explanations take such a dreadful time.' + + So Alice began telling them her adventures from the time when +she first saw the White Rabbit. She was a little nervous about +it just at first, the two creatures got so close to her, one on +each side, and opened their eyes and mouths so VERY wide, but she +gained courage as she went on. Her listeners were perfectly +quiet till she got to the part about her repeating `YOU ARE OLD, +FATHER WILLIAM,' to the Caterpillar, and the words all coming +different, and then the Mock Turtle drew a long breath, and said +`That's very curious.' + + `It's all about as curious as it can be,' said the Gryphon. + + `It all came different!' the Mock Turtle repeated +thoughtfully. `I should like to hear her try and repeat +something now. Tell her to begin.' He looked at the Gryphon as +if he thought it had some kind of authority over Alice. + + `Stand up and repeat "'TIS THE VOICE OF THE SLUGGARD,"' said +the Gryphon. + + `How the creatures order one about, and make one repeat +lessons!' thought Alice; `I might as well be at school at once.' +However, she got up, and began to repeat it, but her head was so +full of the Lobster Quadrille, that she hardly knew what she was +saying, and the words came very queer indeed:-- + + `'Tis the voice of the Lobster; I heard him declare, + "You have baked me too brown, I must sugar my hair." + As a duck with its eyelids, so he with his nose + Trims his belt and his buttons, and turns out his toes.' + + [later editions continued as follows + When the sands are all dry, he is gay as a lark, + And will talk in contemptuous tones of the Shark, + But, when the tide rises and sharks are around, + His voice has a timid and tremulous sound.] + + `That's different from what I used to say when I was a child,' +said the Gryphon. + + `Well, I never heard it before,' said the Mock Turtle; `but it +sounds uncommon nonsense.' + + Alice said nothing; she had sat down with her face in her +hands, wondering if anything would EVER happen in a natural way +again. + + `I should like to have it explained,' said the Mock Turtle. + + `She can't explain it,' said the Gryphon hastily. `Go on with +the next verse.' + + `But about his toes?' the Mock Turtle persisted. `How COULD +he turn them out with his nose, you know?' + + `It's the first position in dancing.' Alice said; but was +dreadfully puzzled by the whole thing, and longed to change the +subject. + + `Go on with the next verse,' the Gryphon repeated impatiently: +`it begins "I passed by his garden."' + + Alice did not dare to disobey, though she felt sure it would +all come wrong, and she went on in a trembling voice:-- + + `I passed by his garden, and marked, with one eye, + How the Owl and the Panther were sharing a pie--' + + [later editions continued as follows + The Panther took pie-crust, and gravy, and meat, + While the Owl had the dish as its share of the treat. + When the pie was all finished, the Owl, as a boon, + Was kindly permitted to pocket the spoon: + While the Panther received knife and fork with a growl, + And concluded the banquet--] + + `What IS the use of repeating all that stuff,' the Mock Turtle +interrupted, `if you don't explain it as you go on? It's by far +the most confusing thing I ever heard!' + + `Yes, I think you'd better leave off,' said the Gryphon: and +Alice was only too glad to do so. + + `Shall we try another figure of the Lobster Quadrille?' the +Gryphon went on. `Or would you like the Mock Turtle to sing you +a song?' + + `Oh, a song, please, if the Mock Turtle would be so kind,' +Alice replied, so eagerly that the Gryphon said, in a rather +offended tone, `Hm! No accounting for tastes! Sing her "Turtle +Soup," will you, old fellow?' + + The Mock Turtle sighed deeply, and began, in a voice sometimes +choked with sobs, to sing this:-- + + + `Beautiful Soup, so rich and green, + Waiting in a hot tureen! + Who for such dainties would not stoop? + Soup of the evening, beautiful Soup! + Soup of the evening, beautiful Soup! + Beau--ootiful Soo--oop! + Beau--ootiful Soo--oop! + Soo--oop of the e--e--evening, + Beautiful, beautiful Soup! + + `Beautiful Soup! Who cares for fish, + Game, or any other dish? + Who would not give all else for two p + ennyworth only of beautiful Soup? + Pennyworth only of beautiful Soup? + Beau--ootiful Soo--oop! + Beau--ootiful Soo--oop! + Soo--oop of the e--e--evening, + Beautiful, beauti--FUL SOUP!' + + `Chorus again!' cried the Gryphon, and the Mock Turtle had +just begun to repeat it, when a cry of `The trial's beginning!' +was heard in the distance. + + `Come on!' cried the Gryphon, and, taking Alice by the hand, +it hurried off, without waiting for the end of the song. + + `What trial is it?' Alice panted as she ran; but the Gryphon +only answered `Come on!' and ran the faster, while more and more +faintly came, carried on the breeze that followed them, the +melancholy words:-- + + `Soo--oop of the e--e--evening, + Beautiful, beautiful Soup!' + + + + CHAPTER XI + + Who Stole the Tarts? + + + The King and Queen of Hearts were seated on their throne when +they arrived, with a great crowd assembled about them--all sorts +of little birds and beasts, as well as the whole pack of cards: +the Knave was standing before them, in chains, with a soldier on +each side to guard him; and near the King was the White Rabbit, +with a trumpet in one hand, and a scroll of parchment in the +other. In the very middle of the court was a table, with a large +dish of tarts upon it: they looked so good, that it made Alice +quite hungry to look at them--`I wish they'd get the trial done,' +she thought, `and hand round the refreshments!' But there seemed +to be no chance of this, so she began looking at everything about +her, to pass away the time. + + Alice had never been in a court of justice before, but she had +read about them in books, and she was quite pleased to find that +she knew the name of nearly everything there. `That's the +judge,' she said to herself, `because of his great wig.' + + The judge, by the way, was the King; and as he wore his crown +over the wig, (look at the frontispiece if you want to see how he +did it,) he did not look at all comfortable, and it was certainly +not becoming. + + `And that's the jury-box,' thought Alice, `and those twelve +creatures,' (she was obliged to say `creatures,' you see, because +some of them were animals, and some were birds,) `I suppose they +are the jurors.' She said this last word two or three times over +to herself, being rather proud of it: for she thought, and +rightly too, that very few little girls of her age knew the +meaning of it at all. However, `jury-men' would have done just +as well. + + The twelve jurors were all writing very busily on slates. +`What are they doing?' Alice whispered to the Gryphon. `They +can't have anything to put down yet, before the trial's begun.' + + `They're putting down their names,' the Gryphon whispered in +reply, `for fear they should forget them before the end of the +trial.' + + `Stupid things!' Alice began in a loud, indignant voice, but +she stopped hastily, for the White Rabbit cried out, `Silence in +the court!' and the King put on his spectacles and looked +anxiously round, to make out who was talking. + + Alice could see, as well as if she were looking over their +shoulders, that all the jurors were writing down `stupid things!' +on their slates, and she could even make out that one of them +didn't know how to spell `stupid,' and that he had to ask his +neighbour to tell him. `A nice muddle their slates'll be in +before the trial's over!' thought Alice. + + One of the jurors had a pencil that squeaked. This of course, +Alice could not stand, and she went round the court and got +behind him, and very soon found an opportunity of taking it +away. She did it so quickly that the poor little juror (it was +Bill, the Lizard) could not make out at all what had become of +it; so, after hunting all about for it, he was obliged to write +with one finger for the rest of the day; and this was of very +little use, as it left no mark on the slate. + + `Herald, read the accusation!' said the King. + + On this the White Rabbit blew three blasts on the trumpet, and +then unrolled the parchment scroll, and read as follows:-- + + `The Queen of Hearts, she made some tarts, + All on a summer day: + The Knave of Hearts, he stole those tarts, + And took them quite away!' + + `Consider your verdict,' the King said to the jury. + + `Not yet, not yet!' the Rabbit hastily interrupted. `There's +a great deal to come before that!' + + `Call the first witness,' said the King; and the White Rabbit +blew three blasts on the trumpet, and called out, `First +witness!' + + The first witness was the Hatter. He came in with a teacup in +one hand and a piece of bread-and-butter in the other. `I beg +pardon, your Majesty,' he began, `for bringing these in: but I +hadn't quite finished my tea when I was sent for.' + + `You ought to have finished,' said the King. `When did you +begin?' + + The Hatter looked at the March Hare, who had followed him into +the court, arm-in-arm with the Dormouse. `Fourteenth of March, I +think it was,' he said. + + `Fifteenth,' said the March Hare. + + `Sixteenth,' added the Dormouse. + + `Write that down,' the King said to the jury, and the jury +eagerly wrote down all three dates on their slates, and then +added them up, and reduced the answer to shillings and pence. + + `Take off your hat,' the King said to the Hatter. + + `It isn't mine,' said the Hatter. + + `Stolen!' the King exclaimed, turning to the jury, who +instantly made a memorandum of the fact. + + `I keep them to sell,' the Hatter added as an explanation; +`I've none of my own. I'm a hatter.' + + Here the Queen put on her spectacles, and began staring at the +Hatter, who turned pale and fidgeted. + + `Give your evidence,' said the King; `and don't be nervous, or +I'll have you executed on the spot.' + + This did not seem to encourage the witness at all: he kept +shifting from one foot to the other, looking uneasily at the +Queen, and in his confusion he bit a large piece out of his +teacup instead of the bread-and-butter. + + Just at this moment Alice felt a very curious sensation, which +puzzled her a good deal until she made out what it was: she was +beginning to grow larger again, and she thought at first she +would get up and leave the court; but on second thoughts she +decided to remain where she was as long as there was room for +her. + + `I wish you wouldn't squeeze so.' said the Dormouse, who was +sitting next to her. `I can hardly breathe.' + + `I can't help it,' said Alice very meekly: `I'm growing.' + + `You've no right to grow here,' said the Dormouse. + + `Don't talk nonsense,' said Alice more boldly: `you know +you're growing too.' + + `Yes, but I grow at a reasonable pace,' said the Dormouse: +`not in that ridiculous fashion.' And he got up very sulkily +and crossed over to the other side of the court. + + All this time the Queen had never left off staring at the +Hatter, and, just as the Dormouse crossed the court, she said to +one of the officers of the court, `Bring me the list of the +singers in the last concert!' on which the wretched Hatter +trembled so, that he shook both his shoes off. + + `Give your evidence,' the King repeated angrily, `or I'll have +you executed, whether you're nervous or not.' + + `I'm a poor man, your Majesty,' the Hatter began, in a +trembling voice, `--and I hadn't begun my tea--not above a week +or so--and what with the bread-and-butter getting so thin--and +the twinkling of the tea--' + + `The twinkling of the what?' said the King. + + `It began with the tea,' the Hatter replied. + + `Of course twinkling begins with a T!' said the King sharply. +`Do you take me for a dunce? Go on!' + + `I'm a poor man,' the Hatter went on, `and most things +twinkled after that--only the March Hare said--' + + `I didn't!' the March Hare interrupted in a great hurry. + + `You did!' said the Hatter. + + `I deny it!' said the March Hare. + + `He denies it,' said the King: `leave out that part.' + + `Well, at any rate, the Dormouse said--' the Hatter went on, +looking anxiously round to see if he would deny it too: but the +Dormouse denied nothing, being fast asleep. + + `After that,' continued the Hatter, `I cut some more bread- +and-butter--' + + `But what did the Dormouse say?' one of the jury asked. + + `That I can't remember,' said the Hatter. + + `You MUST remember,' remarked the King, `or I'll have you +executed.' + + The miserable Hatter dropped his teacup and bread-and-butter, +and went down on one knee. `I'm a poor man, your Majesty,' he +began. + + `You're a very poor speaker,' said the King. + + Here one of the guinea-pigs cheered, and was immediately +suppressed by the officers of the court. (As that is rather a +hard word, I will just explain to you how it was done. They had +a large canvas bag, which tied up at the mouth with strings: +into this they slipped the guinea-pig, head first, and then sat +upon it.) + + `I'm glad I've seen that done,' thought Alice. `I've so often +read in the newspapers, at the end of trials, "There was some +attempts at applause, which was immediately suppressed by the +officers of the court," and I never understood what it meant +till now.' + + `If that's all you know about it, you may stand down,' +continued the King. + + `I can't go no lower,' said the Hatter: `I'm on the floor, as +it is.' + + `Then you may SIT down,' the King replied. + + Here the other guinea-pig cheered, and was suppressed. + + `Come, that finished the guinea-pigs!' thought Alice. `Now we +shall get on better.' + + `I'd rather finish my tea,' said the Hatter, with an anxious +look at the Queen, who was reading the list of singers. + + `You may go,' said the King, and the Hatter hurriedly left the +court, without even waiting to put his shoes on. + + `--and just take his head off outside,' the Queen added to one +of the officers: but the Hatter was out of sight before the +officer could get to the door. + + `Call the next witness!' said the King. + + The next witness was the Duchess's cook. She carried the +pepper-box in her hand, and Alice guessed who it was, even before +she got into the court, by the way the people near the door began +sneezing all at once. + + `Give your evidence,' said the King. + + `Shan't,' said the cook. + + The King looked anxiously at the White Rabbit, who said in a +low voice, `Your Majesty must cross-examine THIS witness.' + + `Well, if I must, I must,' the King said, with a melancholy +air, and, after folding his arms and frowning at the cook till +his eyes were nearly out of sight, he said in a deep voice, `What +are tarts made of?' + + `Pepper, mostly,' said the cook. + + `Treacle,' said a sleepy voice behind her. + + `Collar that Dormouse,' the Queen shrieked out. `Behead that +Dormouse! Turn that Dormouse out of court! Suppress him! Pinch +him! Off with his whiskers!' + + For some minutes the whole court was in confusion, getting the +Dormouse turned out, and, by the time they had settled down +again, the cook had disappeared. + + `Never mind!' said the King, with an air of great relief. +`Call the next witness.' And he added in an undertone to the +Queen, `Really, my dear, YOU must cross-examine the next witness. +It quite makes my forehead ache!' + + Alice watched the White Rabbit as he fumbled over the list, +feeling very curious to see what the next witness would be like, +`--for they haven't got much evidence YET,' she said to herself. +Imagine her surprise, when the White Rabbit read out, at the top +of his shrill little voice, the name `Alice!' + + + + CHAPTER XII + + Alice's Evidence + + + `Here!' cried Alice, quite forgetting in the flurry of the +moment how large she had grown in the last few minutes, and she +jumped up in such a hurry that she tipped over the jury-box with +the edge of her skirt, upsetting all the jurymen on to the heads +of the crowd below, and there they lay sprawling about, reminding +her very much of a globe of goldfish she had accidentally upset +the week before. + + `Oh, I BEG your pardon!' she exclaimed in a tone of great +dismay, and began picking them up again as quickly as she could, +for the accident of the goldfish kept running in her head, and +she had a vague sort of idea that they must be collected at once +and put back into the jury-box, or they would die. + + `The trial cannot proceed,' said the King in a very grave +voice, `until all the jurymen are back in their proper places-- +ALL,' he repeated with great emphasis, looking hard at Alice as +he said do. + + Alice looked at the jury-box, and saw that, in her haste, she +had put the Lizard in head downwards, and the poor little thing +was waving its tail about in a melancholy way, being quite unable +to move. She soon got it out again, and put it right; `not that +it signifies much,' she said to herself; `I should think it +would be QUITE as much use in the trial one way up as the other.' + + As soon as the jury had a little recovered from the shock of +being upset, and their slates and pencils had been found and +handed back to them, they set to work very diligently to write +out a history of the accident, all except the Lizard, who seemed +too much overcome to do anything but sit with its mouth open, +gazing up into the roof of the court. + + `What do you know about this business?' the King said to +Alice. + + `Nothing,' said Alice. + + `Nothing WHATEVER?' persisted the King. + + `Nothing whatever,' said Alice. + + `That's very important,' the King said, turning to the jury. +They were just beginning to write this down on their slates, when +the White Rabbit interrupted: `UNimportant, your Majesty means, +of course,' he said in a very respectful tone, but frowning and +making faces at him as he spoke. + + `UNimportant, of course, I meant,' the King hastily said, and +went on to himself in an undertone, `important--unimportant-- +unimportant--important--' as if he were trying which word +sounded best. + + Some of the jury wrote it down `important,' and some +`unimportant.' Alice could see this, as she was near enough to +look over their slates; `but it doesn't matter a bit,' she +thought to herself. + + At this moment the King, who had been for some time busily +writing in his note-book, cackled out `Silence!' and read out +from his book, `Rule Forty-two. ALL PERSONS MORE THAN A MILE +HIGH TO LEAVE THE COURT.' + + Everybody looked at Alice. + + `I'M not a mile high,' said Alice. + + `You are,' said the King. + + `Nearly two miles high,' added the Queen. + + `Well, I shan't go, at any rate,' said Alice: `besides, +that's not a regular rule: you invented it just now.' + + `It's the oldest rule in the book,' said the King. + + `Then it ought to be Number One,' said Alice. + + The King turned pale, and shut his note-book hastily. +`Consider your verdict,' he said to the jury, in a low, trembling +voice. + + `There's more evidence to come yet, please your Majesty,' said +the White Rabbit, jumping up in a great hurry; `this paper has +just been picked up.' + + `What's in it?' said the Queen. + + `I haven't opened it yet,' said the White Rabbit, `but it seems +to be a letter, written by the prisoner to--to somebody.' + + `It must have been that,' said the King, `unless it was +written to nobody, which isn't usual, you know.' + + `Who is it directed to?' said one of the jurymen. + + `It isn't directed at all,' said the White Rabbit; `in fact, +there's nothing written on the OUTSIDE.' He unfolded the paper +as he spoke, and added `It isn't a letter, after all: it's a set +of verses.' + + `Are they in the prisoner's handwriting?' asked another of +they jurymen. + + `No, they're not,' said the White Rabbit, `and that's the +queerest thing about it.' (The jury all looked puzzled.) + + `He must have imitated somebody else's hand,' said the King. +(The jury all brightened up again.) + + `Please your Majesty,' said the Knave, `I didn't write it, and +they can't prove I did: there's no name signed at the end.' + + `If you didn't sign it,' said the King, `that only makes the +matter worse. You MUST have meant some mischief, or else you'd +have signed your name like an honest man.' + + There was a general clapping of hands at this: it was the +first really clever thing the King had said that day. + + `That PROVES his guilt,' said the Queen. + + `It proves nothing of the sort!' said Alice. `Why, you don't +even know what they're about!' + + `Read them,' said the King. + + The White Rabbit put on his spectacles. `Where shall I begin, +please your Majesty?' he asked. + + `Begin at the beginning,' the King said gravely, `and go on +till you come to the end: then stop.' + + These were the verses the White Rabbit read:-- + + `They told me you had been to her, + And mentioned me to him: + She gave me a good character, + But said I could not swim. + + He sent them word I had not gone + (We know it to be true): + If she should push the matter on, + What would become of you? + + I gave her one, they gave him two, + You gave us three or more; + They all returned from him to you, + Though they were mine before. + + If I or she should chance to be + Involved in this affair, + He trusts to you to set them free, + Exactly as we were. + + My notion was that you had been + (Before she had this fit) + An obstacle that came between + Him, and ourselves, and it. + + Don't let him know she liked them best, + For this must ever be + A secret, kept from all the rest, + Between yourself and me.' + + `That's the most important piece of evidence we've heard yet,' +said the King, rubbing his hands; `so now let the jury--' + + `If any one of them can explain it,' said Alice, (she had +grown so large in the last few minutes that she wasn't a bit +afraid of interrupting him,) `I'll give him sixpence. _I_ don't +believe there's an atom of meaning in it.' + + The jury all wrote down on their slates, `SHE doesn't believe +there's an atom of meaning in it,' but none of them attempted to +explain the paper. + + `If there's no meaning in it,' said the King, `that saves a +world of trouble, you know, as we needn't try to find any. And +yet I don't know,' he went on, spreading out the verses on his +knee, and looking at them with one eye; `I seem to see some +meaning in them, after all. "--SAID I COULD NOT SWIM--" you +can't swim, can you?' he added, turning to the Knave. + + The Knave shook his head sadly. `Do I look like it?' he said. +(Which he certainly did NOT, being made entirely of cardboard.) + + `All right, so far,' said the King, and he went on muttering +over the verses to himself: `"WE KNOW IT TO BE TRUE--" that's +the jury, of course-- "I GAVE HER ONE, THEY GAVE HIM TWO--" why, +that must be what he did with the tarts, you know--' + + `But, it goes on "THEY ALL RETURNED FROM HIM TO YOU,"' said +Alice. + + `Why, there they are!' said the King triumphantly, pointing to +the tarts on the table. `Nothing can be clearer than THAT. +Then again--"BEFORE SHE HAD THIS FIT--" you never had fits, my +dear, I think?' he said to the Queen. + + `Never!' said the Queen furiously, throwing an inkstand at the +Lizard as she spoke. (The unfortunate little Bill had left off +writing on his slate with one finger, as he found it made no +mark; but he now hastily began again, using the ink, that was +trickling down his face, as long as it lasted.) + + `Then the words don't FIT you,' said the King, looking round +the court with a smile. There was a dead silence. + + `It's a pun!' the King added in an offended tone, and +everybody laughed, `Let the jury consider their verdict,' the +King said, for about the twentieth time that day. + + `No, no!' said the Queen. `Sentence first--verdict afterwards.' + + `Stuff and nonsense!' said Alice loudly. `The idea of having +the sentence first!' + + `Hold your tongue!' said the Queen, turning purple. + + `I won't!' said Alice. + + `Off with her head!' the Queen shouted at the top of her voice. +Nobody moved. + + `Who cares for you?' said Alice, (she had grown to her full +size by this time.) `You're nothing but a pack of cards!' + + At this the whole pack rose up into the air, and came flying +down upon her: she gave a little scream, half of fright and half +of anger, and tried to beat them off, and found herself lying on +the bank, with her head in the lap of her sister, who was gently +brushing away some dead leaves that had fluttered down from the +trees upon her face. + + `Wake up, Alice dear!' said her sister; `Why, what a long +sleep you've had!' + + `Oh, I've had such a curious dream!' said Alice, and she told +her sister, as well as she could remember them, all these strange +Adventures of hers that you have just been reading about; and +when she had finished, her sister kissed her, and said, `It WAS a +curious dream, dear, certainly: but now run in to your tea; it's +getting late.' So Alice got up and ran off, thinking while she +ran, as well she might, what a wonderful dream it had been. + + But her sister sat still just as she left her, leaning her +head on her hand, watching the setting sun, and thinking of +little Alice and all her wonderful Adventures, till she too began +dreaming after a fashion, and this was her dream:-- + + First, she dreamed of little Alice herself, and once again the +tiny hands were clasped upon her knee, and the bright eager eyes +were looking up into hers--she could hear the very tones of her +voice, and see that queer little toss of her head to keep back +the wandering hair that WOULD always get into her eyes--and +still as she listened, or seemed to listen, the whole place +around her became alive the strange creatures of her little +sister's dream. + + The long grass rustled at her feet as the White Rabbit hurried +by--the frightened Mouse splashed his way through the +neighbouring pool--she could hear the rattle of the teacups as +the March Hare and his friends shared their never-ending meal, +and the shrill voice of the Queen ordering off her unfortunate +guests to execution--once more the pig-baby was sneezing on the +Duchess's knee, while plates and dishes crashed around it--once +more the shriek of the Gryphon, the squeaking of the Lizard's +slate-pencil, and the choking of the suppressed guinea-pigs, +filled the air, mixed up with the distant sobs of the miserable +Mock Turtle. + + So she sat on, with closed eyes, and half believed herself in +Wonderland, though she knew she had but to open them again, and +all would change to dull reality--the grass would be only +rustling in the wind, and the pool rippling to the waving of the +reeds--the rattling teacups would change to tinkling sheep- +bells, and the Queen's shrill cries to the voice of the shepherd +boy--and the sneeze of the baby, the shriek of the Gryphon, and +all thy other queer noises, would change (she knew) to the +confused clamour of the busy farm-yard--while the lowing of the +cattle in the distance would take the place of the Mock Turtle's +heavy sobs. + + Lastly, she pictured to herself how this same little sister of +hers would, in the after-time, be herself a grown woman; and how +she would keep, through all her riper years, the simple and +loving heart of her childhood: and how she would gather about +her other little children, and make THEIR eyes bright and eager +with many a strange tale, perhaps even with the dream of +Wonderland of long ago: and how she would feel with all their +simple sorrows, and find a pleasure in all their simple joys, +remembering her own child-life, and the happy summer days. + + THE END + \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/alice29.txt.compressed b/rust/vendor/brotli/testdata/alice29.txt.compressed new file mode 100644 index 0000000..37d86e2 Binary files /dev/null and b/rust/vendor/brotli/testdata/alice29.txt.compressed differ diff --git a/rust/vendor/brotli/testdata/asyoulik.txt b/rust/vendor/brotli/testdata/asyoulik.txt new file mode 100644 index 0000000..88dc7b6 --- /dev/null +++ b/rust/vendor/brotli/testdata/asyoulik.txt @@ -0,0 +1,4122 @@ + AS YOU LIKE IT + + + DRAMATIS PERSONAE + + +DUKE SENIOR living in banishment. + +DUKE FREDERICK his brother, an usurper of his dominions. + + +AMIENS | + | lords attending on the banished duke. +JAQUES | + + +LE BEAU a courtier attending upon Frederick. + +CHARLES wrestler to Frederick. + + +OLIVER | + | +JAQUES (JAQUES DE BOYS:) | sons of Sir Rowland de Boys. + | +ORLANDO | + + +ADAM | + | servants to Oliver. +DENNIS | + + +TOUCHSTONE a clown. + +SIR OLIVER MARTEXT a vicar. + + +CORIN | + | shepherds. +SILVIUS | + + +WILLIAM a country fellow in love with Audrey. + + A person representing HYMEN. (HYMEN:) + +ROSALIND daughter to the banished duke. + +CELIA daughter to Frederick. + +PHEBE a shepherdess. + +AUDREY a country wench. + + Lords, pages, and attendants, &c. + (Forester:) + (A Lord:) + (First Lord:) + (Second Lord:) + (First Page:) + (Second Page:) + + +SCENE Oliver's house; Duke Frederick's court; and the + Forest of Arden. + + + + + AS YOU LIKE IT + + +ACT I + + + +SCENE I Orchard of Oliver's house. + + + [Enter ORLANDO and ADAM] + +ORLANDO As I remember, Adam, it was upon this fashion + bequeathed me by will but poor a thousand crowns, + and, as thou sayest, charged my brother, on his + blessing, to breed me well: and there begins my + sadness. My brother Jaques he keeps at school, and + report speaks goldenly of his profit: for my part, + he keeps me rustically at home, or, to speak more + properly, stays me here at home unkept; for call you + that keeping for a gentleman of my birth, that + differs not from the stalling of an ox? His horses + are bred better; for, besides that they are fair + with their feeding, they are taught their manage, + and to that end riders dearly hired: but I, his + brother, gain nothing under him but growth; for the + which his animals on his dunghills are as much + bound to him as I. Besides this nothing that he so + plentifully gives me, the something that nature gave + me his countenance seems to take from me: he lets + me feed with his hinds, bars me the place of a + brother, and, as much as in him lies, mines my + gentility with my education. This is it, Adam, that + grieves me; and the spirit of my father, which I + think is within me, begins to mutiny against this + servitude: I will no longer endure it, though yet I + know no wise remedy how to avoid it. + +ADAM Yonder comes my master, your brother. + +ORLANDO Go apart, Adam, and thou shalt hear how he will + shake me up. + + [Enter OLIVER] + +OLIVER Now, sir! what make you here? + +ORLANDO Nothing: I am not taught to make any thing. + +OLIVER What mar you then, sir? + +ORLANDO Marry, sir, I am helping you to mar that which God + made, a poor unworthy brother of yours, with idleness. + +OLIVER Marry, sir, be better employed, and be naught awhile. + +ORLANDO Shall I keep your hogs and eat husks with them? + What prodigal portion have I spent, that I should + come to such penury? + +OLIVER Know you where your are, sir? + +ORLANDO O, sir, very well; here in your orchard. + +OLIVER Know you before whom, sir? + +ORLANDO Ay, better than him I am before knows me. I know + you are my eldest brother; and, in the gentle + condition of blood, you should so know me. The + courtesy of nations allows you my better, in that + you are the first-born; but the same tradition + takes not away my blood, were there twenty brothers + betwixt us: I have as much of my father in me as + you; albeit, I confess, your coming before me is + nearer to his reverence. + +OLIVER What, boy! + +ORLANDO Come, come, elder brother, you are too young in this. + +OLIVER Wilt thou lay hands on me, villain? + +ORLANDO I am no villain; I am the youngest son of Sir + Rowland de Boys; he was my father, and he is thrice + a villain that says such a father begot villains. + Wert thou not my brother, I would not take this hand + from thy throat till this other had pulled out thy + tongue for saying so: thou hast railed on thyself. + +ADAM Sweet masters, be patient: for your father's + remembrance, be at accord. + +OLIVER Let me go, I say. + +ORLANDO I will not, till I please: you shall hear me. My + father charged you in his will to give me good + education: you have trained me like a peasant, + obscuring and hiding from me all gentleman-like + qualities. The spirit of my father grows strong in + me, and I will no longer endure it: therefore allow + me such exercises as may become a gentleman, or + give me the poor allottery my father left me by + testament; with that I will go buy my fortunes. + +OLIVER And what wilt thou do? beg, when that is spent? + Well, sir, get you in: I will not long be troubled + with you; you shall have some part of your will: I + pray you, leave me. + +ORLANDO I will no further offend you than becomes me for my good. + +OLIVER Get you with him, you old dog. + +ADAM Is 'old dog' my reward? Most true, I have lost my + teeth in your service. God be with my old master! + he would not have spoke such a word. + + [Exeunt ORLANDO and ADAM] + +OLIVER Is it even so? begin you to grow upon me? I will + physic your rankness, and yet give no thousand + crowns neither. Holla, Dennis! + + [Enter DENNIS] + +DENNIS Calls your worship? + +OLIVER Was not Charles, the duke's wrestler, here to speak with me? + +DENNIS So please you, he is here at the door and importunes + access to you. + +OLIVER Call him in. + + [Exit DENNIS] + + 'Twill be a good way; and to-morrow the wrestling is. + + [Enter CHARLES] + +CHARLES Good morrow to your worship. + +OLIVER Good Monsieur Charles, what's the new news at the + new court? + +CHARLES There's no news at the court, sir, but the old news: + that is, the old duke is banished by his younger + brother the new duke; and three or four loving lords + have put themselves into voluntary exile with him, + whose lands and revenues enrich the new duke; + therefore he gives them good leave to wander. + +OLIVER Can you tell if Rosalind, the duke's daughter, be + banished with her father? + +CHARLES O, no; for the duke's daughter, her cousin, so loves + her, being ever from their cradles bred together, + that she would have followed her exile, or have died + to stay behind her. She is at the court, and no + less beloved of her uncle than his own daughter; and + never two ladies loved as they do. + +OLIVER Where will the old duke live? + +CHARLES They say he is already in the forest of Arden, and + a many merry men with him; and there they live like + the old Robin Hood of England: they say many young + gentlemen flock to him every day, and fleet the time + carelessly, as they did in the golden world. + +OLIVER What, you wrestle to-morrow before the new duke? + +CHARLES Marry, do I, sir; and I came to acquaint you with a + matter. I am given, sir, secretly to understand + that your younger brother Orlando hath a disposition + to come in disguised against me to try a fall. + To-morrow, sir, I wrestle for my credit; and he that + escapes me without some broken limb shall acquit him + well. Your brother is but young and tender; and, + for your love, I would be loath to foil him, as I + must, for my own honour, if he come in: therefore, + out of my love to you, I came hither to acquaint you + withal, that either you might stay him from his + intendment or brook such disgrace well as he shall + run into, in that it is a thing of his own search + and altogether against my will. + +OLIVER Charles, I thank thee for thy love to me, which + thou shalt find I will most kindly requite. I had + myself notice of my brother's purpose herein and + have by underhand means laboured to dissuade him from + it, but he is resolute. I'll tell thee, Charles: + it is the stubbornest young fellow of France, full + of ambition, an envious emulator of every man's + good parts, a secret and villanous contriver against + me his natural brother: therefore use thy + discretion; I had as lief thou didst break his neck + as his finger. And thou wert best look to't; for if + thou dost him any slight disgrace or if he do not + mightily grace himself on thee, he will practise + against thee by poison, entrap thee by some + treacherous device and never leave thee till he + hath ta'en thy life by some indirect means or other; + for, I assure thee, and almost with tears I speak + it, there is not one so young and so villanous this + day living. I speak but brotherly of him; but + should I anatomize him to thee as he is, I must + blush and weep and thou must look pale and wonder. + +CHARLES I am heartily glad I came hither to you. If he come + to-morrow, I'll give him his payment: if ever he go + alone again, I'll never wrestle for prize more: and + so God keep your worship! + +OLIVER Farewell, good Charles. + + [Exit CHARLES] + + Now will I stir this gamester: I hope I shall see + an end of him; for my soul, yet I know not why, + hates nothing more than he. Yet he's gentle, never + schooled and yet learned, full of noble device, of + all sorts enchantingly beloved, and indeed so much + in the heart of the world, and especially of my own + people, who best know him, that I am altogether + misprised: but it shall not be so long; this + wrestler shall clear all: nothing remains but that + I kindle the boy thither; which now I'll go about. + + [Exit] + + + + + AS YOU LIKE IT + + +ACT I + + + +SCENE II Lawn before the Duke's palace. + + + [Enter CELIA and ROSALIND] + +CELIA I pray thee, Rosalind, sweet my coz, be merry. + +ROSALIND Dear Celia, I show more mirth than I am mistress of; + and would you yet I were merrier? Unless you could + teach me to forget a banished father, you must not + learn me how to remember any extraordinary pleasure. + +CELIA Herein I see thou lovest me not with the full weight + that I love thee. If my uncle, thy banished father, + had banished thy uncle, the duke my father, so thou + hadst been still with me, I could have taught my + love to take thy father for mine: so wouldst thou, + if the truth of thy love to me were so righteously + tempered as mine is to thee. + +ROSALIND Well, I will forget the condition of my estate, to + rejoice in yours. + +CELIA You know my father hath no child but I, nor none is + like to have: and, truly, when he dies, thou shalt + be his heir, for what he hath taken away from thy + father perforce, I will render thee again in + affection; by mine honour, I will; and when I break + that oath, let me turn monster: therefore, my + sweet Rose, my dear Rose, be merry. + +ROSALIND From henceforth I will, coz, and devise sports. Let + me see; what think you of falling in love? + +CELIA Marry, I prithee, do, to make sport withal: but + love no man in good earnest; nor no further in sport + neither than with safety of a pure blush thou mayst + in honour come off again. + +ROSALIND What shall be our sport, then? + +CELIA Let us sit and mock the good housewife Fortune from + her wheel, that her gifts may henceforth be bestowed equally. + +ROSALIND I would we could do so, for her benefits are + mightily misplaced, and the bountiful blind woman + doth most mistake in her gifts to women. + +CELIA 'Tis true; for those that she makes fair she scarce + makes honest, and those that she makes honest she + makes very ill-favouredly. + +ROSALIND Nay, now thou goest from Fortune's office to + Nature's: Fortune reigns in gifts of the world, + not in the lineaments of Nature. + + [Enter TOUCHSTONE] + +CELIA No? when Nature hath made a fair creature, may she + not by Fortune fall into the fire? Though Nature + hath given us wit to flout at Fortune, hath not + Fortune sent in this fool to cut off the argument? + +ROSALIND Indeed, there is Fortune too hard for Nature, when + Fortune makes Nature's natural the cutter-off of + Nature's wit. + +CELIA Peradventure this is not Fortune's work neither, but + Nature's; who perceiveth our natural wits too dull + to reason of such goddesses and hath sent this + natural for our whetstone; for always the dulness of + the fool is the whetstone of the wits. How now, + wit! whither wander you? + +TOUCHSTONE Mistress, you must come away to your father. + +CELIA Were you made the messenger? + +TOUCHSTONE No, by mine honour, but I was bid to come for you. + +ROSALIND Where learned you that oath, fool? + +TOUCHSTONE Of a certain knight that swore by his honour they + were good pancakes and swore by his honour the + mustard was naught: now I'll stand to it, the + pancakes were naught and the mustard was good, and + yet was not the knight forsworn. + +CELIA How prove you that, in the great heap of your + knowledge? + +ROSALIND Ay, marry, now unmuzzle your wisdom. + +TOUCHSTONE Stand you both forth now: stroke your chins, and + swear by your beards that I am a knave. + +CELIA By our beards, if we had them, thou art. + +TOUCHSTONE By my knavery, if I had it, then I were; but if you + swear by that that is not, you are not forsworn: no + more was this knight swearing by his honour, for he + never had any; or if he had, he had sworn it away + before ever he saw those pancakes or that mustard. + +CELIA Prithee, who is't that thou meanest? + +TOUCHSTONE One that old Frederick, your father, loves. + +CELIA My father's love is enough to honour him: enough! + speak no more of him; you'll be whipped for taxation + one of these days. + +TOUCHSTONE The more pity, that fools may not speak wisely what + wise men do foolishly. + +CELIA By my troth, thou sayest true; for since the little + wit that fools have was silenced, the little foolery + that wise men have makes a great show. Here comes + Monsieur Le Beau. + +ROSALIND With his mouth full of news. + +CELIA Which he will put on us, as pigeons feed their young. + +ROSALIND Then shall we be news-crammed. + +CELIA All the better; we shall be the more marketable. + + [Enter LE BEAU] + + Bon jour, Monsieur Le Beau: what's the news? + +LE BEAU Fair princess, you have lost much good sport. + +CELIA Sport! of what colour? + +LE BEAU What colour, madam! how shall I answer you? + +ROSALIND As wit and fortune will. + +TOUCHSTONE Or as the Destinies decree. + +CELIA Well said: that was laid on with a trowel. + +TOUCHSTONE Nay, if I keep not my rank,-- + +ROSALIND Thou losest thy old smell. + +LE BEAU You amaze me, ladies: I would have told you of good + wrestling, which you have lost the sight of. + +ROSALIND You tell us the manner of the wrestling. + +LE BEAU I will tell you the beginning; and, if it please + your ladyships, you may see the end; for the best is + yet to do; and here, where you are, they are coming + to perform it. + +CELIA Well, the beginning, that is dead and buried. + +LE BEAU There comes an old man and his three sons,-- + +CELIA I could match this beginning with an old tale. + +LE BEAU Three proper young men, of excellent growth and presence. + +ROSALIND With bills on their necks, 'Be it known unto all men + by these presents.' + +LE BEAU The eldest of the three wrestled with Charles, the + duke's wrestler; which Charles in a moment threw him + and broke three of his ribs, that there is little + hope of life in him: so he served the second, and + so the third. Yonder they lie; the poor old man, + their father, making such pitiful dole over them + that all the beholders take his part with weeping. + +ROSALIND Alas! + +TOUCHSTONE But what is the sport, monsieur, that the ladies + have lost? + +LE BEAU Why, this that I speak of. + +TOUCHSTONE Thus men may grow wiser every day: it is the first + time that ever I heard breaking of ribs was sport + for ladies. + +CELIA Or I, I promise thee. + +ROSALIND But is there any else longs to see this broken music + in his sides? is there yet another dotes upon + rib-breaking? Shall we see this wrestling, cousin? + +LE BEAU You must, if you stay here; for here is the place + appointed for the wrestling, and they are ready to + perform it. + +CELIA Yonder, sure, they are coming: let us now stay and see it. + + [Flourish. Enter DUKE FREDERICK, Lords, ORLANDO, + CHARLES, and Attendants] + +DUKE FREDERICK Come on: since the youth will not be entreated, his + own peril on his forwardness. + +ROSALIND Is yonder the man? + +LE BEAU Even he, madam. + +CELIA Alas, he is too young! yet he looks successfully. + +DUKE FREDERICK How now, daughter and cousin! are you crept hither + to see the wrestling? + +ROSALIND Ay, my liege, so please you give us leave. + +DUKE FREDERICK You will take little delight in it, I can tell you; + there is such odds in the man. In pity of the + challenger's youth I would fain dissuade him, but he + will not be entreated. Speak to him, ladies; see if + you can move him. + +CELIA Call him hither, good Monsieur Le Beau. + +DUKE FREDERICK Do so: I'll not be by. + +LE BEAU Monsieur the challenger, the princesses call for you. + +ORLANDO I attend them with all respect and duty. + +ROSALIND Young man, have you challenged Charles the wrestler? + +ORLANDO No, fair princess; he is the general challenger: I + come but in, as others do, to try with him the + strength of my youth. + +CELIA Young gentleman, your spirits are too bold for your + years. You have seen cruel proof of this man's + strength: if you saw yourself with your eyes or + knew yourself with your judgment, the fear of your + adventure would counsel you to a more equal + enterprise. We pray you, for your own sake, to + embrace your own safety and give over this attempt. + +ROSALIND Do, young sir; your reputation shall not therefore + be misprised: we will make it our suit to the duke + that the wrestling might not go forward. + +ORLANDO I beseech you, punish me not with your hard + thoughts; wherein I confess me much guilty, to deny + so fair and excellent ladies any thing. But let + your fair eyes and gentle wishes go with me to my + trial: wherein if I be foiled, there is but one + shamed that was never gracious; if killed, but one + dead that was willing to be so: I shall do my + friends no wrong, for I have none to lament me, the + world no injury, for in it I have nothing; only in + the world I fill up a place, which may be better + supplied when I have made it empty. + +ROSALIND The little strength that I have, I would it were with you. + +CELIA And mine, to eke out hers. + +ROSALIND Fare you well: pray heaven I be deceived in you! + +CELIA Your heart's desires be with you! + +CHARLES Come, where is this young gallant that is so + desirous to lie with his mother earth? + +ORLANDO Ready, sir; but his will hath in it a more modest working. + +DUKE FREDERICK You shall try but one fall. + +CHARLES No, I warrant your grace, you shall not entreat him + to a second, that have so mightily persuaded him + from a first. + +ORLANDO An you mean to mock me after, you should not have + mocked me before: but come your ways. + +ROSALIND Now Hercules be thy speed, young man! + +CELIA I would I were invisible, to catch the strong + fellow by the leg. + + [They wrestle] + +ROSALIND O excellent young man! + +CELIA If I had a thunderbolt in mine eye, I can tell who + should down. + + [Shout. CHARLES is thrown] + +DUKE FREDERICK No more, no more. + +ORLANDO Yes, I beseech your grace: I am not yet well breathed. + +DUKE FREDERICK How dost thou, Charles? + +LE BEAU He cannot speak, my lord. + +DUKE FREDERICK Bear him away. What is thy name, young man? + +ORLANDO Orlando, my liege; the youngest son of Sir Rowland de Boys. + +DUKE FREDERICK I would thou hadst been son to some man else: + The world esteem'd thy father honourable, + But I did find him still mine enemy: + Thou shouldst have better pleased me with this deed, + Hadst thou descended from another house. + But fare thee well; thou art a gallant youth: + I would thou hadst told me of another father. + + [Exeunt DUKE FREDERICK, train, and LE BEAU] + +CELIA Were I my father, coz, would I do this? + +ORLANDO I am more proud to be Sir Rowland's son, + His youngest son; and would not change that calling, + To be adopted heir to Frederick. + +ROSALIND My father loved Sir Rowland as his soul, + And all the world was of my father's mind: + Had I before known this young man his son, + I should have given him tears unto entreaties, + Ere he should thus have ventured. + +CELIA Gentle cousin, + Let us go thank him and encourage him: + My father's rough and envious disposition + Sticks me at heart. Sir, you have well deserved: + If you do keep your promises in love + But justly, as you have exceeded all promise, + Your mistress shall be happy. + +ROSALIND Gentleman, + + [Giving him a chain from her neck] + + Wear this for me, one out of suits with fortune, + That could give more, but that her hand lacks means. + Shall we go, coz? + +CELIA Ay. Fare you well, fair gentleman. + +ORLANDO Can I not say, I thank you? My better parts + Are all thrown down, and that which here stands up + Is but a quintain, a mere lifeless block. + +ROSALIND He calls us back: my pride fell with my fortunes; + I'll ask him what he would. Did you call, sir? + Sir, you have wrestled well and overthrown + More than your enemies. + +CELIA Will you go, coz? + +ROSALIND Have with you. Fare you well. + + [Exeunt ROSALIND and CELIA] + +ORLANDO What passion hangs these weights upon my tongue? + I cannot speak to her, yet she urged conference. + O poor Orlando, thou art overthrown! + Or Charles or something weaker masters thee. + + [Re-enter LE BEAU] + +LE BEAU Good sir, I do in friendship counsel you + To leave this place. Albeit you have deserved + High commendation, true applause and love, + Yet such is now the duke's condition + That he misconstrues all that you have done. + The duke is humorous; what he is indeed, + More suits you to conceive than I to speak of. + +ORLANDO I thank you, sir: and, pray you, tell me this: + Which of the two was daughter of the duke + That here was at the wrestling? + +LE BEAU Neither his daughter, if we judge by manners; + But yet indeed the lesser is his daughter + The other is daughter to the banish'd duke, + And here detain'd by her usurping uncle, + To keep his daughter company; whose loves + Are dearer than the natural bond of sisters. + But I can tell you that of late this duke + Hath ta'en displeasure 'gainst his gentle niece, + Grounded upon no other argument + But that the people praise her for her virtues + And pity her for her good father's sake; + And, on my life, his malice 'gainst the lady + Will suddenly break forth. Sir, fare you well: + Hereafter, in a better world than this, + I shall desire more love and knowledge of you. + +ORLANDO I rest much bounden to you: fare you well. + + [Exit LE BEAU] + + Thus must I from the smoke into the smother; + From tyrant duke unto a tyrant brother: + But heavenly Rosalind! + + [Exit] + + + + + AS YOU LIKE IT + + +ACT I + + + +SCENE III A room in the palace. + + + [Enter CELIA and ROSALIND] + +CELIA Why, cousin! why, Rosalind! Cupid have mercy! not a word? + +ROSALIND Not one to throw at a dog. + +CELIA No, thy words are too precious to be cast away upon + curs; throw some of them at me; come, lame me with reasons. + +ROSALIND Then there were two cousins laid up; when the one + should be lamed with reasons and the other mad + without any. + +CELIA But is all this for your father? + +ROSALIND No, some of it is for my child's father. O, how + full of briers is this working-day world! + +CELIA They are but burs, cousin, thrown upon thee in + holiday foolery: if we walk not in the trodden + paths our very petticoats will catch them. + +ROSALIND I could shake them off my coat: these burs are in my heart. + +CELIA Hem them away. + +ROSALIND I would try, if I could cry 'hem' and have him. + +CELIA Come, come, wrestle with thy affections. + +ROSALIND O, they take the part of a better wrestler than myself! + +CELIA O, a good wish upon you! you will try in time, in + despite of a fall. But, turning these jests out of + service, let us talk in good earnest: is it + possible, on such a sudden, you should fall into so + strong a liking with old Sir Rowland's youngest son? + +ROSALIND The duke my father loved his father dearly. + +CELIA Doth it therefore ensue that you should love his son + dearly? By this kind of chase, I should hate him, + for my father hated his father dearly; yet I hate + not Orlando. + +ROSALIND No, faith, hate him not, for my sake. + +CELIA Why should I not? doth he not deserve well? + +ROSALIND Let me love him for that, and do you love him + because I do. Look, here comes the duke. + +CELIA With his eyes full of anger. + + [Enter DUKE FREDERICK, with Lords] + +DUKE FREDERICK Mistress, dispatch you with your safest haste + And get you from our court. + +ROSALIND Me, uncle? + +DUKE FREDERICK You, cousin + Within these ten days if that thou be'st found + So near our public court as twenty miles, + Thou diest for it. + +ROSALIND I do beseech your grace, + Let me the knowledge of my fault bear with me: + If with myself I hold intelligence + Or have acquaintance with mine own desires, + If that I do not dream or be not frantic,-- + As I do trust I am not--then, dear uncle, + Never so much as in a thought unborn + Did I offend your highness. + +DUKE FREDERICK Thus do all traitors: + If their purgation did consist in words, + They are as innocent as grace itself: + Let it suffice thee that I trust thee not. + +ROSALIND Yet your mistrust cannot make me a traitor: + Tell me whereon the likelihood depends. + +DUKE FREDERICK Thou art thy father's daughter; there's enough. + +ROSALIND So was I when your highness took his dukedom; + So was I when your highness banish'd him: + Treason is not inherited, my lord; + Or, if we did derive it from our friends, + What's that to me? my father was no traitor: + Then, good my liege, mistake me not so much + To think my poverty is treacherous. + +CELIA Dear sovereign, hear me speak. + +DUKE FREDERICK Ay, Celia; we stay'd her for your sake, + Else had she with her father ranged along. + +CELIA I did not then entreat to have her stay; + It was your pleasure and your own remorse: + I was too young that time to value her; + But now I know her: if she be a traitor, + Why so am I; we still have slept together, + Rose at an instant, learn'd, play'd, eat together, + And wheresoever we went, like Juno's swans, + Still we went coupled and inseparable. + +DUKE FREDERICK She is too subtle for thee; and her smoothness, + Her very silence and her patience + Speak to the people, and they pity her. + Thou art a fool: she robs thee of thy name; + And thou wilt show more bright and seem more virtuous + When she is gone. Then open not thy lips: + Firm and irrevocable is my doom + Which I have pass'd upon her; she is banish'd. + +CELIA Pronounce that sentence then on me, my liege: + I cannot live out of her company. + +DUKE FREDERICK You are a fool. You, niece, provide yourself: + If you outstay the time, upon mine honour, + And in the greatness of my word, you die. + + [Exeunt DUKE FREDERICK and Lords] + +CELIA O my poor Rosalind, whither wilt thou go? + Wilt thou change fathers? I will give thee mine. + I charge thee, be not thou more grieved than I am. + +ROSALIND I have more cause. + +CELIA Thou hast not, cousin; + Prithee be cheerful: know'st thou not, the duke + Hath banish'd me, his daughter? + +ROSALIND That he hath not. + +CELIA No, hath not? Rosalind lacks then the love + Which teacheth thee that thou and I am one: + Shall we be sunder'd? shall we part, sweet girl? + No: let my father seek another heir. + Therefore devise with me how we may fly, + Whither to go and what to bear with us; + And do not seek to take your change upon you, + To bear your griefs yourself and leave me out; + For, by this heaven, now at our sorrows pale, + Say what thou canst, I'll go along with thee. + +ROSALIND Why, whither shall we go? + +CELIA To seek my uncle in the forest of Arden. + +ROSALIND Alas, what danger will it be to us, + Maids as we are, to travel forth so far! + Beauty provoketh thieves sooner than gold. + +CELIA I'll put myself in poor and mean attire + And with a kind of umber smirch my face; + The like do you: so shall we pass along + And never stir assailants. + +ROSALIND Were it not better, + Because that I am more than common tall, + That I did suit me all points like a man? + A gallant curtle-axe upon my thigh, + A boar-spear in my hand; and--in my heart + Lie there what hidden woman's fear there will-- + We'll have a swashing and a martial outside, + As many other mannish cowards have + That do outface it with their semblances. + +CELIA What shall I call thee when thou art a man? + +ROSALIND I'll have no worse a name than Jove's own page; + And therefore look you call me Ganymede. + But what will you be call'd? + +CELIA Something that hath a reference to my state + No longer Celia, but Aliena. + +ROSALIND But, cousin, what if we assay'd to steal + The clownish fool out of your father's court? + Would he not be a comfort to our travel? + +CELIA He'll go along o'er the wide world with me; + Leave me alone to woo him. Let's away, + And get our jewels and our wealth together, + Devise the fittest time and safest way + To hide us from pursuit that will be made + After my flight. Now go we in content + To liberty and not to banishment. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT II + + + +SCENE I The Forest of Arden. + + + [Enter DUKE SENIOR, AMIENS, and two or three Lords, + like foresters] + +DUKE SENIOR Now, my co-mates and brothers in exile, + Hath not old custom made this life more sweet + Than that of painted pomp? Are not these woods + More free from peril than the envious court? + Here feel we but the penalty of Adam, + The seasons' difference, as the icy fang + And churlish chiding of the winter's wind, + Which, when it bites and blows upon my body, + Even till I shrink with cold, I smile and say + 'This is no flattery: these are counsellors + That feelingly persuade me what I am.' + Sweet are the uses of adversity, + Which, like the toad, ugly and venomous, + Wears yet a precious jewel in his head; + And this our life exempt from public haunt + Finds tongues in trees, books in the running brooks, + Sermons in stones and good in every thing. + I would not change it. + +AMIENS Happy is your grace, + That can translate the stubbornness of fortune + Into so quiet and so sweet a style. + +DUKE SENIOR Come, shall we go and kill us venison? + And yet it irks me the poor dappled fools, + Being native burghers of this desert city, + Should in their own confines with forked heads + Have their round haunches gored. + +First Lord Indeed, my lord, + The melancholy Jaques grieves at that, + And, in that kind, swears you do more usurp + Than doth your brother that hath banish'd you. + To-day my Lord of Amiens and myself + Did steal behind him as he lay along + Under an oak whose antique root peeps out + Upon the brook that brawls along this wood: + To the which place a poor sequester'd stag, + That from the hunter's aim had ta'en a hurt, + Did come to languish, and indeed, my lord, + The wretched animal heaved forth such groans + That their discharge did stretch his leathern coat + Almost to bursting, and the big round tears + Coursed one another down his innocent nose + In piteous chase; and thus the hairy fool + Much marked of the melancholy Jaques, + Stood on the extremest verge of the swift brook, + Augmenting it with tears. + +DUKE SENIOR But what said Jaques? + Did he not moralize this spectacle? + +First Lord O, yes, into a thousand similes. + First, for his weeping into the needless stream; + 'Poor deer,' quoth he, 'thou makest a testament + As worldlings do, giving thy sum of more + To that which had too much:' then, being there alone, + Left and abandon'd of his velvet friends, + ''Tis right:' quoth he; 'thus misery doth part + The flux of company:' anon a careless herd, + Full of the pasture, jumps along by him + And never stays to greet him; 'Ay' quoth Jaques, + 'Sweep on, you fat and greasy citizens; + 'Tis just the fashion: wherefore do you look + Upon that poor and broken bankrupt there?' + Thus most invectively he pierceth through + The body of the country, city, court, + Yea, and of this our life, swearing that we + Are mere usurpers, tyrants and what's worse, + To fright the animals and to kill them up + In their assign'd and native dwelling-place. + +DUKE SENIOR And did you leave him in this contemplation? + +Second Lord We did, my lord, weeping and commenting + Upon the sobbing deer. + +DUKE SENIOR Show me the place: + I love to cope him in these sullen fits, + For then he's full of matter. + +First Lord I'll bring you to him straight. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT II + + + +SCENE II A room in the palace. + + + [Enter DUKE FREDERICK, with Lords] + +DUKE FREDERICK Can it be possible that no man saw them? + It cannot be: some villains of my court + Are of consent and sufferance in this. + +First Lord I cannot hear of any that did see her. + The ladies, her attendants of her chamber, + Saw her abed, and in the morning early + They found the bed untreasured of their mistress. + +Second Lord My lord, the roynish clown, at whom so oft + Your grace was wont to laugh, is also missing. + Hisperia, the princess' gentlewoman, + Confesses that she secretly o'erheard + Your daughter and her cousin much commend + The parts and graces of the wrestler + That did but lately foil the sinewy Charles; + And she believes, wherever they are gone, + That youth is surely in their company. + +DUKE FREDERICK Send to his brother; fetch that gallant hither; + If he be absent, bring his brother to me; + I'll make him find him: do this suddenly, + And let not search and inquisition quail + To bring again these foolish runaways. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT II + + + +SCENE III Before OLIVER'S house. + + + [Enter ORLANDO and ADAM, meeting] + +ORLANDO Who's there? + +ADAM What, my young master? O, my gentle master! + O my sweet master! O you memory + Of old Sir Rowland! why, what make you here? + Why are you virtuous? why do people love you? + And wherefore are you gentle, strong and valiant? + Why would you be so fond to overcome + The bonny priser of the humorous duke? + Your praise is come too swiftly home before you. + Know you not, master, to some kind of men + Their graces serve them but as enemies? + No more do yours: your virtues, gentle master, + Are sanctified and holy traitors to you. + O, what a world is this, when what is comely + Envenoms him that bears it! + +ORLANDO Why, what's the matter? + +ADAM O unhappy youth! + Come not within these doors; within this roof + The enemy of all your graces lives: + Your brother--no, no brother; yet the son-- + Yet not the son, I will not call him son + Of him I was about to call his father-- + Hath heard your praises, and this night he means + To burn the lodging where you use to lie + And you within it: if he fail of that, + He will have other means to cut you off. + I overheard him and his practises. + This is no place; this house is but a butchery: + Abhor it, fear it, do not enter it. + +ORLANDO Why, whither, Adam, wouldst thou have me go? + +ADAM No matter whither, so you come not here. + +ORLANDO What, wouldst thou have me go and beg my food? + Or with a base and boisterous sword enforce + A thievish living on the common road? + This I must do, or know not what to do: + Yet this I will not do, do how I can; + I rather will subject me to the malice + Of a diverted blood and bloody brother. + +ADAM But do not so. I have five hundred crowns, + The thrifty hire I saved under your father, + Which I did store to be my foster-nurse + When service should in my old limbs lie lame + And unregarded age in corners thrown: + Take that, and He that doth the ravens feed, + Yea, providently caters for the sparrow, + Be comfort to my age! Here is the gold; + And all this I give you. Let me be your servant: + Though I look old, yet I am strong and lusty; + For in my youth I never did apply + Hot and rebellious liquors in my blood, + Nor did not with unbashful forehead woo + The means of weakness and debility; + Therefore my age is as a lusty winter, + Frosty, but kindly: let me go with you; + I'll do the service of a younger man + In all your business and necessities. + +ORLANDO O good old man, how well in thee appears + The constant service of the antique world, + When service sweat for duty, not for meed! + Thou art not for the fashion of these times, + Where none will sweat but for promotion, + And having that, do choke their service up + Even with the having: it is not so with thee. + But, poor old man, thou prunest a rotten tree, + That cannot so much as a blossom yield + In lieu of all thy pains and husbandry + But come thy ways; well go along together, + And ere we have thy youthful wages spent, + We'll light upon some settled low content. + +ADAM Master, go on, and I will follow thee, + To the last gasp, with truth and loyalty. + From seventeen years till now almost fourscore + Here lived I, but now live here no more. + At seventeen years many their fortunes seek; + But at fourscore it is too late a week: + Yet fortune cannot recompense me better + Than to die well and not my master's debtor. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT II + + + +SCENE IV The Forest of Arden. + + + [Enter ROSALIND for Ganymede, CELIA for Aliena, + and TOUCHSTONE] + +ROSALIND O Jupiter, how weary are my spirits! + +TOUCHSTONE I care not for my spirits, if my legs were not weary. + +ROSALIND I could find in my heart to disgrace my man's + apparel and to cry like a woman; but I must comfort + the weaker vessel, as doublet and hose ought to show + itself courageous to petticoat: therefore courage, + good Aliena! + +CELIA I pray you, bear with me; I cannot go no further. + +TOUCHSTONE For my part, I had rather bear with you than bear + you; yet I should bear no cross if I did bear you, + for I think you have no money in your purse. + +ROSALIND Well, this is the forest of Arden. + +TOUCHSTONE Ay, now am I in Arden; the more fool I; when I was + at home, I was in a better place: but travellers + must be content. + +ROSALIND Ay, be so, good Touchstone. + + [Enter CORIN and SILVIUS] + + Look you, who comes here; a young man and an old in + solemn talk. + +CORIN That is the way to make her scorn you still. + +SILVIUS O Corin, that thou knew'st how I do love her! + +CORIN I partly guess; for I have loved ere now. + +SILVIUS No, Corin, being old, thou canst not guess, + Though in thy youth thou wast as true a lover + As ever sigh'd upon a midnight pillow: + But if thy love were ever like to mine-- + As sure I think did never man love so-- + How many actions most ridiculous + Hast thou been drawn to by thy fantasy? + +CORIN Into a thousand that I have forgotten. + +SILVIUS O, thou didst then ne'er love so heartily! + If thou remember'st not the slightest folly + That ever love did make thee run into, + Thou hast not loved: + Or if thou hast not sat as I do now, + Wearying thy hearer in thy mistress' praise, + Thou hast not loved: + Or if thou hast not broke from company + Abruptly, as my passion now makes me, + Thou hast not loved. + O Phebe, Phebe, Phebe! + + [Exit] + +ROSALIND Alas, poor shepherd! searching of thy wound, + I have by hard adventure found mine own. + +TOUCHSTONE And I mine. I remember, when I was in love I broke + my sword upon a stone and bid him take that for + coming a-night to Jane Smile; and I remember the + kissing of her batlet and the cow's dugs that her + pretty chopt hands had milked; and I remember the + wooing of a peascod instead of her, from whom I took + two cods and, giving her them again, said with + weeping tears 'Wear these for my sake.' We that are + true lovers run into strange capers; but as all is + mortal in nature, so is all nature in love mortal in folly. + +ROSALIND Thou speakest wiser than thou art ware of. + +TOUCHSTONE Nay, I shall ne'er be ware of mine own wit till I + break my shins against it. + +ROSALIND Jove, Jove! this shepherd's passion + Is much upon my fashion. + +TOUCHSTONE And mine; but it grows something stale with me. + +CELIA I pray you, one of you question yond man + If he for gold will give us any food: + I faint almost to death. + +TOUCHSTONE Holla, you clown! + +ROSALIND Peace, fool: he's not thy kinsman. + +CORIN Who calls? + +TOUCHSTONE Your betters, sir. + +CORIN Else are they very wretched. + +ROSALIND Peace, I say. Good even to you, friend. + +CORIN And to you, gentle sir, and to you all. + +ROSALIND I prithee, shepherd, if that love or gold + Can in this desert place buy entertainment, + Bring us where we may rest ourselves and feed: + Here's a young maid with travel much oppress'd + And faints for succor. + +CORIN Fair sir, I pity her + And wish, for her sake more than for mine own, + My fortunes were more able to relieve her; + But I am shepherd to another man + And do not shear the fleeces that I graze: + My master is of churlish disposition + And little recks to find the way to heaven + By doing deeds of hospitality: + Besides, his cote, his flocks and bounds of feed + Are now on sale, and at our sheepcote now, + By reason of his absence, there is nothing + That you will feed on; but what is, come see. + And in my voice most welcome shall you be. + +ROSALIND What is he that shall buy his flock and pasture? + +CORIN That young swain that you saw here but erewhile, + That little cares for buying any thing. + +ROSALIND I pray thee, if it stand with honesty, + Buy thou the cottage, pasture and the flock, + And thou shalt have to pay for it of us. + +CELIA And we will mend thy wages. I like this place. + And willingly could waste my time in it. + +CORIN Assuredly the thing is to be sold: + Go with me: if you like upon report + The soil, the profit and this kind of life, + I will your very faithful feeder be + And buy it with your gold right suddenly. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT II + + + +SCENE V The Forest. + + + [Enter AMIENS, JAQUES, and others] + + SONG. +AMIENS Under the greenwood tree + Who loves to lie with me, + And turn his merry note + Unto the sweet bird's throat, + Come hither, come hither, come hither: + Here shall he see No enemy + But winter and rough weather. + +JAQUES More, more, I prithee, more. + +AMIENS It will make you melancholy, Monsieur Jaques. + +JAQUES I thank it. More, I prithee, more. I can suck + melancholy out of a song, as a weasel sucks eggs. + More, I prithee, more. + +AMIENS My voice is ragged: I know I cannot please you. + +JAQUES I do not desire you to please me; I do desire you to + sing. Come, more; another stanzo: call you 'em stanzos? + +AMIENS What you will, Monsieur Jaques. + +JAQUES Nay, I care not for their names; they owe me + nothing. Will you sing? + +AMIENS More at your request than to please myself. + +JAQUES Well then, if ever I thank any man, I'll thank you; + but that they call compliment is like the encounter + of two dog-apes, and when a man thanks me heartily, + methinks I have given him a penny and he renders me + the beggarly thanks. Come, sing; and you that will + not, hold your tongues. + +AMIENS Well, I'll end the song. Sirs, cover the while; the + duke will drink under this tree. He hath been all + this day to look you. + +JAQUES And I have been all this day to avoid him. He is + too disputable for my company: I think of as many + matters as he, but I give heaven thanks and make no + boast of them. Come, warble, come. + + SONG. + Who doth ambition shun + + [All together here] + + And loves to live i' the sun, + Seeking the food he eats + And pleased with what he gets, + Come hither, come hither, come hither: + Here shall he see No enemy + But winter and rough weather. + +JAQUES I'll give you a verse to this note that I made + yesterday in despite of my invention. + +AMIENS And I'll sing it. + +JAQUES Thus it goes:-- + + If it do come to pass + That any man turn ass, + Leaving his wealth and ease, + A stubborn will to please, + Ducdame, ducdame, ducdame: + Here shall he see + Gross fools as he, + An if he will come to me. + +AMIENS What's that 'ducdame'? + +JAQUES 'Tis a Greek invocation, to call fools into a + circle. I'll go sleep, if I can; if I cannot, I'll + rail against all the first-born of Egypt. + +AMIENS And I'll go seek the duke: his banquet is prepared. + + [Exeunt severally] + + + + + AS YOU LIKE IT + + +ACT II + + + +SCENE VI The forest. + + + [Enter ORLANDO and ADAM] + +ADAM Dear master, I can go no further. O, I die for food! + Here lie I down, and measure out my grave. Farewell, + kind master. + +ORLANDO Why, how now, Adam! no greater heart in thee? Live + a little; comfort a little; cheer thyself a little. + If this uncouth forest yield any thing savage, I + will either be food for it or bring it for food to + thee. Thy conceit is nearer death than thy powers. + For my sake be comfortable; hold death awhile at + the arm's end: I will here be with thee presently; + and if I bring thee not something to eat, I will + give thee leave to die: but if thou diest before I + come, thou art a mocker of my labour. Well said! + thou lookest cheerly, and I'll be with thee quickly. + Yet thou liest in the bleak air: come, I will bear + thee to some shelter; and thou shalt not die for + lack of a dinner, if there live any thing in this + desert. Cheerly, good Adam! + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT II + + + +SCENE VII The forest. + + + [A table set out. Enter DUKE SENIOR, AMIENS, and + Lords like outlaws] + +DUKE SENIOR I think he be transform'd into a beast; + For I can no where find him like a man. + +First Lord My lord, he is but even now gone hence: + Here was he merry, hearing of a song. + +DUKE SENIOR If he, compact of jars, grow musical, + We shall have shortly discord in the spheres. + Go, seek him: tell him I would speak with him. + + [Enter JAQUES] + +First Lord He saves my labour by his own approach. + +DUKE SENIOR Why, how now, monsieur! what a life is this, + That your poor friends must woo your company? + What, you look merrily! + +JAQUES A fool, a fool! I met a fool i' the forest, + A motley fool; a miserable world! + As I do live by food, I met a fool + Who laid him down and bask'd him in the sun, + And rail'd on Lady Fortune in good terms, + In good set terms and yet a motley fool. + 'Good morrow, fool,' quoth I. 'No, sir,' quoth he, + 'Call me not fool till heaven hath sent me fortune:' + And then he drew a dial from his poke, + And, looking on it with lack-lustre eye, + Says very wisely, 'It is ten o'clock: + Thus we may see,' quoth he, 'how the world wags: + 'Tis but an hour ago since it was nine, + And after one hour more 'twill be eleven; + And so, from hour to hour, we ripe and ripe, + And then, from hour to hour, we rot and rot; + And thereby hangs a tale.' When I did hear + The motley fool thus moral on the time, + My lungs began to crow like chanticleer, + That fools should be so deep-contemplative, + And I did laugh sans intermission + An hour by his dial. O noble fool! + A worthy fool! Motley's the only wear. + +DUKE SENIOR What fool is this? + +JAQUES O worthy fool! One that hath been a courtier, + And says, if ladies be but young and fair, + They have the gift to know it: and in his brain, + Which is as dry as the remainder biscuit + After a voyage, he hath strange places cramm'd + With observation, the which he vents + In mangled forms. O that I were a fool! + I am ambitious for a motley coat. + +DUKE SENIOR Thou shalt have one. + +JAQUES It is my only suit; + Provided that you weed your better judgments + Of all opinion that grows rank in them + That I am wise. I must have liberty + Withal, as large a charter as the wind, + To blow on whom I please; for so fools have; + And they that are most galled with my folly, + They most must laugh. And why, sir, must they so? + The 'why' is plain as way to parish church: + He that a fool doth very wisely hit + Doth very foolishly, although he smart, + Not to seem senseless of the bob: if not, + The wise man's folly is anatomized + Even by the squandering glances of the fool. + Invest me in my motley; give me leave + To speak my mind, and I will through and through + Cleanse the foul body of the infected world, + If they will patiently receive my medicine. + +DUKE SENIOR Fie on thee! I can tell what thou wouldst do. + +JAQUES What, for a counter, would I do but good? + +DUKE SENIOR Most mischievous foul sin, in chiding sin: + For thou thyself hast been a libertine, + As sensual as the brutish sting itself; + And all the embossed sores and headed evils, + That thou with licence of free foot hast caught, + Wouldst thou disgorge into the general world. + +JAQUES Why, who cries out on pride, + That can therein tax any private party? + Doth it not flow as hugely as the sea, + Till that the weary very means do ebb? + What woman in the city do I name, + When that I say the city-woman bears + The cost of princes on unworthy shoulders? + Who can come in and say that I mean her, + When such a one as she such is her neighbour? + Or what is he of basest function + That says his bravery is not of my cost, + Thinking that I mean him, but therein suits + His folly to the mettle of my speech? + There then; how then? what then? Let me see wherein + My tongue hath wrong'd him: if it do him right, + Then he hath wrong'd himself; if he be free, + Why then my taxing like a wild-goose flies, + Unclaim'd of any man. But who comes here? + + [Enter ORLANDO, with his sword drawn] + +ORLANDO Forbear, and eat no more. + +JAQUES Why, I have eat none yet. + +ORLANDO Nor shalt not, till necessity be served. + +JAQUES Of what kind should this cock come of? + +DUKE SENIOR Art thou thus bolden'd, man, by thy distress, + Or else a rude despiser of good manners, + That in civility thou seem'st so empty? + +ORLANDO You touch'd my vein at first: the thorny point + Of bare distress hath ta'en from me the show + Of smooth civility: yet am I inland bred + And know some nurture. But forbear, I say: + He dies that touches any of this fruit + Till I and my affairs are answered. + +JAQUES An you will not be answered with reason, I must die. + +DUKE SENIOR What would you have? Your gentleness shall force + More than your force move us to gentleness. + +ORLANDO I almost die for food; and let me have it. + +DUKE SENIOR Sit down and feed, and welcome to our table. + +ORLANDO Speak you so gently? Pardon me, I pray you: + I thought that all things had been savage here; + And therefore put I on the countenance + Of stern commandment. But whate'er you are + That in this desert inaccessible, + Under the shade of melancholy boughs, + Lose and neglect the creeping hours of time + If ever you have look'd on better days, + If ever been where bells have knoll'd to church, + If ever sat at any good man's feast, + If ever from your eyelids wiped a tear + And know what 'tis to pity and be pitied, + Let gentleness my strong enforcement be: + In the which hope I blush, and hide my sword. + +DUKE SENIOR True is it that we have seen better days, + And have with holy bell been knoll'd to church + And sat at good men's feasts and wiped our eyes + Of drops that sacred pity hath engender'd: + And therefore sit you down in gentleness + And take upon command what help we have + That to your wanting may be minister'd. + +ORLANDO Then but forbear your food a little while, + Whiles, like a doe, I go to find my fawn + And give it food. There is an old poor man, + Who after me hath many a weary step + Limp'd in pure love: till he be first sufficed, + Oppress'd with two weak evils, age and hunger, + I will not touch a bit. + +DUKE SENIOR Go find him out, + And we will nothing waste till you return. + +ORLANDO I thank ye; and be blest for your good comfort! + + [Exit] + +DUKE SENIOR Thou seest we are not all alone unhappy: + This wide and universal theatre + Presents more woeful pageants than the scene + Wherein we play in. + +JAQUES All the world's a stage, + And all the men and women merely players: + They have their exits and their entrances; + And one man in his time plays many parts, + His acts being seven ages. At first the infant, + Mewling and puking in the nurse's arms. + And then the whining school-boy, with his satchel + And shining morning face, creeping like snail + Unwillingly to school. And then the lover, + Sighing like furnace, with a woeful ballad + Made to his mistress' eyebrow. Then a soldier, + Full of strange oaths and bearded like the pard, + Jealous in honour, sudden and quick in quarrel, + Seeking the bubble reputation + Even in the cannon's mouth. And then the justice, + In fair round belly with good capon lined, + With eyes severe and beard of formal cut, + Full of wise saws and modern instances; + And so he plays his part. The sixth age shifts + Into the lean and slipper'd pantaloon, + With spectacles on nose and pouch on side, + His youthful hose, well saved, a world too wide + For his shrunk shank; and his big manly voice, + Turning again toward childish treble, pipes + And whistles in his sound. Last scene of all, + That ends this strange eventful history, + Is second childishness and mere oblivion, + Sans teeth, sans eyes, sans taste, sans everything. + + [Re-enter ORLANDO, with ADAM] + +DUKE SENIOR Welcome. Set down your venerable burthen, + And let him feed. + +ORLANDO I thank you most for him. + +ADAM So had you need: + I scarce can speak to thank you for myself. + +DUKE SENIOR Welcome; fall to: I will not trouble you + As yet, to question you about your fortunes. + Give us some music; and, good cousin, sing. + + SONG. +AMIENS Blow, blow, thou winter wind. + Thou art not so unkind + As man's ingratitude; + Thy tooth is not so keen, + Because thou art not seen, + Although thy breath be rude. + Heigh-ho! sing, heigh-ho! unto the green holly: + Most friendship is feigning, most loving mere folly: + Then, heigh-ho, the holly! + This life is most jolly. + Freeze, freeze, thou bitter sky, + That dost not bite so nigh + As benefits forgot: + Though thou the waters warp, + Thy sting is not so sharp + As friend remember'd not. + Heigh-ho! sing, &c. + +DUKE SENIOR If that you were the good Sir Rowland's son, + As you have whisper'd faithfully you were, + And as mine eye doth his effigies witness + Most truly limn'd and living in your face, + Be truly welcome hither: I am the duke + That loved your father: the residue of your fortune, + Go to my cave and tell me. Good old man, + Thou art right welcome as thy master is. + Support him by the arm. Give me your hand, + And let me all your fortunes understand. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT III + + + +SCENE I A room in the palace. + + + [Enter DUKE FREDERICK, Lords, and OLIVER] + +DUKE FREDERICK Not see him since? Sir, sir, that cannot be: + But were I not the better part made mercy, + I should not seek an absent argument + Of my revenge, thou present. But look to it: + Find out thy brother, wheresoe'er he is; + Seek him with candle; bring him dead or living + Within this twelvemonth, or turn thou no more + To seek a living in our territory. + Thy lands and all things that thou dost call thine + Worth seizure do we seize into our hands, + Till thou canst quit thee by thy brothers mouth + Of what we think against thee. + +OLIVER O that your highness knew my heart in this! + I never loved my brother in my life. + +DUKE FREDERICK More villain thou. Well, push him out of doors; + And let my officers of such a nature + Make an extent upon his house and lands: + Do this expediently and turn him going. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT III + + + +SCENE II The forest. + + + [Enter ORLANDO, with a paper] + +ORLANDO Hang there, my verse, in witness of my love: + And thou, thrice-crowned queen of night, survey + With thy chaste eye, from thy pale sphere above, + Thy huntress' name that my full life doth sway. + O Rosalind! these trees shall be my books + And in their barks my thoughts I'll character; + That every eye which in this forest looks + Shall see thy virtue witness'd every where. + Run, run, Orlando; carve on every tree + The fair, the chaste and unexpressive she. + + [Exit] + + [Enter CORIN and TOUCHSTONE] + +CORIN And how like you this shepherd's life, Master Touchstone? + +TOUCHSTONE Truly, shepherd, in respect of itself, it is a good + life, but in respect that it is a shepherd's life, + it is naught. In respect that it is solitary, I + like it very well; but in respect that it is + private, it is a very vile life. Now, in respect it + is in the fields, it pleaseth me well; but in + respect it is not in the court, it is tedious. As + is it a spare life, look you, it fits my humour well; + but as there is no more plenty in it, it goes much + against my stomach. Hast any philosophy in thee, shepherd? + +CORIN No more but that I know the more one sickens the + worse at ease he is; and that he that wants money, + means and content is without three good friends; + that the property of rain is to wet and fire to + burn; that good pasture makes fat sheep, and that a + great cause of the night is lack of the sun; that + he that hath learned no wit by nature nor art may + complain of good breeding or comes of a very dull kindred. + +TOUCHSTONE Such a one is a natural philosopher. Wast ever in + court, shepherd? + +CORIN No, truly. + +TOUCHSTONE Then thou art damned. + +CORIN Nay, I hope. + +TOUCHSTONE Truly, thou art damned like an ill-roasted egg, all + on one side. + +CORIN For not being at court? Your reason. + +TOUCHSTONE Why, if thou never wast at court, thou never sawest + good manners; if thou never sawest good manners, + then thy manners must be wicked; and wickedness is + sin, and sin is damnation. Thou art in a parlous + state, shepherd. + +CORIN Not a whit, Touchstone: those that are good manners + at the court are as ridiculous in the country as the + behavior of the country is most mockable at the + court. You told me you salute not at the court, but + you kiss your hands: that courtesy would be + uncleanly, if courtiers were shepherds. + +TOUCHSTONE Instance, briefly; come, instance. + +CORIN Why, we are still handling our ewes, and their + fells, you know, are greasy. + +TOUCHSTONE Why, do not your courtier's hands sweat? and is not + the grease of a mutton as wholesome as the sweat of + a man? Shallow, shallow. A better instance, I say; come. + +CORIN Besides, our hands are hard. + +TOUCHSTONE Your lips will feel them the sooner. Shallow again. + A more sounder instance, come. + +CORIN And they are often tarred over with the surgery of + our sheep: and would you have us kiss tar? The + courtier's hands are perfumed with civet. + +TOUCHSTONE Most shallow man! thou worms-meat, in respect of a + good piece of flesh indeed! Learn of the wise, and + perpend: civet is of a baser birth than tar, the + very uncleanly flux of a cat. Mend the instance, shepherd. + +CORIN You have too courtly a wit for me: I'll rest. + +TOUCHSTONE Wilt thou rest damned? God help thee, shallow man! + God make incision in thee! thou art raw. + +CORIN Sir, I am a true labourer: I earn that I eat, get + that I wear, owe no man hate, envy no man's + happiness, glad of other men's good, content with my + harm, and the greatest of my pride is to see my ewes + graze and my lambs suck. + +TOUCHSTONE That is another simple sin in you, to bring the ewes + and the rams together and to offer to get your + living by the copulation of cattle; to be bawd to a + bell-wether, and to betray a she-lamb of a + twelvemonth to a crooked-pated, old, cuckoldly ram, + out of all reasonable match. If thou beest not + damned for this, the devil himself will have no + shepherds; I cannot see else how thou shouldst + 'scape. + +CORIN Here comes young Master Ganymede, my new mistress's brother. + + [Enter ROSALIND, with a paper, reading] + +ROSALIND From the east to western Ind, + No jewel is like Rosalind. + Her worth, being mounted on the wind, + Through all the world bears Rosalind. + All the pictures fairest lined + Are but black to Rosalind. + Let no fair be kept in mind + But the fair of Rosalind. + +TOUCHSTONE I'll rhyme you so eight years together, dinners and + suppers and sleeping-hours excepted: it is the + right butter-women's rank to market. + +ROSALIND Out, fool! + +TOUCHSTONE For a taste: + If a hart do lack a hind, + Let him seek out Rosalind. + If the cat will after kind, + So be sure will Rosalind. + Winter garments must be lined, + So must slender Rosalind. + They that reap must sheaf and bind; + Then to cart with Rosalind. + Sweetest nut hath sourest rind, + Such a nut is Rosalind. + He that sweetest rose will find + Must find love's prick and Rosalind. + This is the very false gallop of verses: why do you + infect yourself with them? + +ROSALIND Peace, you dull fool! I found them on a tree. + +TOUCHSTONE Truly, the tree yields bad fruit. + +ROSALIND I'll graff it with you, and then I shall graff it + with a medlar: then it will be the earliest fruit + i' the country; for you'll be rotten ere you be half + ripe, and that's the right virtue of the medlar. + +TOUCHSTONE You have said; but whether wisely or no, let the + forest judge. + + [Enter CELIA, with a writing] + +ROSALIND Peace! Here comes my sister, reading: stand aside. + +CELIA [Reads] + + Why should this a desert be? + For it is unpeopled? No: + Tongues I'll hang on every tree, + That shall civil sayings show: + Some, how brief the life of man + Runs his erring pilgrimage, + That the stretching of a span + Buckles in his sum of age; + Some, of violated vows + 'Twixt the souls of friend and friend: + But upon the fairest boughs, + Or at every sentence end, + Will I Rosalinda write, + Teaching all that read to know + The quintessence of every sprite + Heaven would in little show. + Therefore Heaven Nature charged + That one body should be fill'd + With all graces wide-enlarged: + Nature presently distill'd + Helen's cheek, but not her heart, + Cleopatra's majesty, + Atalanta's better part, + Sad Lucretia's modesty. + Thus Rosalind of many parts + By heavenly synod was devised, + Of many faces, eyes and hearts, + To have the touches dearest prized. + Heaven would that she these gifts should have, + And I to live and die her slave. + +ROSALIND O most gentle pulpiter! what tedious homily of love + have you wearied your parishioners withal, and never + cried 'Have patience, good people!' + +CELIA How now! back, friends! Shepherd, go off a little. + Go with him, sirrah. + +TOUCHSTONE Come, shepherd, let us make an honourable retreat; + though not with bag and baggage, yet with scrip and scrippage. + + [Exeunt CORIN and TOUCHSTONE] + +CELIA Didst thou hear these verses? + +ROSALIND O, yes, I heard them all, and more too; for some of + them had in them more feet than the verses would bear. + +CELIA That's no matter: the feet might bear the verses. + +ROSALIND Ay, but the feet were lame and could not bear + themselves without the verse and therefore stood + lamely in the verse. + +CELIA But didst thou hear without wondering how thy name + should be hanged and carved upon these trees? + +ROSALIND I was seven of the nine days out of the wonder + before you came; for look here what I found on a + palm-tree. I was never so be-rhymed since + Pythagoras' time, that I was an Irish rat, which I + can hardly remember. + +CELIA Trow you who hath done this? + +ROSALIND Is it a man? + +CELIA And a chain, that you once wore, about his neck. + Change you colour? + +ROSALIND I prithee, who? + +CELIA O Lord, Lord! it is a hard matter for friends to + meet; but mountains may be removed with earthquakes + and so encounter. + +ROSALIND Nay, but who is it? + +CELIA Is it possible? + +ROSALIND Nay, I prithee now with most petitionary vehemence, + tell me who it is. + +CELIA O wonderful, wonderful, and most wonderful + wonderful! and yet again wonderful, and after that, + out of all hooping! + +ROSALIND Good my complexion! dost thou think, though I am + caparisoned like a man, I have a doublet and hose in + my disposition? One inch of delay more is a + South-sea of discovery; I prithee, tell me who is it + quickly, and speak apace. I would thou couldst + stammer, that thou mightst pour this concealed man + out of thy mouth, as wine comes out of a narrow- + mouthed bottle, either too much at once, or none at + all. I prithee, take the cork out of thy mouth that + may drink thy tidings. + +CELIA So you may put a man in your belly. + +ROSALIND Is he of God's making? What manner of man? Is his + head worth a hat, or his chin worth a beard? + +CELIA Nay, he hath but a little beard. + +ROSALIND Why, God will send more, if the man will be + thankful: let me stay the growth of his beard, if + thou delay me not the knowledge of his chin. + +CELIA It is young Orlando, that tripped up the wrestler's + heels and your heart both in an instant. + +ROSALIND Nay, but the devil take mocking: speak, sad brow and + true maid. + +CELIA I' faith, coz, 'tis he. + +ROSALIND Orlando? + +CELIA Orlando. + +ROSALIND Alas the day! what shall I do with my doublet and + hose? What did he when thou sawest him? What said + he? How looked he? Wherein went he? What makes + him here? Did he ask for me? Where remains he? + How parted he with thee? and when shalt thou see + him again? Answer me in one word. + +CELIA You must borrow me Gargantua's mouth first: 'tis a + word too great for any mouth of this age's size. To + say ay and no to these particulars is more than to + answer in a catechism. + +ROSALIND But doth he know that I am in this forest and in + man's apparel? Looks he as freshly as he did the + day he wrestled? + +CELIA It is as easy to count atomies as to resolve the + propositions of a lover; but take a taste of my + finding him, and relish it with good observance. + I found him under a tree, like a dropped acorn. + +ROSALIND It may well be called Jove's tree, when it drops + forth such fruit. + +CELIA Give me audience, good madam. + +ROSALIND Proceed. + +CELIA There lay he, stretched along, like a wounded knight. + +ROSALIND Though it be pity to see such a sight, it well + becomes the ground. + +CELIA Cry 'holla' to thy tongue, I prithee; it curvets + unseasonably. He was furnished like a hunter. + +ROSALIND O, ominous! he comes to kill my heart. + +CELIA I would sing my song without a burden: thou bringest + me out of tune. + +ROSALIND Do you not know I am a woman? when I think, I must + speak. Sweet, say on. + +CELIA You bring me out. Soft! comes he not here? + + [Enter ORLANDO and JAQUES] + +ROSALIND 'Tis he: slink by, and note him. + +JAQUES I thank you for your company; but, good faith, I had + as lief have been myself alone. + +ORLANDO And so had I; but yet, for fashion sake, I thank you + too for your society. + +JAQUES God be wi' you: let's meet as little as we can. + +ORLANDO I do desire we may be better strangers. + +JAQUES I pray you, mar no more trees with writing + love-songs in their barks. + +ORLANDO I pray you, mar no more of my verses with reading + them ill-favouredly. + +JAQUES Rosalind is your love's name? + +ORLANDO Yes, just. + +JAQUES I do not like her name. + +ORLANDO There was no thought of pleasing you when she was + christened. + +JAQUES What stature is she of? + +ORLANDO Just as high as my heart. + +JAQUES You are full of pretty answers. Have you not been + acquainted with goldsmiths' wives, and conned them + out of rings? + +ORLANDO Not so; but I answer you right painted cloth, from + whence you have studied your questions. + +JAQUES You have a nimble wit: I think 'twas made of + Atalanta's heels. Will you sit down with me? and + we two will rail against our mistress the world and + all our misery. + +ORLANDO I will chide no breather in the world but myself, + against whom I know most faults. + +JAQUES The worst fault you have is to be in love. + +ORLANDO 'Tis a fault I will not change for your best virtue. + I am weary of you. + +JAQUES By my troth, I was seeking for a fool when I found + you. + +ORLANDO He is drowned in the brook: look but in, and you + shall see him. + +JAQUES There I shall see mine own figure. + +ORLANDO Which I take to be either a fool or a cipher. + +JAQUES I'll tarry no longer with you: farewell, good + Signior Love. + +ORLANDO I am glad of your departure: adieu, good Monsieur + Melancholy. + + [Exit JAQUES] + +ROSALIND [Aside to CELIA] I will speak to him, like a saucy + lackey and under that habit play the knave with him. + Do you hear, forester? + +ORLANDO Very well: what would you? + +ROSALIND I pray you, what is't o'clock? + +ORLANDO You should ask me what time o' day: there's no clock + in the forest. + +ROSALIND Then there is no true lover in the forest; else + sighing every minute and groaning every hour would + detect the lazy foot of Time as well as a clock. + +ORLANDO And why not the swift foot of Time? had not that + been as proper? + +ROSALIND By no means, sir: Time travels in divers paces with + divers persons. I'll tell you who Time ambles + withal, who Time trots withal, who Time gallops + withal and who he stands still withal. + +ORLANDO I prithee, who doth he trot withal? + +ROSALIND Marry, he trots hard with a young maid between the + contract of her marriage and the day it is + solemnized: if the interim be but a se'nnight, + Time's pace is so hard that it seems the length of + seven year. + +ORLANDO Who ambles Time withal? + +ROSALIND With a priest that lacks Latin and a rich man that + hath not the gout, for the one sleeps easily because + he cannot study, and the other lives merrily because + he feels no pain, the one lacking the burden of lean + and wasteful learning, the other knowing no burden + of heavy tedious penury; these Time ambles withal. + +ORLANDO Who doth he gallop withal? + +ROSALIND With a thief to the gallows, for though he go as + softly as foot can fall, he thinks himself too soon there. + +ORLANDO Who stays it still withal? + +ROSALIND With lawyers in the vacation, for they sleep between + term and term and then they perceive not how Time moves. + +ORLANDO Where dwell you, pretty youth? + +ROSALIND With this shepherdess, my sister; here in the + skirts of the forest, like fringe upon a petticoat. + +ORLANDO Are you native of this place? + +ROSALIND As the cony that you see dwell where she is kindled. + +ORLANDO Your accent is something finer than you could + purchase in so removed a dwelling. + +ROSALIND I have been told so of many: but indeed an old + religious uncle of mine taught me to speak, who was + in his youth an inland man; one that knew courtship + too well, for there he fell in love. I have heard + him read many lectures against it, and I thank God + I am not a woman, to be touched with so many + giddy offences as he hath generally taxed their + whole sex withal. + +ORLANDO Can you remember any of the principal evils that he + laid to the charge of women? + +ROSALIND There were none principal; they were all like one + another as half-pence are, every one fault seeming + monstrous till his fellow fault came to match it. + +ORLANDO I prithee, recount some of them. + +ROSALIND No, I will not cast away my physic but on those that + are sick. There is a man haunts the forest, that + abuses our young plants with carving 'Rosalind' on + their barks; hangs odes upon hawthorns and elegies + on brambles, all, forsooth, deifying the name of + Rosalind: if I could meet that fancy-monger I would + give him some good counsel, for he seems to have the + quotidian of love upon him. + +ORLANDO I am he that is so love-shaked: I pray you tell me + your remedy. + +ROSALIND There is none of my uncle's marks upon you: he + taught me how to know a man in love; in which cage + of rushes I am sure you are not prisoner. + +ORLANDO What were his marks? + +ROSALIND A lean cheek, which you have not, a blue eye and + sunken, which you have not, an unquestionable + spirit, which you have not, a beard neglected, + which you have not; but I pardon you for that, for + simply your having in beard is a younger brother's + revenue: then your hose should be ungartered, your + bonnet unbanded, your sleeve unbuttoned, your shoe + untied and every thing about you demonstrating a + careless desolation; but you are no such man; you + are rather point-device in your accoutrements as + loving yourself than seeming the lover of any other. + +ORLANDO Fair youth, I would I could make thee believe I love. + +ROSALIND Me believe it! you may as soon make her that you + love believe it; which, I warrant, she is apter to + do than to confess she does: that is one of the + points in the which women still give the lie to + their consciences. But, in good sooth, are you he + that hangs the verses on the trees, wherein Rosalind + is so admired? + +ORLANDO I swear to thee, youth, by the white hand of + Rosalind, I am that he, that unfortunate he. + +ROSALIND But are you so much in love as your rhymes speak? + +ORLANDO Neither rhyme nor reason can express how much. + +ROSALIND Love is merely a madness, and, I tell you, deserves + as well a dark house and a whip as madmen do: and + the reason why they are not so punished and cured + is, that the lunacy is so ordinary that the whippers + are in love too. Yet I profess curing it by counsel. + +ORLANDO Did you ever cure any so? + +ROSALIND Yes, one, and in this manner. He was to imagine me + his love, his mistress; and I set him every day to + woo me: at which time would I, being but a moonish + youth, grieve, be effeminate, changeable, longing + and liking, proud, fantastical, apish, shallow, + inconstant, full of tears, full of smiles, for every + passion something and for no passion truly any + thing, as boys and women are for the most part + cattle of this colour; would now like him, now loathe + him; then entertain him, then forswear him; now weep + for him, then spit at him; that I drave my suitor + from his mad humour of love to a living humour of + madness; which was, to forswear the full stream of + the world, and to live in a nook merely monastic. + And thus I cured him; and this way will I take upon + me to wash your liver as clean as a sound sheep's + heart, that there shall not be one spot of love in't. + +ORLANDO I would not be cured, youth. + +ROSALIND I would cure you, if you would but call me Rosalind + and come every day to my cote and woo me. + +ORLANDO Now, by the faith of my love, I will: tell me + where it is. + +ROSALIND Go with me to it and I'll show it you and by the way + you shall tell me where in the forest you live. + Will you go? + +ORLANDO With all my heart, good youth. + +ROSALIND Nay you must call me Rosalind. Come, sister, will you go? + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT III + + + +SCENE III The forest. + + + [Enter TOUCHSTONE and AUDREY; JAQUES behind] + +TOUCHSTONE Come apace, good Audrey: I will fetch up your + goats, Audrey. And how, Audrey? am I the man yet? + doth my simple feature content you? + +AUDREY Your features! Lord warrant us! what features! + +TOUCHSTONE I am here with thee and thy goats, as the most + capricious poet, honest Ovid, was among the Goths. + +JAQUES [Aside] O knowledge ill-inhabited, worse than Jove + in a thatched house! + +TOUCHSTONE When a man's verses cannot be understood, nor a + man's good wit seconded with the forward child + Understanding, it strikes a man more dead than a + great reckoning in a little room. Truly, I would + the gods had made thee poetical. + +AUDREY I do not know what 'poetical' is: is it honest in + deed and word? is it a true thing? + +TOUCHSTONE No, truly; for the truest poetry is the most + feigning; and lovers are given to poetry, and what + they swear in poetry may be said as lovers they do feign. + +AUDREY Do you wish then that the gods had made me poetical? + +TOUCHSTONE I do, truly; for thou swearest to me thou art + honest: now, if thou wert a poet, I might have some + hope thou didst feign. + +AUDREY Would you not have me honest? + +TOUCHSTONE No, truly, unless thou wert hard-favoured; for + honesty coupled to beauty is to have honey a sauce to sugar. + +JAQUES [Aside] A material fool! + +AUDREY Well, I am not fair; and therefore I pray the gods + make me honest. + +TOUCHSTONE Truly, and to cast away honesty upon a foul slut + were to put good meat into an unclean dish. + +AUDREY I am not a slut, though I thank the gods I am foul. + +TOUCHSTONE Well, praised be the gods for thy foulness! + sluttishness may come hereafter. But be it as it may + be, I will marry thee, and to that end I have been + with Sir Oliver Martext, the vicar of the next + village, who hath promised to meet me in this place + of the forest and to couple us. + +JAQUES [Aside] I would fain see this meeting. + +AUDREY Well, the gods give us joy! + +TOUCHSTONE Amen. A man may, if he were of a fearful heart, + stagger in this attempt; for here we have no temple + but the wood, no assembly but horn-beasts. But what + though? Courage! As horns are odious, they are + necessary. It is said, 'many a man knows no end of + his goods:' right; many a man has good horns, and + knows no end of them. Well, that is the dowry of + his wife; 'tis none of his own getting. Horns? + Even so. Poor men alone? No, no; the noblest deer + hath them as huge as the rascal. Is the single man + therefore blessed? No: as a walled town is more + worthier than a village, so is the forehead of a + married man more honourable than the bare brow of a + bachelor; and by how much defence is better than no + skill, by so much is a horn more precious than to + want. Here comes Sir Oliver. + + [Enter SIR OLIVER MARTEXT] + + Sir Oliver Martext, you are well met: will you + dispatch us here under this tree, or shall we go + with you to your chapel? + +SIR OLIVER MARTEXT Is there none here to give the woman? + +TOUCHSTONE I will not take her on gift of any man. + +SIR OLIVER MARTEXT Truly, she must be given, or the marriage is not lawful. + +JAQUES [Advancing] + + Proceed, proceed I'll give her. + +TOUCHSTONE Good even, good Master What-ye-call't: how do you, + sir? You are very well met: God 'ild you for your + last company: I am very glad to see you: even a + toy in hand here, sir: nay, pray be covered. + +JAQUES Will you be married, motley? + +TOUCHSTONE As the ox hath his bow, sir, the horse his curb and + the falcon her bells, so man hath his desires; and + as pigeons bill, so wedlock would be nibbling. + +JAQUES And will you, being a man of your breeding, be + married under a bush like a beggar? Get you to + church, and have a good priest that can tell you + what marriage is: this fellow will but join you + together as they join wainscot; then one of you will + prove a shrunk panel and, like green timber, warp, warp. + +TOUCHSTONE [Aside] I am not in the mind but I were better to be + married of him than of another: for he is not like + to marry me well; and not being well married, it + will be a good excuse for me hereafter to leave my wife. + +JAQUES Go thou with me, and let me counsel thee. + +TOUCHSTONE 'Come, sweet Audrey: + We must be married, or we must live in bawdry. + Farewell, good Master Oliver: not,-- + O sweet Oliver, + O brave Oliver, + Leave me not behind thee: but,-- + Wind away, + Begone, I say, + I will not to wedding with thee. + + [Exeunt JAQUES, TOUCHSTONE and AUDREY] + +SIR OLIVER MARTEXT 'Tis no matter: ne'er a fantastical knave of them + all shall flout me out of my calling. + + [Exit] + + + + + AS YOU LIKE IT + + +ACT III + + + +SCENE IV The forest. + + + [Enter ROSALIND and CELIA] + +ROSALIND Never talk to me; I will weep. + +CELIA Do, I prithee; but yet have the grace to consider + that tears do not become a man. + +ROSALIND But have I not cause to weep? + +CELIA As good cause as one would desire; therefore weep. + +ROSALIND His very hair is of the dissembling colour. + +CELIA Something browner than Judas's marry, his kisses are + Judas's own children. + +ROSALIND I' faith, his hair is of a good colour. + +CELIA An excellent colour: your chestnut was ever the only colour. + +ROSALIND And his kissing is as full of sanctity as the touch + of holy bread. + +CELIA He hath bought a pair of cast lips of Diana: a nun + of winter's sisterhood kisses not more religiously; + the very ice of chastity is in them. + +ROSALIND But why did he swear he would come this morning, and + comes not? + +CELIA Nay, certainly, there is no truth in him. + +ROSALIND Do you think so? + +CELIA Yes; I think he is not a pick-purse nor a + horse-stealer, but for his verity in love, I do + think him as concave as a covered goblet or a + worm-eaten nut. + +ROSALIND Not true in love? + +CELIA Yes, when he is in; but I think he is not in. + +ROSALIND You have heard him swear downright he was. + +CELIA 'Was' is not 'is:' besides, the oath of a lover is + no stronger than the word of a tapster; they are + both the confirmer of false reckonings. He attends + here in the forest on the duke your father. + +ROSALIND I met the duke yesterday and had much question with + him: he asked me of what parentage I was; I told + him, of as good as he; so he laughed and let me go. + But what talk we of fathers, when there is such a + man as Orlando? + +CELIA O, that's a brave man! he writes brave verses, + speaks brave words, swears brave oaths and breaks + them bravely, quite traverse, athwart the heart of + his lover; as a puisny tilter, that spurs his horse + but on one side, breaks his staff like a noble + goose: but all's brave that youth mounts and folly + guides. Who comes here? + + [Enter CORIN] + +CORIN Mistress and master, you have oft inquired + After the shepherd that complain'd of love, + Who you saw sitting by me on the turf, + Praising the proud disdainful shepherdess + That was his mistress. + +CELIA Well, and what of him? + +CORIN If you will see a pageant truly play'd, + Between the pale complexion of true love + And the red glow of scorn and proud disdain, + Go hence a little and I shall conduct you, + If you will mark it. + +ROSALIND O, come, let us remove: + The sight of lovers feedeth those in love. + Bring us to this sight, and you shall say + I'll prove a busy actor in their play. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT III + + + +SCENE V Another part of the forest. + + + [Enter SILVIUS and PHEBE] + +SILVIUS Sweet Phebe, do not scorn me; do not, Phebe; + Say that you love me not, but say not so + In bitterness. The common executioner, + Whose heart the accustom'd sight of death makes hard, + Falls not the axe upon the humbled neck + But first begs pardon: will you sterner be + Than he that dies and lives by bloody drops? + + [Enter ROSALIND, CELIA, and CORIN, behind] + +PHEBE I would not be thy executioner: + I fly thee, for I would not injure thee. + Thou tell'st me there is murder in mine eye: + 'Tis pretty, sure, and very probable, + That eyes, that are the frail'st and softest things, + Who shut their coward gates on atomies, + Should be call'd tyrants, butchers, murderers! + Now I do frown on thee with all my heart; + And if mine eyes can wound, now let them kill thee: + Now counterfeit to swoon; why now fall down; + Or if thou canst not, O, for shame, for shame, + Lie not, to say mine eyes are murderers! + Now show the wound mine eye hath made in thee: + Scratch thee but with a pin, and there remains + Some scar of it; lean but upon a rush, + The cicatrice and capable impressure + Thy palm some moment keeps; but now mine eyes, + Which I have darted at thee, hurt thee not, + Nor, I am sure, there is no force in eyes + That can do hurt. + +SILVIUS O dear Phebe, + If ever,--as that ever may be near,-- + You meet in some fresh cheek the power of fancy, + Then shall you know the wounds invisible + That love's keen arrows make. + +PHEBE But till that time + Come not thou near me: and when that time comes, + Afflict me with thy mocks, pity me not; + As till that time I shall not pity thee. + +ROSALIND And why, I pray you? Who might be your mother, + That you insult, exult, and all at once, + Over the wretched? What though you have no beauty,-- + As, by my faith, I see no more in you + Than without candle may go dark to bed-- + Must you be therefore proud and pitiless? + Why, what means this? Why do you look on me? + I see no more in you than in the ordinary + Of nature's sale-work. 'Od's my little life, + I think she means to tangle my eyes too! + No, faith, proud mistress, hope not after it: + 'Tis not your inky brows, your black silk hair, + Your bugle eyeballs, nor your cheek of cream, + That can entame my spirits to your worship. + You foolish shepherd, wherefore do you follow her, + Like foggy south puffing with wind and rain? + You are a thousand times a properer man + Than she a woman: 'tis such fools as you + That makes the world full of ill-favour'd children: + 'Tis not her glass, but you, that flatters her; + And out of you she sees herself more proper + Than any of her lineaments can show her. + But, mistress, know yourself: down on your knees, + And thank heaven, fasting, for a good man's love: + For I must tell you friendly in your ear, + Sell when you can: you are not for all markets: + Cry the man mercy; love him; take his offer: + Foul is most foul, being foul to be a scoffer. + So take her to thee, shepherd: fare you well. + +PHEBE Sweet youth, I pray you, chide a year together: + I had rather hear you chide than this man woo. + +ROSALIND He's fallen in love with your foulness and she'll + fall in love with my anger. If it be so, as fast as + she answers thee with frowning looks, I'll sauce her + with bitter words. Why look you so upon me? + +PHEBE For no ill will I bear you. + +ROSALIND I pray you, do not fall in love with me, + For I am falser than vows made in wine: + Besides, I like you not. If you will know my house, + 'Tis at the tuft of olives here hard by. + Will you go, sister? Shepherd, ply her hard. + Come, sister. Shepherdess, look on him better, + And be not proud: though all the world could see, + None could be so abused in sight as he. + Come, to our flock. + + [Exeunt ROSALIND, CELIA and CORIN] + +PHEBE Dead Shepherd, now I find thy saw of might, + 'Who ever loved that loved not at first sight?' + +SILVIUS Sweet Phebe,-- + +PHEBE Ha, what say'st thou, Silvius? + +SILVIUS Sweet Phebe, pity me. + +PHEBE Why, I am sorry for thee, gentle Silvius. + +SILVIUS Wherever sorrow is, relief would be: + If you do sorrow at my grief in love, + By giving love your sorrow and my grief + Were both extermined. + +PHEBE Thou hast my love: is not that neighbourly? + +SILVIUS I would have you. + +PHEBE Why, that were covetousness. + Silvius, the time was that I hated thee, + And yet it is not that I bear thee love; + But since that thou canst talk of love so well, + Thy company, which erst was irksome to me, + I will endure, and I'll employ thee too: + But do not look for further recompense + Than thine own gladness that thou art employ'd. + +SILVIUS So holy and so perfect is my love, + And I in such a poverty of grace, + That I shall think it a most plenteous crop + To glean the broken ears after the man + That the main harvest reaps: loose now and then + A scatter'd smile, and that I'll live upon. + +PHEBE Know'st now the youth that spoke to me erewhile? + +SILVIUS Not very well, but I have met him oft; + And he hath bought the cottage and the bounds + That the old carlot once was master of. + +PHEBE Think not I love him, though I ask for him: + 'Tis but a peevish boy; yet he talks well; + But what care I for words? yet words do well + When he that speaks them pleases those that hear. + It is a pretty youth: not very pretty: + But, sure, he's proud, and yet his pride becomes him: + He'll make a proper man: the best thing in him + Is his complexion; and faster than his tongue + Did make offence his eye did heal it up. + He is not very tall; yet for his years he's tall: + His leg is but so so; and yet 'tis well: + There was a pretty redness in his lip, + A little riper and more lusty red + Than that mix'd in his cheek; 'twas just the difference + Between the constant red and mingled damask. + There be some women, Silvius, had they mark'd him + In parcels as I did, would have gone near + To fall in love with him; but, for my part, + I love him not nor hate him not; and yet + I have more cause to hate him than to love him: + For what had he to do to chide at me? + He said mine eyes were black and my hair black: + And, now I am remember'd, scorn'd at me: + I marvel why I answer'd not again: + But that's all one; omittance is no quittance. + I'll write to him a very taunting letter, + And thou shalt bear it: wilt thou, Silvius? + +SILVIUS Phebe, with all my heart. + +PHEBE I'll write it straight; + The matter's in my head and in my heart: + I will be bitter with him and passing short. + Go with me, Silvius. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT IV + + + +SCENE I The forest. + + + [Enter ROSALIND, CELIA, and JAQUES] + +JAQUES I prithee, pretty youth, let me be better acquainted + with thee. + +ROSALIND They say you are a melancholy fellow. + +JAQUES I am so; I do love it better than laughing. + +ROSALIND Those that are in extremity of either are abominable + fellows and betray themselves to every modern + censure worse than drunkards. + +JAQUES Why, 'tis good to be sad and say nothing. + +ROSALIND Why then, 'tis good to be a post. + +JAQUES I have neither the scholar's melancholy, which is + emulation, nor the musician's, which is fantastical, + nor the courtier's, which is proud, nor the + soldier's, which is ambitious, nor the lawyer's, + which is politic, nor the lady's, which is nice, nor + the lover's, which is all these: but it is a + melancholy of mine own, compounded of many simples, + extracted from many objects, and indeed the sundry's + contemplation of my travels, in which my often + rumination wraps me m a most humorous sadness. + +ROSALIND A traveller! By my faith, you have great reason to + be sad: I fear you have sold your own lands to see + other men's; then, to have seen much and to have + nothing, is to have rich eyes and poor hands. + +JAQUES Yes, I have gained my experience. + +ROSALIND And your experience makes you sad: I had rather have + a fool to make me merry than experience to make me + sad; and to travel for it too! + + [Enter ORLANDO] + +ORLANDO Good day and happiness, dear Rosalind! + +JAQUES Nay, then, God be wi' you, an you talk in blank verse. + + [Exit] + +ROSALIND Farewell, Monsieur Traveller: look you lisp and + wear strange suits, disable all the benefits of your + own country, be out of love with your nativity and + almost chide God for making you that countenance you + are, or I will scarce think you have swam in a + gondola. Why, how now, Orlando! where have you been + all this while? You a lover! An you serve me such + another trick, never come in my sight more. + +ORLANDO My fair Rosalind, I come within an hour of my promise. + +ROSALIND Break an hour's promise in love! He that will + divide a minute into a thousand parts and break but + a part of the thousandth part of a minute in the + affairs of love, it may be said of him that Cupid + hath clapped him o' the shoulder, but I'll warrant + him heart-whole. + +ORLANDO Pardon me, dear Rosalind. + +ROSALIND Nay, an you be so tardy, come no more in my sight: I + had as lief be wooed of a snail. + +ORLANDO Of a snail? + +ROSALIND Ay, of a snail; for though he comes slowly, he + carries his house on his head; a better jointure, + I think, than you make a woman: besides he brings + his destiny with him. + +ORLANDO What's that? + +ROSALIND Why, horns, which such as you are fain to be + beholding to your wives for: but he comes armed in + his fortune and prevents the slander of his wife. + +ORLANDO Virtue is no horn-maker; and my Rosalind is virtuous. + +ROSALIND And I am your Rosalind. + +CELIA It pleases him to call you so; but he hath a + Rosalind of a better leer than you. + +ROSALIND Come, woo me, woo me, for now I am in a holiday + humour and like enough to consent. What would you + say to me now, an I were your very very Rosalind? + +ORLANDO I would kiss before I spoke. + +ROSALIND Nay, you were better speak first, and when you were + gravelled for lack of matter, you might take + occasion to kiss. Very good orators, when they are + out, they will spit; and for lovers lacking--God + warn us!--matter, the cleanliest shift is to kiss. + +ORLANDO How if the kiss be denied? + +ROSALIND Then she puts you to entreaty, and there begins new matter. + +ORLANDO Who could be out, being before his beloved mistress? + +ROSALIND Marry, that should you, if I were your mistress, or + I should think my honesty ranker than my wit. + +ORLANDO What, of my suit? + +ROSALIND Not out of your apparel, and yet out of your suit. + Am not I your Rosalind? + +ORLANDO I take some joy to say you are, because I would be + talking of her. + +ROSALIND Well in her person I say I will not have you. + +ORLANDO Then in mine own person I die. + +ROSALIND No, faith, die by attorney. The poor world is + almost six thousand years old, and in all this time + there was not any man died in his own person, + videlicit, in a love-cause. Troilus had his brains + dashed out with a Grecian club; yet he did what he + could to die before, and he is one of the patterns + of love. Leander, he would have lived many a fair + year, though Hero had turned nun, if it had not been + for a hot midsummer night; for, good youth, he went + but forth to wash him in the Hellespont and being + taken with the cramp was drowned and the foolish + coroners of that age found it was 'Hero of Sestos.' + But these are all lies: men have died from time to + time and worms have eaten them, but not for love. + +ORLANDO I would not have my right Rosalind of this mind, + for, I protest, her frown might kill me. + +ROSALIND By this hand, it will not kill a fly. But come, now + I will be your Rosalind in a more coming-on + disposition, and ask me what you will. I will grant + it. + +ORLANDO Then love me, Rosalind. + +ROSALIND Yes, faith, will I, Fridays and Saturdays and all. + +ORLANDO And wilt thou have me? + +ROSALIND Ay, and twenty such. + +ORLANDO What sayest thou? + +ROSALIND Are you not good? + +ORLANDO I hope so. + +ROSALIND Why then, can one desire too much of a good thing? + Come, sister, you shall be the priest and marry us. + Give me your hand, Orlando. What do you say, sister? + +ORLANDO Pray thee, marry us. + +CELIA I cannot say the words. + +ROSALIND You must begin, 'Will you, Orlando--' + +CELIA Go to. Will you, Orlando, have to wife this Rosalind? + +ORLANDO I will. + +ROSALIND Ay, but when? + +ORLANDO Why now; as fast as she can marry us. + +ROSALIND Then you must say 'I take thee, Rosalind, for wife.' + +ORLANDO I take thee, Rosalind, for wife. + +ROSALIND I might ask you for your commission; but I do take + thee, Orlando, for my husband: there's a girl goes + before the priest; and certainly a woman's thought + runs before her actions. + +ORLANDO So do all thoughts; they are winged. + +ROSALIND Now tell me how long you would have her after you + have possessed her. + +ORLANDO For ever and a day. + +ROSALIND Say 'a day,' without the 'ever.' No, no, Orlando; + men are April when they woo, December when they wed: + maids are May when they are maids, but the sky + changes when they are wives. I will be more jealous + of thee than a Barbary cock-pigeon over his hen, + more clamorous than a parrot against rain, more + new-fangled than an ape, more giddy in my desires + than a monkey: I will weep for nothing, like Diana + in the fountain, and I will do that when you are + disposed to be merry; I will laugh like a hyen, and + that when thou art inclined to sleep. + +ORLANDO But will my Rosalind do so? + +ROSALIND By my life, she will do as I do. + +ORLANDO O, but she is wise. + +ROSALIND Or else she could not have the wit to do this: the + wiser, the waywarder: make the doors upon a woman's + wit and it will out at the casement; shut that and + 'twill out at the key-hole; stop that, 'twill fly + with the smoke out at the chimney. + +ORLANDO A man that had a wife with such a wit, he might say + 'Wit, whither wilt?' + +ROSALIND Nay, you might keep that cheque for it till you met + your wife's wit going to your neighbour's bed. + +ORLANDO And what wit could wit have to excuse that? + +ROSALIND Marry, to say she came to seek you there. You shall + never take her without her answer, unless you take + her without her tongue. O, that woman that cannot + make her fault her husband's occasion, let her + never nurse her child herself, for she will breed + it like a fool! + +ORLANDO For these two hours, Rosalind, I will leave thee. + +ROSALIND Alas! dear love, I cannot lack thee two hours. + +ORLANDO I must attend the duke at dinner: by two o'clock I + will be with thee again. + +ROSALIND Ay, go your ways, go your ways; I knew what you + would prove: my friends told me as much, and I + thought no less: that flattering tongue of yours + won me: 'tis but one cast away, and so, come, + death! Two o'clock is your hour? + +ORLANDO Ay, sweet Rosalind. + +ROSALIND By my troth, and in good earnest, and so God mend + me, and by all pretty oaths that are not dangerous, + if you break one jot of your promise or come one + minute behind your hour, I will think you the most + pathetical break-promise and the most hollow lover + and the most unworthy of her you call Rosalind that + may be chosen out of the gross band of the + unfaithful: therefore beware my censure and keep + your promise. + +ORLANDO With no less religion than if thou wert indeed my + Rosalind: so adieu. + +ROSALIND Well, Time is the old justice that examines all such + offenders, and let Time try: adieu. + + [Exit ORLANDO] + +CELIA You have simply misused our sex in your love-prate: + we must have your doublet and hose plucked over your + head, and show the world what the bird hath done to + her own nest. + +ROSALIND O coz, coz, coz, my pretty little coz, that thou + didst know how many fathom deep I am in love! But + it cannot be sounded: my affection hath an unknown + bottom, like the bay of Portugal. + +CELIA Or rather, bottomless, that as fast as you pour + affection in, it runs out. + +ROSALIND No, that same wicked bastard of Venus that was begot + of thought, conceived of spleen and born of madness, + that blind rascally boy that abuses every one's eyes + because his own are out, let him be judge how deep I + am in love. I'll tell thee, Aliena, I cannot be out + of the sight of Orlando: I'll go find a shadow and + sigh till he come. + +CELIA And I'll sleep. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT IV + + + +SCENE II The forest. + + + [Enter JAQUES, Lords, and Foresters] + +JAQUES Which is he that killed the deer? + +A Lord Sir, it was I. + +JAQUES Let's present him to the duke, like a Roman + conqueror; and it would do well to set the deer's + horns upon his head, for a branch of victory. Have + you no song, forester, for this purpose? + +Forester Yes, sir. + +JAQUES Sing it: 'tis no matter how it be in tune, so it + make noise enough. + + SONG. +Forester What shall he have that kill'd the deer? + His leather skin and horns to wear. + Then sing him home; + + [The rest shall bear this burden] + + Take thou no scorn to wear the horn; + It was a crest ere thou wast born: + Thy father's father wore it, + And thy father bore it: + The horn, the horn, the lusty horn + Is not a thing to laugh to scorn. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT IV + + + +SCENE III The forest. + + + [Enter ROSALIND and CELIA] + +ROSALIND How say you now? Is it not past two o'clock? and + here much Orlando! + +CELIA I warrant you, with pure love and troubled brain, he + hath ta'en his bow and arrows and is gone forth to + sleep. Look, who comes here. + + [Enter SILVIUS] + +SILVIUS My errand is to you, fair youth; + My gentle Phebe bid me give you this: + I know not the contents; but, as I guess + By the stern brow and waspish action + Which she did use as she was writing of it, + It bears an angry tenor: pardon me: + I am but as a guiltless messenger. + +ROSALIND Patience herself would startle at this letter + And play the swaggerer; bear this, bear all: + She says I am not fair, that I lack manners; + She calls me proud, and that she could not love me, + Were man as rare as phoenix. 'Od's my will! + Her love is not the hare that I do hunt: + Why writes she so to me? Well, shepherd, well, + This is a letter of your own device. + +SILVIUS No, I protest, I know not the contents: + Phebe did write it. + +ROSALIND Come, come, you are a fool + And turn'd into the extremity of love. + I saw her hand: she has a leathern hand. + A freestone-colour'd hand; I verily did think + That her old gloves were on, but 'twas her hands: + She has a huswife's hand; but that's no matter: + I say she never did invent this letter; + This is a man's invention and his hand. + +SILVIUS Sure, it is hers. + +ROSALIND Why, 'tis a boisterous and a cruel style. + A style for-challengers; why, she defies me, + Like Turk to Christian: women's gentle brain + Could not drop forth such giant-rude invention + Such Ethiope words, blacker in their effect + Than in their countenance. Will you hear the letter? + +SILVIUS So please you, for I never heard it yet; + Yet heard too much of Phebe's cruelty. + +ROSALIND She Phebes me: mark how the tyrant writes. + + [Reads] + + Art thou god to shepherd turn'd, + That a maiden's heart hath burn'd? + Can a woman rail thus? + +SILVIUS Call you this railing? + +ROSALIND [Reads] + + Why, thy godhead laid apart, + Warr'st thou with a woman's heart? + Did you ever hear such railing? + Whiles the eye of man did woo me, + That could do no vengeance to me. + Meaning me a beast. + If the scorn of your bright eyne + Have power to raise such love in mine, + Alack, in me what strange effect + Would they work in mild aspect! + Whiles you chid me, I did love; + How then might your prayers move! + He that brings this love to thee + Little knows this love in me: + And by him seal up thy mind; + Whether that thy youth and kind + Will the faithful offer take + Of me and all that I can make; + Or else by him my love deny, + And then I'll study how to die. + +SILVIUS Call you this chiding? + +CELIA Alas, poor shepherd! + +ROSALIND Do you pity him? no, he deserves no pity. Wilt + thou love such a woman? What, to make thee an + instrument and play false strains upon thee! not to + be endured! Well, go your way to her, for I see + love hath made thee a tame snake, and say this to + her: that if she love me, I charge her to love + thee; if she will not, I will never have her unless + thou entreat for her. If you be a true lover, + hence, and not a word; for here comes more company. + + [Exit SILVIUS] + + [Enter OLIVER] + +OLIVER Good morrow, fair ones: pray you, if you know, + Where in the purlieus of this forest stands + A sheep-cote fenced about with olive trees? + +CELIA West of this place, down in the neighbour bottom: + The rank of osiers by the murmuring stream + Left on your right hand brings you to the place. + But at this hour the house doth keep itself; + There's none within. + +OLIVER If that an eye may profit by a tongue, + Then should I know you by description; + Such garments and such years: 'The boy is fair, + Of female favour, and bestows himself + Like a ripe sister: the woman low + And browner than her brother.' Are not you + The owner of the house I did inquire for? + +CELIA It is no boast, being ask'd, to say we are. + +OLIVER Orlando doth commend him to you both, + And to that youth he calls his Rosalind + He sends this bloody napkin. Are you he? + +ROSALIND I am: what must we understand by this? + +OLIVER Some of my shame; if you will know of me + What man I am, and how, and why, and where + This handkercher was stain'd. + +CELIA I pray you, tell it. + +OLIVER When last the young Orlando parted from you + He left a promise to return again + Within an hour, and pacing through the forest, + Chewing the food of sweet and bitter fancy, + Lo, what befell! he threw his eye aside, + And mark what object did present itself: + Under an oak, whose boughs were moss'd with age + And high top bald with dry antiquity, + A wretched ragged man, o'ergrown with hair, + Lay sleeping on his back: about his neck + A green and gilded snake had wreathed itself, + Who with her head nimble in threats approach'd + The opening of his mouth; but suddenly, + Seeing Orlando, it unlink'd itself, + And with indented glides did slip away + Into a bush: under which bush's shade + A lioness, with udders all drawn dry, + Lay couching, head on ground, with catlike watch, + When that the sleeping man should stir; for 'tis + The royal disposition of that beast + To prey on nothing that doth seem as dead: + This seen, Orlando did approach the man + And found it was his brother, his elder brother. + +CELIA O, I have heard him speak of that same brother; + And he did render him the most unnatural + That lived amongst men. + +OLIVER And well he might so do, + For well I know he was unnatural. + +ROSALIND But, to Orlando: did he leave him there, + Food to the suck'd and hungry lioness? + +OLIVER Twice did he turn his back and purposed so; + But kindness, nobler ever than revenge, + And nature, stronger than his just occasion, + Made him give battle to the lioness, + Who quickly fell before him: in which hurtling + From miserable slumber I awaked. + +CELIA Are you his brother? + +ROSALIND Wast you he rescued? + +CELIA Was't you that did so oft contrive to kill him? + +OLIVER 'Twas I; but 'tis not I I do not shame + To tell you what I was, since my conversion + So sweetly tastes, being the thing I am. + +ROSALIND But, for the bloody napkin? + +OLIVER By and by. + When from the first to last betwixt us two + Tears our recountments had most kindly bathed, + As how I came into that desert place:-- + In brief, he led me to the gentle duke, + Who gave me fresh array and entertainment, + Committing me unto my brother's love; + Who led me instantly unto his cave, + There stripp'd himself, and here upon his arm + The lioness had torn some flesh away, + Which all this while had bled; and now he fainted + And cried, in fainting, upon Rosalind. + Brief, I recover'd him, bound up his wound; + And, after some small space, being strong at heart, + He sent me hither, stranger as I am, + To tell this story, that you might excuse + His broken promise, and to give this napkin + Dyed in his blood unto the shepherd youth + That he in sport doth call his Rosalind. + + [ROSALIND swoons] + +CELIA Why, how now, Ganymede! sweet Ganymede! + +OLIVER Many will swoon when they do look on blood. + +CELIA There is more in it. Cousin Ganymede! + +OLIVER Look, he recovers. + +ROSALIND I would I were at home. + +CELIA We'll lead you thither. + I pray you, will you take him by the arm? + +OLIVER Be of good cheer, youth: you a man! you lack a + man's heart. + +ROSALIND I do so, I confess it. Ah, sirrah, a body would + think this was well counterfeited! I pray you, tell + your brother how well I counterfeited. Heigh-ho! + +OLIVER This was not counterfeit: there is too great + testimony in your complexion that it was a passion + of earnest. + +ROSALIND Counterfeit, I assure you. + +OLIVER Well then, take a good heart and counterfeit to be a man. + +ROSALIND So I do: but, i' faith, I should have been a woman by right. + +CELIA Come, you look paler and paler: pray you, draw + homewards. Good sir, go with us. + +OLIVER That will I, for I must bear answer back + How you excuse my brother, Rosalind. + +ROSALIND I shall devise something: but, I pray you, commend + my counterfeiting to him. Will you go? + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT V + + + +SCENE I The forest. + + + [Enter TOUCHSTONE and AUDREY] + +TOUCHSTONE We shall find a time, Audrey; patience, gentle Audrey. + +AUDREY Faith, the priest was good enough, for all the old + gentleman's saying. + +TOUCHSTONE A most wicked Sir Oliver, Audrey, a most vile + Martext. But, Audrey, there is a youth here in the + forest lays claim to you. + +AUDREY Ay, I know who 'tis; he hath no interest in me in + the world: here comes the man you mean. + +TOUCHSTONE It is meat and drink to me to see a clown: by my + troth, we that have good wits have much to answer + for; we shall be flouting; we cannot hold. + + [Enter WILLIAM] + +WILLIAM Good even, Audrey. + +AUDREY God ye good even, William. + +WILLIAM And good even to you, sir. + +TOUCHSTONE Good even, gentle friend. Cover thy head, cover thy + head; nay, prithee, be covered. How old are you, friend? + +WILLIAM Five and twenty, sir. + +TOUCHSTONE A ripe age. Is thy name William? + +WILLIAM William, sir. + +TOUCHSTONE A fair name. Wast born i' the forest here? + +WILLIAM Ay, sir, I thank God. + +TOUCHSTONE 'Thank God;' a good answer. Art rich? + +WILLIAM Faith, sir, so so. + +TOUCHSTONE 'So so' is good, very good, very excellent good; and + yet it is not; it is but so so. Art thou wise? + +WILLIAM Ay, sir, I have a pretty wit. + +TOUCHSTONE Why, thou sayest well. I do now remember a saying, + 'The fool doth think he is wise, but the wise man + knows himself to be a fool.' The heathen + philosopher, when he had a desire to eat a grape, + would open his lips when he put it into his mouth; + meaning thereby that grapes were made to eat and + lips to open. You do love this maid? + +WILLIAM I do, sir. + +TOUCHSTONE Give me your hand. Art thou learned? + +WILLIAM No, sir. + +TOUCHSTONE Then learn this of me: to have, is to have; for it + is a figure in rhetoric that drink, being poured out + of a cup into a glass, by filling the one doth empty + the other; for all your writers do consent that ipse + is he: now, you are not ipse, for I am he. + +WILLIAM Which he, sir? + +TOUCHSTONE He, sir, that must marry this woman. Therefore, you + clown, abandon,--which is in the vulgar leave,--the + society,--which in the boorish is company,--of this + female,--which in the common is woman; which + together is, abandon the society of this female, or, + clown, thou perishest; or, to thy better + understanding, diest; or, to wit I kill thee, make + thee away, translate thy life into death, thy + liberty into bondage: I will deal in poison with + thee, or in bastinado, or in steel; I will bandy + with thee in faction; I will o'errun thee with + policy; I will kill thee a hundred and fifty ways: + therefore tremble and depart. + +AUDREY Do, good William. + +WILLIAM God rest you merry, sir. + + [Exit] + + [Enter CORIN] + +CORIN Our master and mistress seeks you; come, away, away! + +TOUCHSTONE Trip, Audrey! trip, Audrey! I attend, I attend. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT V + + + +SCENE II The forest. + + + [Enter ORLANDO and OLIVER] + +ORLANDO Is't possible that on so little acquaintance you + should like her? that but seeing you should love + her? and loving woo? and, wooing, she should + grant? and will you persever to enjoy her? + +OLIVER Neither call the giddiness of it in question, the + poverty of her, the small acquaintance, my sudden + wooing, nor her sudden consenting; but say with me, + I love Aliena; say with her that she loves me; + consent with both that we may enjoy each other: it + shall be to your good; for my father's house and all + the revenue that was old Sir Rowland's will I + estate upon you, and here live and die a shepherd. + +ORLANDO You have my consent. Let your wedding be to-morrow: + thither will I invite the duke and all's contented + followers. Go you and prepare Aliena; for look + you, here comes my Rosalind. + + [Enter ROSALIND] + +ROSALIND God save you, brother. + +OLIVER And you, fair sister. + + [Exit] + +ROSALIND O, my dear Orlando, how it grieves me to see thee + wear thy heart in a scarf! + +ORLANDO It is my arm. + +ROSALIND I thought thy heart had been wounded with the claws + of a lion. + +ORLANDO Wounded it is, but with the eyes of a lady. + +ROSALIND Did your brother tell you how I counterfeited to + swoon when he showed me your handkerchief? + +ORLANDO Ay, and greater wonders than that. + +ROSALIND O, I know where you are: nay, 'tis true: there was + never any thing so sudden but the fight of two rams + and Caesar's thrasonical brag of 'I came, saw, and + overcame:' for your brother and my sister no sooner + met but they looked, no sooner looked but they + loved, no sooner loved but they sighed, no sooner + sighed but they asked one another the reason, no + sooner knew the reason but they sought the remedy; + and in these degrees have they made a pair of stairs + to marriage which they will climb incontinent, or + else be incontinent before marriage: they are in + the very wrath of love and they will together; clubs + cannot part them. + +ORLANDO They shall be married to-morrow, and I will bid the + duke to the nuptial. But, O, how bitter a thing it + is to look into happiness through another man's + eyes! By so much the more shall I to-morrow be at + the height of heart-heaviness, by how much I shall + think my brother happy in having what he wishes for. + +ROSALIND Why then, to-morrow I cannot serve your turn for Rosalind? + +ORLANDO I can live no longer by thinking. + +ROSALIND I will weary you then no longer with idle talking. + Know of me then, for now I speak to some purpose, + that I know you are a gentleman of good conceit: I + speak not this that you should bear a good opinion + of my knowledge, insomuch I say I know you are; + neither do I labour for a greater esteem than may in + some little measure draw a belief from you, to do + yourself good and not to grace me. Believe then, if + you please, that I can do strange things: I have, + since I was three year old, conversed with a + magician, most profound in his art and yet not + damnable. If you do love Rosalind so near the heart + as your gesture cries it out, when your brother + marries Aliena, shall you marry her: I know into + what straits of fortune she is driven; and it is + not impossible to me, if it appear not inconvenient + to you, to set her before your eyes tomorrow human + as she is and without any danger. + +ORLANDO Speakest thou in sober meanings? + +ROSALIND By my life, I do; which I tender dearly, though I + say I am a magician. Therefore, put you in your + best array: bid your friends; for if you will be + married to-morrow, you shall, and to Rosalind, if you will. + + [Enter SILVIUS and PHEBE] + + Look, here comes a lover of mine and a lover of hers. + +PHEBE Youth, you have done me much ungentleness, + To show the letter that I writ to you. + +ROSALIND I care not if I have: it is my study + To seem despiteful and ungentle to you: + You are there followed by a faithful shepherd; + Look upon him, love him; he worships you. + +PHEBE Good shepherd, tell this youth what 'tis to love. + +SILVIUS It is to be all made of sighs and tears; + And so am I for Phebe. + +PHEBE And I for Ganymede. + +ORLANDO And I for Rosalind. + +ROSALIND And I for no woman. + +SILVIUS It is to be all made of faith and service; + And so am I for Phebe. + +PHEBE And I for Ganymede. + +ORLANDO And I for Rosalind. + +ROSALIND And I for no woman. + +SILVIUS It is to be all made of fantasy, + All made of passion and all made of wishes, + All adoration, duty, and observance, + All humbleness, all patience and impatience, + All purity, all trial, all observance; + And so am I for Phebe. + +PHEBE And so am I for Ganymede. + +ORLANDO And so am I for Rosalind. + +ROSALIND And so am I for no woman. + +PHEBE If this be so, why blame you me to love you? + +SILVIUS If this be so, why blame you me to love you? + +ORLANDO If this be so, why blame you me to love you? + +ROSALIND Who do you speak to, 'Why blame you me to love you?' + +ORLANDO To her that is not here, nor doth not hear. + +ROSALIND Pray you, no more of this; 'tis like the howling + of Irish wolves against the moon. + + [To SILVIUS] + + I will help you, if I can: + + [To PHEBE] + + I would love you, if I could. To-morrow meet me all together. + + [To PHEBE] + + I will marry you, if ever I marry woman, and I'll be + married to-morrow: + + [To ORLANDO] + + I will satisfy you, if ever I satisfied man, and you + shall be married to-morrow: + + [To SILVIUS] + + I will content you, if what pleases you contents + you, and you shall be married to-morrow. + + [To ORLANDO] + + As you love Rosalind, meet: + + [To SILVIUS] + + as you love Phebe, meet: and as I love no woman, + I'll meet. So fare you well: I have left you commands. + +SILVIUS I'll not fail, if I live. + +PHEBE Nor I. + +ORLANDO Nor I. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT V + + + +SCENE III The forest. + + + [Enter TOUCHSTONE and AUDREY] + +TOUCHSTONE To-morrow is the joyful day, Audrey; to-morrow will + we be married. + +AUDREY I do desire it with all my heart; and I hope it is + no dishonest desire to desire to be a woman of the + world. Here comes two of the banished duke's pages. + + [Enter two Pages] + +First Page Well met, honest gentleman. + +TOUCHSTONE By my troth, well met. Come, sit, sit, and a song. + +Second Page We are for you: sit i' the middle. + +First Page Shall we clap into't roundly, without hawking or + spitting or saying we are hoarse, which are the only + prologues to a bad voice? + +Second Page I'faith, i'faith; and both in a tune, like two + gipsies on a horse. + + SONG. + It was a lover and his lass, + With a hey, and a ho, and a hey nonino, + That o'er the green corn-field did pass + In the spring time, the only pretty ring time, + When birds do sing, hey ding a ding, ding: + Sweet lovers love the spring. + + Between the acres of the rye, + With a hey, and a ho, and a hey nonino + These pretty country folks would lie, + In spring time, &c. + + This carol they began that hour, + With a hey, and a ho, and a hey nonino, + How that a life was but a flower + In spring time, &c. + + And therefore take the present time, + With a hey, and a ho, and a hey nonino; + For love is crowned with the prime + In spring time, &c. + +TOUCHSTONE Truly, young gentlemen, though there was no great + matter in the ditty, yet the note was very + untuneable. + +First Page You are deceived, sir: we kept time, we lost not our time. + +TOUCHSTONE By my troth, yes; I count it but time lost to hear + such a foolish song. God be wi' you; and God mend + your voices! Come, Audrey. + + [Exeunt] + + + + + AS YOU LIKE IT + + +ACT V + + + +SCENE IV The forest. + + + [Enter DUKE SENIOR, AMIENS, JAQUES, ORLANDO, OLIVER, + and CELIA] + +DUKE SENIOR Dost thou believe, Orlando, that the boy + Can do all this that he hath promised? + +ORLANDO I sometimes do believe, and sometimes do not; + As those that fear they hope, and know they fear. + + [Enter ROSALIND, SILVIUS, and PHEBE] + +ROSALIND Patience once more, whiles our compact is urged: + You say, if I bring in your Rosalind, + You will bestow her on Orlando here? + +DUKE SENIOR That would I, had I kingdoms to give with her. + +ROSALIND And you say, you will have her, when I bring her? + +ORLANDO That would I, were I of all kingdoms king. + +ROSALIND You say, you'll marry me, if I be willing? + +PHEBE That will I, should I die the hour after. + +ROSALIND But if you do refuse to marry me, + You'll give yourself to this most faithful shepherd? + +PHEBE So is the bargain. + +ROSALIND You say, that you'll have Phebe, if she will? + +SILVIUS Though to have her and death were both one thing. + +ROSALIND I have promised to make all this matter even. + Keep you your word, O duke, to give your daughter; + You yours, Orlando, to receive his daughter: + Keep your word, Phebe, that you'll marry me, + Or else refusing me, to wed this shepherd: + Keep your word, Silvius, that you'll marry her. + If she refuse me: and from hence I go, + To make these doubts all even. + + [Exeunt ROSALIND and CELIA] + +DUKE SENIOR I do remember in this shepherd boy + Some lively touches of my daughter's favour. + +ORLANDO My lord, the first time that I ever saw him + Methought he was a brother to your daughter: + But, my good lord, this boy is forest-born, + And hath been tutor'd in the rudiments + Of many desperate studies by his uncle, + Whom he reports to be a great magician, + Obscured in the circle of this forest. + + [Enter TOUCHSTONE and AUDREY] + +JAQUES There is, sure, another flood toward, and these + couples are coming to the ark. Here comes a pair of + very strange beasts, which in all tongues are called fools. + +TOUCHSTONE Salutation and greeting to you all! + +JAQUES Good my lord, bid him welcome: this is the + motley-minded gentleman that I have so often met in + the forest: he hath been a courtier, he swears. + +TOUCHSTONE If any man doubt that, let him put me to my + purgation. I have trod a measure; I have flattered + a lady; I have been politic with my friend, smooth + with mine enemy; I have undone three tailors; I have + had four quarrels, and like to have fought one. + +JAQUES And how was that ta'en up? + +TOUCHSTONE Faith, we met, and found the quarrel was upon the + seventh cause. + +JAQUES How seventh cause? Good my lord, like this fellow. + +DUKE SENIOR I like him very well. + +TOUCHSTONE God 'ild you, sir; I desire you of the like. I + press in here, sir, amongst the rest of the country + copulatives, to swear and to forswear: according as + marriage binds and blood breaks: a poor virgin, + sir, an ill-favoured thing, sir, but mine own; a poor + humour of mine, sir, to take that that no man else + will: rich honesty dwells like a miser, sir, in a + poor house; as your pearl in your foul oyster. + +DUKE SENIOR By my faith, he is very swift and sententious. + +TOUCHSTONE According to the fool's bolt, sir, and such dulcet diseases. + +JAQUES But, for the seventh cause; how did you find the + quarrel on the seventh cause? + +TOUCHSTONE Upon a lie seven times removed:--bear your body more + seeming, Audrey:--as thus, sir. I did dislike the + cut of a certain courtier's beard: he sent me word, + if I said his beard was not cut well, he was in the + mind it was: this is called the Retort Courteous. + If I sent him word again 'it was not well cut,' he + would send me word, he cut it to please himself: + this is called the Quip Modest. If again 'it was + not well cut,' he disabled my judgment: this is + called the Reply Churlish. If again 'it was not + well cut,' he would answer, I spake not true: this + is called the Reproof Valiant. If again 'it was not + well cut,' he would say I lied: this is called the + Counter-cheque Quarrelsome: and so to the Lie + Circumstantial and the Lie Direct. + +JAQUES And how oft did you say his beard was not well cut? + +TOUCHSTONE I durst go no further than the Lie Circumstantial, + nor he durst not give me the Lie Direct; and so we + measured swords and parted. + +JAQUES Can you nominate in order now the degrees of the lie? + +TOUCHSTONE O sir, we quarrel in print, by the book; as you have + books for good manners: I will name you the degrees. + The first, the Retort Courteous; the second, the + Quip Modest; the third, the Reply Churlish; the + fourth, the Reproof Valiant; the fifth, the + Countercheque Quarrelsome; the sixth, the Lie with + Circumstance; the seventh, the Lie Direct. All + these you may avoid but the Lie Direct; and you may + avoid that too, with an If. I knew when seven + justices could not take up a quarrel, but when the + parties were met themselves, one of them thought but + of an If, as, 'If you said so, then I said so;' and + they shook hands and swore brothers. Your If is the + only peacemaker; much virtue in If. + +JAQUES Is not this a rare fellow, my lord? he's as good at + any thing and yet a fool. + +DUKE SENIOR He uses his folly like a stalking-horse and under + the presentation of that he shoots his wit. + + [Enter HYMEN, ROSALIND, and CELIA] + + [Still Music] + +HYMEN Then is there mirth in heaven, + When earthly things made even + Atone together. + Good duke, receive thy daughter + Hymen from heaven brought her, + Yea, brought her hither, + That thou mightst join her hand with his + Whose heart within his bosom is. + +ROSALIND [To DUKE SENIOR] To you I give myself, for I am yours. + + [To ORLANDO] + + To you I give myself, for I am yours. + +DUKE SENIOR If there be truth in sight, you are my daughter. + +ORLANDO If there be truth in sight, you are my Rosalind. + +PHEBE If sight and shape be true, + Why then, my love adieu! + +ROSALIND I'll have no father, if you be not he: + I'll have no husband, if you be not he: + Nor ne'er wed woman, if you be not she. + +HYMEN Peace, ho! I bar confusion: + 'Tis I must make conclusion + Of these most strange events: + Here's eight that must take hands + To join in Hymen's bands, + If truth holds true contents. + You and you no cross shall part: + You and you are heart in heart + You to his love must accord, + Or have a woman to your lord: + You and you are sure together, + As the winter to foul weather. + Whiles a wedlock-hymn we sing, + Feed yourselves with questioning; + That reason wonder may diminish, + How thus we met, and these things finish. + + SONG. + Wedding is great Juno's crown: + O blessed bond of board and bed! + 'Tis Hymen peoples every town; + High wedlock then be honoured: + Honour, high honour and renown, + To Hymen, god of every town! + +DUKE SENIOR O my dear niece, welcome thou art to me! + Even daughter, welcome, in no less degree. + +PHEBE I will not eat my word, now thou art mine; + Thy faith my fancy to thee doth combine. + + [Enter JAQUES DE BOYS] + +JAQUES DE BOYS Let me have audience for a word or two: + I am the second son of old Sir Rowland, + That bring these tidings to this fair assembly. + Duke Frederick, hearing how that every day + Men of great worth resorted to this forest, + Address'd a mighty power; which were on foot, + In his own conduct, purposely to take + His brother here and put him to the sword: + And to the skirts of this wild wood he came; + Where meeting with an old religious man, + After some question with him, was converted + Both from his enterprise and from the world, + His crown bequeathing to his banish'd brother, + And all their lands restored to them again + That were with him exiled. This to be true, + I do engage my life. + +DUKE SENIOR Welcome, young man; + Thou offer'st fairly to thy brothers' wedding: + To one his lands withheld, and to the other + A land itself at large, a potent dukedom. + First, in this forest, let us do those ends + That here were well begun and well begot: + And after, every of this happy number + That have endured shrewd days and nights with us + Shall share the good of our returned fortune, + According to the measure of their states. + Meantime, forget this new-fall'n dignity + And fall into our rustic revelry. + Play, music! And you, brides and bridegrooms all, + With measure heap'd in joy, to the measures fall. + +JAQUES Sir, by your patience. If I heard you rightly, + The duke hath put on a religious life + And thrown into neglect the pompous court? + +JAQUES DE BOYS He hath. + +JAQUES To him will I : out of these convertites + There is much matter to be heard and learn'd. + + [To DUKE SENIOR] + + You to your former honour I bequeath; + Your patience and your virtue well deserves it: + + [To ORLANDO] + + You to a love that your true faith doth merit: + + [To OLIVER] + + You to your land and love and great allies: + + [To SILVIUS] + + You to a long and well-deserved bed: + + [To TOUCHSTONE] + + And you to wrangling; for thy loving voyage + Is but for two months victuall'd. So, to your pleasures: + I am for other than for dancing measures. + +DUKE SENIOR Stay, Jaques, stay. + +JAQUES To see no pastime I what you would have + I'll stay to know at your abandon'd cave. + + [Exit] + +DUKE SENIOR Proceed, proceed: we will begin these rites, + As we do trust they'll end, in true delights. + + [A dance] + + + + + AS YOU LIKE IT + + EPILOGUE + + +ROSALIND It is not the fashion to see the lady the epilogue; + but it is no more unhandsome than to see the lord + the prologue. If it be true that good wine needs + no bush, 'tis true that a good play needs no + epilogue; yet to good wine they do use good bushes, + and good plays prove the better by the help of good + epilogues. What a case am I in then, that am + neither a good epilogue nor cannot insinuate with + you in the behalf of a good play! I am not + furnished like a beggar, therefore to beg will not + become me: my way is to conjure you; and I'll begin + with the women. I charge you, O women, for the love + you bear to men, to like as much of this play as + please you: and I charge you, O men, for the love + you bear to women--as I perceive by your simpering, + none of you hates them--that between you and the + women the play may please. If I were a woman I + would kiss as many of you as had beards that pleased + me, complexions that liked me and breaths that I + defied not: and, I am sure, as many as have good + beards or good faces or sweet breaths will, for my + kind offer, when I make curtsy, bid me farewell. + + [Exeunt] diff --git a/rust/vendor/brotli/testdata/asyoulik.txt.compressed b/rust/vendor/brotli/testdata/asyoulik.txt.compressed new file mode 100644 index 0000000..3a76211 Binary files /dev/null and b/rust/vendor/brotli/testdata/asyoulik.txt.compressed differ diff --git a/rust/vendor/brotli/testdata/backward65536 b/rust/vendor/brotli/testdata/backward65536 new file mode 100644 index 0000000..40efb3c Binary files /dev/null and b/rust/vendor/brotli/testdata/backward65536 differ diff --git a/rust/vendor/brotli/testdata/backward65536.compressed b/rust/vendor/brotli/testdata/backward65536.compressed new file mode 100644 index 0000000..0715219 Binary files /dev/null and b/rust/vendor/brotli/testdata/backward65536.compressed differ diff --git a/rust/vendor/brotli/testdata/compressed_file b/rust/vendor/brotli/testdata/compressed_file new file mode 100644 index 0000000..37d86e2 Binary files /dev/null and b/rust/vendor/brotli/testdata/compressed_file differ diff --git a/rust/vendor/brotli/testdata/compressed_file.compressed b/rust/vendor/brotli/testdata/compressed_file.compressed new file mode 100644 index 0000000..8834f32 Binary files /dev/null and b/rust/vendor/brotli/testdata/compressed_file.compressed differ diff --git a/rust/vendor/brotli/testdata/compressed_repeated b/rust/vendor/brotli/testdata/compressed_repeated new file mode 100644 index 0000000..9870b5f Binary files /dev/null and b/rust/vendor/brotli/testdata/compressed_repeated differ diff --git a/rust/vendor/brotli/testdata/compressed_repeated.compressed b/rust/vendor/brotli/testdata/compressed_repeated.compressed new file mode 100644 index 0000000..0927545 Binary files /dev/null and b/rust/vendor/brotli/testdata/compressed_repeated.compressed differ diff --git a/rust/vendor/brotli/testdata/empty b/rust/vendor/brotli/testdata/empty new file mode 100644 index 0000000..e69de29 diff --git a/rust/vendor/brotli/testdata/empty.compressed b/rust/vendor/brotli/testdata/empty.compressed new file mode 100644 index 0000000..f8fa5a2 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.00 b/rust/vendor/brotli/testdata/empty.compressed.00 new file mode 100644 index 0000000..f8fa5a2 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.00 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.01 b/rust/vendor/brotli/testdata/empty.compressed.01 new file mode 100644 index 0000000..17bb347 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.01 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.02 b/rust/vendor/brotli/testdata/empty.compressed.02 new file mode 100644 index 0000000..c183df6 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.02 @@ -0,0 +1 @@ +¡ \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.03 b/rust/vendor/brotli/testdata/empty.compressed.03 new file mode 100644 index 0000000..ae60db8 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.03 @@ -0,0 +1 @@ +± \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.04 b/rust/vendor/brotli/testdata/empty.compressed.04 new file mode 100644 index 0000000..8fac034 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.04 @@ -0,0 +1 @@ +Á \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.05 b/rust/vendor/brotli/testdata/empty.compressed.05 new file mode 100644 index 0000000..98c9dcc --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.05 @@ -0,0 +1 @@ +Ñ \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.06 b/rust/vendor/brotli/testdata/empty.compressed.06 new file mode 100644 index 0000000..84f606f --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.06 @@ -0,0 +1 @@ +á \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.07 b/rust/vendor/brotli/testdata/empty.compressed.07 new file mode 100644 index 0000000..0941d53 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.07 @@ -0,0 +1 @@ +ñ \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.08 b/rust/vendor/brotli/testdata/empty.compressed.08 new file mode 100644 index 0000000..e440e5c --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.08 @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.09 b/rust/vendor/brotli/testdata/empty.compressed.09 new file mode 100644 index 0000000..7813681 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.09 @@ -0,0 +1 @@ +5 \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.10 b/rust/vendor/brotli/testdata/empty.compressed.10 new file mode 100644 index 0000000..c793025 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.10 @@ -0,0 +1 @@ +7 \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.11 b/rust/vendor/brotli/testdata/empty.compressed.11 new file mode 100644 index 0000000..f11c82a --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.11 @@ -0,0 +1 @@ +9 \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.12 b/rust/vendor/brotli/testdata/empty.compressed.12 new file mode 100644 index 0000000..1c8a0e7 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.12 @@ -0,0 +1 @@ +; \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.13 b/rust/vendor/brotli/testdata/empty.compressed.13 new file mode 100644 index 0000000..851c75c --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.13 @@ -0,0 +1 @@ += \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.14 b/rust/vendor/brotli/testdata/empty.compressed.14 new file mode 100644 index 0000000..0d758c9 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.14 @@ -0,0 +1 @@ +? \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.15 b/rust/vendor/brotli/testdata/empty.compressed.15 new file mode 100644 index 0000000..152f9ed --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.15 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.16 b/rust/vendor/brotli/testdata/empty.compressed.16 new file mode 100644 index 0000000..e136a79 Binary files /dev/null and b/rust/vendor/brotli/testdata/empty.compressed.16 differ diff --git a/rust/vendor/brotli/testdata/empty.compressed.17 b/rust/vendor/brotli/testdata/empty.compressed.17 new file mode 100644 index 0000000..81f0388 --- /dev/null +++ b/rust/vendor/brotli/testdata/empty.compressed.17 @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/empty.compressed.18 b/rust/vendor/brotli/testdata/empty.compressed.18 new file mode 100644 index 0000000..524e341 Binary files /dev/null and b/rust/vendor/brotli/testdata/empty.compressed.18 differ diff --git a/rust/vendor/brotli/testdata/ends_with_truncated_dictionary b/rust/vendor/brotli/testdata/ends_with_truncated_dictionary new file mode 100644 index 0000000..5d9ce61 --- /dev/null +++ b/rust/vendor/brotli/testdata/ends_with_truncated_dictionary @@ -0,0 +1 @@ +often referred to as \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/monkey b/rust/vendor/brotli/testdata/monkey new file mode 100644 index 0000000..47408cd --- /dev/null +++ b/rust/vendor/brotli/testdata/monkey @@ -0,0 +1 @@ +znxcvnmz,xvnm.,zxcnv.,xcn.z,vn.zvn.zxcvn.,zxcn.vn.v,znm.,vnzx.,vnzxc.vn.z,vnz.,nv.z,nvmzxc,nvzxcvcnm.,vczxvnzxcnvmxc.zmcnvzm.,nvmc,nzxmc,vn.mnnmzxc,vnxcnmv,znvzxcnmv,.xcnvm,zxcnzxv.zx,qweryweurqioweupropqwutioweupqrioweutiopweuriopweuriopqwurioputiopqwuriowuqerioupqweropuweropqwurweuqriopuropqwuriopuqwriopuqweopruioqweurqweuriouqweopruioupqiytioqtyiowtyqptypryoqweutioioqtweqruowqeytiowquiourowetyoqwupiotweuqiorweuqroipituqwiorqwtioweuriouytuioerytuioweryuitoweytuiweyuityeruirtyuqriqweuropqweiruioqweurioqwuerioqwyuituierwotueryuiotweyrtuiwertyioweryrueioqptyioruyiopqwtjkasdfhlafhlasdhfjklashjkfhasjklfhklasjdfhklasdhfjkalsdhfklasdhjkflahsjdkfhklasfhjkasdfhasfjkasdhfklsdhalghhaf;hdklasfhjklashjklfasdhfasdjklfhsdjklafsd;hkldadfjjklasdhfjasddfjklfhakjklasdjfkl;asdjfasfljasdfhjklasdfhjkaghjkashf;djfklasdjfkljasdklfjklasdjfkljasdfkljaklfj \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/quickfox b/rust/vendor/brotli/testdata/quickfox new file mode 100644 index 0000000..ff3bb63 --- /dev/null +++ b/rust/vendor/brotli/testdata/quickfox @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dog \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/quickfox_repeated b/rust/vendor/brotli/testdata/quickfox_repeated new file mode 100644 index 0000000..2ed134e --- /dev/null +++ b/rust/vendor/brotli/testdata/quickfox_repeated @@ -0,0 +1 @@ +The quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dogThe quick brown fox jumps over the lazy dog \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/random_org_10k.bin b/rust/vendor/brotli/testdata/random_org_10k.bin new file mode 100644 index 0000000..faf8a3a Binary files /dev/null and b/rust/vendor/brotli/testdata/random_org_10k.bin differ diff --git a/rust/vendor/brotli/testdata/random_then_unicode b/rust/vendor/brotli/testdata/random_then_unicode new file mode 100644 index 0000000..eda8699 Binary files /dev/null and b/rust/vendor/brotli/testdata/random_then_unicode differ diff --git a/rust/vendor/brotli/testdata/ukkonooa b/rust/vendor/brotli/testdata/ukkonooa new file mode 100644 index 0000000..1072b69 --- /dev/null +++ b/rust/vendor/brotli/testdata/ukkonooa @@ -0,0 +1 @@ +ukko nooa, ukko nooa oli kunnon mies, kun han meni saunaan, pisti laukun naulaan, ukko nooa, ukko nooa oli kunnon mies. \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/x b/rust/vendor/brotli/testdata/x new file mode 100644 index 0000000..500c070 --- /dev/null +++ b/rust/vendor/brotli/testdata/x @@ -0,0 +1 @@ +X \ No newline at end of file diff --git a/rust/vendor/brotli/testdata/x.compressed.00 b/rust/vendor/brotli/testdata/x.compressed.00 new file mode 100644 index 0000000..33e3a98 Binary files /dev/null and b/rust/vendor/brotli/testdata/x.compressed.00 differ diff --git a/rust/vendor/brotli/testdata/x.compressed.01 b/rust/vendor/brotli/testdata/x.compressed.01 new file mode 100644 index 0000000..9c8249b Binary files /dev/null and b/rust/vendor/brotli/testdata/x.compressed.01 differ diff --git a/rust/vendor/brotli/testdata/x.compressed.02 b/rust/vendor/brotli/testdata/x.compressed.02 new file mode 100644 index 0000000..3a5890d Binary files /dev/null and b/rust/vendor/brotli/testdata/x.compressed.02 differ diff --git a/rust/vendor/brotli/testdata/x.compressed.03 b/rust/vendor/brotli/testdata/x.compressed.03 new file mode 100644 index 0000000..842e799 Binary files /dev/null and b/rust/vendor/brotli/testdata/x.compressed.03 differ diff --git a/rust/vendor/brotli/testdata/xyzzy b/rust/vendor/brotli/testdata/xyzzy new file mode 100644 index 0000000..fbfb23d --- /dev/null +++ b/rust/vendor/brotli/testdata/xyzzy @@ -0,0 +1 @@ +Xyzzy \ No newline at end of file diff --git a/rust/vendor/brotli/uncorrode.py b/rust/vendor/brotli/uncorrode.py new file mode 100644 index 0000000..da98383 --- /dev/null +++ b/rust/vendor/brotli/uncorrode.py @@ -0,0 +1,165 @@ +import re +import sys + +pointer_whitelist = set([ + 'use_rle_for_non_zero', + 'use_rle_for_zero', + 'self', + 'total', +]) + +p = re.compile("""fn[^(]+[(]((([^),]*),)*)(([^),]*)[)])""") +VARIABLE_TO_DEREFERENCE="""[A-Za-z0-9_.]+""" #+"""|(\(\*[A-Za-z0-9_.]+\))[.][A-Za-z0-9_.]+)""" +NOT_ISIZE = """([^(]|\n|(\([^i])|(\(i[^s])|(\(is[^i]))+""" +TRAILING_PARENS = """[ \t\n\)\]\}]*""" +offset_pat = VARIABLE_TO_DEREFERENCE + """[.]offset\(""" + NOT_ISIZE + """\(isize\)[ \n\t]*\)""" + TRAILING_PARENS +o2 = """\*""" + offset_pat +p2 = re.compile(o2) +pointer_cast = re.compile("""as \(\*[^\)]+\)""") +psubarray = re.compile(offset_pat) +elite_something = """if[\n ]+1337i?3?2?[\n ]*!=[\n ]*0[\n ]*({[\n ]*(SOMETHING([\n ]+'[a-zA-Z0-9_]+)?(\n )*;)[\n ]*})""" +elite_break = re.compile(elite_something.replace("SOMETHING", "break")) +elite_continue = re.compile(elite_something.replace("SOMETHING", "continue")) +def subbreak(match): + return match.group(1) +def subfun(match): + all_items = match.group() + #if all_items.count(".offset") > 1: + # print "ignoring " + all_items +" for multi_item" + # assert not all_items + # return all_items # not the inner-most + each_arg = all_items.split(',') + out_arg = [] + for index in range(len(each_arg)): + v = each_arg[index] + out_arg.append(v) + is_single = False + for item in pointer_whitelist: + if item in v: + is_single = True + where = v.find('*mut') + if where != -1: + if is_single: + v= v.replace('*mut', '&mut', 1) + else: + v= v.replace('*mut', '&mut [', 1).replace('[ ','[') + ']' + where = v.find('*const') + if where != -1: + if is_single: + v= v.replace('*const', '&', 1) + else: + v= v.replace('*const', '& [', 1).replace('[ ','[')+']' + if v.endswith(')]'): + v = v[:-2] + '])' + out_arg[index] = v + return balance(','.join(out_arg)) + +def recursive_offset_match(data): + if data.find('.offset') != -1: + data = p2.sub(dereffun, data) + data = psubarray.sub(desubarrayfun, data) + return data + +def zerofirstoffset(data): + where = data.find('.offset') + if where == -1: + assert False + return data[0:where] + '.\xff' + data[where + 2:] +def cut_out_both_offset(data): + split_loc = data.find('.offset') + 1 + ret = data[split_loc:] + ret = p2.sub(dereffun, ret) + ret = psubarray.sub(desubarrayfun, ret) + return data[:split_loc] + ret + +def dereffun(match): + data = match.group() + if data.count('.offset') > 1: + return cut_out_both_offset(data) + data = data[1:] # zero out the * + data = data.replace('.offset(','[(', 1) + data = data.replace('(isize)', '(usize)') + data = data + ']' + data = recursive_offset_match(data) + data = balance(data) + return data + +def desubarrayfun(match): + data = match.group() + if data.count('.offset') > 1: + return cut_out_both_offset(data) + data = data.replace('.offset(','[(', 1) + data = data.replace('(isize)', '(usize)') + data = data + '..]' + data = recursive_offset_match(data) + data = balance(data) + return data +def balance(data): + for ch in "[]{}()": + data = data.replace("""b'""" + ch + """'""", str(ord(ch))) + retlist = [] + stack = [] + bad_chars = [] + rev_paren = { + '{':'}','}':'{', + '[':']',']':'[', + '(':')',')':'(',} + while True: + matches = [data.find(c) for c in "{}()[]"] + where = min(x if x >= 0 else len(data) for x in matches) + if where == len(data): + retlist.append(data) + data = b'' + retlist += [b.replace(' ','').replace('\n','').replace('\t','') for b in bad_chars] + break + ch = data[where] + if ch in '({[': + stack.append(ch) + retlist.append(data[:where+1]) + data = data[where + 1:] + else: + if len(bad_chars) and bad_chars[0][-1] == rev_paren[ch]: + retlist.append(bad_chars[-1]) + bad_chars = bad_chars[1:] + elif len(stack) and ch == rev_paren[stack[-1]]: + retlist.append(data[:where + 1]) + data = data[where+1:] + stack.pop() + while len(bad_chars) and len(stack) and bad_chars[0][-1] ==rev_paren[stack[-1][-1]]: + retlist.append(bad_chars[0]) + bad_chars= bad_chars[1:] + stack.pop() + elif len(stack) != 0: + bad_chars.append(data[:where + 1]) + data = data[where+1:] + else: + retlist.append(data[:where+1]) + data = data[where+1:] + + return ''.join(retlist) +def rem(match): + return "" +with open(sys.argv[1]) as f: + ret = p.sub(subfun, f.read()) + ret = p2.sub(dereffun, ret) + ret = p2.sub(dereffun, ret) + ret = p2.sub(dereffun, ret) + ret = psubarray.sub(desubarrayfun, ret) + ret = psubarray.sub(desubarrayfun, ret) + ret = psubarray.sub(desubarrayfun, ret) + ret = p2.sub(dereffun, ret) + ret = p2.sub(dereffun, ret) + ret = p2.sub(dereffun, ret) + ret = ret.replace('i32 as (usize)', 'usize') + ret = ret.replace('i32 as (u32)', 'u32') + ret = pointer_cast.sub(rem, ret) + ret = elite_break.sub(subbreak, ret) + ret = elite_continue.sub(subbreak, ret) + ret = ret.replace("#[derive(Clone, Copy)]", "") + ret = ret.replace("#[repr(C)]", "") + ret = ret.replace("#[no_mangle]", "") + ret = ret.replace("unsafe extern ", "") + ret = ret.replace("unsafe", "") + ret = ret.replace('self', 'xself') + #ret = balance(ret) + sys.stdout.write(ret) -- cgit v1.2.3