From 2817b44768ece315c0850f14c6ffbde822b536a1 Mon Sep 17 00:00:00 2001 From: JoKneeMo <421625+JoKneeMo@users.noreply.github.com> Date: Sun, 10 Mar 2024 06:05:38 -0400 Subject: [PATCH] Initial 2.0.0 Release --- _modules/__init__.html | 661 +++++++++++++++++ _modules/index.html | 400 +++++++++++ _sources/index.rst.txt | 64 ++ _sources/installation.rst.txt | 16 + _sources/options.rst.txt | 218 ++++++ _sources/relnotes.rst.txt | 63 ++ _sources/source.rst.txt | 6 + _sources/troubleshooting.rst.txt | 12 + _sources/usage.rst.txt | 80 +++ .../0053ba6958e79f26751eabb555bd73d0.woff2 | Bin 0 -> 4728 bytes .../029e176ad602329b4434892101db9cf3.woff2 | Bin 0 -> 6044 bytes .../07ff82964967feebb9c96288e0e0df05.woff2 | Bin 0 -> 13588 bytes .../0948409a22b5979aa7e1ec20da9e61f1.woff2 | Bin 0 -> 5604 bytes .../0a0ad0eae50e549ecd713b9ad417f1a1.woff2 | Bin 0 -> 4888 bytes .../0b68e8634c96265eb32a0c769416b5b0.woff2 | Bin 0 -> 5928 bytes .../0d1b73eee266eabb2cff35dfa4ce25a3.woff2 | Bin 0 -> 16812 bytes .../0e1f73c6737cdf273efb4b79504e4c0a.woff2 | Bin 0 -> 13076 bytes .../0e326670106c8eb6a11a8c30734ecfc8.ttf | Bin 0 -> 23124 bytes .../0ec3cc19652785204ea2e322330f0f1b.woff2 | Bin 0 -> 16164 bytes .../0f303f31706d39866cced9dcc17b61fb.woff2 | Bin 0 -> 15764 bytes .../101522bafe9c61c68698ecc784607772.woff2 | Bin 0 -> 9712 bytes .../10b31f4cad9ea78d43449886bfbb88ac.woff2 | Bin 0 -> 11804 bytes .../1181a8e619707033241139715eca64c6.woff2 | Bin 0 -> 9672 bytes .../122802d03aed4bf8cd6a03997a97aca4.woff2 | Bin 0 -> 6020 bytes .../1383417807f7965daaf94e7c497dcddb.woff2 | Bin 0 -> 7704 bytes .../144860ed1e48e186f08997e6388a9c3f.woff2 | Bin 0 -> 1512 bytes .../1488146d8b2e9859d6c90e6c2b48f7ef.woff2 | Bin 0 -> 6340 bytes .../1512b579343c6b61c7523cdd838d8328.ttf | Bin 0 -> 23416 bytes .../1c9cc76fd52238330f0aabac35acd2ca.woff2 | Bin 0 -> 6936 bytes .../1f1481679a64a39f3427547aa1b13f0f.woff2 | Bin 0 -> 5032 bytes .../2096d27efc16cbdd79183bf295c8ebde.ttf | Bin 0 -> 21352 bytes .../20dc200cc43ab904876fb0c1697ebe39.woff2 | Bin 0 -> 1480 bytes .../214adfc289a2f2af8b0008c59ed0c7f2.woff2 | Bin 0 -> 4652 bytes .../21953b998bab09c1f60c599caee56378.woff2 | Bin 0 -> 7696 bytes .../22aadc77cafa07b2db9ed560d0320616.woff2 | Bin 0 -> 13200 bytes .../2325b97b584755067ea4f7f56ee05430.woff2 | Bin 0 -> 8348 bytes .../2550c2e2d8495c3ed2d4d52f824374f1.woff2 | Bin 0 -> 7040 bytes .../255cf41e0317d95e3992683a76ef28a8.woff2 | Bin 0 -> 4976 bytes .../25c52b9af13f0d1b10719f5289e8c803.woff2 | Bin 0 -> 7476 bytes .../2781e9e7c3f369b8fc7965e679b17b60.woff2 | Bin 0 -> 11756 bytes .../28e6b81b1bc1964707edd4179e4268f5.ttf | Bin 0 -> 23416 bytes .../2a8c422bef4a7099e99dbf0e61ed5e49.woff2 | Bin 0 -> 7460 bytes .../2aadfad5aee7ceeaf4eb0924efabe5b4.ttf | Bin 0 -> 21772 bytes .../2c0f74be498d2da814c0a84dd6833f70.woff2 | Bin 0 -> 15092 bytes .../2e10480d4154762bc7c8fbb40877e104.woff2 | Bin 0 -> 5928 bytes .../2ea7a97b7c976b121112a088eb398561.woff2 | Bin 0 -> 7700 bytes .../2f5c32f094829c0278bce28fe2bbe074.ttf | Bin 0 -> 23204 bytes .../2f7c3c315334a99574ee4ceb21af654d.woff2 | Bin 0 -> 7544 bytes .../302b0425bf5ea66f37a822a61d723adc.ttf | Bin 0 -> 25112 bytes .../3177dacffeac1eb4102852811ae4a2c7.woff2 | Bin 0 -> 6236 bytes .../3254c528e2ab56454a9f22191035c5fe.ttf | Bin 0 -> 21356 bytes .../32c8a74ac0816253d69a7cc68a60986d.woff2 | Bin 0 -> 12764 bytes .../33c5d27ca0eaeb12ebe728ae2fc7106d.woff2 | Bin 0 -> 15360 bytes .../36e39c6463ae1c71c71e69c05e593e1b.woff2 | Bin 0 -> 4588 bytes .../3728fbdd191d75bad5b83a838dfe2fc1.woff2 | Bin 0 -> 9840 bytes .../38f3ee1f96b758f95672c632d8759594.ttf | Bin 0 -> 23172 bytes .../392ff374142585f7b886ee1fe66e686e.woff2 | Bin 0 -> 6560 bytes .../3a38c967413f7bce36d3baefc321aade.woff2 | Bin 0 -> 5468 bytes .../3c23eb02de6b34e30f18cfb7167abd81.woff2 | Bin 0 -> 11872 bytes .../3c505383d37d2078648e37868bbd1fad.woff2 | Bin 0 -> 14684 bytes .../3cf78ad3bcd1324e10a4acdc34bfc4a1.woff2 | Bin 0 -> 17552 bytes .../3f1918538864f9681d47a4538d48289c.woff2 | Bin 0 -> 5876 bytes .../4039566f251699c4b421ed1a38a59b24.woff2 | Bin 0 -> 4688 bytes .../4207cbc8cb7bc2cbd0bcce565298cbbc.woff2 | Bin 0 -> 9768 bytes .../43358c04243de546caddd0898dbf0757.woff2 | Bin 0 -> 14004 bytes .../435e4b7f9f250d9d9243d4754799fc96.woff2 | Bin 0 -> 15000 bytes .../437939342255944b82a49f916404c5fc.woff2 | Bin 0 -> 6516 bytes .../455c2c1af0a2bf20047a1864d7d7c174.woff2 | Bin 0 -> 7120 bytes .../47aa3bfad6cb9e2d63abdd58f4e6ce4f.woff2 | Bin 0 -> 9576 bytes .../495d38d4b9741e8aa4204002414069e2.woff2 | Bin 0 -> 9628 bytes .../4c815fdc869f885520f7c8eae6730edf.woff2 | Bin 0 -> 16608 bytes .../4ec57f2a80b91090971b83970230ca09.woff2 | Bin 0 -> 5548 bytes .../4f17f22fc6bff4f3333ccf7ed7126e6d.woff2 | Bin 0 -> 1464 bytes .../4f93c2808e3b69e525c118074e5de31f.woff2 | Bin 0 -> 14184 bytes .../50aacf068f685be0dd903a91d5bab7d8.woff2 | Bin 0 -> 1508 bytes .../51f3f41805329fb8341beb56ded833ea.woff2 | Bin 0 -> 5468 bytes .../52f28cb4d065b4adfa78df4f9559c639.woff2 | Bin 0 -> 7392 bytes .../555ceea3a65ffbbecf8b7e6d04966c7f.woff2 | Bin 0 -> 14128 bytes .../5989ef3a21d7f252337ab3326f78bde7.woff2 | Bin 0 -> 4780 bytes .../5b6377da4c959db6d4b22738a27f1bee.woff2 | Bin 0 -> 1432 bytes .../5ce47d5195e59af38114d0b70217baf2.woff2 | Bin 0 -> 14024 bytes .../5d7ff31ac7bf945e8d61878f8a941239.woff2 | Bin 0 -> 1460 bytes .../5dc0e4b14e903ba7f45c581df7402b3f.woff2 | Bin 0 -> 14072 bytes .../60eb682678bbea5e8ad71f66f2f65536.woff2 | Bin 0 -> 10284 bytes .../63111d307c01b52ffccf7b0319cb7917.woff2 | Bin 0 -> 1540 bytes .../638764dc2513deb09c55fc025f6dd36c.woff2 | Bin 0 -> 9180 bytes .../63f4b74ebf127dbeb033126ea988f54e.woff2 | Bin 0 -> 7520 bytes .../64a6b4e954cf84685cbf8de77eb47344.woff2 | Bin 0 -> 12572 bytes .../661d4b208656c006e7aab58acf778485.woff2 | Bin 0 -> 17336 bytes .../6725a7e91680edd1cdc9ed5c26ac05fd.woff2 | Bin 0 -> 14224 bytes .../6a84eeee6a25e7c9a8a03191007a6720.woff2 | Bin 0 -> 9644 bytes .../6ac1ee292434fac2313c42b0dfb7897c.ttf | Bin 0 -> 23488 bytes .../6ad3f6bbe6220cc476a0d3c731d3fb04.ttf | Bin 0 -> 23672 bytes .../6be97ca17228a69c406231d89c003194.woff2 | Bin 0 -> 17032 bytes .../6de03a64aa8100032abc6e836b3ed803.ttf | Bin 0 -> 23520 bytes .../6deb20301c65a96db17c433ad0cf8158.woff2 | Bin 0 -> 10640 bytes .../6f8d857c5a8545e67de6b60aa0fe5c33.woff2 | Bin 0 -> 12740 bytes .../713780d8b30bda5583052ea847cdcb4f.woff2 | Bin 0 -> 7016 bytes .../71e06579279fba7436d58a1c49288909.ttf | Bin 0 -> 25364 bytes .../765bd4a97597a4d7781193793477a6cd.ttf | Bin 0 -> 25224 bytes .../76945c7494c20515bb45d1dedab8f706.woff2 | Bin 0 -> 10428 bytes .../76da333ab59c6d625cabfb0768f82b4a.woff2 | Bin 0 -> 1464 bytes .../770518db51bed1e082feecc532cfcbf8.woff2 | Bin 0 -> 7404 bytes .../77b24796a3d4ab521f66765651875338.woff2 | Bin 0 -> 5560 bytes .../77ff81100e5a1db3d925f713660700ad.woff2 | Bin 0 -> 4748 bytes .../78a9265759e7b861a1639a36f4c01d04.woff2 | Bin 0 -> 13860 bytes .../7af61b2367eba2b1852e837c46a75696.woff2 | Bin 0 -> 12848 bytes .../7b63598dcc2a26583b82594bd0e36d5b.woff2 | Bin 0 -> 5760 bytes .../7b8c2179b6b778308d2ff39bdb82e926.woff2 | Bin 0 -> 6012 bytes .../7e262106f82cc52663e403f5b73795bb.woff2 | Bin 0 -> 15752 bytes .../7f1c829b0c90fd664a03bb714a74f7d3.woff2 | Bin 0 -> 11800 bytes .../7fa86b886bee5d6ab420a8e89b9f3052.ttf | Bin 0 -> 23724 bytes .../8007dfe835cfb201b8caaa9651098588.woff2 | Bin 0 -> 1428 bytes .../83614c36460a4a9734968789cb535de7.woff2 | Bin 0 -> 5020 bytes .../84e959dd07f302392f0ffd86f87db888.ttf | Bin 0 -> 21452 bytes .../85a41b80c5fdc14e3dc48636a30d87dd.woff2 | Bin 0 -> 5884 bytes .../870e5928dd14fcfe0ce9386107666774.woff2 | Bin 0 -> 6040 bytes .../8898c4b754d5d96c1a5e1b1d54100554.woff2 | Bin 0 -> 6404 bytes .../89b4f174a5a728d2d8c85b87990c9ab4.ttf | Bin 0 -> 23420 bytes .../8a8dca39f24b52e89e6fd6dcd8b6dd32.woff2 | Bin 0 -> 7476 bytes .../8aa562790559d61dd5178a88a296d70f.ttf | Bin 0 -> 23252 bytes .../8c3798e37724f71bc0c63c44a5307413.woff2 | Bin 0 -> 7012 bytes .../8c49ed8b472d38d3985ec9bbbccea601.ttf | Bin 0 -> 21560 bytes .../8e48cf20cf9f9e5feb7197c79028132b.woff2 | Bin 0 -> 14688 bytes .../9095d663e4d450059bcc2260bb75cd62.woff2 | Bin 0 -> 4696 bytes .../90ebb29b5cffa197b184773983ba7e91.woff2 | Bin 0 -> 13188 bytes .../93b6c99d936df38895a0d95e3ffea2fd.woff2 | Bin 0 -> 9556 bytes .../9582ced8a675bf267cc7ac392a86413e.woff2 | Bin 0 -> 12704 bytes .../99be4d68845d66c27c7f7d3a48687b66.woff2 | Bin 0 -> 7616 bytes .../99cf36e763be9cce7b4c59b91841af58.woff2 | Bin 0 -> 8280 bytes .../9a9bf2d91ebbb1b96eab8eb0b0514bcc.woff2 | Bin 0 -> 4896 bytes .../9bcbc88b33b2efc2aee821b831499f1c.woff2 | Bin 0 -> 8320 bytes .../9c9be791a58af8a04c611ca1d13f51c6.woff2 | Bin 0 -> 5088 bytes .../9fdb12ceee3a402d3a54afe354552459.woff2 | Bin 0 -> 9700 bytes .../a6933e678530b263486fa7b185a449ca.woff2 | Bin 0 -> 10292 bytes .../a6caf7b9888eb0c382948c1ca5e8bebb.woff2 | Bin 0 -> 16676 bytes .../a70ff2592da5e3453943f727633aff54.woff2 | Bin 0 -> 6344 bytes .../aa28d99c7db60ad23f96a5c317615c42.woff2 | Bin 0 -> 13696 bytes .../aab05142e0e2dadf7df633e061e612ad.woff2 | Bin 0 -> 14136 bytes .../ab03beb9091fa15ce4e783199e076bc6.woff2 | Bin 0 -> 8300 bytes .../ac848474638236e67a64bc654fb18de0.ttf | Bin 0 -> 21464 bytes .../acaac043ca238f0e56e61864456777fa.woff2 | Bin 0 -> 12620 bytes .../aeed0e51b0bac7c89e5c7e6cf086d7e0.woff2 | Bin 0 -> 14968 bytes .../b019538234514166ec7665359d097403.woff2 | Bin 0 -> 15920 bytes .../b076e86301cbee8c5c9aef51863a9c0a.woff2 | Bin 0 -> 11796 bytes .../b19ac4e57f2a56639eebd1c35319e5a7.woff2 | Bin 0 -> 17060 bytes .../b4d3c40a77fd9e35a881a79077957055.woff2 | Bin 0 -> 14172 bytes .../b4e42731e8d667ae87c3450c345754ae.woff2 | Bin 0 -> 5996 bytes .../b57a5ada789f195d5d42f4073a6cf313.woff2 | Bin 0 -> 9960 bytes .../b5b4146d87e5d22d0a4e0d04f3ee5626.woff2 | Bin 0 -> 1512 bytes .../b7ef2cd1159a8cbfd271ff2abe07f237.woff2 | Bin 0 -> 15344 bytes .../b93199bb6f964f190f4da04ecdbaf5a4.woff2 | Bin 0 -> 15076 bytes .../bb8007225d94a099cddbade7ea904667.woff2 | Bin 0 -> 17508 bytes .../bc67bba106323289ea3eda0826de1912.ttf | Bin 0 -> 25404 bytes .../bcd47c2f3649cfcaa86a08fb741255d6.woff2 | Bin 0 -> 13944 bytes .../bd0efe13f0d9d591b337ddc7f289f494.woff2 | Bin 0 -> 15204 bytes .../bd51fb0ca67e64c809ffcf7e1370f969.woff2 | Bin 0 -> 8420 bytes .../bdbb6b52604c2451fdcba9cdfd44f4e1.woff2 | Bin 0 -> 5972 bytes .../bf2ad3287f13eb7076cccb516ec2986f.ttf | Bin 0 -> 23456 bytes .../bfd1a0c9c783e84595589f33e1828a57.woff2 | Bin 0 -> 12832 bytes .../c13b34dd5b6a35b309944b61c91b2ace.woff2 | Bin 0 -> 8408 bytes .../c22066c14662d6c80415ae04c5dd9d51.woff2 | Bin 0 -> 14780 bytes .../c28a41f656599f6694528b5463c6a445.woff2 | Bin 0 -> 12980 bytes .../c6dc61b627bbc5af9130518297bd4f17.ttf | Bin 0 -> 23720 bytes .../c8a9fd4eab4e83382cc66fde70911b41.woff2 | Bin 0 -> 10076 bytes .../ca7eea0cf248d6e8442c01074765bd33.woff2 | Bin 0 -> 5388 bytes .../cadfb311297a9362b07fab73934b432a.ttf | Bin 0 -> 25380 bytes .../cbfd26d5bcf084ee407a0b2b7599e84b.woff2 | Bin 0 -> 9524 bytes .../ccdebed88064e470c15f37c432922e57.woff2 | Bin 0 -> 16024 bytes .../cce2217cc8323fe49789adefb3596291.woff2 | Bin 0 -> 12980 bytes .../cd3d1f17e048e2116f438bd7157baccf.woff2 | Bin 0 -> 9504 bytes .../d07f561ba87d93460742b060727d9e0d.woff2 | Bin 0 -> 10276 bytes .../d368cf5bed7856dbafa2af36b51acb9c.woff2 | Bin 0 -> 1484 bytes .../d422317033deb87342a5e56c7be67458.ttf | Bin 0 -> 25444 bytes .../d6f9cdf1a40893111566fcdee3bbe5a9.woff2 | Bin 0 -> 14060 bytes .../d98f35e926c11f3d5c0c8e3205d43907.ttf | Bin 0 -> 25360 bytes .../d9e6a498dac7e9e91f6e0b4f8930eba0.woff2 | Bin 0 -> 10532 bytes .../da6cd48e6dad1888fccc91735e7522f7.woff2 | Bin 0 -> 10652 bytes .../daf12b5f1889502004bba85ad71f9fa4.woff2 | Bin 0 -> 7540 bytes .../daf51ab540602b2d0b87646621637bac.woff2 | Bin 0 -> 7112 bytes .../db0424fb67fb52e7e538490240cc7fb9.woff2 | Bin 0 -> 17368 bytes .../dc25cbf4baaf778bd8ae78fbc0e79479.woff2 | Bin 0 -> 14052 bytes .../dd719f1662079ce6a61260f9af972379.woff2 | Bin 0 -> 9876 bytes .../de018865c95896bb57265fc97c48ebd7.woff2 | Bin 0 -> 8108 bytes .../e33716333704ab19fdf9989e072ad49a.woff2 | Bin 0 -> 5928 bytes .../e56cc9fb5272752b78f144b4be43175d.woff2 | Bin 0 -> 7608 bytes .../e704ef18719c08839bc99a32437ef0f8.woff2 | Bin 0 -> 16700 bytes .../e99627cd27de169d23ece4573006af2a.woff2 | Bin 0 -> 15304 bytes .../ef8f0236a7e8b46bc9d642ecf4ab0cb7.woff2 | Bin 0 -> 1500 bytes .../f154d62b4879af7a22895af7a4ef03f0.woff2 | Bin 0 -> 10276 bytes .../f17ee050ada0453f3bd07bc466c2dde2.woff2 | Bin 0 -> 10564 bytes .../f265cee675c0e5b2d6ab263d0edcc754.woff2 | Bin 0 -> 14856 bytes .../f2f69e8cd15fdd15a4244c95ec8a8514.woff2 | Bin 0 -> 10344 bytes .../f534242dea2255c25b9d05c2371986e3.woff2 | Bin 0 -> 6380 bytes .../f53f3b5a15d717b6d21d7885285e90ed.woff2 | Bin 0 -> 12864 bytes .../f55dac651a40fce74a5cf5728d9f8ffc.woff2 | Bin 0 -> 9784 bytes .../f5aebdfea35d1e7656ef4acc5db1f243.woff2 | Bin 0 -> 15860 bytes .../f5f971e9640a9eb86ef553a7e7e999c7.woff2 | Bin 0 -> 6048 bytes .../f6734f8177112c0839b961f96d813fcb.woff2 | Bin 0 -> 15744 bytes .../f75911313e1c7802c23345ab57e754d8.woff2 | Bin 0 -> 15740 bytes .../fb17f56622e45dd4ecee00bb5c63cd2b.woff2 | Bin 0 -> 4580 bytes .../fb1aaa90783b8cb9375265abeb91b153.woff2 | Bin 0 -> 15336 bytes .../fc66f942651a9fe1a598770d3d896529.woff2 | Bin 0 -> 11824 bytes _static/language_data.js | 199 ++++++ _static/sphinx-watermark_manual_v2.0.0.pdf | Bin 0 -> 1356039 bytes _static/sphinx.ico | Bin 0 -> 3262 bytes ...immaterial_theme.359ec555e2989f00f.min.css | 4 + ..._immaterial_theme.f9d9eeeb247ace16c.min.js | 27 + _static/watermark.css | 6 + _static/watermark_text.png | Bin 0 -> 52164 bytes genindex.html | 398 +++++++++++ index.html | 456 ++++++++++++ installation.html | 453 ++++++++++++ objects.inv | Bin 0 -> 711 bytes options.html | 671 ++++++++++++++++++ py-modindex.html | 405 +++++++++++ relnotes.html | 574 +++++++++++++++ searchindex.js | 1 + sitemap.xml | 1 + source.html | 572 +++++++++++++++ troubleshooting.html | 449 ++++++++++++ usage.html | 511 +++++++++++++ 222 files changed, 6247 insertions(+) create mode 100644 _modules/__init__.html create mode 100644 _modules/index.html create mode 100644 _sources/index.rst.txt create mode 100644 _sources/installation.rst.txt create mode 100644 _sources/options.rst.txt create mode 100644 _sources/relnotes.rst.txt create mode 100644 _sources/source.rst.txt create mode 100644 _sources/troubleshooting.rst.txt create mode 100644 _sources/usage.rst.txt create mode 100644 _static/fonts/0053ba6958e79f26751eabb555bd73d0.woff2 create mode 100644 _static/fonts/029e176ad602329b4434892101db9cf3.woff2 create mode 100644 _static/fonts/07ff82964967feebb9c96288e0e0df05.woff2 create mode 100644 _static/fonts/0948409a22b5979aa7e1ec20da9e61f1.woff2 create mode 100644 _static/fonts/0a0ad0eae50e549ecd713b9ad417f1a1.woff2 create mode 100644 _static/fonts/0b68e8634c96265eb32a0c769416b5b0.woff2 create mode 100644 _static/fonts/0d1b73eee266eabb2cff35dfa4ce25a3.woff2 create mode 100644 _static/fonts/0e1f73c6737cdf273efb4b79504e4c0a.woff2 create mode 100644 _static/fonts/0e326670106c8eb6a11a8c30734ecfc8.ttf create mode 100644 _static/fonts/0ec3cc19652785204ea2e322330f0f1b.woff2 create mode 100644 _static/fonts/0f303f31706d39866cced9dcc17b61fb.woff2 create mode 100644 _static/fonts/101522bafe9c61c68698ecc784607772.woff2 create mode 100644 _static/fonts/10b31f4cad9ea78d43449886bfbb88ac.woff2 create mode 100644 _static/fonts/1181a8e619707033241139715eca64c6.woff2 create mode 100644 _static/fonts/122802d03aed4bf8cd6a03997a97aca4.woff2 create mode 100644 _static/fonts/1383417807f7965daaf94e7c497dcddb.woff2 create mode 100644 _static/fonts/144860ed1e48e186f08997e6388a9c3f.woff2 create mode 100644 _static/fonts/1488146d8b2e9859d6c90e6c2b48f7ef.woff2 create mode 100644 _static/fonts/1512b579343c6b61c7523cdd838d8328.ttf create mode 100644 _static/fonts/1c9cc76fd52238330f0aabac35acd2ca.woff2 create mode 100644 _static/fonts/1f1481679a64a39f3427547aa1b13f0f.woff2 create mode 100644 _static/fonts/2096d27efc16cbdd79183bf295c8ebde.ttf create mode 100644 _static/fonts/20dc200cc43ab904876fb0c1697ebe39.woff2 create mode 100644 _static/fonts/214adfc289a2f2af8b0008c59ed0c7f2.woff2 create mode 100644 _static/fonts/21953b998bab09c1f60c599caee56378.woff2 create mode 100644 _static/fonts/22aadc77cafa07b2db9ed560d0320616.woff2 create mode 100644 _static/fonts/2325b97b584755067ea4f7f56ee05430.woff2 create mode 100644 _static/fonts/2550c2e2d8495c3ed2d4d52f824374f1.woff2 create mode 100644 _static/fonts/255cf41e0317d95e3992683a76ef28a8.woff2 create mode 100644 _static/fonts/25c52b9af13f0d1b10719f5289e8c803.woff2 create mode 100644 _static/fonts/2781e9e7c3f369b8fc7965e679b17b60.woff2 create mode 100644 _static/fonts/28e6b81b1bc1964707edd4179e4268f5.ttf create mode 100644 _static/fonts/2a8c422bef4a7099e99dbf0e61ed5e49.woff2 create mode 100644 _static/fonts/2aadfad5aee7ceeaf4eb0924efabe5b4.ttf create mode 100644 _static/fonts/2c0f74be498d2da814c0a84dd6833f70.woff2 create mode 100644 _static/fonts/2e10480d4154762bc7c8fbb40877e104.woff2 create mode 100644 _static/fonts/2ea7a97b7c976b121112a088eb398561.woff2 create mode 100644 _static/fonts/2f5c32f094829c0278bce28fe2bbe074.ttf create mode 100644 _static/fonts/2f7c3c315334a99574ee4ceb21af654d.woff2 create mode 100644 _static/fonts/302b0425bf5ea66f37a822a61d723adc.ttf create mode 100644 _static/fonts/3177dacffeac1eb4102852811ae4a2c7.woff2 create mode 100644 _static/fonts/3254c528e2ab56454a9f22191035c5fe.ttf create mode 100644 _static/fonts/32c8a74ac0816253d69a7cc68a60986d.woff2 create mode 100644 _static/fonts/33c5d27ca0eaeb12ebe728ae2fc7106d.woff2 create mode 100644 _static/fonts/36e39c6463ae1c71c71e69c05e593e1b.woff2 create mode 100644 _static/fonts/3728fbdd191d75bad5b83a838dfe2fc1.woff2 create mode 100644 _static/fonts/38f3ee1f96b758f95672c632d8759594.ttf create mode 100644 _static/fonts/392ff374142585f7b886ee1fe66e686e.woff2 create mode 100644 _static/fonts/3a38c967413f7bce36d3baefc321aade.woff2 create mode 100644 _static/fonts/3c23eb02de6b34e30f18cfb7167abd81.woff2 create mode 100644 _static/fonts/3c505383d37d2078648e37868bbd1fad.woff2 create mode 100644 _static/fonts/3cf78ad3bcd1324e10a4acdc34bfc4a1.woff2 create mode 100644 _static/fonts/3f1918538864f9681d47a4538d48289c.woff2 create mode 100644 _static/fonts/4039566f251699c4b421ed1a38a59b24.woff2 create mode 100644 _static/fonts/4207cbc8cb7bc2cbd0bcce565298cbbc.woff2 create mode 100644 _static/fonts/43358c04243de546caddd0898dbf0757.woff2 create mode 100644 _static/fonts/435e4b7f9f250d9d9243d4754799fc96.woff2 create mode 100644 _static/fonts/437939342255944b82a49f916404c5fc.woff2 create mode 100644 _static/fonts/455c2c1af0a2bf20047a1864d7d7c174.woff2 create mode 100644 _static/fonts/47aa3bfad6cb9e2d63abdd58f4e6ce4f.woff2 create mode 100644 _static/fonts/495d38d4b9741e8aa4204002414069e2.woff2 create mode 100644 _static/fonts/4c815fdc869f885520f7c8eae6730edf.woff2 create mode 100644 _static/fonts/4ec57f2a80b91090971b83970230ca09.woff2 create mode 100644 _static/fonts/4f17f22fc6bff4f3333ccf7ed7126e6d.woff2 create mode 100644 _static/fonts/4f93c2808e3b69e525c118074e5de31f.woff2 create mode 100644 _static/fonts/50aacf068f685be0dd903a91d5bab7d8.woff2 create mode 100644 _static/fonts/51f3f41805329fb8341beb56ded833ea.woff2 create mode 100644 _static/fonts/52f28cb4d065b4adfa78df4f9559c639.woff2 create mode 100644 _static/fonts/555ceea3a65ffbbecf8b7e6d04966c7f.woff2 create mode 100644 _static/fonts/5989ef3a21d7f252337ab3326f78bde7.woff2 create mode 100644 _static/fonts/5b6377da4c959db6d4b22738a27f1bee.woff2 create mode 100644 _static/fonts/5ce47d5195e59af38114d0b70217baf2.woff2 create mode 100644 _static/fonts/5d7ff31ac7bf945e8d61878f8a941239.woff2 create mode 100644 _static/fonts/5dc0e4b14e903ba7f45c581df7402b3f.woff2 create mode 100644 _static/fonts/60eb682678bbea5e8ad71f66f2f65536.woff2 create mode 100644 _static/fonts/63111d307c01b52ffccf7b0319cb7917.woff2 create mode 100644 _static/fonts/638764dc2513deb09c55fc025f6dd36c.woff2 create mode 100644 _static/fonts/63f4b74ebf127dbeb033126ea988f54e.woff2 create mode 100644 _static/fonts/64a6b4e954cf84685cbf8de77eb47344.woff2 create mode 100644 _static/fonts/661d4b208656c006e7aab58acf778485.woff2 create mode 100644 _static/fonts/6725a7e91680edd1cdc9ed5c26ac05fd.woff2 create mode 100644 _static/fonts/6a84eeee6a25e7c9a8a03191007a6720.woff2 create mode 100644 _static/fonts/6ac1ee292434fac2313c42b0dfb7897c.ttf create mode 100644 _static/fonts/6ad3f6bbe6220cc476a0d3c731d3fb04.ttf create mode 100644 _static/fonts/6be97ca17228a69c406231d89c003194.woff2 create mode 100644 _static/fonts/6de03a64aa8100032abc6e836b3ed803.ttf create mode 100644 _static/fonts/6deb20301c65a96db17c433ad0cf8158.woff2 create mode 100644 _static/fonts/6f8d857c5a8545e67de6b60aa0fe5c33.woff2 create mode 100644 _static/fonts/713780d8b30bda5583052ea847cdcb4f.woff2 create mode 100644 _static/fonts/71e06579279fba7436d58a1c49288909.ttf create mode 100644 _static/fonts/765bd4a97597a4d7781193793477a6cd.ttf create mode 100644 _static/fonts/76945c7494c20515bb45d1dedab8f706.woff2 create mode 100644 _static/fonts/76da333ab59c6d625cabfb0768f82b4a.woff2 create mode 100644 _static/fonts/770518db51bed1e082feecc532cfcbf8.woff2 create mode 100644 _static/fonts/77b24796a3d4ab521f66765651875338.woff2 create mode 100644 _static/fonts/77ff81100e5a1db3d925f713660700ad.woff2 create mode 100644 _static/fonts/78a9265759e7b861a1639a36f4c01d04.woff2 create mode 100644 _static/fonts/7af61b2367eba2b1852e837c46a75696.woff2 create mode 100644 _static/fonts/7b63598dcc2a26583b82594bd0e36d5b.woff2 create mode 100644 _static/fonts/7b8c2179b6b778308d2ff39bdb82e926.woff2 create mode 100644 _static/fonts/7e262106f82cc52663e403f5b73795bb.woff2 create mode 100644 _static/fonts/7f1c829b0c90fd664a03bb714a74f7d3.woff2 create mode 100644 _static/fonts/7fa86b886bee5d6ab420a8e89b9f3052.ttf create mode 100644 _static/fonts/8007dfe835cfb201b8caaa9651098588.woff2 create mode 100644 _static/fonts/83614c36460a4a9734968789cb535de7.woff2 create mode 100644 _static/fonts/84e959dd07f302392f0ffd86f87db888.ttf create mode 100644 _static/fonts/85a41b80c5fdc14e3dc48636a30d87dd.woff2 create mode 100644 _static/fonts/870e5928dd14fcfe0ce9386107666774.woff2 create mode 100644 _static/fonts/8898c4b754d5d96c1a5e1b1d54100554.woff2 create mode 100644 _static/fonts/89b4f174a5a728d2d8c85b87990c9ab4.ttf create mode 100644 _static/fonts/8a8dca39f24b52e89e6fd6dcd8b6dd32.woff2 create mode 100644 _static/fonts/8aa562790559d61dd5178a88a296d70f.ttf create mode 100644 _static/fonts/8c3798e37724f71bc0c63c44a5307413.woff2 create mode 100644 _static/fonts/8c49ed8b472d38d3985ec9bbbccea601.ttf create mode 100644 _static/fonts/8e48cf20cf9f9e5feb7197c79028132b.woff2 create mode 100644 _static/fonts/9095d663e4d450059bcc2260bb75cd62.woff2 create mode 100644 _static/fonts/90ebb29b5cffa197b184773983ba7e91.woff2 create mode 100644 _static/fonts/93b6c99d936df38895a0d95e3ffea2fd.woff2 create mode 100644 _static/fonts/9582ced8a675bf267cc7ac392a86413e.woff2 create mode 100644 _static/fonts/99be4d68845d66c27c7f7d3a48687b66.woff2 create mode 100644 _static/fonts/99cf36e763be9cce7b4c59b91841af58.woff2 create mode 100644 _static/fonts/9a9bf2d91ebbb1b96eab8eb0b0514bcc.woff2 create mode 100644 _static/fonts/9bcbc88b33b2efc2aee821b831499f1c.woff2 create mode 100644 _static/fonts/9c9be791a58af8a04c611ca1d13f51c6.woff2 create mode 100644 _static/fonts/9fdb12ceee3a402d3a54afe354552459.woff2 create mode 100644 _static/fonts/a6933e678530b263486fa7b185a449ca.woff2 create mode 100644 _static/fonts/a6caf7b9888eb0c382948c1ca5e8bebb.woff2 create mode 100644 _static/fonts/a70ff2592da5e3453943f727633aff54.woff2 create mode 100644 _static/fonts/aa28d99c7db60ad23f96a5c317615c42.woff2 create mode 100644 _static/fonts/aab05142e0e2dadf7df633e061e612ad.woff2 create mode 100644 _static/fonts/ab03beb9091fa15ce4e783199e076bc6.woff2 create mode 100644 _static/fonts/ac848474638236e67a64bc654fb18de0.ttf create mode 100644 _static/fonts/acaac043ca238f0e56e61864456777fa.woff2 create mode 100644 _static/fonts/aeed0e51b0bac7c89e5c7e6cf086d7e0.woff2 create mode 100644 _static/fonts/b019538234514166ec7665359d097403.woff2 create mode 100644 _static/fonts/b076e86301cbee8c5c9aef51863a9c0a.woff2 create mode 100644 _static/fonts/b19ac4e57f2a56639eebd1c35319e5a7.woff2 create mode 100644 _static/fonts/b4d3c40a77fd9e35a881a79077957055.woff2 create mode 100644 _static/fonts/b4e42731e8d667ae87c3450c345754ae.woff2 create mode 100644 _static/fonts/b57a5ada789f195d5d42f4073a6cf313.woff2 create mode 100644 _static/fonts/b5b4146d87e5d22d0a4e0d04f3ee5626.woff2 create mode 100644 _static/fonts/b7ef2cd1159a8cbfd271ff2abe07f237.woff2 create mode 100644 _static/fonts/b93199bb6f964f190f4da04ecdbaf5a4.woff2 create mode 100644 _static/fonts/bb8007225d94a099cddbade7ea904667.woff2 create mode 100644 _static/fonts/bc67bba106323289ea3eda0826de1912.ttf create mode 100644 _static/fonts/bcd47c2f3649cfcaa86a08fb741255d6.woff2 create mode 100644 _static/fonts/bd0efe13f0d9d591b337ddc7f289f494.woff2 create mode 100644 _static/fonts/bd51fb0ca67e64c809ffcf7e1370f969.woff2 create mode 100644 _static/fonts/bdbb6b52604c2451fdcba9cdfd44f4e1.woff2 create mode 100644 _static/fonts/bf2ad3287f13eb7076cccb516ec2986f.ttf create mode 100644 _static/fonts/bfd1a0c9c783e84595589f33e1828a57.woff2 create mode 100644 _static/fonts/c13b34dd5b6a35b309944b61c91b2ace.woff2 create mode 100644 _static/fonts/c22066c14662d6c80415ae04c5dd9d51.woff2 create mode 100644 _static/fonts/c28a41f656599f6694528b5463c6a445.woff2 create mode 100644 _static/fonts/c6dc61b627bbc5af9130518297bd4f17.ttf create mode 100644 _static/fonts/c8a9fd4eab4e83382cc66fde70911b41.woff2 create mode 100644 _static/fonts/ca7eea0cf248d6e8442c01074765bd33.woff2 create mode 100644 _static/fonts/cadfb311297a9362b07fab73934b432a.ttf create mode 100644 _static/fonts/cbfd26d5bcf084ee407a0b2b7599e84b.woff2 create mode 100644 _static/fonts/ccdebed88064e470c15f37c432922e57.woff2 create mode 100644 _static/fonts/cce2217cc8323fe49789adefb3596291.woff2 create mode 100644 _static/fonts/cd3d1f17e048e2116f438bd7157baccf.woff2 create mode 100644 _static/fonts/d07f561ba87d93460742b060727d9e0d.woff2 create mode 100644 _static/fonts/d368cf5bed7856dbafa2af36b51acb9c.woff2 create mode 100644 _static/fonts/d422317033deb87342a5e56c7be67458.ttf create mode 100644 _static/fonts/d6f9cdf1a40893111566fcdee3bbe5a9.woff2 create mode 100644 _static/fonts/d98f35e926c11f3d5c0c8e3205d43907.ttf create mode 100644 _static/fonts/d9e6a498dac7e9e91f6e0b4f8930eba0.woff2 create mode 100644 _static/fonts/da6cd48e6dad1888fccc91735e7522f7.woff2 create mode 100644 _static/fonts/daf12b5f1889502004bba85ad71f9fa4.woff2 create mode 100644 _static/fonts/daf51ab540602b2d0b87646621637bac.woff2 create mode 100644 _static/fonts/db0424fb67fb52e7e538490240cc7fb9.woff2 create mode 100644 _static/fonts/dc25cbf4baaf778bd8ae78fbc0e79479.woff2 create mode 100644 _static/fonts/dd719f1662079ce6a61260f9af972379.woff2 create mode 100644 _static/fonts/de018865c95896bb57265fc97c48ebd7.woff2 create mode 100644 _static/fonts/e33716333704ab19fdf9989e072ad49a.woff2 create mode 100644 _static/fonts/e56cc9fb5272752b78f144b4be43175d.woff2 create mode 100644 _static/fonts/e704ef18719c08839bc99a32437ef0f8.woff2 create mode 100644 _static/fonts/e99627cd27de169d23ece4573006af2a.woff2 create mode 100644 _static/fonts/ef8f0236a7e8b46bc9d642ecf4ab0cb7.woff2 create mode 100644 _static/fonts/f154d62b4879af7a22895af7a4ef03f0.woff2 create mode 100644 _static/fonts/f17ee050ada0453f3bd07bc466c2dde2.woff2 create mode 100644 _static/fonts/f265cee675c0e5b2d6ab263d0edcc754.woff2 create mode 100644 _static/fonts/f2f69e8cd15fdd15a4244c95ec8a8514.woff2 create mode 100644 _static/fonts/f534242dea2255c25b9d05c2371986e3.woff2 create mode 100644 _static/fonts/f53f3b5a15d717b6d21d7885285e90ed.woff2 create mode 100644 _static/fonts/f55dac651a40fce74a5cf5728d9f8ffc.woff2 create mode 100644 _static/fonts/f5aebdfea35d1e7656ef4acc5db1f243.woff2 create mode 100644 _static/fonts/f5f971e9640a9eb86ef553a7e7e999c7.woff2 create mode 100644 _static/fonts/f6734f8177112c0839b961f96d813fcb.woff2 create mode 100644 _static/fonts/f75911313e1c7802c23345ab57e754d8.woff2 create mode 100644 _static/fonts/fb17f56622e45dd4ecee00bb5c63cd2b.woff2 create mode 100644 _static/fonts/fb1aaa90783b8cb9375265abeb91b153.woff2 create mode 100644 _static/fonts/fc66f942651a9fe1a598770d3d896529.woff2 create mode 100644 _static/language_data.js create mode 100644 _static/sphinx-watermark_manual_v2.0.0.pdf create mode 100644 _static/sphinx.ico create mode 100644 _static/sphinx_immaterial_theme.359ec555e2989f00f.min.css create mode 100644 _static/sphinx_immaterial_theme.f9d9eeeb247ace16c.min.js create mode 100644 _static/watermark.css create mode 100644 _static/watermark_text.png create mode 100644 genindex.html create mode 100644 index.html create mode 100644 installation.html create mode 100644 objects.inv create mode 100644 options.html create mode 100644 py-modindex.html create mode 100644 relnotes.html create mode 100644 searchindex.js create mode 100644 sitemap.xml create mode 100644 source.html create mode 100644 troubleshooting.html create mode 100644 usage.html diff --git a/_modules/__init__.html b/_modules/__init__.html new file mode 100644 index 0000000..5fec169 --- /dev/null +++ b/_modules/__init__.html @@ -0,0 +1,661 @@ + + + + + + + + + + + + + + + + __init__ - Sphinx Watermark v2.0.0 User Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + +
+
+ + + + + + + + +

