writerfilter/CppunitTest_writerfilter_rtftok.mk | 2 writerfilter/qa/cppunittests/rtftok/data/picw-pich.rtf | 6 + writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx | 78 ++++++++++++++++ writerfilter/source/rtftok/rtfdocumentimpl.cxx | 18 ++- 4 files changed, 98 insertions(+), 6 deletions(-)
New commits: commit 995a6b38d5b8ac8aabca54f991caaaf35e6db395 Author: Miklos Vajna <[email protected]> AuthorDate: Thu Nov 4 11:27:44 2021 +0100 Commit: Miklos Vajna <[email protected]> CommitDate: Thu Nov 4 12:47:40 2021 +0100 RTF import: fix too small graphic size when both picwgoal and picw are provided The original document provided \picwgoal and \pichgoal, stating the desired size of the image in twips. \picw and \pich is not provided, but we write it on export. The value of \picw and \pich is ignored by Word (it can calculate both the current and the original size from picw/hgoal and picscalex/h), so it displays the document correctly. Use the same trick in our RTF import: picscalex/y has a specified default value (100%), so if we have picwgoal and pichgoal, then we can also ignore picw and pich. This is needed, otherwise the much smaller size from picw/pich is used as the original size, so the layout "zooms in" so much that only a small white rectangle of the top left area is visible, as if the images would be all lost. Change-Id: I924e5f8b68613c654c857a57561c8a2e3a6db2f0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124679 Reviewed-by: Miklos Vajna <[email protected]> Tested-by: Jenkins diff --git a/writerfilter/CppunitTest_writerfilter_rtftok.mk b/writerfilter/CppunitTest_writerfilter_rtftok.mk index 07271b777ae0..6cad1e4c7b8d 100644 --- a/writerfilter/CppunitTest_writerfilter_rtftok.mk +++ b/writerfilter/CppunitTest_writerfilter_rtftok.mk @@ -16,6 +16,7 @@ $(eval $(call gb_CppunitTest_use_externals,writerfilter_rtftok,\ )) $(eval $(call gb_CppunitTest_add_exception_objects,writerfilter_rtftok, \ + writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl \ writerfilter/qa/cppunittests/rtftok/rtfsdrimport \ writerfilter/qa/cppunittests/rtftok/rtfsprm \ writerfilter/qa/cppunittests/rtftok/rtftokenizer \ @@ -29,6 +30,7 @@ $(eval $(call gb_CppunitTest_use_libraries,writerfilter_rtftok, \ sal \ test \ unotest \ + vcl \ )) $(eval $(call gb_CppunitTest_use_sdk_api,writerfilter_rtftok)) diff --git a/writerfilter/qa/cppunittests/rtftok/data/picw-pich.rtf b/writerfilter/qa/cppunittests/rtftok/data/picw-pich.rtf new file mode 100644 index 000000000000..56a2b0d1e86a --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/data/picw-pich.rtf @@ -0,0 +1,6 @@ +{\rtf1 +\pard\plain +{\pict\wmetafile8\picwgoal2134\pichgoal2264\picscalex100\picscaley100\picw99\pich105 +010009000003d13d00000000a73d0000000005000000070103000000050000000102ffffff0005000000090200000000a73d0000410b2000cc006900630000000000690063000000000028000000630000006900000001001800000000000c7b000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafb9c8a3de3e0cbfefffdfffffffffdfffbfffbfffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffa89c56fffffffffffffffffffafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8ffffdcccafa2975bfffff9e 1dee0b8b3b5aaacaccad2c8f5f5f5fffffffffffffdfdfdfffffffffffffcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffeffaa9e58fffdfdfefefefffffffafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafdfbfffff7a19363d0ceabb6b2b17b777d7475798c9489d3d3d3fffffffcfcfcfefefefffffffffffffffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffdfdfdfffffffffffffcfcfcfdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfbfda79b55fffffffffffffffffffafffcfffcffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffdfcd9d3c67d732d949484b6b2b8bcb9c29ba097828282a2a2a2edededfffffffffffffcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffaa9e58fffffffdfdfdfefcfcfafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9faf8a6a6ac85773cbbb483f7fcfdfffcfefcfcfccdcdcd898989979797e4e4e4fffffffffffffcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffefefefffffffef efefbfbfbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffa89c56fffefefffffffffffffafffcfffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffdfe7e7706a6bdfd7ca928539f2fae9fffffcfffafffffffffbfbfb909090979797f7f7f7fdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffffffffdfdfdfdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffa99d57fffdfdfffffffffffff9fffbfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf9fbbbc3c28c8a 89ede5ecc2be8db3a874f5fffdfffdfffefefeffffffdddddd888888d0d0d0fffffffffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfbfdfdfdf4f4f4f7f7f7fffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcfea79b55fffffffffffffffefef7fef9fffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f6f7b7b5b4929897f5f0effcfcf6968449ebeed5fffffafffffffffffffefefea4a4a4a7a7a7fafafafefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefec2c2c2979797c5c5c5fbfbfbfffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffa89c56fffefefcfcfcfffffffafffcfffcfffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f7f7b2adaf9da299edf5f4fffbffd3d1afae965afafffefefefefffffffdfdfda6a6a6a1a1a1fffffffdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9b9b9b898989b4b4b48e8e8e9a9a9af9f9f9fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffeffa89c56e5e3e3cbcbcbdcdadaf3faf5fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8fcf7c9c6c88f8a89eeececfdf9fffeffef959853ebd5acf6f9fffffff8fafffea8a6a6aaa19efafdfffcfefefffffefcfcfcfffffffffffffdfdfdfefefefdfdfdfffffffefefefefefefffffffefefefefefefffffffdfdfdfdfdfdfefefec5c5c5838383d5d5d5 ffffffd8d8d8767676cacacafcfcfcfefefefffffffefefefffffffffffffdfdfdfffffffdfdfdfffffffffffffefefefffffffcfcfcfffffffffffffefefeedededbebdbf8377318a88889292928c8a8aa7aea9fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffffe8e6e5736f6ed0d0d0fbfffffffffee5ddc6958b4ffff9f6f9fffafbfff7bdb3bf888385fdfffcfbfffffffcfdfffffffbfbfbfffffffdfdfdfffffffffffffafafafffffffffffffdfdfdfffffffefefefefefefffffffffffff0f0f0787878bfbfbffffffffefefeffffffcacaca7d7d7de6e6e6fffffffdfdfdfffffffefefefffffffffffffefefefffffffdfdfdfffffffffffffdfdfdfefefeffffffdfdfdfb5b5b59494948e8d8f867a34d6d4d4e7e7e7c2c0c07a817cfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcfef cfaf9aeaaa9939296d1d9cef9f9f9fffbffa8a471d4c196fafffffafef2dfd7de7b7a83dddedaf8fefdfffdfefdfdfdfefefefffffffffffffdfdfdfcfcfcfffffffefefefffffffdfdfdfffffffffffffdfdfdffffffffffffd5d5d5767676e7e7e7fffffffdfdfdfffffff6f6f67f7f7fbcbcbcfbfbfbfffffffefefefffffffffffffdfdfdfffffffcfcfcfffffffafafafffffffcfcfcedededc6c6c68888887d7d7db9b9b9faf9fba89c56fffffffafafaa9a7a7a1a8a3fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffdfc9c9ba46e7372c9cec5faf5f6f7efe291803dfdfaecfffdfffafff6adafb78d8a8cf1f5f0fffffffefefefffffffbfbfbfcfcfcfffffffcfcfcfffffffffffffffffffffffffffffffffffffffffffcfcfcf6f6f6b0b0b0a2a2a2f1f1f1fcfcfcfffffffbfbfbffffffd7d7d7838383d8d8d8fffffffffffffcfcfcfdfdfdfffffffefefefffffffffffffcfcfcf8f8f8d2d2d2828282737373c1c1c1fffffffffffffffeffa49852fcfafad4d4d46e6c6cdce3defffdffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfbfdfffffbfefefef8f9fdc2c5ca757b76c7cbc0fff8ffcbbf8fbaad79fffbfff4fff5e1e0e47b787ac4c1bcf8fdfefdfdfdfdfdfdfffffffffffffffffffffffffdfdfdfefefefefefefffffffcfcfcfffffffffffffdfdfdececec898989c3c3c3f7f7f7fffffffefefefffffffdfdfdfdfdfd9090909d9d9dfffffffffffffffffffffffffefefefffffffefefefbfbfbcdcdcd7f7f7f777777bebebef2f2f2fffffffefefefefefefffeffa69a54efeded8c8c8cb2b0b0f5fcf7fff9feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffcfff5fefefefdfefcfbfdfeb3b2bc787c77e6e6e6fdf7ec93893bf0e8dbfbfffffefbfdcfceca797672bbc3c3fefefefffffffbfbfbfefefefffffffffffffdfdfdfffffffffffffffffffdfdfdfffffffdfdfdffffffe2e2e2757575e4e4e4fef efefffffffdfdfdfffffffefefeffffffe9e9e9838383979797f9f9f9fcfcfcfffffffdfdfdebebebb3b3b3868686848484b7b7b7e0e0e0f8f8f8fffffffcfcfcfffffffefefefffeffada15ba2a0a0858585f8f6f6fafffcfffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffdfffefdfffffffffcfffffffaf6fca1a0a2979b95faf9fdd3cea1a29b6afffff9fffdfffdfdfdc6c4c3767b7aadadadf9f9f9fffffffcfcfcfffffffffffffefefefdfdfdfffffffefefefffffffffffffdfdfdffffffcdcdcd7e7e7ef5f5f5fffffffffffffffffffdfdfdfefefefdfdfdffffffdadada8f8f8f8585859f9f9f9e9e9e9393938383839a9a9ab9b9b9e0e0e0fffffffefefefdfdfdfefefefffffffefefefffffffefdff877b35838181dfdfdffffdfdf9fffbfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffdfff7fdfcfff9fbfbfffefffffefffffff7dfe0dc6c6e6ee4e9e7fdf9ffa09c4ee4d5bbfffbfffffcfffbfffcc4c7c58282829f9f9fcececef8f8f8fefefefffffffffffffffffffefefefffffffffffffefefefffffffbfbfbb8b8b8909090f8f8f8fefefefefefefefefefffffffffffffffffffefefeffffffefefefb1b1b19d9d9d999999a6a6a6cdcdcdf4f4f4fffffffffffffffffffcfcfcfffffffefefeffffffffffffffffffc0bfc17c702acdcbcbfffffffffffff9fffbfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffffffffefefeffffffefefef9b9b9bc2babbf2faffd9ddb99b8a47fdfff5fffefefbfffffefdffeeeeee8e8e8e767676a5a5a5cacacadddddde6e6e6eeeeeef8f8f8ffffffffffffffffffffffffededed979797bfbfbffbfbfbfdfdfdfffffffffffffffffffffffffffffffffffffefefefffffffefefefffffffffffffffffffefefefffffffffffffcfcfcfffffffffffffffffffffffffdfdfdfbfbfbcdccc8747474938741fffefffbfafcfffefefafffcfffefffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefffffffffffffffffffbfbfbbebebe969192e6eee4fffff8a8a46fd6c69bf8fbfffffffffdfffffefefeffffffdfdfdf9d9d9d7878787272727d7d7d999999bfbfbfe8e8e8f6f6f6fdfdfdfbfbfbdddddd848484e3e3e3fcfcfcfefefefffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffefefefffffffffffffefefefefefefffffffefefefffffffffffffbfbfbfffffff5f5f5c2c2c2696864cacacaaa9e58fffcfefffefffffefefafffcfffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefefefefefefefefefefefefed5d5d581837de6e4e3fffeffebedda9b883ff9faf0f9f8fcfdfffcfefefefffffffffffff9f9f9f3f3f3eaeaead0d0d0b3b3b38686867474748d8d8de4e4e4ffffffbfbfbf808080fbfbfb fefefefefefefffffffffffffffffffffffffffffffffffffffffffffffffefefefbfbfbfffffffbfbfbfffffffffffffefefefffffffffffffbfbfbfffffff4f4f4acacac6f6f6fd5d4d0fefefea79b55fffcfefefdfffffffff7fef9fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffdfdfdfefefeffffffffffffdfdfdf787e73e5dce9fffefdfffdffb9b07ebfb37dfbfefffffffcfffffffdfdfdfdfdfdfffffffefefefafafafefefefbfbfbebebebd8d8d8acacac7e7e7e9696967f7f7fb0b0b0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f9f9fffffffffffffffffffffffffefefefdfdfdfffffffffffffffffffefefececece838383909090e0e0e0f9f8f4f9f9f9aa9e58fffefffefdfffffffffafffcfffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffefefefffffffffffffdfdfdffffffffffffffffffe1e1e1737a77e5dee3fffefffdfbfaf8f5f096893bf2eedcfcfefffefefefffffffdfdfdfefefefffffffffffffffffffafafafdfdfdfffffff8f8f8cacaca7f7f7f979797f3f3f3fffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfbfffffffefefefffffff9f9f9fffffffffffffbfbfbefefefcfcfcfaaaaaa909090888888abababe4e4e4fffffff6f5f1fefefeaa9e58fefbfdfffefffffdfdf9fffbfffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefffffffffffffdfdfdffffffdedede767981e8e3dafdfdfdfdfffffdfeffcdc59db0a46afffffefffffffdfdfdfdfdfdfffffffefefefcfcfcfffffffffffffffffffffffffefefefcfcfcf3f3f3edededfffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffefefeddddddb1b1b1929292858585929292b1b1b1ddddddfffffffffffffdfdfdf5f4f0ffffffab9f59fffcfefbfafcfffffffafffcfffeffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffefefeffffffffffffffffffffffffcecece838089e8e9dffffff9f6f8fffffffefdf8f59f9359eae2c5fefefefffffffffffffffffffffffffefefefffffffffffffffffffffffffffffffffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffff8f8f8fcfcfcc6c6c6868686858585b7b7b7edededfdfdfdfafafafffffffffffffffffffffffff8f7f3ffffffa1954ffffefffffefffffdfdfafffcfffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffefefefefefefefefefefefef5f5f5b1b1b1a89da5eef6effbfef5fbfffffaf9fffffffce3dac6ab9a5bfffffffdfdfdfefefefffffffffffffffffffffffffdfdfdfefefefffffffdfdfdfefefefffffffffffffef efefffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffcfcfcc6c6c6727272bebebefffffffffffffcfcfcfffffffffffffffffffffffffffffffffffff8f7f3fcfcfcab9f59fffcfefdfcfefffffff8fffafffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffefefefffffffffffffdfdfdfefefefffffffffffffdfdfdfffffffffffffefefefefefefffffffffffffdfdfdededed838383ccc8cefdfdfdfbfefcfdfffffffefffffdfcfffff1a4a182d8d499fffcfefffcfffffff9fffefffcfefff8fffbfffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefffffffcfcfcffffffececec707070c6c6c6f8f8f8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffa89c56fffffffffffffffffffafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfbfffffffdfdfdfdfdfdfffffffffffffefefefffffffdfdfdfffffffffffffbfb fbfffffffffffffefefefdfdfdfffffffefefeffffffffffffffffffc9c9c96f6f6fefeceefdfefcfdfffbfbfefcfcfbfffffefffffef5ece9d4988d53fbf5f6fdfff9fffdfffdfffefcfdf9fffefff8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffdfdfdfffffffbfbfbfffffffffffffefefeffffffffffffc8c8c8828282e5e5e5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffa89c56fffffffffffffffffffafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffefefefdfdfdfffffffefefefcfcfcfffffffffffffffffffffffffffffffdfdfdfffffffffffffffffffefefefffffffffffffffffffdfdfdf0f0f0a1a1a1a8a8a8fffdfdfffffbfdfff9fbfffafdfefffdfbfffffdfdfffffbc3b591cac497f4f4fadadbd9bfbdbcb2b1adada2a4949da09090909393939494949191918e8e8e909090989898a0a0a0a8a8a8c0c0c0e9e9e9fffffffdfdfdfffffffffffffafafafffffffefefef5f5f5b6b6b6a1a1a1efefeffffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffa89c56fffffffffffffffffffafff cfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffcfcfcfffffffffffffcfcfcfefefefffffffdfdfdfefefefffffffffffffdfdfdfffffffffffffcfcfcffffffffffffffffffd3d3d37e7e7ee9e9e9fffdfffffdfcfefffafbfffaf9fefdfdfefffffefffbfbfbfaeee8877d308a847d858d8c948f8c989394939595a3a3a3aeaeaeb0b0b0b2b2b2b3b3b3b1b1b1abababa4a4a49e9e9e9191918282828c8c8cb7b7b7f5f5f5fffffffbfbfbfffffffefefefffffff4f4f4b2b2b29f9f9ff1f1f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffa89c56fffffffffffffffffffafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffefefefcfcfcfffffffffffffdfdfdfdfdfdfefefefffffff4f4f4ebebebf0f0f0fdfdfdfffffffffffffffffffffffffffffffefefefffffffcfcfcffffffb7b7b77e7e7efffffffffcfffffdfffffffefdfffcfbfefcfdfffff9fbfcfafcfcbeb9ba7d6f45938e51e6e5eff8f6f5fffffbf6fffffffefbfffffffefefefdfdfdfefefeffffff fffffffffffffdfdfdfffffff6f6f6bababa7b7b7bb1b1b1fffffffffffffffffffefefefffffffefefec9c9c9848484efefeffbfbfbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffa89c56fffffffffffffffffffafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffcfcfcfffffffffffffcfcfcd1d1d19e9e9e989898a0a0a0bfbfbfe3e3e3f5f5f5fafafafdfdfdfffffffffffffefefeffffffffffffa7a7a7969696fefefefffdfffffefffcfbfdfcfcfcfffffefcfffdfdfffec0c3c17c7d7bd4cec9a1984feaddcffbfefffafff6fbfffffffffcfefefefffffffffffffffffffefefefdfdfdfefefefffffffffffffafafaffffffd4d4d47b7b7bd1d1d1fefefefcfcfcfffffffefefeffffffededed797979d4d4d4fffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffa89c56fffffffffffffffffffafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffefefefdfdfdfffffffffffffefefefefefec0c0c07a7a7aa9a9a9b9b9b9aaaaaa8 787877575757e7e7eb0b0b0eeeeeefdfdfdfffffffdfdfdfffffffdfdfda2a2a2a5a5a5fefefefffffefefefefffefffffefffffffffffffed8d9d7737472b6babbfdffffe0d2b6a59a68fffff9fafffffffffffffefdfefefefdfdfdfdfdfdfefefefffffffffffffffffffefefefffffffdfdfdfffffffafafac1c1c1747474edededfffffffefefefffffffdfdfdf8f8f8a2a2a2a2a2a2f6f6f6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffa89c56fffffffffffffffffffafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefefefefffffff3f3f3828282c0c0c0f1f1f1f8f8f8f4f4f4e9e9e9ddddddc2c2c29a9a9a7e7e7e8e8e8eb7b7b7e9e9e9fffffffbfbfba4a4a4a0a0a0fffffffdfff9fefffbfffffffffefffffdffedebeb767474b4b2b2f0fafafdfafcfffdffaaa168dbd8acf9fbfffefdfffffffbfefefefffffffffffffffffffefefefefefefffffffffffffdfdfdfffffffcfcfcffffffefefef9c9c9ca4a4a4f5f5f5fffffffffffffffffffdfdfdeeeeee747474bdbdbdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefdffa89c56ffffffffffffff fffffafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffcfcfcfffffff8f8f8717171d9d9d9fffffffffffffffffffffffffcfcfcffffffecececcececeb0b0b0939393878787929292999999757575a9a9a9fffffffffffffffffffefefefffffff5f5f58c8c8c9c9c9cf7f7f7fffff9f9fefdf6fffff3e9d1a08f4cfcfff4fffff7fafffffefdfffffefffffcfffffbfffafefffafffbfdfefafffbfffffffffefefefdfdfdffffffffffffe3e3e3767676cececefffffffefefeffffffffffffffffffc8c8c87d7d7db7b7b7fffffffffffffffffffefefefdfdfdfffffffffffffdfdfdfefefefffeffa89c56fffffffffffffffffff6fdf8fffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffefefef6f6f6a5a5a5a7a7a7f7f7f7fffffffefefefefefefffffffffffffffffffefefeffffffefefefd0d0d0a5a5a59696969f9f9fd9d9d9fffffffefefefffffffffffff9f9f9b2b2b27d7d7df2f2f2fffffffffefdfdfffefbfefffffff0beb28acdbd8ffafcfffdfdfffcfefefffffbfffffcfff dfffbfefff9fffafefffbfffcfffffffffffffffffffffcfcfcfffffffefefeb3b3b39b9b9befefeffffffffdfdfdfdfdfdfffffffbfbfbbfbfbf818181a4a4a4dadadafafafafffffffffffffdfdfdfffffffffffffefefefffeffa59953fffefefdfdfdfffffffafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefcfcfcfffffffdfdfdffffffe3e3e3818181cececefffffffffffffdfdfdfffffffcfcfcfffffffffffffffffffdfdfdfffffffffffffffffffdfdfdfffffffdfdfdfefefefffffffdfdfdcecece777777dededefffffffdfdfdfffefffdfffffefffdfbfff8f2f0e5ab8e55f6f3ebfefafffafffffdfffbfffff8fffffefffffffbfefcfdfffefffefffffffffffffffffffffffffffffffffffffff9f9f97c7c7ccdcdcdfffffffffffffffffffcfcfcfefefeffffffdfdfdf888888818181c5c5c5edededfffffffffffffffffffcfcfcfdfdfdfffeffa79b55fffffffefefefdfbfbfafffcfffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfefefefffffffdfdfd9f9f9fa3a3a3f9f9 f9fffffffefefefffffffffffffffffffcfcfcfffffffffffffbfbfbfefefefffffffefefefffffffffffffffffffdfdfdf4f4f4909090a2a2a2fffffffbfbfbfffffffffefffcfbfffbfffafffffbfaffffcebf9ebdaf7bfffffef9fdfff9fefcfffffbfefdf9fffffffffefffdfffefdfffefffffffefefefefefefffffffcfcfcfffffff7f7f77d7d7dcacacafdfdfdfcfcfcfefefefffffffdfdfdffffffffffffffffffc7c7c7707070999999e6e6e6fcfcfcfafafafffffffffffffffeffa59953fffefefffffffffffff9fffbfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffefefefffffffdfdfdffffffe9e9e98d8d8dc7c7c7fffffffdfdfdfefefefefefefffffffffffff8f8f8fffffffffffffffffffdfdfdfffffffdfdfdfefefefefefeffffffb0b0b0858585fbfbfbfcfcfcfffffff8f8f8fffffefcfbfffffffcfffbfefbfbfff6fbf2a59552ebe9c6fdfdfff9fafefffefffffffffffefffffefffcfefefbfffbfdfdfdfffffffefefefbfbfbfffffffbfbfbafafaf919191e7e7e7fffffffffffffbfbfbfefefefffffffdfdfdfffffffffffffafafaefefef9b9b9b777777d8d8d8fffffffffffffdfdfdfefdffaa9e58fffef efdfdfdfffffff7fef9fffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffcfcfcfefefeffffffa0a0a0999999fffffffffffffffffffdfdfdfffffffffffffffffffefefefbfbfbfffffffffffffffffffefefeffffffffffffe8e8e87f7f7fbdbdbdfffffffffffffcfcfcfffffffbfffffcfffdfffffefbfefffffdfff6fffed9d9b1ada465fffff8fffefffffcfffdfefffdfdfdfffefffffffffcfffbfffffffdfdfdfefefefffffffcfcfcdfdfdf6b6b6bcececefdfdfdfffffffcfcfcfffffffffffffffffffffffffffffffffffffdfdfdfefefef1f1f1b6b6b67b7b7bc3c3c3fafafafffffffbfafca89c56fffffffdfdfdfffffffafffcfffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffcfcfcfffffffdfdfdfefefefefefefffffffffffffdfdfdcccccc8d8d8de6e6e6fefefefefefefefefefffffffefefefffffffdfdfdfffffffffffffffffffdfdfdffffffffffffffffff9b9b9b9b9b9bf8f8f8fffffffffffffdfdfdfffffffbfffffdfff9fffffffafffffef9fafefffbfdfefaa79c6adbd5b2fffff8 fefbfffbfefffcfffdfffffffffefffbfdfdfffffffffffffdfdfdfefefeefefef8b8b8baaaaaaf7f7f7fdfdfdfffffffefefefffffffffffffefefefffffffffffffcfcfcfffffffffffffcfcfcfcfcfcbcbcbc7a7a7abbbbbbfbfbfbfffeffa59953fffffffffffffffefefafffcfffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffcfcfcfffffffdfdfdfffffff1f1f1949494c2c2c2fefefefffffffffffffefefefefefefefefefffffffffffffcfcfcfffffffefefefefefeffffffededed767676cdcdcdfffffffcfcfcfffffffffffffefefefafefffffffcfafffffefffdfafffbfffdfffffbffebe3cc98915affffebfffdfffafdfffdfffbfffffefffdfffffefffefefefffffffefefef9f9f9b3b3b37c7c7cf3f3f3fffffffffffffdfdfdfffffffffffffffffffffffffefefefefefefffffffffffffdfdfdfffffffffffffefefec7c7c7787878b7b7b7f8f7f9aa9e58fffdfdfffffffffefefafffcfffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffefefefefefefffffffffffffefefefefefefffffffffffffffffffdfdfdfffffffcfcfcfffffffdfdfdfffffff 5f5f5979797bcbcbcfffffffffffffefefefffffffefefefffffffefefefffffffffffffefefefffffffffffffafafab4b4b49a9a9aebebebfffffffffffffdfdfdfffffffefefeffffffffffffffffffffffffffffffffffffffffffffffffbab17fcac89ffffdfef8fefdfafffff6f7fffdfffefffffbfcfcfcffffffffffffc3c3c37a7a7ae4e4e4fffffffcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffdfdfdfffffffefefefffffffcfcfcd7d7d774736fbdbfbfaa9a55fcfefffffbfefdfffff9fffafffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffefefefefefefffffffffffffffffffffffffffffffcfcfcfffffffefefefffffffffffffffffffffffffdfdfdd5d5d5818181dadadafffffffefefefffffffffffffffffffffffffefefefffffffefefefdfdfdfffffffefefef6f6f6878787bebebefffffffffffffdfdfdfffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffff5f6dca59560fcf6e9fffbfef2fbfefffffffffefffefffdffffffffffffe0e0e08a8a8ab2b2b2fdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffdfdfdfdfdfdfffffffcfcfcd2d1cd77797995 8540fcfefffffdfffdfffffbfffcfffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfbfbfbfffffffffffffefefeffffff9090908f8f8ffdfdfdfffffffdfdfdfffffffffffffdfdfdfffffffffffffffffffffffffffffffffffffffffff6f6f67d7d7dc6c6c6fffffffefefefdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8fff8d3c2a1c0bc89fffefffdfffefafffdfffffefbfcfffefefefefefe9797978a8a8af6f6f6fdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffefefefffffffffffffcfcfcfdfdfdfffffff6f5f1b2b4b483732ee4e6e7fffbfefafcfcfbfffcfffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffefefefefefefefefefefefefcfcfcfffffffffffffafafafffffffcfcfc939393888888e2e2e2fffffffafafafffffffafafafffffffdfdfdfffffffefefefffffffefefefdfdfdfefefefefefefbfbfb9e9e9ea9a9a9f9f9f9fefefefffffffcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf ffcfff9fea69a5af1f0d6fffcfefdfffefffffcfffdffffffffa6a6a6848484e8e8e8fffffffffffffffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffefefefdfdfdfffffffffffffdfdfdfefefefffffbf1f3f3887833909293fffdfffdfffffbfffcfffafcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffefefefffffffffffffffffffffffffffffffffffffdfdfdffffffcbcbcb8d8d8d909090ddddddfffffffffffffffffffcfcfcfffffffefefefdfdfdfffffffefefefffffffffffffffffffffffffdfdfdfcfcfcd8d8d8888888ddddddfdfdfdfffffffcfcfcfffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffefdf9fafbffdcd5b4b7ab6bfcfefffffffbfdffffffffffc5c5c57a7a7ad4d4d4fffffffbfbfbfefefefefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefffffffefefefdfdfdfffffffffffffffffffffffcf9fbfba4944f868889beb7bafafcfcf9fffafffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffefefefefefeffffffdededeadadad878787a0a0 a0f3f3f3fefefefffffff9f9f9fcfcfcfffffffcfcfcfefefefffffffffffffefefefefefeffffffffffffffffffffffffffffffffffff808080b5b5b5fffffffffffffffffffffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffefff7fffefefcfbb4a66ce3dfc3fbfffffffdfecccdcb737373c7c7c7fcfcfcfffffffffffffffffffcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffffffffefefefefefefefefefdfdfdfffffbfdffffa59550c7c9ca797275eceeeefbfffcfffcfeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffefefefcfcfcffffffeaeaeac4c4c4878787898989d7d7d7fcfcfcfffffffffffffbfbfbfffffffffffffffffffffffffffffff8f8f8f9f9f9fefefefffffffffffffdfdfdfefefeffffffffffffffffffaeaeae9a9a9af0f0f0fffffffcfcfcfffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffcfffbfffbfefefee8e3ceab9d6cf5f9edd0cbc879787abababafdfdfdfcfcfcfffffffdfdfdfbfbfbfffffffbfbfbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfefefefffffffffffffffffffffffff6f5f 1fbfdfdac9c57edeff09e979aabadadf5fbf6fffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffefefefffffffefefefbfbfbf7f7f7d2d2d28b8b8b717171c7c7c7fdfdfdfffffffffffffefefefefefefffffffdfdfdfffffffdfdfdf8f8f8e4e4e4c5c5c5bdbdbdd6d6d6f0f0f0fcfcfcfffffffffffffffffffdfdfdfefefef4f4f4858585bcbcbcfffffffefefefefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffdfefffffff8f8fef9fdfbfab1a87daca0786f7a78c0b9c0fffffffdfdfdfffffffcfcfcfffffffffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcfffffffffffffefefefefefefefefefffffffdfdfdf7f6f2fdffffab9b56fcfeffdad3d6797b7bedf3eefffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fefefefffffffefefefffffffdfdfdffffffe0e0e0888888727272b4b4b4edededfdfdfdfdfdfdfffffffffffffffffffffffffffffffafafafffffff3f3f39a9a9a717171898989919191787878747474cdcdcdfffffffafafafffffffffffffffffffbfbfba7a7a7868686fdfdfdfffffffdfdfdfffffffffffffffffffffffffefefefdfdfdffffffffffff fffffff7fdf8efede5d7d0d79ea9b77b7a667d6e2fd6cec1f5faf8fffcfffffefefdfffff9fafefffffefffff9fdfefafdfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f6eefbfdfeac9956fdfffeeae5e4828387ccd1d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffdfdfdfcfcfcf4f4f49797977b7b7bb3b3b3ddddddf2f2f2fffffffffffffffffffffffffffffffdfdfdfefefefdfdfdffffffc8c8c8727272a1a1a1dededeeaeaeaececece1e1e1c0c0c0707070b2b2b2fffffffffffffefefefdfdfdffffffeeeeee959595848484b3b3b3bababab3b3b3b1b1b1afafafaaaaaaa6a6a6a4a4a49e9e9e9393938989897a7c7d84827a8b8a8c9d9fa7c9c6c1b8af8ac2bd8cfffffffffbfffffffcf8fbfffdfffefefffafefafffffefffafdfbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f6eefcfeffaf9c59fbfefcf7f2f1a8a9ada4a9a8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fefefeffffffffffffc8c8c8848484999999d0d0d0fcfcfcfffffffffffffffffffefefefdfdfdf efefeffffffffffffffffffffffffacacac797979bababaf6f6f6fbfbfbfefefefefefefffffffdfdfdd0d0d07d7d7dc4c4c4fefefefffffffffffffdfdfdfefefee7e7e7a5a5a59595959898989b9b9b9b9b9ba0a0a0a2a2a2a1a1a1a1a1a1a7a7a7b1b1b1b7b7b7c9c8cad2d3cfe2e7e5fdf4f7fffefef7f5eda39a61f1ead9fffbfffffffbf8fdfcfbfffefefffdfffcfffffefffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f6eefdffffae9b58fbfefcfffefdd0d1d57e8382ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffdfdfdb9b9b97b7b7bafafaffffffffefefefffffffffffffefefefffffffefefefefefefffffffffffffcfcfcdbdbdba0a0a0868686c9c9c9fdfdfdfffffffffffffefefefffffffdfdfdfcfcfcffffffb7b7b78a8a8aefefeffffffffafafafffffffdfdfdfffffffefefef7f7f7f7f7f7f6f6f6fafafafefefefffffffffffffefefefefefefffffffffffffefdfffbfdfefdfffbfffbfefdfdfdfdffffd2c7b1bcb381fffffbfffffefbfffbf9fdfefffcfffffffffefcfbfffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffff7f5edfdffffac9956fdfffefffffee5e6ea747978ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffcacaca6f6f6fd2d2d2fffffff6f6f6fffffffdfdfdfffffffdfdfdfdfdfdfffffff9f9f9ecececd7d7d7c2c2c2808080898989e3e3e3fffffffefefefafafafffffffdfdfdfffffffefefefffffffbfbfbf2f2f2959595b8b8b8fefefefffffffffffffffffffbfbfbfffffffffffffefefefefefefffffffffffffefefefefefefffffffffffffffffffefefefffefffbfffffffffbfefbfdfffcfffcfffdfdfbfba79a62e0e1bffffbfffdfffcfafffdfdfcfffffff9fffcfefffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f6eefdffffac9956fdfffefffffeecedf1767b7affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff8a8a8ab8b8b8f3f3f3f7f7f7fefefef6f6f6f7f7f7f5f5f5f3f3f3efefefd9d9d9b2b2b28f8f8f8080807d7d7dcacacafffffffefefefffffffffffffffffffdfdfdfffffffdfdfdfffffffafafaffffffffffffbbbbbb838383fffffffefefefefefefdfdfdfffffffdfdfdfbfbfbfffffffffffffefefefffffffffffffffffffffffffef efefefefefefefefffcfffbfff9fffffcfdfffefef4fffffffcf8fff9f1e0c5a3a46cfff5fdfffefffdfffbfffffffffffcfffdfffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f7effcfeffae9b58fafdfbfffffef0f1f5727776ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fefefeb5b5b57b7b7b959595abababa9a9a9a9a9a99a9a9a8989898080807878787f7f7f959595b9b9b9dfdfdff7f7f7fbfbfbfefefefffffffdfdfdfffffffffffffcfcfcfffffffffffffdfdfdfffffffffffffefefec5c5c5868686f1f1f1fcfcfcfefefefffffffffffffdfdfdfffffffdfdfdfcfcfcfffffffffffffefefefefefefffffffffffffffffffffffffffefffafffbfbfcfafffffefffcfffdfffffbfff5fffeffb3ab7cd8d1b6fffffcfffefffffffefffffffefdfffdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f6eefcfeffae9b58fbfefcfffffeeeeff36e7372ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fefefef2f2f2cdcdcdb3b3b3a3a3a3a4a4a4a8a8a8b1b1b1bcbcbcccccccdcdcdce5e5 e5efefeffafafafefefefcfcfcfffffffdfdfdfffffffffffffffffffdfdfdfffffffffffffffffffffffffffffffefefefdfdfddbdbdb808080e8e8e8fefefefffffffefefefefefefffffffefefefcfcfcfffffffffffffefefefffffffffffffffffffffffffffffffffffffffffcfbfefffafffefffdfffdfff7fafffffffefff6fbffffecd3989a58fcf9ebfffafffdfcfefffffffffff8fdfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f5edfdffffab9855fdfffefffdfce8e9ed6f7473ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fdfdfdfffffffffffffdfdfdf7f7f7f5f5f5f9f9f9fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffffffffffffffffffffd5d5d5848484e8e8e8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6ffffcdbb92c8c295fffefef9fefdfffffefffefffbfefcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffff6f3eefdfeffae9a59fcfffdfffefdcecfd37e8382ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffefefefefefefefefefefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0d0d0808080f0f0f0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefaf9eba39463f6f5e1fffefffbfcfffefdfffdfffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaf7f2fdfeffac9857fcfffdfffaf9acadb19ca1a0fffefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffcfcfcf7d7d7df6f6f6fefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefdfbffffcfc7aab7b079fffefffffdfffafdfffffffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f5f0fcfdffaa9655fdfffee9e4e3818286ccd1d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fefefefefefefefefefffffffffffffffffffefefefefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffcfcfcffffffd2d2d27d7d7df4f4f4fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fcfafafcfcad9f64ece5ccfdfbfffbfffffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f6f1fdfeffaa9655fdfffed6d1d0727377ebf0efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffefefefffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffdfdfdffffffd3d3d3808080f1f1f1fdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefbfffffffdffe2dbc2b2a469fdfffff9fcfafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafdfeffaf9b5af4f7f5b8b3b2929397eef3f2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffefefefefefefefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfefefeffffffffffffd6d6d6848484e7e7e7fcfcfcfefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfbfefffffdfffffdfeb0a972dbd3b6fbfffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffaf7f2f8f9fdae9a59dde0de847f7ed3d4d8f8fdfcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffefefefdfdfdfefefefffffffffffffffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefeffffffffffffdfdfdf8c8c8cd4d4d4fcfcfcfefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffefffefff9fafefffeffeeedd9a89968faf9ebfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f5f0fdfeffac9857b6b9b7847f7ef8f9fdfbfffffefcfcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffebebeb949494c1c1c1fcfcfcfefefefffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffefffdfffffffef8fdfcfffefebfb98cd6c49bf6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f6f1fdfeffa692518b8e8cc2bdbcfdfefffbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffefefefdfdfdf7f7f7acacaca1a1a1f8f8f8fffffffffffffffffffdfdfdfffffffffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfbfffffffcfffffffdfff7fffdfff7f4e698985cfff2dcfbfffffffdfffbfefffffff3fffcfff8fefffffcfffffffffffffffefefefdfdfdfffffffefefefffffffefefefffffff7f5edfdffff8d7938868987fffcfbfbfdfefbfffefffefdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffefefebbbbbb878787f5f5f5fffffffcfcfcfefefefffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffefffdfffffcfefefefffdfffffffbcfcaabbdb488fffffbfafdfbfafbfffffefffffffffafcfdfbfff9fffdfffffffffefefefffffffcfcfcfffffffffffffffffffcfcfcfbf9f1e0e2e3836f2ebdc0befffffefdfffff7fcfafffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffdfdfdfffffffefefeffffffd1d1d1767676efefeffefefefffffffdfdfdfffffffefefefffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfefefefffffbfffcfffcfdfffffffffdf2f49fa165f2e4c8fdfefffffefffcfbfffefdf9fffffcf6fff5fffefffffffffffffffbfbf bfffffffefefefefefefffffffdfdfdf7f5ed8688898b7736f7faf8fffdfcfdfffffbfffefffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffefefefffffffcfcfcffffffe3e3e37b7b7be3e3e3fcfcfcfffffffefefefefefefffffffefefefefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffafffefffffffcfdfcfff9fefcfcfefefffbffd5d9afb4a86efffcfffafcfdfdfffffffefdfffffcfafffffffdfcfdfdfdfffffffdfdfdfffffffffffffffffff7f7f7ffffffc0beb6818384a4904ffdfffefffbfafcfefffafffdfffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffefefefefefeffffffeeeeee979797bcbcbcf9f9f9fbfbfbfffffffffffffffffffcfcfcffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffdfffefffffdfdfffffffbfffbfbfffbfffefffffffab5a973d7d0b7fdfffffffffcfffdfcfbfffefffcfffffffffffffffffffffffffffffffffdfdfdfefefeffffffd4d4d4737169c6c8c9ac9857fdfffefffffefdfffffafffdfdfbfaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffefefefffffffffffff9f9f9c8c8c8828282efefeffffffffffffffffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffffffefffcfef8fbfffbf9fff9fdfff7fff9ffefe4cea1a063fefbf3fffffefcfdf9fafffffff7fffdfffffffffffffffffdfdfdffffffffffffffffffdcdcdc7f7f7fb1afa7f8fafbad9958fdfffefffdfcfdfffffbfffefffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefffffffefefefefefefdfdfdffffffefefef777777cececefffffffffffffefefefdfdfdfffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfefffffffefffffffefffbfdfffffbfffefffffbfff9fffffeffbcb885d1c6a6fffffbfafffffcfdfffffefffbfffafcfcfcfffffffffffffdfdfdffffffe2e2e28f8f8f969696f9f7effbfdfead9958fcfffdfffffefdfffff5faf8fffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffffffffffffff8f8f89a9a9aa9a9a9f8f8f8fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfffffffffcfffffcfffffffbfcfffdfdfffefcfcfffffefbfffffff2e6a4955df3f7e4f0fafffffcfffefffdfffff5fffffffe fefefffffffefefeebebeb939393888888fffffff7f5edfdffffad9958fdfffefffcfbfdfffffbfffefffefdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0e0e07d7d7ddadadafefefefffffffefefefffffffffffffffffffffffffffffffffffffffffffefefefefefefefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffffffffefefefffffffefefefffffffffffbfcfbffd0c7a2b8b382fffefffafffffffff9fffffffdfdfdfffefffffeffeeedf185868a919393f5f9f4f9fff9f7f5edfffffcaa9c54fffefffdfdfdfffffef8fff9fffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfc8d8d8d9f9f9ffefefefffffffffffffdfdfdfdf dfdfcfcfcfffffffffffffdfdfdfffffffffffffffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfcfcfcfffffffffffffefefefffffffefefefffffffffff9fffdfffbf8f0a99e65f0ecd9fffafff8fff7fffefffffefffefdffdadada7c7b7da2a1a3edecf0fbfbfffdfcfff7f4f6fffeffa79951fffdfdfffefffffcfff7fffffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdddddd7d7d7dcacacafffffffcfcfcfffffffffffffdfdfdfffffffffffffffffffffffffefefefefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefffffffefefefffffffffff8f8fbfffffeffd7d0afb1a771fffdfffafffefffefffefdffb3b4b27d7f79b1b4abf6f9f0fefef8fffffefffcfef7f5f4fffefeab9f59fffdfffaf8fefffefff6fff7fffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeb7b7b77c7c7cdededefffffffdfdfdfffffffffffffffffffdfdfdfffffffffffffffffffdfdfdfdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefffffffffffffffffffffffffffef9fdfdfffefffbfffffbb3a76ddad6b9fffbffd7dad89a9c9c898a88babbb7fffffcfefdf9fffffefffdfcfffefff3f8e9fffffba49852fffdfffffefffffefffafffefffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefdfdfda2a2a28c8c8ce6e6e6fffffffcfcfcfdfdfdfefefefffffffffffffcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefefefefffffffffffffefefefefefefefefefbfefffffefff8fffcfffdfcece5d2a79e5ec2bdbc81838 38f908ee8e8e8fefdfffbf8fffffcfffef9fffffdfffffdfff7f8f4fbfafea8995bfffcfffffffffdfbfafafffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefef0f0f0949494818181e6e6e6fefefefffffffdfdfdfefefefffffffffffffffffffffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefdfdfdfffffffffffffbfefffffbfef9fdf7ebf5efe0d7e1897e4c767249cac7c9fffefffcfbfffffefffbfafcfffffefdfffcfbfff7fcfff7f1f8e9fdfffba79d57fffefffbfdfdfffffcf8fff6fffefdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffcfcfcffffffecececa0a0a0 717171cececefefefefffffffffffffbfbfbfefefefffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefefefefffffffefefefffffffffffffbfbfbfefcfcfdfeffd3d1c9788484817983b2aa999a9354faf5e6fffbfffffffffefffafdfff9f7fef7fafffefafdfff4f6fff3f2fbfbfdfea7a051fafbf7fdfefffffcfffafffefffefdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffdfdfdf0f0f0bababa808080858585cdcdcdfffffffffffffffffffffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffbfbfbe6e6e6b8b2b37b807e84898ab6b6b6dbe1e6fff9f5ccc594c5bd95fffffffffffcfdfff7fdfffcfbfbffe0d9febaacecb8a6f9956ee86b53a1a69564fffffbfdfffefdf9fffafffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffdfdfdfffffffcfcfcdadadaa9a9a98d8d8d8d8d8da6a6a6bdbdbdddddddf9f9f9fdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffff8f8f8e1e1e1c5c5c5a8a8a89292928989899c9b9fbdb9bededfddfcfffafbfefffffdfffffbe79d965fefebd8faf9fbf4ffffb2b6f08774e86a5aed8265ea6c52ec7d53d6ac97c8a6994ffdfffff9fdfefffffcfbfffbfffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcffffffdededeb2b2b29595958a8a8a8b8b8b979797a4a4a4b1b1b1bcbcbcc5c5c5c6c6c6c7c7c7c8c8c8c3c3c3bababaaeaeaea8a8a89b9b9b8f8f8f8b8b8b959595b1b1b1d1d1d1f8fafafffefffffffffdfffefbfefffdfaffff fff6dcd6b3afa67aa487fa6b3be7784fee9e93f3bfaeffc6c0f7e8edfffdfafffefbf6b0a456fafbfff9fefcfffffbfbfffbfdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffffffffbfbfbfffffffffffffffffffffffffffffffffffff7f7f7d7d7d7b0b0b09e9e9e8a8a8a8686868181817e7e7e7c7c7c7d7d7d8181818585859595959c9c9cb1b1b1d4d4d4f4f4f4fefefefdfdfdfffffffdfffcfffffffffdfffafafafdfefffefbfffffefffffef5a6a1628062b5c9c3f8f3f0ffeef2fffffffaf9fcfffffff8fdfff1fffff8a89659fdfcfffbfff9fffffefbfefffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffdfdfdfffffffff ffffffffffffffffdfdfdfffffffefefefffffffffffffffffffefefefffffffffffffffffff9f9f9f2f2f2f1f1f1efefefedededf2f2f2fafafafefefefffffffffffffffffffffffffffffffffffffffffffafffaf9fbfbfffefffffdfffffffffffefffdfefffdfdffe1ddc5a19658f8ffeff9fefffffefffffffefdfcfffffffcfbfcfffffbffa9955efdfefff9fff7fffcfffbfcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffcfcfcfefefefffffffefefefdfdfdfffffffffffffffffffffffffffffffffffffefefefffffffffffffffffffcfcfcfefefefffffffffffffdfdfdfdfffefcfffdfffefffffefefefdf9fffffbfbfffefafefffffeffb1a067d4cba5f7fff8fffefff8fff7fefff7fffefffbfffafffffba99a55fdfffff9fffafffdfffbfffffcfff5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefefffffffdfdfdfdfdfdfffffffefefefffffffffffffdfdfdfdfdfdfffffffffffffffffffefefefffffffffffffffffffffffffffffffefefefffffffffffffffffffffffffffffffffffffefefefdfdfdfefefefffffffefdfffdfffefdfffefffffffffefdfffff7fdfffbfafffffffeffeee4da978538fbf8eafafffff6fffcfdfafffbfffcfdfffbfffff7ab9c57fdfdfff7fdf8fffffcfafffdfffffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfefefefffffffffffffffffffffffffffffffcfcfcfffffffffffffefefefdfdfdfcfcfcfdfdfdfffffffffffffcfcfcfefefefffffffffffffdfdfdfcfcfcfffffffffffffefefefefefefffffffffffffffffffffffffffffffffbfffffffcfafffbfbfefffffdf ffffffbfefffafdfffffefff2fffffbbfb17cbdb181fffff9f6fdfafbfffefffff9fdfcfffffbffa9975cfdfdfffbfffbfffefffbfefffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcfffffffffffffdfdfdfdfdfdfffffffffffffffffffffffffefefefffffffffffffefefefffffffffffffefefefefefefffffffffffffdfdfdfdfdfdfffffffffffffefefefefefefffffffffffffefefefdfdfdfefefefffffffefefefffbfffefffbf9fffaf9fdfffefafffffdfffffefffffefffbfffcfff7fff9f2ef96853cf9e6e3fdfffcf8fdfefffffcfcfffbfffffea99956fbfdfdfbfffefff9fffbfcfffdfefaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffffffffbf4f8fdd6c39da89f5ffffffbfafefffdfefffffdfefffdffa89b57fffffefdfffffffcfffafffffffffaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfbfffefffffffcfceea29152dfd9bcfdfafffbfffefffffbfffeffa79b53fffffafcfffdfefafffafffffffefdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefef9fbfcfbfffbfbffffddd3bba4954dfffafcfbfffcfdfffcfdffffa79b53fffff9fffffcfffdfffafffffffdfeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffcfffbfffffafff8fcfcfcfafcffad9b5adaca9cf9fdfefbfffffcfcffa69856fffffbfffffcfffcfef8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfffffffffffdfafafffcf8fcfdebe1d79c8b3afcf8f3fdfcfefffbffa9995efffefffffffefffbfdf6fffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8fffffff8fffffdfcfafff8fffffcfffcffb4aa7ac4b890fdf8effffbffa9975cfefafffffffffffefffafffefffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafffcfff8fffbfffefffff8fdfefffcfdf9f1f1eb938243efeacbfffdf4b09f5cfffcfefbfffffffefffafffefffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000 00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfff4fffefffefffffefefffdfff8fffffdfff6d6c58da6a170dfd8bfa9994cfffffefafffffefdfff9fffdfffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefe968b3bd6b89fa79d57fffff7fffff8fafffffffafffafffaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefefefed6caa6958839b09a58fffffcfdfffef9fefdfffbfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8ef90883b998832fffafffbfdfdfdfffbfffdfefffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9eae0c8837d30fffcfffffefffafef8fffbfffbfffcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffffcfffff2fdfff7fffafdfbfffefcfcfcf8fffcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafff5fffefafdfff8fdfffffff9f8fffcf9fefcfaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfff4faf9fefefefaf9fffffff5fafffbfffdfffdfcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfcfafffff7fffafffafefffffffefbfff8fffafffffdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000050000000701010000000500000001020100000005000000090201000000030000000000} +\par +} diff --git a/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx b/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx new file mode 100644 index 000000000000..0d6425c33afd --- /dev/null +++ b/writerfilter/qa/cppunittests/rtftok/rtfdocumentimpl.cxx @@ -0,0 +1,78 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <test/bootstrapfixture.hxx> +#include <unotest/macros_test.hxx> + +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/drawing/XDrawPageSupplier.hpp> +#include <com/sun/star/frame/Desktop.hpp> +#include <com/sun/star/graphic/XGraphic.hpp> + +#include <vcl/graph.hxx> + +using namespace ::com::sun::star; + +namespace +{ +/// Tests for writerfilter/source/rtftok/rtfdocumentimpl.cxx. +class Test : public test::BootstrapFixture, public unotest::MacrosTest +{ +private: + uno::Reference<lang::XComponent> mxComponent; + +public: + void setUp() override; + void tearDown() override; + uno::Reference<lang::XComponent>& getComponent() { return mxComponent; } +}; + +void Test::setUp() +{ + test::BootstrapFixture::setUp(); + + mxDesktop.set(frame::Desktop::create(mxComponentContext)); +} + +void Test::tearDown() +{ + if (mxComponent.is()) + mxComponent->dispose(); + + test::BootstrapFixture::tearDown(); +} + +constexpr OUStringLiteral DATA_DIRECTORY = u"/writerfilter/qa/cppunittests/rtftok/data/"; + +CPPUNIT_TEST_FIXTURE(Test, testPicwPich) +{ + // Given a document with a WMF file where picwgoal and picscalex is provided, so picw is not + // relevant: + OUString aURL = m_directories.getURLFromSrc(DATA_DIRECTORY) + "picw-pich.rtf"; + + // When loading that document: + getComponent() = loadFromDesktop(aURL); + + // Then make sure the graphic's preferred size is correct: + uno::Reference<drawing::XDrawPageSupplier> xTextDocument(getComponent(), uno::UNO_QUERY); + uno::Reference<drawing::XDrawPage> xDrawPage = xTextDocument->getDrawPage(); + uno::Reference<beans::XPropertySet> xShape(xDrawPage->getByIndex(0), uno::UNO_QUERY); + uno::Reference<graphic::XGraphic> xGraphic; + xShape->getPropertyValue("Graphic") >>= xGraphic; + Graphic aGraphic(xGraphic); + Size aPrefSize = aGraphic.GetPrefSize(); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 2619 + // - Actual : 132 + // i.e. the graphic width didn't match 2.62 cm from the Word UI. + CPPUNIT_ASSERT_EQUAL(static_cast<tools::Long>(2619), aPrefSize.Width()); +} +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 486a5bde6444..a67cbe904089 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -899,12 +899,18 @@ void RTFDocumentImpl::resolvePict(bool const bInline, uno::Reference<drawing::XS uno::Reference<io::XInputStream> xInputStream(new utl::OInputStreamWrapper(pStream)); WmfExternal aExtHeader; aExtHeader.mapMode = m_aStates.top().getPicture().eWMetafile; - aExtHeader.xExt = sal_uInt16( - std::clamp<sal_Int32>(m_aStates.top().getPicture().nWidth, 0, - SAL_MAX_UINT16)); //TODO: better way to handle out-of-bounds values? - aExtHeader.yExt = sal_uInt16( - std::clamp<sal_Int32>(m_aStates.top().getPicture().nHeight, 0, - SAL_MAX_UINT16)); //TODO: better way to handle out-of-bounds values? + if (m_aStates.top().getPicture().nGoalWidth == 0 + || m_aStates.top().getPicture().nGoalHeight == 0) + { + // Don't use the values provided by picw and pich if the desired size is provided. + + aExtHeader.xExt = sal_uInt16(std::clamp<sal_Int32>( + m_aStates.top().getPicture().nWidth, 0, + SAL_MAX_UINT16)); //TODO: better way to handle out-of-bounds values? + aExtHeader.yExt = sal_uInt16(std::clamp<sal_Int32>( + m_aStates.top().getPicture().nHeight, 0, + SAL_MAX_UINT16)); //TODO: better way to handle out-of-bounds values? + } WmfExternal* pExtHeader = &aExtHeader; uno::Reference<lang::XServiceInfo> xServiceInfo(m_aStates.top().getDrawingObject().getShape(), uno::UNO_QUERY);