Source code for __init__

+#!/bin/python3
+# coding: utf-8
+'''
+A Sphinx extension that enables watermarks for HTML output.
+
+Project Source: https://github.com/JoKneeMo/sphinx-watermark
+
+Copyright 2024 - JoKneeMo
+
+Licensed under GNU General Public License version 3 (GPLv3).
+
+Commit 0762fdef2eabead5edf99e393becc2cd5a926f11 and older
+are licensed under Apache License, Version 2.0 and
+copyrighten 2021 by Brian Moss
+
+Original project: https://github.com/kallimachos/sphinxmark
+'''
+
+__author__ =    'JoKneeMo <https://github.com/JoKneeMo>'
+__email__ =     '421625+JoKneeMo@users.noreply.github.com'
+__copyright__ = '2024 - JoKneeMo'
+__license__ =   'GPLv3'
+__version__ =   '2.0.0'
+__keywords__ =  ['Python3', 'Sphinx', 'Extension', 'watermark']
+
+from pathlib import Path
+from shutil import copy
+from string import Template
+from PIL import Image, ImageDraw, ImageFont
+from sphinx.application import Sphinx
+from sphinx.environment import BuildEnvironment
+from sphinx.util import logging
+import collections
+
+logger = logging.getLogger(__name__)
+
+watermark_config = {
+    'enabled': False,
+    'selector': {
+        'type': 'div',
+        'class': 'body'
+    },
+    'position': {
+        'margin': None,
+        'repeat': True,
+        'fixed': False
+    },
+    'image': None,
+    'text': {
+        'content': None,
+        'align': 'center',
+        'font': 'RubikDistressed',
+        'color': (255, 0, 0),
+        'opacity': 40,
+        'size': 100,
+        'rotation': 0,
+        'width': 816,
+        'spacing': 400,
+        'border': {
+            'outline': (255, 0, 0),
+            'fill': None,
+            'width': 10,
+            'padding': 30,
+            'radius': 20,
+        }
+    }
+}
+
+
[docs]def generate_css(app: Sphinx, buildpath: str, imagefile: str) -> str: + '''Create CSS file.''' + # set default values + repeat = 'repeat-y' if watermark_config['position']['repeat'] else 'no-repeat' + attachment = 'fixed' if watermark_config['position']['fixed'] else 'scroll' + position = 'center' + + if watermark_config['position']['margin'] is not None: + css_template = Template('''${selector}.${selector_class} { + border-${side}: 100px solid transparent; + padding: 15px; + -webkit-border-image: url(${image}) 20% round; + -o-border-image: url(${image}) 20% round; + border-image: url(${image}) 20% 100% repeat; + }''') + else: + css_template = Template('''${selector}.${selector_class} { + background-image: url("${image}") !important; + background-repeat: ${repeat} !important; + background-position: ${position} top !important; + background-attachment: ${attachment} !important; + }''') + + css = css_template.substitute( + selector=watermark_config['selector']['type'], + selector_class=watermark_config['selector']['class'], + image=imagefile, + repeat=repeat, + attachment=attachment, + position=position, + side=watermark_config['position']['margin'] + ) + + logger.debug(f'[watermark] Template: {css}') + cssname = 'watermark.css' + cssfile = Path(buildpath, cssname) + + with open(cssfile, 'w') as f: + f.write(css) + + return cssname
+ + +
[docs]def createimage(app: Sphinx, srcdir: Path, buildpath: Path) -> str: + '''Create PNG image from string.''' + text_content = watermark_config['text']['content'] + + # draw transparent background + width = watermark_config['text']['width'] + height = watermark_config['text']['spacing'] + img = Image.new('RGBA', (width, height), (255, 255, 255, 0)) + d = ImageDraw.Draw(img) + + # set font + fontfile = str(Path(srcdir,'fonts', watermark_config['text']['font'] + '.ttf')) + font = ImageFont.truetype(fontfile, watermark_config['text']['size']) + + # set x y location for text + left, top, right, bottom = d.textbbox((-5, -20), text_content, font=font, align=watermark_config['text']['align']) + xsize, ysize = (right - left, bottom - top) + x = (width / 2) - (xsize / 2) + y = (height / 2) - (ysize / 2) + logger.debug(f'[watermark] Left: {left}, Right: {right}, Top: {top}, Bottom: {bottom}, xsize: {xsize}, ysize: {ysize}, Width: {width}, Height: {height}, x: {x}, y: {y}') + + # add text to image + d.text((x-5, y-25), text_content, font=font, align=watermark_config['text']['align'], fill=watermark_config['text']['color']) + + # Add border around text + padding = watermark_config['text']['border']['padding'] + border_x0 = x - padding + border_y0 = y - padding + border_x1 = x + xsize + padding - 5 + border_y1 = y + ysize + padding - 10 + d.rounded_rectangle([border_x0, border_y0, border_x1, border_y1], radius=watermark_config['text']['border']['radius'], fill=watermark_config['text']['border']['fill'], width=watermark_config['text']['border']['width'], outline=watermark_config['text']['border']['outline']) + + # set opacity + img2 = img.copy() + img2.putalpha(watermark_config['text']['opacity']) + img.paste(img2, img) + + # rotate image + img = img.rotate(watermark_config['text']['rotation']) + + # save image + imagefile = f'watermark_text.png' + imagepath = Path(buildpath, imagefile) + img.save(imagepath, 'PNG') + logger.debug(f"[watermark] Image saved to: {imagepath}") + + return imagefile
+ + +
[docs]def get_image(app: Sphinx) -> tuple: + '''Get image file.''' + srcdir = Path(__file__).parent.resolve() + confdir = str(app.confdir) + + if app.config.html_static_path: + staticpath = app.config.html_static_path[0] + else: + staticpath = '_static' + + buildpath = Path(app.outdir, staticpath) + + logger.debug(f"[watermark] static path: {staticpath}") + try: + buildpath.mkdir() + except OSError: + if not buildpath.is_dir(): + raise + + if (watermark_config['image'] is not None) and (watermark_config['text']['content'] is not None): + '''Validate selection of image or text''' + raise TypeError('image and text.content should not *both* contain a value, remove one and try again') + elif (watermark_config['image'] is not None) and (len(watermark_config['image']) >= 1): + '''Copy configured image to build output''' + imagefile = watermark_config['image'] + imagepath = Path(confdir, staticpath, imagefile) + logger.debug(f"[watermark] Using configured image: {imagepath}") + try: + copy(imagepath, buildpath) + except FileNotFoundError: + logger.error('Unable to copy image') + raise + elif (watermark_config['text']['content'] is not None) and (len(watermark_config['text']['content']) >= 1): + '''Creating an image from text content''' + imagefile = createimage(app, srcdir, buildpath) + logger.debug(f"[watermark] Image: {imagefile}") + else: + '''Final fail''' + raise TypeError("Something went awry, it's likely that either image or text.content has a length <= 1.") + + return (buildpath, imagefile)
+ + +
[docs]def generate_watermark(app: Sphinx, env: BuildEnvironment) -> None: + '''Generate watermark''' + + if isinstance(app.config.watermark['selector'], str): + selector_class = str(app.config.watermark['selector']) + app.config.watermark['selector'] = {'class': selector_class} + logger.debug(f"[watermark] Selector was a string: {app.config.watermark['selector']}") + + if isinstance(app.config.watermark['text'], str): + text_content = str(app.config.watermark['text']) + app.config.watermark['text'] = {'content': text_content} + logger.debug(f"[watermark] Text was a string: {app.config.watermark['text']}") + + deep_update(watermark_config, app.config.watermark) + + logger.debug(f"[watermark] App Config: {app.config.watermark}") + logger.debug(f"[watermark] Watermark Config: {watermark_config}") + + if watermark_config['enabled'] is True: + logger.info('Adding watermark...', nonl=True) + try: + buildpath, imagefile = get_image(app) + cssname = generate_css(app, buildpath, imagefile) + app.add_css_file(cssname) + logger.info(' done') + except Exception as e: + logger.warning(f"Failed to add watermark: {e}") + else: + logger.info('Not loading watermark') + + return
+ +
[docs]def deep_update(source, overrides): + ''' + Update a nested dictionary or similar mapping. + Modify ``source`` in place. + ''' + for key, value in overrides.items(): + if isinstance(value, collections.abc.Mapping) and value: + returned = deep_update(source.get(key, {}), value) + source[key] = returned + else: + source[key] = overrides[key] + return source
+ + +
[docs]def setup(app: Sphinx) -> dict: + '''Configure setup for Sphinx extension. + + :param app: Sphinx application context. + ''' + app.add_config_value('watermark', watermark_config, 'html') + app.connect('env-updated', generate_watermark) + + return { + 'version': __version__, + 'parallel_read_safe': True, + 'parallel_write_safe': True, + }
+
+ + + + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 0000000..52b782a --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,400 @@ + + + + + + + + + + + + + + + + Overview: module code - Sphinx Watermark v2.0.0 User Manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ +
+ + + + + + +
+ + +
+ +
+ + + + + + + + +
+
+ + + +
+
+
+ + + + + + +
+
+
+ + + + +
+
+ + + + + + + + +

All modules for which code is available

+ + + + + + + +
+
+ + + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000..213447c --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,64 @@ +================ +Sphinx Watermark +================ +.. image:: https://img.shields.io/badge/License-GPL%20v3-blue.svg + :target: https://www.gnu.org/licenses/gpl-3.0 + :alt: GPL3 License + +.. image:: https://api.codeclimate.com/v1/badges/d689b89f5ae6836ad88c/maintainability + :target: https://codeclimate.com/github/JoKneeMo/sphinx-watermark/maintainability + :alt: Maintainability + +.. image:: https://img.shields.io/pypi/status/sphinx-watermark.svg?style=flat + :target: https://pypi.python.org/pypi/sphinx-watermark + :alt: Project Status + +.. image:: https://img.shields.io/pypi/v/sphinx-watermark.svg?style=flat + :target: https://pypi.python.org/pypi/sphinx-watermark + :alt: Package Version + + +**sphinx-watermark** is an extension for Sphinx that enables watermarks for +HTML output. + +Full documentation: https://jokneemo.github.io/sphinx-watermark + + +*********** +Why a Fork? +*********** +Forked from `kallimachos/sphinxmark `_ + +This fork was created primarily to remove the dependency on bottle, and to +support updates to Sphinx v7, Docutils, and Pillow. + +Some themes perform differently in newer version of Docutils. +The main issues faced are html elements are changed between div, section, +article, etc. + +Sphinxmark only supported div elements and the configuration changes I made to +support it were too expansive for a simple pull request. See below for all of +the enhancements added. + + +What's Different? +~~~~~~~~~~~~~~~~~ +- Removed bottle dependency +- HTML element selection +- Static png name to support spaces in text +- Collection of fonts + + - See the `fonts directory `_. + +- Customizable border + + +.. toctree:: + :hidden: + + installation + usage + options + troubleshooting + relnotes + source diff --git a/_sources/installation.rst.txt b/_sources/installation.rst.txt new file mode 100644 index 0000000..d1c16d6 --- /dev/null +++ b/_sources/installation.rst.txt @@ -0,0 +1,16 @@ +============ +Installation +============ + +Install sphinx-watermark using pip: + +.. code-block:: bash + + $ pip3 install sphinx-watermark + +.. note:: + + Sphinx Watermark uses the `Pillow module `_ for creating PNG + files. If you encounter ``C module is not installed`` errors when Sphinx loads the sphinx-watermark + extension, you may need to install some of the `external libraries + `_ for Pillow. diff --git a/_sources/options.rst.txt b/_sources/options.rst.txt new file mode 100644 index 0000000..025d0a0 --- /dev/null +++ b/_sources/options.rst.txt @@ -0,0 +1,218 @@ +======= +Options +======= + +:**enabled (bool)**: + + - ``True`` - enable watermarks + - ``False`` - disable watermarks + - Default: ``False`` + + .. code-block:: python + + watermark = { + 'enabled': False + } + + +:**selector (dict or string)**: + + Short form is a string, setting the class name of a div element. + + Long form is a dictionary, specifying an html element type and it's class. + + :**type (string)**: + HTML element type to apply the watermark to. + + - Default: ``div`` + + :**class (string)**: + CSS class, applied to the type, where watermark is displayed + + - Default: ``body`` + - Examples for common themes: + + sphinx_rtd_theme -> ``'class': 'document'`` + + openstackdocstheme -> ``'class': 'docs-body'`` + + sphinx_book_theme -> ``'class': 'row#main-content'`` + + sphinx_immaterial -> ``'class': 'md-main__inner'`` + + .. code-block:: python + + watermark = { + 'selector': { + 'type': 'div', + 'class': 'body' + } + } + +:**postion (dict)**: + + :**margin (string)**: + + - ``left`` - place watermark in the left page margin + - ``right`` - place watermark on right page margin + - Default: ``None`` + + :**repeat (bool)**: + + - ``True`` - image repeats down the page + - ``False`` - image appears once at top of page + - Default: ``True`` + + :**fixed (bool)**: + + - ``True`` - watermark does not scroll with content + - ``False`` - watermark scrolls with content + - When set to ``True``, this option centers the watermark in the viewport, + not the element specified by ``selector``. + - Default: ``False`` + + .. code-block:: python + + watermark = { + 'position': { + 'margin': None, + 'repeat': True, + 'fixed': False + } + } + + +:**image (string)**: + + - image file name in ``html_static_path`` directory to use as watermark + - Should not be used if text.content is set. + - Default: ``None`` + + .. code-block:: python + + watermark = { + 'image': None + } + + +:**text (dict or string)**: + + Short form is a string, setting the text content and the rest default. + + Long form is a dictionary, specifying an custom options. + + :**content (string)**: + Text to insert into the watermark. + + Use ``\n`` for multiline text. + + - Default: ``None`` + + :**align** (string)**: + + - ``left`` - Left justify the text.content + - ``right`` - Right justify the text.content + - ``center`` - Center justify the text.content + - Default: ``center`` + + :**font (string)**: + Which font should be used to render the text. + + - Anton + - Gluten + - KodeMono + - RobotoMono + - RubikDistressed + - ShantellSans + - Default: ``RubikDistressed`` + + :**color (int tuple)**: + RGB Value in as a tuple of integers + + - Default: ``(255, 0, 0)`` (Red) + + :**opacity (int)**: + RGB Alpha, or how transparent should the watermark be + + - Default: ``40`` + + :**size (int)**: + Font size, in pixels, for the watermark text.content + + - Default: ``100`` + + :**rotation (int)**: + Degrees of rotation for the entire watermark. + + - Default: ``0`` + + :**width (int)**: + Width, in pixels, of transparent box containing the watermark text.content + + If a large text.size is specified, or the text.content string is long, + you may need to set this option to a number higher than the default for + the entire string to display. + + Note that the text will be cut off at the edge of the containing CSS div + regardless of the width setting. + + - Default: ``816`` + + :**spacing (int)**: + Spacing, in pixels, between text watermarks when repeated, and the text line height + + - Default: ``400`` + + :**border (dict)**: + Draws a border around the watermark image. + + :**outline (int tuple)**: + RGB Value in as a tuple of integers + + - Default: ``(255, 0, 0)`` (Red) + + :**fill (int tuple)**: + RGB Value in as a tuple of integers to fill the watermark background. + + - Default: ``None`` + + :**width (int)**: + How wide, in pixels, the border should be. + + - Default: ``10`` + + :**padding (int)**: + How much spacing, in pixels, should be between text.content and the border. + + - Default: ``30`` + + :**radius (int)**: + How round, in pixels, the corners of the border should be. + + - Default: ``20`` + + .. code-block:: python + + watermark = { + 'text': { + 'content': None, + 'align': 'center', + 'font': 'RubikDistressed', + 'color': (255, 0, 0), + 'opacity': 40, + 'size': 100, + 'rotation': 0, + 'width': 816, + 'spacing': 400, + 'border': { + 'outline': (255, 0, 0), + 'fill': None, + 'width': 10, + 'padding': 30, + 'radius': 20, + } + } + } + + + diff --git a/_sources/relnotes.rst.txt b/_sources/relnotes.rst.txt new file mode 100644 index 0000000..2cb3dbe --- /dev/null +++ b/_sources/relnotes.rst.txt @@ -0,0 +1,63 @@ +============= +Release Notes +============= + +Release 2.0.0 +------------- +- Forked to v2.0.0 as the config syntax has fully changed +- New configuration syntax as a python dict +- Removed bottle dependency +- Added HTML element selection +- Use a static name for the watermark image to support spaces in text +- Added additional fonts with configuration +- Customizable border options +- Default image size to fit US Letter PDF pages + + +Release 1.0.0 +------------- +- Move to 1.0.0 stable release. +- `#39 `_: Replace Travis-CI with GitHub + Actions. + +Release 0.2.1 +~~~~~~~~~~~~~ + +- `#38 `_: use pathlib in place of os.path. +- `#37 `_: add type annotations. +- `#36 `_: update option documentation to + include ``sphinx_book_theme``. Thanks `rscohn2 `_. +- `#35 `_: fix text watermark opacity issue. + Thanks `chad-iris `_. + +Release 0.2.0 +~~~~~~~~~~~~~ + +- `#34 `_: add support for + Sphinx 2.0. Remove support for Python 2.7. + + +Release 0.1.19 +~~~~~~~~~~~~~~ + +- `#29 `_: fix isort test + error. +- `#28 `_: remove invalid + argument to ``ImageDraw.text()`` method. + +Release 0.1.18 +~~~~~~~~~~~~~~ + +- `#26 `_: enable + ``parallel_read_safe``. +- Remove unused ``publish.sh`` script. +- Tidy ``tox.ini`` file. + +Release 0.1.17 +~~~~~~~~~~~~~~ + +- `#23 `_: remove Pillow + and Bottle version requirements. +- `#22 `_: add + ``sphinxmark_text_width`` option and increase default width. +- Add Release Notes and restructure documentation. diff --git a/_sources/source.rst.txt b/_sources/source.rst.txt new file mode 100644 index 0000000..e006618 --- /dev/null +++ b/_sources/source.rst.txt @@ -0,0 +1,6 @@ +============ +Code Listing +============ + +.. automodule:: __init__ + :members: diff --git a/_sources/troubleshooting.rst.txt b/_sources/troubleshooting.rst.txt new file mode 100644 index 0000000..c9d894e --- /dev/null +++ b/_sources/troubleshooting.rst.txt @@ -0,0 +1,12 @@ +=============== +Troubleshooting +=============== + +You can enable debugging output for sphinx-watermark by raising the output verbosity +level >= 2. Pass the ``-vv`` option on the command line. + +Example: + +.. code-block:: bash + + $ sphinx-build -vv -b html sourcedir buildir diff --git a/_sources/usage.rst.txt b/_sources/usage.rst.txt new file mode 100644 index 0000000..ab23c05 --- /dev/null +++ b/_sources/usage.rst.txt @@ -0,0 +1,80 @@ +===== +Usage +===== + +Configure sphinx-watermark in your ``conf.py`` file. + +#. Add sphinx-watermark to the list of extensions: + + .. code-block:: bash + + extensions = ['sphinx_watermark'] + + +#. If you are using a custom image file, specify its directory relative + to the ``conf.py`` file. If no value is given, the path defaults to + ``_static``. + + .. code-block:: python + + html_static_path = ['_static'] + + +#. Enable and configure sphinx-watermark in ``conf.py``. + You only have to include the values you want to change from default. + + Below is the bare-minimum config for an ``Internal\nDraft`` watermark: + + .. code-block:: python + + watermark = { + 'enabled': True, + 'text': 'Internal\nDraft' + } + + + Below are the defaults for all options: + (Notice that watermarks are disabled by default.) + + .. code-block:: python + :emphasize-lines: 2,14 + + watermark = { + 'enabled': False, + 'selector': { + 'type': 'div', + 'class': 'body' + }, + 'position': { + 'margin': None, + 'repeat': True, + 'fixed': False + }, + 'image': None, + 'text': { + 'content': None, + 'align': 'center', + 'font': 'RubikDistressed', + 'color': (255, 0, 0), + 'opacity': 40, + 'size': 100, + 'rotation': 0, + 'width': 816, + 'spacing': 400, + 'border': { + 'outline': (255, 0, 0), + 'fill': None, + 'width': 10, + 'padding': 30, + 'radius': 20, + } + } + } + +#. Build your docs as normal. The defined watermark should appear behind the text. + + .. note:: + + Some Sphinx themes place body content in different CSS divs. + See the `sphinx-watermark documentation `_ + for full configuration details. \ No newline at end of file diff --git a/_static/fonts/0053ba6958e79f26751eabb555bd73d0.woff2 b/_static/fonts/0053ba6958e79f26751eabb555bd73d0.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ab30100982f087a925abe34641b5909b145516b2 GIT binary patch literal 4728 zcmV-;5{K<~Pew8T0RR9101|ir4gdfE04D$d01_Sm0RR9100000000000000000000 z0000SGzMTlQ&d4zL;!(E5eN#ie5@A>f*Jq;HUcCAf*J%M1%(<1iWm$B8w(*tMum+7 zAfUElM78ER+5ea1#t^~%2$`|OZL~#3&^R!HLEye*SAs;V^MXUsg5&pee0Ronw;5RMJt^ll$(x+4#CUV>%9_D zd^J)$v1~_bbA*b8oe`vn)fSKb!|~(Zd(fv7q_wq$C?Kr_D3qn5wk0?;|EYVG{>k)S zfN@xo5{;HaGs5Cm)9xLV%E&%|b008HF%B-v4zyS6jLjY+Nvjg!xT?Q;;jTKUXN<6`F z;}?51$RpaOWtzMWrl-hYw-My&0RSD%zAVm=6*F2eJ1#I6JG-|w5deH6OFJ?JL|cd= zLK?$t$&t<6fE1%7uqYClT^SHEYTL7=qe2l-iGzsD5sR@{>aQR|h$4ZOf5wOL8>ayP zRZI|&DWWkNOZ*ndR|fQp@ky7H{=$cF%Ku*fwtxH&AKwFbeCOdKt1f^$YP=IBFFsft z)rDJgV#Ap&7Y^Lmp|I!5(PVZ6l7?mMn-GoE2@z*Qe**Fdz>Wd23u6RNEkqcxf5j1! zAYlea;44XkLSU#H5CHO@HNCt!c|>2SQKt*{1Zd?dFSk$!jitfI-;dduEGK)w49FNv96Xk=Ln`wE!P5L)CN$_*>?2l;*F zBO%R8s6Hr&e*wDUoX$o zt4ePP9Ma6aQb;x+xq$P(x= ztf!bF@KW|vr9%Q3?zFV8cVf>2G^3JPJ0z{~Br~S8)rMB2mdL^Hm068hFMiiCa6&?{ z%mpf714xE11SMdvC4itZ!wTXFA_B^F!-NXG2hNFj(VAT!onEOEX?3F>`>mxb7~Joq zAYpL92DBQLjkXM)_lZU4FaU4QCOX$-hFcq5z+sy$PXU!RB3h?X26=1IhLySRP8!6) znLc$Cpg_#P9M7F>3<0$0q{nNh;+;n2IvG;dT=`;Qb(g~g?q{Zg!;gG-amGX*KMOs*W}Wu+%ugv zKu}!IS-otanyB-w$Uz_ zo3V~etfCO|F^y+^>xf7#31ZyJKD8nm7tV=-`fGPw)t)9-H*K}U&1S(bo`#|0YsYvV z_MhTw64$M%ZM3PWO;Cjj4d7zjhJ{7?-V&Gn6*&$~Z*<6tKJ{nUPCsMF_}t2*M9?VL zj4C*{mO~v#r?42|s$*^R9Q+i=`Y`4F=Xqn(Hrm7wFIgABn(&eN!R6snsUWQRcRJon@#sC)AB zvxGD%bm+>>beh{_b|l}Ti{ctmIWSnwkBhJ356%g#qEIZmjF045cDhnRD(8-^62!$# z%LfLomb=Rpn)? z)grM_9AhYf^x00fPUGDICLoMDV7N&p48qzz^Gg*qm?`I^LG@x84nUz3j__jt3}$luL3ei`Q#Hl*GYVAh~1&s#d1! zYM15&s{Lhw$6I^tHS~qGwcUw%Wee(<*(9&@rNza$UFzCA#zL56JN9gOM5-bzEPkn? zBn>7?SdO97iK#S}OfTFPA_*0*Qda6VB}dC*Wb%_u>}uH|aY9V|?qqEFzoS(+rH|Ji zW4ckPM57)(Y!3$ePotH+CB2pU%KD3Qy_wSmg5^xRrTf;oIXb$n+cynHa;UX2$0KFo z@~vqN^;^;-j*T(LYEc*=i;!<24MRGpy#JPoRM2^g-<=;L%gETYy+6lajCv~YQPR2h zqw6!r$^Z^~6Sn`kR!-?!QcsVQ6#5z)dvs{$x6K7Tf7y$d1H!D1p_0H%_+7DA z@J2O>ay9gCp9c=aP_JCC0!K;ESobCm*}~7J_Ivl_44%!=BJ&dI0K|OK=^Au!cx?c= zxv5A?%ue|@I0+`Ceoo1cSKllcjpWby=loZu`{ego1#7jT;uuxjMWkUWQWtq9LLp4p zkk*L2oCWETwnLEPdC)s0ToKx`-=!I()ixIC$fpadPRGWrJyYox-MBVSs7%Og(B37oHxGEBw3|cm#6U7kFw`{9smL$@qNV1iqGaD*H&j;AW79B_65G zEf~yV#|hM&GlN$Yze&4fq>5lO9Lpo$ieN>+$twFA;U%FeP&z-kG_cTNWuqiy261rq&4-&q>}R9u)#mwUQW82MR6G(p zB356P<>a5<85hEldM$&duKyKG26KeqH7UL73T%L~d^$c)scws9vzmyJ69?(x!f z-YhA#Yn+Q5LYoiiNSl_L#g1%_#G$l#Gf8K{&eLkj7*SE1uc^_p@<2d+!g%2A^MS#5 zxh)h2bQ%z4G^0gkcLy0}>T zdJugpIKzqAm+P(dtNk6FHSOiV_Lso4zj-BiBMnT@mT!z_M7QmC3+wp0@#m}8o)5;# zY_9e7#aMa!O04?(t`hVFzN)>V%sE`7ckU?XsUXbLPzp!Z>!Yo_ePXP7>yBC%TXU6} znWZkmuu_*y8CNOxOCue5+tdAl&MLduoo~voHi*#^uX>D~_vu?_4nbI{p@vud%Aepi zaqW2!Hf++D=s}daN{>wMD|+JN^QBKa!@88fR?8K|6p^TeqL8!H1m9>YA8%g|pWew~ zG-*Z-K^$WdO7x}v-tG-$#-`^0p$BY$To!PQ8VN~?87h$stjGgM5>gd}yLeG^b6D)S zoQIc@w}HwXm~4VMb3`NBL{K;R`vCSFD@Ny%HV}QN*IelJ$kklv9j>YmzdF-%_se_VB;SEB*Yd=drVy|YbW!1of%t%;pxct4R*J%I5ZFkveI zh<@}P%i$l8A{Pw|3^a2TxhWVr5DoJ+Z^h{*S`Fb;`j{@V^6fK@ou*Z!7M^ln z7$(o*wV=&QSq*7Om-0aTXkNm1F#OZrNgXGI@z@`Hj*sW~i!>B3Bl&-haejab^N#=C z>6B1U%mA~7cQgc5GXe;CCj~`3sYMdRVjolP3d7_nycXi~oYkNzi*(=%ATS%Isq|Ba zVM~Vr3N!Tf&JdTA`ec$4f*EviK2q!ebPb=R8tj-+!(%E#)gbsgLOw@95ld=LnJSJ? z9>Z%uotLr?BuJMsN18el`F6+}BQt=#gF23!n1%gzRnFzIp`>{Od&V#azmWFD^JX5z zgb!r+9LWJPe6*dehedD&m;p|RW(!m}#O$G=R7tAl*(oP`<)sUD5qsmy($08Nfg~W< z9WuPA#QsrJ8~|Mi%HbPShZ)3FKJ7+@L)ji0vNfb?F0pj>^e5vM=&>9C0muaUAB6?y zTZVs^b|V0I{?C{O!jErJ>;L(N`AlvUSrY)p2mk;O@WJpk!bx2|$bUrqY7Ae*kqn|b_JYGk34!e(xF0bKgB}8s#Vcbqmc$G1G3zId0Z|+PV zG-!;7Mhlyc6m~$Zj zGfoh-*vzYkXg)Q78m2o?>@}F8=*A3XG5^Y%sht!Z!ltl-5me$47)@MN5`TqSU9UoF zV$E`#1+N8b1%p_R-6O+dWBJ&^4J8#_quH)J{P75^_+zif35zte^n`8n4k5q*Rx2D` zk$62=HLMktINUuemOX{;qn9XamDqIE6J1%D;7`C$(9uePuvjyS1`Qq7HlNLm8e&** z*04XV1fOtnBXRULxvpi(3kN%BTnt;mSy&P?bLwrd$qzAiJn_o`XOZXN=?(*0guiYk zPd+&Og$gHCQ`a^`<1HpeHbs>>y}^jdY_Zxx0ux=_b~lW1Gfa2_kwm6YQPa@U(K9eY zFcUKiD;qlpCl@ylFCV{vppdYLsF=8fq?ELbtem`pqJpB5vWlvjx`w8fwvMizzJZ~U zu?Z4|#$a)H0+B?fn3|beSXx=z*xK1UIKosKoxx;vg>!yrd5D+W{7l~>Z+v5ugF~!$ z&&*G=$*zh|?z^11=KIRnN>O_Qgpnm#=&4iA-^I`5GIcrQz|2&?Qd)NL5lR^dP^0jf z3F~icFZs_n{8v2|)m3(l-y)%V)eyJAxn#Hga#gT0Qm*Ca-cNtuye@TL!g|JXy{wRv zS5Q<^R#8<0e4uIGW&!{J0000;k|arzB+bms%*@Qp%p^&YBuSE-+h@x;=f?fM;N!>W G0%`y>M(+3k literal 0 HcmV?d00001 diff --git a/_static/fonts/029e176ad602329b4434892101db9cf3.woff2 b/_static/fonts/029e176ad602329b4434892101db9cf3.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..09e03c952296f0ba1e46dadb0ef38c0ad1950130 GIT binary patch literal 6044 zcmV;N7h~vmPew8T0RR9102iD94gdfE04SUQ02e?20RR9100000000000000000000 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 aZ;p=U&6{>stk@{AqPB76aF%E9h7|z0(@g*X literal 0 HcmV?d00001 diff --git a/_static/fonts/0948409a22b5979aa7e1ec20da9e61f1.woff2 b/_static/fonts/0948409a22b5979aa7e1ec20da9e61f1.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..6b0b4afef95479fff34683895510f679a5ebd45a GIT binary patch literal 5604 zcmV3CmxKT719J?g1=`;t*omE%DVl-mx!FcDRLO)EiWF%n+<2k; z{z!elnfh#A=$8#;!oA;6mu@pLR*NAVtg+#ALiW^f_ySP*^v)3)`y^K*nwsVo&Xm+~ zQXtm}w{@t54sii7Pz1cVK=4512TJ*thqv4N+ieFDwlzzlR>%WV4EEd^apPH1)UnWjm&>+$*LSaQ!hypx2nQCG zLhtfhOk#69N}~|A+V6@oo&h)=sa=$6+}x!>ZvQJIv~sZo+&sCcwbt$t^Z{`^3im?U zGzV5L7lcE?JmoT2GI(_I)OJU03Sp2nPVKu#I*j4}be8S^GaAA1$oHNPDqaW|ooxlN zOP8jRzIHA0*giz>5qU$T-9tM7gdIV7ZC;utU75B_nj){mF7m#G&0oIiJ(RT-N~x^K zRL1-MvkcA~-9uXWIyi_X*x~g?(J*1ckSeMpaTbHLGXMu=2)=BaC|-QY%QkzXn`Wr*+Hdm{ zHA3A`0ksP*@{k~PC2Od$rkZQ1wYE~E$&iIq%X=EDIQ0SXdb?br?u4G(P14&4$%