rummage 4.23__tar.gz → 4.24__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. {rummage-4.23 → rummage-4.24}/PKG-INFO +12 -13
  2. {rummage-4.23 → rummage-4.24}/docs/src/markdown/about/changelog.md +17 -7
  3. {rummage-4.23 → rummage-4.24}/docs/src/markdown/extras.md +3 -4
  4. {rummage-4.23 → rummage-4.24}/docs/src/markdown/preferences.md +28 -33
  5. {rummage-4.23 → rummage-4.24}/docs/src/markdown/search.md +59 -64
  6. {rummage-4.23 → rummage-4.24}/docs/src/markdown/usage.md +36 -41
  7. rummage-4.24/docs/theme/assets/pymdownx-extras/extra-95634471d6.css +2 -0
  8. {rummage-4.23 → rummage-4.24}/hatch_build.py +0 -1
  9. {rummage-4.23 → rummage-4.24}/pyproject.toml +2 -2
  10. {rummage-4.23 → rummage-4.24}/requirements/extras.txt +1 -1
  11. rummage-4.24/requirements/project.txt +11 -0
  12. rummage-4.24/requirements/test-project.txt +3 -0
  13. {rummage-4.23 → rummage-4.24}/rummage/lib/__meta__.py +1 -1
  14. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/actions/export_csv.py +1 -2
  15. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/actions/export_html.py +1 -2
  16. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/actions/fileops.py +2 -3
  17. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/app/custom_app.py +7 -8
  18. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/webview.py +5 -1
  19. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/__init__.py +1 -2
  20. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/about/changelog.html +12 -1
  21. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/about/contributing.html +3 -3
  22. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/extras.html +4 -4
  23. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/index.html +3 -3
  24. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/installation.html +4 -4
  25. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/preferences.html +4 -4
  26. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/search.html +4 -4
  27. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/sitemap.html +8 -8
  28. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/usage.html +6 -6
  29. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/rummage_dialog.py +1 -1
  30. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/settings_dialog.py +5 -6
  31. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/settings/__init__.py +8 -9
  32. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/util/images.py +1 -1
  33. {rummage-4.23 → rummage-4.24}/rummage/lib/rumcore/__init__.py +3 -3
  34. {rummage-4.23 → rummage-4.24}/rummage/lib/rumcore/text_decode.py +2 -2
  35. {rummage-4.23 → rummage-4.24}/tests/test_rumcore.py +5 -5
  36. {rummage-4.23 → rummage-4.24}/tools/gen_docs.py +4 -1
  37. {rummage-4.23 → rummage-4.24}/tools/gui_patch.py +2 -3
  38. rummage-4.23/docs/theme/assets/pymdownx-extras/extra-928cef6c86.css +0 -2
  39. rummage-4.23/requirements/project.txt +0 -11
  40. rummage-4.23/requirements/test-project.txt +0 -3
  41. {rummage-4.23 → rummage-4.24}/.coveragerc +0 -0
  42. {rummage-4.23 → rummage-4.24}/.gitignore +0 -0
  43. {rummage-4.23 → rummage-4.24}/LICENSE.md +0 -0
  44. {rummage-4.23 → rummage-4.24}/README.md +0 -0
  45. {rummage-4.23 → rummage-4.24}/docs/src/markdown/.snippets/abbr.md +0 -0
  46. {rummage-4.23 → rummage-4.24}/docs/src/markdown/.snippets/links.md +0 -0
  47. {rummage-4.23 → rummage-4.24}/docs/src/markdown/.snippets/refs.md +0 -0
  48. {rummage-4.23 → rummage-4.24}/docs/src/markdown/about/contributing.md +0 -0
  49. {rummage-4.23 → rummage-4.24}/docs/src/markdown/about/license.md +0 -0
  50. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/chain_button.png +0 -0
  51. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/chain_mode.png +0 -0
  52. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/chains.png +0 -0
  53. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/content_tab.png +0 -0
  54. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/file_pattern.png +0 -0
  55. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/files_tab.png +0 -0
  56. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/html_export.png +0 -0
  57. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/limit_search_panel.png +0 -0
  58. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/load_search.png +0 -0
  59. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/logo.svg +0 -0
  60. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/plugin_input.png +0 -0
  61. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/plugin_toggle.png +0 -0
  62. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/preview.png +0 -0
  63. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/regex_buttons.png +0 -0
  64. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/regex_tester.png +0 -0
  65. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/rummage.png +0 -0
  66. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/rummage.svg +0 -0
  67. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/save_search.png +0 -0
  68. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/search_replace_inputs.png +0 -0
  69. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/search_replace_panel.png +0 -0
  70. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/search_tab.png +0 -0
  71. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/settings_backup.png +0 -0
  72. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/settings_editor.png +0 -0
  73. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/settings_encoding.png +0 -0
  74. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/settings_export.png +0 -0
  75. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/settings_general.png +0 -0
  76. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/settings_history.png +0 -0
  77. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/settings_import.png +0 -0
  78. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/settings_notify.png +0 -0
  79. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/settings_search.png +0 -0
  80. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/thunar-basic.png +0 -0
  81. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/thunar-conditions.png +0 -0
  82. {rummage-4.23 → rummage-4.24}/docs/src/markdown/images/thunar-custom.png +0 -0
  83. {rummage-4.23 → rummage-4.24}/docs/src/markdown/index.md +0 -0
  84. {rummage-4.23 → rummage-4.24}/docs/src/markdown/installation.md +0 -0
  85. {rummage-4.23 → rummage-4.24}/docs/src/markdown/sitemap.md +0 -0
  86. {rummage-4.23 → rummage-4.24}/docs/theme/announce.html +0 -0
  87. {rummage-4.23 → rummage-4.24}/docs/theme/assets/pymdownx-extras/extra-loader-Ccztcqfq.js +0 -0
  88. {rummage-4.23 → rummage-4.24}/docs/theme/main.html +0 -0
  89. {rummage-4.23 → rummage-4.24}/docs/theme/nav.html +0 -0
  90. {rummage-4.23 → rummage-4.24}/docs/theme/sitemap.html +0 -0
  91. {rummage-4.23 → rummage-4.24}/gui.fbp +0 -0
  92. {rummage-4.23 → rummage-4.24}/requirements/docs.txt +0 -0
  93. {rummage-4.23 → rummage-4.24}/requirements/lint.txt +0 -0
  94. {rummage-4.23 → rummage-4.24}/requirements/setup.txt +0 -0
  95. {rummage-4.23 → rummage-4.24}/requirements/test.txt +0 -0
  96. {rummage-4.23 → rummage-4.24}/rummage/__init__.py +0 -0
  97. {rummage-4.23 → rummage-4.24}/rummage/__main__.py +0 -0
  98. {rummage-4.23 → rummage-4.24}/rummage/lib/__init__.py +0 -0
  99. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/__init__.py +0 -0
  100. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/actions/__init__.py +0 -0
  101. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/actions/checksum/__init__.py +0 -0
  102. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/actions/checksum/sum_hashes.py +0 -0
  103. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/actions/checksum/tiger.py +0 -0
  104. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/actions/checksum/whirlpool.py +0 -0
  105. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/actions/sanitize_json.py +0 -0
  106. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/actions/updates.py +0 -0
  107. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/app/__init__.py +0 -0
  108. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/app/platform_window_focus.py +0 -0
  109. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/app/rummage_app.py +0 -0
  110. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/__init__.py +0 -0
  111. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/autocomplete_combo.py +0 -0
  112. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/collapsible_pane.py +0 -0
  113. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/custom_statusbar.py +0 -0
  114. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/date_picker.py +0 -0
  115. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/dock_icon.py +0 -0
  116. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/dynamic_lists.py +0 -0
  117. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/encoding_list.py +0 -0
  118. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/file_picker.py +0 -0
  119. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/load_search_list.py +0 -0
  120. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/pick_button.py +0 -0
  121. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/result_lists.py +0 -0
  122. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/search_chain_list.py +0 -0
  123. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/search_error_list.py +0 -0
  124. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/controls/time_picker.py +0 -0
  125. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/arrow_down.png +0 -0
  126. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/arrow_left.png +0 -0
  127. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/arrow_right.png +0 -0
  128. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/arrow_up.png +0 -0
  129. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/binary.png +0 -0
  130. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/doc.png +0 -0
  131. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/404.html +0 -0
  132. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/about/license.html +0 -0
  133. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/css/theme.css +0 -0
  134. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/chain_button.png +0 -0
  135. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/chain_mode.png +0 -0
  136. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/chains.png +0 -0
  137. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/content_tab.png +0 -0
  138. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/file_pattern.png +0 -0
  139. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/files_tab.png +0 -0
  140. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/html_export.png +0 -0
  141. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/limit_search_panel.png +0 -0
  142. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/load_search.png +0 -0
  143. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/logo.svg +0 -0
  144. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/plugin_input.png +0 -0
  145. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/plugin_toggle.png +0 -0
  146. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/preview.png +0 -0
  147. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/regex_buttons.png +0 -0
  148. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/regex_tester.png +0 -0
  149. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/rummage.png +0 -0
  150. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/rummage.svg +0 -0
  151. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/save_search.png +0 -0
  152. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/search_replace_inputs.png +0 -0
  153. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/search_replace_panel.png +0 -0
  154. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/search_tab.png +0 -0
  155. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/settings_backup.png +0 -0
  156. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/settings_editor.png +0 -0
  157. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/settings_encoding.png +0 -0
  158. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/settings_export.png +0 -0
  159. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/settings_general.png +0 -0
  160. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/settings_history.png +0 -0
  161. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/settings_import.png +0 -0
  162. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/settings_notify.png +0 -0
  163. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/settings_search.png +0 -0
  164. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/thunar-basic.png +0 -0
  165. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/thunar-conditions.png +0 -0
  166. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/images/thunar-custom.png +0 -0
  167. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/docs/js/theme.js +0 -0
  168. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/error.png +0 -0
  169. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/glass.png +0 -0
  170. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/results.css +0 -0
  171. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage.icns +0 -0
  172. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage.ico +0 -0
  173. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage.png +0 -0
  174. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage_1024.png +0 -0
  175. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage_128.png +0 -0
  176. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage_16.png +0 -0
  177. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage_256.png +0 -0
  178. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage_32.png +0 -0
  179. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage_40.png +0 -0
  180. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage_48.png +0 -0
  181. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage_512.png +0 -0
  182. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/rummage_mac.png +0 -0
  183. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/data/sorttable.js +0 -0
  184. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/__init__.py +0 -0
  185. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/checksum_dialog.py +0 -0
  186. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/column_dialog.py +0 -0
  187. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/delete_dialog.py +0 -0
  188. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/edit_search_chain_dialog.py +0 -0
  189. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/error_text_dialog.py +0 -0
  190. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/export_settings_dialog.py +0 -0
  191. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/file_ext_dialog.py +0 -0
  192. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/generic_dialogs.py +0 -0
  193. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/html_dialog.py +0 -0
  194. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/import_settings_dialog.py +0 -0
  195. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/load_search_dialog.py +0 -0
  196. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/msg_dialogs.py +0 -0
  197. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/overwrite_dialog.py +0 -0
  198. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/regex_test_dialog.py +0 -0
  199. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/save_search_dialog.py +0 -0
  200. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/search_chain_dialog.py +0 -0
  201. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/search_error_dialog.py +0 -0
  202. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/dialogs/support_info_dialog.py +0 -0
  203. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/gui.py +0 -0
  204. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/localization/__init__.py +0 -0
  205. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/localization/locale/en_US/LC_MESSAGES/rummage.po +0 -0
  206. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/localization/locale/ru_RU/LC_MESSAGES/rummage.po +0 -0
  207. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/notify/__init__.py +0 -0
  208. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/notify/notify_linux.py +0 -0
  209. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/notify/notify_osx.py +0 -0
  210. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/notify/notify_windows.py +0 -0
  211. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/notify/util.py +0 -0
  212. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/util/__init__.py +0 -0
  213. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/util/colors.py +0 -0
  214. {rummage-4.23 → rummage-4.24}/rummage/lib/gui/util/png.py +0 -0
  215. {rummage-4.23 → rummage-4.24}/rummage/lib/rumcore/util.py +0 -0
  216. {rummage-4.23 → rummage-4.24}/tests/__init__.py +0 -0
  217. {rummage-4.23 → rummage-4.24}/tests/test_text_decode.py +0 -0
  218. {rummage-4.23 → rummage-4.24}/tests/test_versions.py +0 -0
  219. {rummage-4.23 → rummage-4.24}/tests/util.py +0 -0
  220. {rummage-4.23 → rummage-4.24}/tools/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rummage
3
- Version: 4.23
3
+ Version: 4.24
4
4
  Summary: A GUI search and replace app.
5
5
  Project-URL: Homepage, https://github.com/facelessuser/Rummage
6
6
  Author-email: Isaac Muse <Isaac.Muse@gmail.com>
@@ -13,7 +13,6 @@ Classifier: Intended Audience :: Developers
13
13
  Classifier: License :: OSI Approved :: MIT License
14
14
  Classifier: Operating System :: OS Independent
15
15
  Classifier: Programming Language :: Python :: 3
16
- Classifier: Programming Language :: Python :: 3.9
17
16
  Classifier: Programming Language :: Python :: 3.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
@@ -23,21 +22,21 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
23
22
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
24
23
  Classifier: Topic :: Text Processing :: Filters
25
24
  Classifier: Topic :: Text Processing :: Markup :: HTML
26
- Requires-Python: >=3.9
27
- Requires-Dist: backrefs>=6.1
28
- Requires-Dist: bracex>=2.6
29
- Requires-Dist: chardet>=5.2.0
30
- Requires-Dist: coloraide>=6.2
31
- Requires-Dist: filelock>=3.16
32
- Requires-Dist: markdown>=3.10
25
+ Requires-Python: >=3.10
26
+ Requires-Dist: backrefs>=7.0
27
+ Requires-Dist: bracex>=3.0
28
+ Requires-Dist: chardet>=7.4.3
29
+ Requires-Dist: coloraide>=8.10
30
+ Requires-Dist: filelock>=3.29.4
31
+ Requires-Dist: markdown>=3.10.2
33
32
  Requires-Dist: pygments>=2.19.2
34
- Requires-Dist: pymdown-extensions>=10.20
35
- Requires-Dist: send2trash>=1.8.3
36
- Requires-Dist: wcmatch<11.0,>=10.0
33
+ Requires-Dist: pymdown-extensions>=11.0
34
+ Requires-Dist: send2trash>=2.1.0
35
+ Requires-Dist: wcmatch<11.0,>=10.2
37
36
  Requires-Dist: wxpython>=4.1.0
38
37
  Provides-Extra: extras
39
38
  Requires-Dist: faust-cchardet>=2.1.19; extra == 'extras'
40
- Requires-Dist: regex>=2025.7.34; extra == 'extras'
39
+ Requires-Dist: regex>=2026.6.28; extra == 'extras'
41
40
  Description-Content-Type: text/markdown
42
41
 
43
42
  [![Donate via PayPal][donate-image]][donate-link]
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.24
4
+
5
+ - **NEW**: Drop support for Python 3.9.
6
+ - **NEW**: Upgrade dependencies to pick up enhancements and bug fixes.
7
+ - **FIX**: Fix issues compatibility issues with wxPython 4.2.5.
8
+ - **FIX**: Fix deprecation warnings.
9
+
10
+ ## 4.23.1
11
+
12
+ - **FIX**: Fix for latest ColorAide.
13
+
3
14
  ## 4.23
4
15
 
5
16
  - **NEW**: Add support for Python 3.14.
@@ -188,13 +199,12 @@
188
199
 
189
200
  ## 4.7
190
201
 
191
- /// warning | Warning
192
- Backrefs 4.2.0 has deprecated the shorthand references for alphabetic character groups in `re` search patterns:
193
- `\l`, `\L`, `\c`, and `\C`. Instead you should use: `[[:lower:]]`, `[[:^lower:]]`, `[[:upper:]]`, and `[[:^upper:]]`
194
- respectively. While the references have only been deprecated, and are technically still available, a future version
195
- of Backrefs will remove them entirely at some point. It is recommended to transition now so as not to be caught
196
- unawares.
197
- ///
202
+ > [!warning] Warning
203
+ > Backrefs 4.2.0 has deprecated the shorthand references for alphabetic character groups in `re` search patterns:
204
+ > `\l`, `\L`, `\c`, and `\C`. Instead you should use: `[[:lower:]]`, `[[:^lower:]]`, `[[:upper:]]`, and `[[:^upper:]]`
205
+ > respectively. While the references have only been deprecated, and are technically still available, a future version
206
+ > of Backrefs will remove them entirely at some point. It is recommended to transition now so as not to be caught
207
+ > unawares.
198
208
 
199
209
  - **NEW**: Add `col0` variable for editor configuration to allow for using a zero based column value instead of one
200
210
  based column value for editors that require it.
@@ -28,10 +28,9 @@
28
28
  appropriately. Also note that we quote `%1` to allow spaces in the command line argument. Paths may vary, and it is
29
29
  left up to the user to discover where their Python install directory is.
30
30
 
31
- /// warning
32
- This isn't a guide in how to do registry editing proper, so only edit the registry if you are certain of what you
33
- are doing.
34
- ///
31
+ > [!warning]
32
+ > This isn't a guide in how to do registry editing proper, so only edit the registry if you are certain of what you
33
+ > are doing.
35
34
 
36
35
  ```ini
37
36
  Windows Registry Editor Version 5.00
@@ -33,17 +33,16 @@ Updates
33
33
  The check is only a check for new versions and doesn't perform an upgrade. Rummage must be upgraded via `pip` from
34
34
  command line.
35
35
 
36
- //// info | Update Issues: Python 3.6+ on macOS
37
- There is a small issue on macOS with Python 3.6+: Python 3.6 changed how it gets the default certificates
38
- required to properly check URLs. The details are actually documented here: https://bugs.python.org/issue28150#msg276516.
39
-
40
- It is possible that a given installation method resolves this automatically, but if not, the following steps
41
- should help. Assuming that Python 3.6+ was installed using the macOS installer from Python.org, you just need to
42
- navigate to `/Applications/Python 3.6/Install Certificates.command` and double click the command. The script
43
- will use `pip` to install `certifi` and creates a symlink in the OpenSSL directory to `certifi`'s installed
44
- bundle location. If you are using something like macports, then you'll probably have to research to find out how
45
- to do the same thing.
46
- ////
36
+ > [!info] Update Issues: Python 3.6+ on macOS
37
+ > There is a small issue on macOS with Python 3.6+: Python 3.6 changed how it gets the default certificates
38
+ > required to properly check URLs. The details are actually documented here: https://bugs.python.org/issue28150#msg276516.
39
+ >
40
+ > It is possible that a given installation method resolves this automatically, but if not, the following steps
41
+ > should help. Assuming that Python 3.6+ was installed using the macOS installer from Python.org, you just need to
42
+ > navigate to `/Applications/Python 3.6/Install Certificates.command` and double click the command. The script
43
+ > will use `pip` to install `certifi` and creates a symlink in the OpenSSL directory to `certifi`'s installed
44
+ > bundle location. If you are using something like macports, then you'll probably have to research to find out how
45
+ > to do the same thing.
47
46
 
48
47
  International Time
49
48
 
@@ -121,9 +120,8 @@ Argument Variables | Description
121
120
  `{$col}` | Insert the column number.
122
121
  `{$col0}` | Insert the line column offset by one so the first column is zero instead of one.
123
122
 
124
- /// new | New 4.7.0
125
- Added `{$col0}` for zero based column values.
126
- ///
123
+ > [!new] New 4.7.0
124
+ > Added `{$col0}` for zero based column values.
127
125
 
128
126
  ## Notifications
129
127
 
@@ -136,37 +134,34 @@ On Linux, you can set your preferred player: `paplay`, `aplay`, and `play` (`sox
136
134
 
137
135
  A test button is provided to test the configuration once set.
138
136
 
139
- /// tip | Supported Notification Sound Formats
140
-
141
- Windows | macOS | Linux
142
- ------- | ------------------------ | -----
143
- `wav` | `wav`, `mp3` and `.aiff` | `wav` and `mp3` (if using `paplay`, `ogg` is also supported)
144
- ///
137
+ > [!tip] Supported Notification Sound Formats
138
+ >
139
+ > Windows | macOS | Linux
140
+ > ------- | ------------------------ | -----
141
+ > `wav` | `wav`, `mp3` and `.aiff` | `wav` and `mp3` (if using `paplay`, `ogg` is also supported)
145
142
 
146
143
  /// define
147
144
  Linux
148
145
 
149
146
  - Native: Notifications via `notify-send`.
150
147
 
151
- /// info | Other Distros
152
- Though Rummage should run on any Linux distro, the native notification option was built around `notify-send` and
153
- only tested on Ubuntu. If other distros have a `notify-send` it may also work.
154
- ///
148
+ > [!info] Other Distros
149
+ > Though Rummage should run on any Linux distro, the native notification option was built around `notify-send` and
150
+ > only tested on Ubuntu. If other distros have a `notify-send` it may also work.
155
151
 
156
152
  macOS
157
153
 
158
154
  - Native: Notification Center via [terminal-notifier][terminal-notifier]. Path to `terminal-notifier` must be
159
155
  configured.
160
156
 
161
- /// info | Configuring macOS Native
162
- When selecting `native` on macOS, an option to select the path to terminal notifier will be available since
163
- native dialogs rely on `terminal-notifier` to send notifications to the Notification Center. This must be
164
- configured or *native* notifications will not work.
165
-
166
- When selecting the `terminal-notifier` path, you can select either the binary directly or the `.<app` bundle
167
- (depending on how you installed `terminal-notifier`). When selecting the `.app` bundle, Rummage will know how
168
- to access the binary inside the bundle.
169
- ///
157
+ > [!info] Configuring macOS Native
158
+ > When selecting `native` on macOS, an option to select the path to terminal notifier will be available since
159
+ > native dialogs rely on `terminal-notifier` to send notifications to the Notification Center. This must be
160
+ > configured or *native* notifications will not work.
161
+ >
162
+ > When selecting the `terminal-notifier` path, you can select either the binary directly or the `.<app` bundle
163
+ > (depending on how you installed `terminal-notifier`). When selecting the `.app` bundle, Rummage will know how
164
+ > to access the binary inside the bundle.
170
165
 
171
166
  Windows
172
167
 
@@ -54,14 +54,13 @@ Force\ &lt;encoding&gt; | Forces all files to be opened with the specified encod
54
54
  Use\ chain\ search | Puts Rummage into ["search chain" mode](./usage.md#search-chains). When in "search chain" mode, rummage will only use saved search chains for search and replace.
55
55
  Use\ replace\ plugin | When enabled, Rummage will use a [replace plugin](./usage.md#replace-plugins) instead of a replace pattern in order to do more advanced replaces.
56
56
 
57
- /// tip | Encoding Guessing
58
-
59
- It is always recommended, if you know the encoding, to use `Force encoding` as it will always be the fastest.
60
- Encoding guessing can be slow and not always accurate.
61
-
62
- Encoding guessing is performed by `chardet` which is a pure Python library and is, by far, the slowest option. If
63
- you manually install `cChardet`, you will have a much faster guessing experience.
64
- ///
57
+ > [!tip] Encoding Guessing
58
+ >
59
+ > It is always recommended, if you know the encoding, to use `Force encoding` as it will always be the fastest.
60
+ > Encoding guessing can be slow and not always accurate.
61
+ >
62
+ > Encoding guessing is performed by `chardet` which is a pure Python library and is, by far, the slowest option. If
63
+ > you manually install `cChardet`, you will have a much faster guessing experience.
65
64
 
66
65
  ## File Patterns
67
66
 
@@ -115,36 +114,35 @@ Pattern | Meaning
115
114
  `\v` | ASCII Vertical Tab (VT).
116
115
 
117
116
 
118
- /// example | Example Patterns
119
-
120
- Used in the `Files which match` box, this would match all Python files of `.py` extensions excluding `__init__.py`:
121
-
122
- ```
123
- *.py|-__init__.py
124
- ```
125
-
126
- Used in the `Files which match` box, this would match any file type that is not `.py`.
127
-
128
- ```
129
- -*.py
130
- ```
131
-
132
- Used in the `Exclude folders`, this would exclude all folders with `name` followed by a single digit, except `name3`
133
- which we will always be included.
134
-
135
- ```
136
- name[0-9]|-name3
137
- ```
138
-
139
- Used in the `Exclude folders`, this would exclude all folders except `name3`.
140
-
141
- ```
142
- -name3
143
- ```
144
-
145
- If you need to escape `-` or `|`, you can put them in a sequence: `[-|]`. Remember to place `-` at the beginning of
146
- a sequence as `-` is also used to specify character ranges: `[a-z]`.
147
- ///
117
+ > [!example] Example Patterns
118
+ >
119
+ > Used in the `Files which match` box, this would match all Python files of `.py` extensions excluding `__init__.py`:
120
+ >
121
+ > ```
122
+ > *.py|-__init__.py
123
+ > ```
124
+ >
125
+ > Used in the `Files which match` box, this would match any file type that is not `.py`.
126
+ >
127
+ > ```
128
+ > -*.py
129
+ > ```
130
+ >
131
+ > Used in the `Exclude folders`, this would exclude all folders with `name` followed by a single digit, except `name3`
132
+ > which we will always be included.
133
+ >
134
+ > ```
135
+ > name[0-9]|-name3
136
+ > ```
137
+ >
138
+ > Used in the `Exclude folders`, this would exclude all folders except `name3`.
139
+ >
140
+ > ```
141
+ > -name3
142
+ > ```
143
+ >
144
+ > If you need to escape `-` or `|`, you can put them in a sequence: `[-|]`. Remember to place `-` at the beginning of
145
+ > a sequence as `-` is also used to specify character ranges: `[a-z]`.
148
146
 
149
147
  #### Extended Match Syntax
150
148
 
@@ -160,25 +158,23 @@ Pattern | Meaning
160
158
  `!(pattern_list)` | The pattern matches if the input string cannot be matched with any of the patterns in the `pattern_list`. Requires extended match feature to be enabled.
161
159
  `{}` | Bash style brace expansions. This is applied to patterns before anything else. Requires brace expansion feature to be enabled.
162
160
 
163
- /// example | Example Extended Match Patterns
164
- For example, if we wanted to match files `this-file.txt` and `that-file.txt`, we could provide the following pattern:
165
-
166
- ```
167
- @(this|that)-file.txt
168
- ```
169
-
170
- The `|` contained within an extended match group will not split the pattern. So it is safe to combine with other patterns:
171
-
172
- ```
173
- @(this|that)-file.txt|*.py
174
- ```
175
- ///
176
-
177
- /// tip | `!` and Extended Match Syntax
178
- If you have changed Rummage to use `!` instead of `-` for exclusion patterns and have enabled extended match
179
- patterns, you must escape `(` at the start of a file if you want the pattern to be recognized as an exclusion
180
- pattern instead of treating it as the start of an extended match pattern (`!(...)`).
181
- ///
161
+ > [!example] Example Extended Match Patterns
162
+ > For example, if we wanted to match files `this-file.txt` and `that-file.txt`, we could provide the following pattern:
163
+ >
164
+ > ```
165
+ > @(this|that)-file.txt
166
+ > ```
167
+ >
168
+ > The `|` contained within an extended match group will not split the pattern. So it is safe to combine with other patterns:
169
+ >
170
+ > ```
171
+ > @(this|that)-file.txt|*.py
172
+ > ```
173
+
174
+ > [!tip] `!` and Extended Match Syntax
175
+ > If you have changed Rummage to use `!` instead of `-` for exclusion patterns and have enabled extended match
176
+ > patterns, you must escape `(` at the start of a file if you want the pattern to be recognized as an exclusion
177
+ > pattern instead of treating it as the start of an extended match pattern (`!(...)`).
182
178
 
183
179
  #### Brace Expansion Syntax
184
180
 
@@ -200,13 +196,12 @@ Pattern | Meaning
200
196
  `{,}` | Bash style brace expansions. This is applied to patterns before anything else. Requires brace expansion feature to be enabled.
201
197
  `{n1..n2[..i]}` | Bash style sequences that expands a range of numbers or alphabetic characters by an optional increment.
202
198
 
203
- /// example | Example Brace Expansion
204
- - `a{b,{c,d}}` --> `ab ac ad`
205
- - `{1..3}` --> `1 2 3`
206
- - `{a..d}` --> `a b c d`
207
- - `{2..4..2}` --> `2 4`
208
- - `{a..e..2}` --> `a c e`
209
- ///
199
+ > [!example] Example Brace Expansion
200
+ > - `a{b,{c,d}}` --> `ab ac ad`
201
+ > - `{1..3}` --> `1 2 3`
202
+ > - `{a..d}` --> `a b c d`
203
+ > - `{2..4..2}` --> `2 4`
204
+ > - `{a..e..2}` --> `a c e`
210
205
 
211
206
  #### Full Path Matching
212
207
 
@@ -87,14 +87,12 @@ You can also restrict which files get searched by providing wild card patterns (
87
87
  default, the patterns are applied to the base file or folder name. See [File Patterns](./search.md#wildcard) to learn
88
88
  more about accepted wild card pattern syntax and how to configure optional file pattern features.
89
89
 
90
- /// tip | Hidden Files
91
- Rummage assumes dot files as hidden on all systems. Additionally, on Windows and macOS, it will also look at a
92
- file's filesystem attributes to determine if the system is potentially hiding the file as well.
93
- ///
90
+ > [!tip] Hidden Files
91
+ > Rummage assumes dot files as hidden on all systems. Additionally, on Windows and macOS, it will also look at a
92
+ > file's filesystem attributes to determine if the system is potentially hiding the file as well.
94
93
 
95
- /// new | New 4.4.0
96
- Added symlink following via the **Follow symlinks** toggle.
97
- ///
94
+ > [!new] New 4.4.0
95
+ > Added symlink following via the **Follow symlinks** toggle.
98
96
 
99
97
  ### Results
100
98
 
@@ -106,10 +104,9 @@ options.
106
104
 
107
105
  ![Content Tab](images/content_tab.png)
108
106
 
109
- /// tip | Column Options
110
- You can hide/show columns by right clicking the list header to get a special context menu. You can then deselect or
111
- select the column(s) you wish to hide/show respectively. You can also reorder the columns if desired.
112
- ///
107
+ > [!tip] Column Options
108
+ > You can hide/show columns by right clicking the list header to get a special context menu. You can then deselect or
109
+ > select the column(s) you wish to hide/show respectively. You can also reorder the columns if desired.
113
110
 
114
111
  ## Regular Expression Tester
115
112
 
@@ -278,32 +275,31 @@ POSIX = 0x2000 # (?p)
278
275
  LITERAL = 0x10000 # Literal search
279
276
  ```
280
277
 
281
- /// example | Example Plugin
282
- In the example below, we have a replace plugin that replaces the search result with the name of the file. It is
283
- assumed this is not a binary replace, so a Unicode string is returned.
284
-
285
- ```py3
286
- from __future__ import unicode_literals
287
- from rummage.lib import rumcore
288
- import os
289
-
290
-
291
- class TestReplace(rumcore.ReplacePlugin):
292
- """Replace object."""
293
-
294
- def replace(self, m):
295
- """Replace method."""
296
-
297
- name = os.path.basename(self.get_file_name())
298
- return name
299
-
300
-
301
- def get_replace():
302
- """Get the replace object."""
303
-
304
- return TestReplace
305
- ```
306
- ///
278
+ > [!example] Example Plugin
279
+ > In the example below, we have a replace plugin that replaces the search result with the name of the file. It is
280
+ > assumed this is not a binary replace, so a Unicode string is returned.
281
+ >
282
+ > ```py3
283
+ > from __future__ import unicode_literals
284
+ > from rummage.lib import rumcore
285
+ > import os
286
+ >
287
+ >
288
+ > class TestReplace(rumcore.ReplacePlugin):
289
+ > """Replace object."""
290
+ >
291
+ > def replace(self, m):
292
+ > """Replace method."""
293
+ >
294
+ > name = os.path.basename(self.get_file_name())
295
+ > return name
296
+ >
297
+ >
298
+ > def get_replace():
299
+ > """Get the replace object."""
300
+ >
301
+ > return TestReplace
302
+ > ```
307
303
 
308
304
  ## Export to CSV or HTML
309
305
 
@@ -313,7 +309,6 @@ Rummage allows the exporting of the results to either CSV or HTML. Simply select
313
309
  **CSV** or **HTML**. The HTML output will be styled similar to the GUI interface with the results in tables with
314
310
  sortable columns.
315
311
 
316
- /// info | Large Result Sets
317
- Really, really large sets of results will probably be best suited for CSV as a browser may have a hard time loading
318
- the entire data set at once.
319
- ///
312
+ > [!info] Large Result Sets
313
+ > Really, really large sets of results will probably be best suited for CSV as a browser may have a hard time loading
314
+ > the entire data set at once.
@@ -0,0 +1,2 @@
1
+ :root>*{--md-default-bg-color--trans: rgb(100%, 100%, 100%, 0);--md-tab-control-bg: var(--md-default-bg-color);--md-code-fg-color: #1F1F1F;--md-code-bg-color: #F5F5F5;--md-code-title-bg-color: #F5F5F5;--md-code-inline-bg-color: #F5F5F5;--md-code-hl-operator-color: #A3134D;--md-code-hl-punctuation-color: #1F1F1F;--md-code-hl-string-color: #836E15;--md-code-hl-special-color: #644AC9;--md-code-hl-number-color: #644AC9;--md-code-hl-keyword-color: #A3134D;--md-code-hl-name-color: #1F1F1F;--md-code-hl-constant-color: #644AC9;--md-code-hl-function-color: #14720A;--md-code-hl-comment-color: #635D97;--md-code-hl-variable-color: #A34D14;--md-code-hl-generic-color: #635D97;--md-code-hl-color: #CFCFDE;--md-code-hl-color--light: #DCDEEF;--md-typeset-table-color: rgb(0% 0% 0% / 15%);--md-code-hl-entity-color: #14720A;--md-code-hl-tag-color: #A3134D;--md-code-hl-namespace-color: #1F1F1F;--md-code-hl-builtin-color: #036A96;--md-code-hl-class-color: #036A96;--md-code-special-bg-color: #DCDEEF;--md-steps-bg-color: var(--md-code-bg-color);--md-steps-fg-color: var(--md-code-fg-color);--md-steps-border-color: hsla(0, 0%, 75%, 1);--md-typeset-a-color: #00bcd4;--md-progress-stripe: var(--md-default-bg-color--lighter);--md-progress-100: #00e676;--md-progress-80: #00e676;--md-progress-60: #fbc02d;--md-progress-40: #ff9100;--md-progress-20: #ff5252;--md-progress-0: #ff1744;--md-typeset-kbd-color: rgb(228.3721025416, 228.3721025416, 228.3721025416);--md-typeset-kbd-border-color: rgb(164.4010497691, 164.4010497691, 164.4010497691);--md-typeset-kbd-accent-color: hsla(0, 100%, 100%, 1)}:root>*[data-md-color-scheme=slate]{--md-default-fg-color: hsla(60, 30%, 96.078%, 0.87);--md-default-fg-color--light: hsla(60, 30%, 96.078%, 0.54);--md-default-fg-color--lighter: hsla(60, 30%, 96.078%, 0.36);--md-default-fg-color--lightest: hsla(60, 30%, 96.078%, 0.12);--md-default-autocomplete-fg-color: hsla(60, 30%, 96.078%, 0.4);--md-footer-fg-color: var(--md-default-fg-color);--md-default-bg-color: var(--md-default-bg-color--darkest);--md-default-bg-color--light: color(srgb 0.0327882794 0.0359366892 0.0551574304 / 0.7);--md-default-bg-color--lighter: color(srgb 0.0327882794 0.0359366892 0.0551574304 / 0.4);--md-default-bg-color--lightest: color(srgb 0.0327882794 0.0359366892 0.0551574304 / 0.1);--md-default-bg-color--trans: color(srgb 0.0327882794 0.0359366892 0.0551574304 / 0);--md-tab-control-bg: var(--md-default-bg-color--dark);--md-default-bg-color--dark: color(srgb 0.1147606354 0.1213715063 0.1588331081);--md-default-bg-color--darker: color(srgb 0.0781790415 0.0833653407 0.1127543696);--md-default-bg-color--darkest: color(srgb 0.0327882794 0.0359366892 0.0551574304);--md-text-color: var(--md-default-fg-color);--md-typeset-color: var(--md-default-fg-color);--md-admonition-fg-color: var(--md-default-fg-color);--md-code-fg-color: hsl(60, 30%, 96.078%);--md-code-bg-color: hsl(231, 15%, 18%);--md-code-title-bg-color: hsl(231, 15%, 18%);--md-code-inline-bg-color: hsl(231, 15%, 18%);--md-code-hl-operator-color: hsl(326, 100%, 74%);--md-code-hl-punctuation-color: hsl(60, 30%, 96.078%);--md-code-hl-string-color: hsl(65, 92%, 76%);--md-code-hl-special-color: hsl(265, 89%, 78%);--md-code-hl-number-color: hsl(265, 89%, 78%);--md-code-hl-keyword-color: hsl(326, 100%, 74%);--md-code-hl-name-color: hsl(60, 30%, 96.078%);--md-code-hl-constant-color: hsl(265, 89%, 78%);--md-code-hl-function-color: hsl(135, 94%, 65%);--md-code-hl-comment-color: hsl(225, 27%, 51%);--md-code-hl-variable-color: hsl(31, 100%, 71%);--md-code-hl-generic-color: hsl(225, 27%, 51%);--md-code-hl-color: hsl(231, 15%, 30%);--md-code-hl-color--light: hsl(231, 25%, 25%);--md-code-bg-color--light: hsla(231, 15%, 18%, 0.9);--md-code-bg-color--lighter: hsla(231, 15%, 18%, 0.5);--md-typeset-table-color: rgb(100% 100% 100% / 15%);--md-code-hl-entity-color: hsl(135, 94%, 65%);--md-code-hl-tag-color: hsl(326, 100%, 74%);--md-code-hl-namespace-color: hsl(60, 30%, 96.078%);--md-code-hl-builtin-color: hsl(191, 97%, 77%);--md-code-hl-class-color: hsl(191, 97%, 77%);--md-code-special-bg-color: hsl(231, 25%, 25%);--md-steps-border-color: hsl(230.6613379686, 10.4241713343%, 28.1575403575%);--md-typeset-a-color: hsl(191, 97%, 77%);--md-typeset-mark-color: hsl(75.3111515854, 11.5600114451%, 37.8888925515%);--md-typeset-del-color: hsl(314.8219481072, 22.0434125534%, 35.1703201111%);--md-typeset-ins-color: hsl(145.2334928709, 27.8121663576%, 33.1574755691%);--md-progress-stripe: var(--md-default-bg-color--lightest);--md-progress-100: hsl(135, 94%, 65%);--md-progress-80: hsl(96.9286079031, 93.5050765575%, 74.7933068737%);--md-progress-60: hsl(65, 92%, 76%);--md-progress-40: hsl(31, 100%, 71%);--md-progress-20: hsl(326, 100%, 74%);--md-progress-0: hsl(0, 100%, 67%);--md-typeset-kbd-color: var(--md-default-fg-color--lightest);--md-typeset-kbd-border-color: var(--md-default-bg-color--dark);--md-typeset-kbd-accent-color: var(--md-default-fg-color--lighter)}[data-md-color-scheme=slate][data-md-color-primary=red],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=red]{--md-primary-code-bg-color: hsl(332.2545890109, 15.8127407999%, 23.5759703429%);--md-primary-fg-color: hsla(0deg, 100%, 67%, 1);--md-primary-fg-color--transparent: hsla(0deg, 100%, 67%, 0.2);--md-primary-fg-color--light: hsla(0deg, 100%, 72%, 1);--md-primary-fg-color--dark: hsla(0deg, 100%, 62%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=pink],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=pink]{--md-primary-code-bg-color: hsl(288.4757168622, 14.8889902037%, 24.6712834924%);--md-primary-fg-color: hsla(326deg, 100%, 74%, 1);--md-primary-fg-color--transparent: hsla(326deg, 100%, 74%, 0.2);--md-primary-fg-color--light: hsla(326deg, 100%, 79%, 1);--md-primary-fg-color--dark: hsla(326deg, 100%, 69%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=purple],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=purple]{--md-primary-code-bg-color: hsl(248.4980702, 16.8923581309%, 26.4141657947%);--md-primary-fg-color: hsla(265deg, 89%, 78%, 1);--md-primary-fg-color--transparent: hsla(265deg, 89%, 78%, 0.2);--md-primary-fg-color--light: hsla(265deg, 89%, 83%, 1);--md-primary-fg-color--dark: hsla(265deg, 89%, 73%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=deep-purple],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=deep-purple]{--md-primary-code-bg-color: hsl(248.4980702, 16.8923581309%, 26.4141657947%);--md-primary-fg-color: hsla(265deg, 89%, 78%, 1);--md-primary-fg-color--transparent: hsla(265deg, 89%, 78%, 0.2);--md-primary-fg-color--light: hsla(265deg, 89%, 83%, 1);--md-primary-fg-color--dark: hsla(265deg, 89%, 73%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=blue],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=blue]{--md-primary-code-bg-color: hsl(227.2638621359, 21.6677726002%, 25.6465952614%);--md-primary-fg-color: hsla(225deg, 100%, 75%, 1);--md-primary-fg-color--transparent: hsla(225deg, 100%, 75%, 0.2);--md-primary-fg-color--light: hsla(225deg, 100%, 80%, 1);--md-primary-fg-color--dark: hsla(225deg, 100%, 70%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=indigo],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=indigo]{--md-primary-code-bg-color: hsl(227.2638621359, 21.6677726002%, 25.6465952614%);--md-primary-fg-color: hsla(225deg, 100%, 75%, 1);--md-primary-fg-color--transparent: hsla(225deg, 100%, 75%, 0.2);--md-primary-fg-color--light: hsla(225deg, 100%, 80%, 1);--md-primary-fg-color--dark: hsla(225deg, 100%, 70%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=light-blue],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=light-blue]{--md-primary-code-bg-color: hsl(227.2638621359, 21.6677726002%, 25.6465952614%);--md-primary-fg-color: hsla(225deg, 100%, 75%, 1);--md-primary-fg-color--transparent: hsla(225deg, 100%, 75%, 0.2);--md-primary-fg-color--light: hsla(225deg, 100%, 80%, 1);--md-primary-fg-color--dark: hsla(225deg, 100%, 70%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=cyan],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=cyan]{--md-primary-code-bg-color: hsl(210.993928831, 19.0177068244%, 26.0788938803%);--md-primary-fg-color: hsla(191deg, 97%, 77%, 1);--md-primary-fg-color--transparent: hsla(191deg, 97%, 77%, 0.2);--md-primary-fg-color--light: hsla(191deg, 97%, 82%, 1);--md-primary-fg-color--dark: hsla(191deg, 97%, 72%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=teal],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=teal]{--md-primary-code-bg-color: hsl(210.993928831, 19.0177068244%, 26.0788938803%);--md-primary-fg-color: hsla(191deg, 97%, 77%, 1);--md-primary-fg-color--transparent: hsla(191deg, 97%, 77%, 0.2);--md-primary-fg-color--light: hsla(191deg, 97%, 82%, 1);--md-primary-fg-color--dark: hsla(191deg, 97%, 72%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=green],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=green]{--md-primary-code-bg-color: hsl(168.8720935496, 16.518720864%, 23.1930022147%);--md-primary-fg-color: hsla(135deg, 94%, 65%, 1);--md-primary-fg-color--transparent: hsla(135deg, 94%, 65%, 0.2);--md-primary-fg-color--light: hsla(135deg, 94%, 70%, 1);--md-primary-fg-color--dark: hsla(135deg, 94%, 60%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=light-green],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=light-green]{--md-primary-code-bg-color: hsl(168.8720935496, 16.518720864%, 23.1930022147%);--md-primary-fg-color: hsla(135deg, 94%, 65%, 1);--md-primary-fg-color--transparent: hsla(135deg, 94%, 65%, 0.2);--md-primary-fg-color--light: hsla(135deg, 94%, 70%, 1);--md-primary-fg-color--dark: hsla(135deg, 94%, 60%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=lime],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=lime]{--md-primary-code-bg-color: hsl(168.8720935496, 16.518720864%, 23.1930022147%);--md-primary-fg-color: hsla(135deg, 94%, 65%, 1);--md-primary-fg-color--transparent: hsla(135deg, 94%, 65%, 0.2);--md-primary-fg-color--light: hsla(135deg, 94%, 70%, 1);--md-primary-fg-color--dark: hsla(135deg, 94%, 60%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=yellow],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=yellow]{--md-primary-code-bg-color: hsl(159.3047128419, 2.986865819%, 26.1419609775%);--md-primary-fg-color: hsla(65deg, 92%, 76%, 1);--md-primary-fg-color--transparent: hsla(65deg, 92%, 76%, 0.2);--md-primary-fg-color--light: hsla(65deg, 92%, 81%, 1);--md-primary-fg-color--dark: hsla(65deg, 92%, 71%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=amber],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=amber]{--md-primary-code-bg-color: hsl(159.3047128419, 2.986865819%, 26.1419609775%);--md-primary-fg-color: hsla(65deg, 92%, 76%, 1);--md-primary-fg-color--transparent: hsla(65deg, 92%, 76%, 0.2);--md-primary-fg-color--light: hsla(65deg, 92%, 81%, 1);--md-primary-fg-color--dark: hsla(65deg, 92%, 71%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=orange],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=orange]{--md-primary-code-bg-color: hsl(338.2103998913, 5.0960419739%, 25.1078079888%);--md-primary-fg-color: hsla(31deg, 100%, 71%, 1);--md-primary-fg-color--transparent: hsla(31deg, 100%, 71%, 0.2);--md-primary-fg-color--light: hsla(31deg, 100%, 76%, 1);--md-primary-fg-color--dark: hsla(31deg, 100%, 66%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-primary=deep-orange],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=deep-orange]{--md-primary-code-bg-color: hsl(338.2103998913, 5.0960419739%, 25.1078079888%);--md-primary-fg-color: hsla(31deg, 100%, 71%, 1);--md-primary-fg-color--transparent: hsla(31deg, 100%, 71%, 0.2);--md-primary-fg-color--light: hsla(31deg, 100%, 76%, 1);--md-primary-fg-color--dark: hsla(31deg, 100%, 66%, 1);--md-primary-bg-color: var(--md-default-bg-color);--md-primary-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=red],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=red]{--md-code-link-accent-bg-color: hsl(332.2545890109, 15.8127407999%, 23.5759703429%);--md-accent-fg-color: hsla(0deg, 100%, 67%, 1);--md-accent-fg-color--transparent: hsla(0deg, 100%, 67%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=pink],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=pink]{--md-code-link-accent-bg-color: hsl(288.4757168622, 14.8889902037%, 24.6712834924%);--md-accent-fg-color: hsla(326deg, 100%, 74%, 1);--md-accent-fg-color--transparent: hsla(326deg, 100%, 74%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=purple],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=purple]{--md-code-link-accent-bg-color: hsl(248.4980702, 16.8923581309%, 26.4141657947%);--md-accent-fg-color: hsla(265deg, 89%, 78%, 1);--md-accent-fg-color--transparent: hsla(265deg, 89%, 78%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=deep-purple],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=deep-purple]{--md-code-link-accent-bg-color: hsl(248.4980702, 16.8923581309%, 26.4141657947%);--md-accent-fg-color: hsla(265deg, 89%, 78%, 1);--md-accent-fg-color--transparent: hsla(265deg, 89%, 78%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=blue],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=blue]{--md-code-link-accent-bg-color: hsl(227.2638621359, 21.6677726002%, 25.6465952614%);--md-accent-fg-color: hsla(225deg, 100%, 75%, 1);--md-accent-fg-color--transparent: hsla(225deg, 100%, 75%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=indigo],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=indigo]{--md-code-link-accent-bg-color: hsl(227.2638621359, 21.6677726002%, 25.6465952614%);--md-accent-fg-color: hsla(225deg, 100%, 75%, 1);--md-accent-fg-color--transparent: hsla(225deg, 100%, 75%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=light-blue],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=light-blue]{--md-code-link-accent-bg-color: hsl(227.2638621359, 21.6677726002%, 25.6465952614%);--md-accent-fg-color: hsla(225deg, 100%, 75%, 1);--md-accent-fg-color--transparent: hsla(225deg, 100%, 75%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=cyan],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=cyan]{--md-code-link-accent-bg-color: hsl(210.993928831, 19.0177068244%, 26.0788938803%);--md-accent-fg-color: hsla(191deg, 97%, 77%, 1);--md-accent-fg-color--transparent: hsla(191deg, 97%, 77%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=teal],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=teal]{--md-code-link-accent-bg-color: hsl(210.993928831, 19.0177068244%, 26.0788938803%);--md-accent-fg-color: hsla(191deg, 97%, 77%, 1);--md-accent-fg-color--transparent: hsla(191deg, 97%, 77%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=green],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=green]{--md-code-link-accent-bg-color: hsl(168.8720935496, 16.518720864%, 23.1930022147%);--md-accent-fg-color: hsla(135deg, 94%, 65%, 1);--md-accent-fg-color--transparent: hsla(135deg, 94%, 65%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=light-green],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=light-green]{--md-code-link-accent-bg-color: hsl(168.8720935496, 16.518720864%, 23.1930022147%);--md-accent-fg-color: hsla(135deg, 94%, 65%, 1);--md-accent-fg-color--transparent: hsla(135deg, 94%, 65%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=lime],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=lime]{--md-code-link-accent-bg-color: hsl(168.8720935496, 16.518720864%, 23.1930022147%);--md-accent-fg-color: hsla(135deg, 94%, 65%, 1);--md-accent-fg-color--transparent: hsla(135deg, 94%, 65%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=yellow],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=yellow]{--md-code-link-accent-bg-color: hsl(159.3047128419, 2.986865819%, 26.1419609775%);--md-accent-fg-color: hsla(65deg, 92%, 76%, 1);--md-accent-fg-color--transparent: hsla(65deg, 92%, 76%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=amber],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=amber]{--md-code-link-accent-bg-color: hsl(159.3047128419, 2.986865819%, 26.1419609775%);--md-accent-fg-color: hsla(65deg, 92%, 76%, 1);--md-accent-fg-color--transparent: hsla(65deg, 92%, 76%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=orange],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=orange]{--md-code-link-accent-bg-color: hsl(338.2103998913, 5.0960419739%, 25.1078079888%);--md-accent-fg-color: hsla(31deg, 100%, 71%, 1);--md-accent-fg-color--transparent: hsla(31deg, 100%, 71%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}[data-md-color-scheme=slate][data-md-color-accent=deep-orange],[data-md-color-scheme=slate] :not([data-md-color-scheme])[data-md-color-primary=deep-orange]{--md-code-link-accent-bg-color: hsl(338.2103998913, 5.0960419739%, 25.1078079888%);--md-accent-fg-color: hsla(31deg, 100%, 71%, 1);--md-accent-fg-color--transparent: hsla(31deg, 100%, 71%, 0.2);--md-accent-bg-color: var(--md-default-bg-color);--md-accent-bg-color--light: var(--md-default-bg-color--light)}:root{--md-heart: #ff5252;--md-heart-big: #ff1744}:root [data-md-color-scheme=slate]{--md-heart: hsl(0, 100%, 67%);--md-heart-big: hsl(326, 100%, 74%)}.md-typeset a.source-link{position:relative;top:-0.6rem;float:right;color:var(--md-default-fg-color--lighter);transition:color 125ms}.md-typeset a.source-link:hover{color:var(--md-accent-fg-color)}.md-typeset a.source-link .twemoji{height:1.2rem}.md-typeset a.source-link .twemoji svg{width:1.2rem;height:1.2rem}.md-typeset div.highlight.md-max-height pre>code{max-height:15rem}.twemoji.heart-throb svg,.twemoji.heart-throb-hover svg{position:relative;color:var(--md-heart);animation:pulse 1.5s ease infinite}@keyframes pulse{0%{transform:scale(1)}40%{color:var(--md-heart-big);transform:scale(1.3)}50%{transform:scale(1.2)}60%{color:var(--md-heart-big);transform:scale(1.3)}100%{transform:scale(1)}}footer.sponsorship{text-align:center}footer.sponsorship .twemoji{padding:.05rem}footer.sponsorship a{text-decoration:none}footer.sponsorship hr{display:inline-block;width:1.6rem;margin:0 .7rem;vertical-align:middle;border-bottom:2px solid var(--md-default-fg-color--lighter)}footer.sponsorship:hover hr{border-color:var(--md-accent-fg-color)}footer.sponsorship:not(:hover) .twemoji.heart-throb-hover svg{color:var(--md-default-fg-color--lighter) !important}:root>*{--md-admonition-icon-color: #3654c2;--md-admonition-bg-color: rgba(54, 84, 194, 0.1)}:root>*[data-md-color-scheme=slate]{--md-admonition-icon-color: hsl(225, 100%, 75%);--md-admonition-bg-color: hsla(225, 100%, 75%, 0.1)}:root>*{--md-admonition-icon--settings: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 15.5A3.5 3.5 0 0 1 8.5 12 3.5 3.5 0 0 1 12 8.5a3.5 3.5 0 0 1 3.5 3.5 3.5 3.5 0 0 1-3.5 3.5m7.43-2.53c.04-.32.07-.64.07-.97s-.03-.66-.07-1l2.11-1.63c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.31-.61-.22l-2.49 1c-.52-.39-1.06-.73-1.69-.98l-.37-2.65A.506.506 0 0 0 14 2h-4c-.25 0-.46.18-.5.42l-.37 2.65c-.63.25-1.17.59-1.69.98l-2.49-1c-.22-.09-.49 0-.61.22l-2 3.46c-.13.22-.07.49.12.64L4.57 11c-.04.34-.07.67-.07 1s.03.65.07.97l-2.11 1.66c-.19.15-.25.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1.01c.52.4 1.06.74 1.69.99l.37 2.65c.04.24.25.42.5.42h4c.25 0 .46-.18.5-.42l.37-2.65c.63-.26 1.17-.59 1.69-.99l2.49 1.01c.22.08.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64z"/></svg>');--md-admonition-bg-color--settings: rgba(170, 0, 255, 0.1);--md-admonition-icon-color--settings: #aa00ff}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--settings: hsla(326, 100%, 74%, 0.1);--md-admonition-icon-color--settings: hsl(326, 100%, 74%)}:root>*{--md-admonition-icon--new: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m23 12-2.44-2.78.34-3.68-3.61-.82-1.89-3.18L12 3 8.6 1.54 6.71 4.72l-3.61.81.34 3.68L1 12l2.44 2.78-.34 3.69 3.61.82 1.89 3.18L12 21l3.4 1.46 1.89-3.18 3.61-.82-.34-3.68zm-10 5h-2v-2h2zm0-4h-2V7h2z"/></svg>');--md-admonition-bg-color--new: rgba(255, 214, 0, 0.1);--md-admonition-icon-color--new: #ffd600}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--new: hsla(65, 92%, 76%, 0.1);--md-admonition-icon-color--new: hsl(65, 92%, 76%)}:root>*{--md-admonition-icon--important: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 22a1 1 0 0 1-1-1v-3H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6.1l-3.7 3.71c-.2.19-.45.29-.7.29zm1-6v3.08L13.08 16H20V4H4v12zm3-6h-2V6h2zm0 4h-2v-2h2z"/></svg>');--md-admonition-bg-color--important: rgba(124, 77, 255, 0.1);--md-admonition-icon-color--important: #7c4dff}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--important: hsla(300.507916868, 58.3554777078%, 71.0104358913%, 0.1);--md-admonition-icon-color--important: hsl(300.507916868, 58.3554777078%, 71.0104358913%)}:root>*{--md-admonition-bg-color--note: rgba(68, 138, 255, 0.1);--md-admonition-icon-color--note: #448aff}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--note: hsla(225, 100%, 75%, 0.1);--md-admonition-icon-color--note: hsl(225, 100%, 75%)}:root>*{--md-admonition-bg-color--abstract: rgba(0, 176, 255, 0.1);--md-admonition-icon-color--abstract: #00b0ff}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--abstract: hsla(208.9651589316, 100.1516938638%, 76.1926610237%, 0.1);--md-admonition-icon-color--abstract: hsl(208.9651589316, 100.1516938638%, 76.1926610237%)}:root>*{--md-admonition-bg-color--info: rgba(0, 184, 212, 0.1);--md-admonition-icon-color--info: #00b8d4}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--info: hsla(191, 97%, 77%, 0.1);--md-admonition-icon-color--info: hsl(191, 97%, 77%)}:root>*{--md-admonition-bg-color--tip: rgba(0, 191, 165, 0.1);--md-admonition-icon-color--tip: #00bfa5}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--tip: hsla(157.7363570417, 83.7763520157%, 69.6636999884%, 0.1);--md-admonition-icon-color--tip: hsl(157.7363570417, 83.7763520157%, 69.6636999884%)}:root>*{--md-admonition-bg-color--success: rgba(0, 200, 83, 0.1);--md-admonition-icon-color--success: #00c853}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--success: hsla(135, 94%, 65%, 0.1);--md-admonition-icon-color--success: hsl(135, 94%, 65%)}:root>*{--md-admonition-bg-color--question: rgba(100, 221, 23, 0.1);--md-admonition-icon-color--question: #64dd17}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--question: hsla(96.9286079031, 93.5050765575%, 74.7933068737%, 0.1);--md-admonition-icon-color--question: hsl(96.9286079031, 93.5050765575%, 74.7933068737%)}:root>*{--md-admonition-bg-color--warning: rgba(255, 145, 0, 0.1);--md-admonition-icon-color--warning: #ff9100}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--warning: hsla(31, 100%, 71%, 0.1);--md-admonition-icon-color--warning: hsl(31, 100%, 71%)}:root>*{--md-admonition-bg-color--failure: rgba(255, 82, 82, 0.1);--md-admonition-icon-color--failure: #ff5252}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--failure: hsla(15.759766848, 102.8951066345%, 69.4486457644%, 0.1);--md-admonition-icon-color--failure: hsl(15.759766848, 102.8951066345%, 69.4486457644%)}:root>*{--md-admonition-bg-color--danger: rgba(255, 23, 68, 0.1);--md-admonition-icon-color--danger: #ff1744}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--danger: hsla(0, 100%, 67%, 0.1);--md-admonition-icon-color--danger: hsl(0, 100%, 67%)}:root>*{--md-admonition-bg-color--bug: rgba(245, 0, 87, 0.1);--md-admonition-icon-color--bug: #f50057}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--bug: hsla(344.5737278948, 100.1359681762%, 71.0000228672%, 0.1);--md-admonition-icon-color--bug: hsl(344.5737278948, 100.1359681762%, 71.0000228672%)}:root>*{--md-admonition-bg-color--example: rgba(98, 0, 234, 0.1);--md-admonition-icon-color--example: #6200ea}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--example: hsla(265, 89%, 78%, 0.1);--md-admonition-icon-color--example: hsl(265, 89%, 78%)}:root>*{--md-admonition-bg-color--quote: rgba(158, 158, 158, 0.1);--md-admonition-icon-color--quote: #9e9e9e}:root>*[data-md-color-scheme=slate]{--md-admonition-bg-color--quote: hsla(225, 8%, 51%, 0.1);--md-admonition-icon-color--quote: hsl(225, 8%, 51%)}.md-typeset .admonition,.md-typeset details{font-size:inherit;background:var(--md-admonition-bg-color--note);border-width:0;border-left-width:4px}.md-typeset .admonition>.admonition-title::before,.md-typeset details>.admonition-title::before,.md-typeset details>summary::before{background-color:var(--md-admonition-icon-color--note)}.md-typeset .admonition>.admonition-title::after,.md-typeset details>.admonition-title::after,.md-typeset details>summary::after{color:var(--md-admonition-icon-color--note)}.md-typeset .admonition.note,.md-typeset details.note{background:var(--md-admonition-bg-color--note)}.md-typeset .admonition.note>.admonition-title::before,.md-typeset details.note>.admonition-title::before,.md-typeset details.note>summary::before{background-color:var(--md-admonition-icon-color--note)}.md-typeset .admonition.note>.admonition-title::after,.md-typeset details.note>.admonition-title::after,.md-typeset details.note>summary::after{color:var(--md-admonition-icon-color--note)}.md-typeset .admonition.abstract,.md-typeset details.abstract{background:var(--md-admonition-bg-color--abstract)}.md-typeset .admonition.abstract>.admonition-title::before,.md-typeset details.abstract>.admonition-title::before,.md-typeset details.abstract>summary::before{background-color:var(--md-admonition-icon-color--abstract)}.md-typeset .admonition.abstract>.admonition-title::after,.md-typeset details.abstract>.admonition-title::after,.md-typeset details.abstract>summary::after{color:var(--md-admonition-icon-color--abstract)}.md-typeset .admonition.info,.md-typeset details.info{background:var(--md-admonition-bg-color--info)}.md-typeset .admonition.info>.admonition-title::before,.md-typeset details.info>.admonition-title::before,.md-typeset details.info>summary::before{background-color:var(--md-admonition-icon-color--info)}.md-typeset .admonition.info>.admonition-title::after,.md-typeset details.info>.admonition-title::after,.md-typeset details.info>summary::after{color:var(--md-admonition-icon-color--info)}.md-typeset .admonition.tip,.md-typeset details.tip{background:var(--md-admonition-bg-color--tip)}.md-typeset .admonition.tip>.admonition-title::before,.md-typeset details.tip>.admonition-title::before,.md-typeset details.tip>summary::before{background-color:var(--md-admonition-icon-color--tip)}.md-typeset .admonition.tip>.admonition-title::after,.md-typeset details.tip>.admonition-title::after,.md-typeset details.tip>summary::after{color:var(--md-admonition-icon-color--tip)}.md-typeset .admonition.success,.md-typeset details.success{background:var(--md-admonition-bg-color--success)}.md-typeset .admonition.success>.admonition-title::before,.md-typeset details.success>.admonition-title::before,.md-typeset details.success>summary::before{background-color:var(--md-admonition-icon-color--success)}.md-typeset .admonition.success>.admonition-title::after,.md-typeset details.success>.admonition-title::after,.md-typeset details.success>summary::after{color:var(--md-admonition-icon-color--success)}.md-typeset .admonition.question,.md-typeset details.question{background:var(--md-admonition-bg-color--question)}.md-typeset .admonition.question>.admonition-title::before,.md-typeset details.question>.admonition-title::before,.md-typeset details.question>summary::before{background-color:var(--md-admonition-icon-color--question)}.md-typeset .admonition.question>.admonition-title::after,.md-typeset details.question>.admonition-title::after,.md-typeset details.question>summary::after{color:var(--md-admonition-icon-color--question)}.md-typeset .admonition.warning,.md-typeset details.warning{background:var(--md-admonition-bg-color--warning)}.md-typeset .admonition.warning>.admonition-title::before,.md-typeset details.warning>.admonition-title::before,.md-typeset details.warning>summary::before{background-color:var(--md-admonition-icon-color--warning)}.md-typeset .admonition.warning>.admonition-title::after,.md-typeset details.warning>.admonition-title::after,.md-typeset details.warning>summary::after{color:var(--md-admonition-icon-color--warning)}.md-typeset .admonition.failure,.md-typeset details.failure{background:var(--md-admonition-bg-color--failure)}.md-typeset .admonition.failure>.admonition-title::before,.md-typeset details.failure>.admonition-title::before,.md-typeset details.failure>summary::before{background-color:var(--md-admonition-icon-color--failure)}.md-typeset .admonition.failure>.admonition-title::after,.md-typeset details.failure>.admonition-title::after,.md-typeset details.failure>summary::after{color:var(--md-admonition-icon-color--failure)}.md-typeset .admonition.danger,.md-typeset details.danger{background:var(--md-admonition-bg-color--danger)}.md-typeset .admonition.danger>.admonition-title::before,.md-typeset details.danger>.admonition-title::before,.md-typeset details.danger>summary::before{background-color:var(--md-admonition-icon-color--danger)}.md-typeset .admonition.danger>.admonition-title::after,.md-typeset details.danger>.admonition-title::after,.md-typeset details.danger>summary::after{color:var(--md-admonition-icon-color--danger)}.md-typeset .admonition.bug,.md-typeset details.bug{background:var(--md-admonition-bg-color--bug)}.md-typeset .admonition.bug>.admonition-title::before,.md-typeset details.bug>.admonition-title::before,.md-typeset details.bug>summary::before{background-color:var(--md-admonition-icon-color--bug)}.md-typeset .admonition.bug>.admonition-title::after,.md-typeset details.bug>.admonition-title::after,.md-typeset details.bug>summary::after{color:var(--md-admonition-icon-color--bug)}.md-typeset .admonition.example,.md-typeset details.example{background:var(--md-admonition-bg-color--example)}.md-typeset .admonition.example>.admonition-title::before,.md-typeset details.example>.admonition-title::before,.md-typeset details.example>summary::before{background-color:var(--md-admonition-icon-color--example)}.md-typeset .admonition.example>.admonition-title::after,.md-typeset details.example>.admonition-title::after,.md-typeset details.example>summary::after{color:var(--md-admonition-icon-color--example)}.md-typeset .admonition.quote,.md-typeset details.quote{background:var(--md-admonition-bg-color--quote)}.md-typeset .admonition.quote>.admonition-title::before,.md-typeset details.quote>.admonition-title::before,.md-typeset details.quote>summary::before{background-color:var(--md-admonition-icon-color--quote)}.md-typeset .admonition.quote>.admonition-title::after,.md-typeset details.quote>.admonition-title::after,.md-typeset details.quote>summary::after{color:var(--md-admonition-icon-color--quote)}.md-typeset .admonition.settings,.md-typeset details.settings{background:var(--md-admonition-bg-color--settings)}.md-typeset .admonition.settings>.admonition-title::before,.md-typeset details.settings>.admonition-title::before,.md-typeset details.settings>summary::before{width:1rem;height:1rem;background-color:var(--md-admonition-icon-color--settings);background-size:1rem;-webkit-mask-image:var(--md-admonition-icon--settings);mask-image:var(--md-admonition-icon--settings);content:" "}.md-typeset .admonition.settings>.admonition-title::after,.md-typeset details.settings>.admonition-title::after,.md-typeset details.settings>summary::after{color:var(--md-admonition-icon-color--settings)}.md-typeset .admonition.new,.md-typeset details.new{background:var(--md-admonition-bg-color--new)}.md-typeset .admonition.new>.admonition-title::before,.md-typeset details.new>.admonition-title::before,.md-typeset details.new>summary::before{width:1rem;height:1rem;background-color:var(--md-admonition-icon-color--new);background-size:1rem;-webkit-mask-image:var(--md-admonition-icon--new);mask-image:var(--md-admonition-icon--new);content:" "}.md-typeset .admonition.new>.admonition-title::after,.md-typeset details.new>.admonition-title::after,.md-typeset details.new>summary::after{color:var(--md-admonition-icon-color--new)}.md-typeset .admonition.important,.md-typeset details.important{background:var(--md-admonition-bg-color--important)}.md-typeset .admonition.important>.admonition-title::before,.md-typeset details.important>.admonition-title::before,.md-typeset details.important>summary::before{width:1rem;height:1rem;background-color:var(--md-admonition-icon-color--important);background-size:1rem;-webkit-mask-image:var(--md-admonition-icon--important);mask-image:var(--md-admonition-icon--important);content:" "}.md-typeset .admonition.important>.admonition-title::after,.md-typeset details.important>.admonition-title::after,.md-typeset details.important>summary::after{color:var(--md-admonition-icon-color--important)}mjx-container[display=true]{font-size:120% !important}mjx-container:not([display]){font-size:100% !important}.md-typeset .arithmatex{overflow-x:auto !important;overflow-y:hidden !important}.katex-display .katex-html{display:flex !important;flex-direction:row;flex-wrap:nowrap;align-items:baseline;justify-content:space-between}.katex-display .katex-html .base{display:inline !important}.katex-display .katex-html .tag{position:relative !important;display:inline !important;margin-left:var(--margin-small)}.CtxtMenu_InfoClose{top:.2em;right:.2em}.CtxtMenu_InfoContent{overflow:auto;text-align:left;font-size:80%;padding:.4em .6em;border:1px inset;margin:1em 0px;max-height:20em;max-width:30em;background-color:#eee;white-space:normal}.CtxtMenu_Info.CtxtMenu_MousePost{outline:none}.CtxtMenu_Info{position:fixed;left:50%;width:auto;text-align:center;border:3px outset;padding:1em 2em;background-color:#ddd;color:#000;cursor:default;font-family:message-box;font-size:120%;font-style:normal;text-indent:0;text-transform:none;line-height:normal;letter-spacing:normal;word-spacing:normal;word-wrap:normal;white-space:nowrap;float:none;z-index:201;border-radius:15px;-webkit-border-radius:15px;-moz-border-radius:15px;-khtml-border-radius:15px;box-shadow:0px 10px 20px gray;-webkit-box-shadow:0px 10px 20px gray;-moz-box-shadow:0px 10px 20px gray;-khtml-box-shadow:0px 10px 20px gray;filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=2, OffY=2, Color="gray", Positive="true")}.CtxtMenu_MenuClose{position:absolute;cursor:pointer;display:inline-block;border:2px solid #aaa;border-radius:18px;-webkit-border-radius:18px;-moz-border-radius:18px;-khtml-border-radius:18px;font-family:"Courier New",Courier;font-size:24px;color:#f0f0f0}.CtxtMenu_MenuClose span{display:block;background-color:#aaa;border:1.5px solid;border-radius:18px;-webkit-border-radius:18px;-moz-border-radius:18px;-khtml-border-radius:18px;line-height:0;padding:8px 0 6px}.CtxtMenu_MenuClose:hover{color:#fff !important;border:2px solid #ccc !important}.CtxtMenu_MenuClose:hover span{background-color:#ccc !important}.CtxtMenu_MenuClose:hover:focus{outline:none}.CtxtMenu_Menu{position:absolute;background-color:#fff;color:#000;width:auto;padding:5px 0px;border:1px solid #ccc;margin:0;cursor:default;font:menu;text-align:left;text-indent:0;text-transform:none;line-height:normal;letter-spacing:normal;word-spacing:normal;word-wrap:normal;white-space:nowrap;float:none;z-index:201;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;-khtml-border-radius:5px;box-shadow:0px 10px 20px gray;-webkit-box-shadow:0px 10px 20px gray;-moz-box-shadow:0px 10px 20px gray;-khtml-box-shadow:0px 10px 20px gray}.CtxtMenu_MenuItem{padding:1px 2em;background:rgba(0,0,0,0)}.CtxtMenu_MenuArrow{position:absolute;right:.5em;padding-top:.25em;color:#666;font-size:.75em}.CtxtMenu_MenuActive .CtxtMenu_MenuArrow{color:#fff}.CtxtMenu_MenuArrow.CtxtMenu_RTL{left:.5em;right:auto}.CtxtMenu_MenuCheck{position:absolute;left:.7em}.CtxtMenu_MenuCheck.CtxtMenu_RTL{right:.7em;left:auto}.CtxtMenu_MenuRadioCheck{position:absolute;left:.7em}.CtxtMenu_MenuRadioCheck.CtxtMenu_RTL{right:.7em;left:auto}.CtxtMenu_MenuInputBox{padding-left:1em;right:.5em;color:#666}.CtxtMenu_MenuInputBox.CtxtMenu_RTL{left:.1em}.CtxtMenu_MenuComboBox{left:.1em;padding-bottom:.5em}.CtxtMenu_MenuSlider{left:.1em}.CtxtMenu_SliderValue{position:absolute;right:.1em;padding-top:.25em;color:#333;font-size:.75em}.CtxtMenu_SliderBar{outline:none;background:#d3d3d3}.CtxtMenu_MenuLabel{padding:1px 2em 3px 1.33em;font-style:italic}.CtxtMenu_MenuRule{border-top:1px solid #ddd;margin:4px 3px}.CtxtMenu_MenuDisabled{color:GrayText}.CtxtMenu_MenuActive{background-color:#606872;color:#fff}.CtxtMenu_MenuDisabled:focus{background-color:#e8e8e8}.CtxtMenu_MenuLabel:focus{background-color:#e8e8e8}.CtxtMenu_ContextMenu:focus{outline:none}.CtxtMenu_ContextMenu .CtxtMenu_MenuItem:focus{outline:none}.CtxtMenu_SelectionMenu{position:relative;float:left;border-bottom:none;-webkit-box-shadow:none;-webkit-border-radius:0px}.CtxtMenu_SelectionItem{padding-right:1em}.CtxtMenu_Selection{right:40%;width:50%}.CtxtMenu_SelectionBox{padding:0em;max-height:20em;max-width:none;background-color:#fff}.CtxtMenu_SelectionDivider{clear:both;border-top:2px solid #000}.CtxtMenu_Menu .CtxtMenu_MenuClose{top:-10px;left:-10px}[data-md-color-scheme=slate] .CtxtMenu_InfoSignature input,[data-md-color-scheme=slate] .CtxtMenu_InfoContent pre{color:#000}[data-md-color-scheme=slate] .CtxtMenu_Info,[data-md-color-scheme=slate] .CtxtMenu_Menu{box-shadow:0px 10px 20px rgba(0,0,0,.5)}.md-typeset del.critic,.md-typeset ins.critic,.md-typeset mark.critic{padding:0 .25em;color:unset;box-shadow:none}.md-typeset .critic.break{margin:0}.md-typeset details{overflow:hidden}.md-typeset details>summary:focus{outline-style:none}:root>*{--highlight-svg-console: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 19V7H4v12zm0-16a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2zm-7 14v-2h5v2zm-3.42-4L5.57 9H8.4l3.3 3.3c.39.39.39 1.03 0 1.42L8.42 17H5.59z"/></svg>');--highlight-svg-arrow-expand: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 21v-2H6.41l4.5-4.5-1.41-1.41-4.5 4.5V14H3v7zm4.5-10.09 4.5-4.5V10h2V3h-7v2h3.59l-4.5 4.5z"/></svg>');--highlight-svg-arrow-collapse: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19.5 3.09 15 7.59V4h-2v7h7V9h-3.59l4.5-4.5zM4 13v2h3.59l-4.5 4.5 1.41 1.41 4.5-4.5V20h2v-7z"/></svg>')}.highlight .hll{box-shadow:2px 0 0 0 var(--md-accent-fg-color) inset}.highlight .kc{color:var(--md-code-hl-constant-color)}.highlight .nc,.highlight .ne{color:var(--md-code-hl-class-color)}.highlight .mb{color:var(--md-code-hl-number-color)}.highlight .nb,.highlight .bp{color:var(--md-code-hl-builtin-color)}.highlight .nn{color:var(--md-code-hl-namespace-color)}.highlight .na,.highlight .nd,.highlight .ni{color:var(--md-code-hl-entity-color)}.highlight .nl,.highlight .nt{color:var(--md-code-hl-tag-color)}.md-typeset *:not(pre)>code{margin:0;padding:.1654411765em .3125em;color:var(--md-code-fg-color);background-color:var(--md-code-inline-bg-color);border-radius:.2rem;box-shadow:none}.md-typeset pre>code{display:grid}.md-typeset td code{word-break:normal}.md-typeset .highlight{-moz-tab-size:8;-o-tab-size:8;tab-size:8}.md-typeset .highlight [data-linenos]:hover::before{color:var(--md-accent-fg-color);font-weight:700}.md-typeset .highlight [data-linenos].special::before{background-color:var(--md-code-special-bg-color)}.md-typeset .highlight .hll [data-linenos]::before{box-shadow:-2px 0 var(--md-accent-fg-color) inset}.md-typeset .highlighttable .linenodiv .special{margin-right:-.5882352941em;margin-left:-1.1764705882em;padding-right:.5882352941em;padding-left:1.1764705882em;background-color:var(--md-code-special-bg-color)}.md-typeset .highlight span.filename{position:relative;display:block;margin-top:1em;padding:.5em 1.1764705882em .5em 2.9411764706em;font-weight:700;font-size:.68rem;background-color:var(--md-code-title-bg-color);border-top-left-radius:.48rem;border-top-right-radius:.48rem}.md-typeset .highlight span.filename+pre{margin-top:0}.md-typeset .highlight span.filename+pre code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .highlight span.filename::before{position:absolute;left:.8823529412em;width:1.4705882353em;height:1.4705882353em;background-color:var(--md-default-fg-color);-webkit-mask-image:var(--highlight-svg-console);mask-image:var(--highlight-svg-console);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;content:""}.md-typeset .collapse-code{position:relative;margin-top:1em;margin-bottom:1em}.md-typeset .collapse-code pre{margin-top:0;margin-bottom:0}.md-typeset .collapse-code input{display:none}.md-typeset .collapse-code input~.code-footer{width:100%;margin:0;padding:.25em .5em .25em 0em}.md-typeset .collapse-code input~.code-footer label{position:relative;margin:.05em;padding:.15em .8em;color:var(--md-primary-bg-color);font-size:90%;background-color:var(--md-accent-fg-color);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;border-radius:.1rem;cursor:pointer;content:""}.md-typeset .collapse-code input~.code-footer label:hover{background-color:var(--md-accent-fg-color)}.md-typeset .collapse-code input~.code-footer label::before{position:absolute;top:.15em;left:.15em;display:block;box-sizing:border-box;width:1.25em;height:1.25em;background-color:var(--md-primary-bg-color);background-size:1.25em;content:""}.md-typeset .collapse-code input~.code-footer label.expand{display:none}.md-typeset .collapse-code input~.code-footer label.expand::before{-webkit-mask-image:var(--highlight-svg-arrow-expand);mask-image:var(--highlight-svg-arrow-expand)}.md-typeset .collapse-code input~.code-footer label.collapse::before{-webkit-mask-image:var(--highlight-svg-arrow-collapse);mask-image:var(--highlight-svg-arrow-collapse)}.md-typeset .collapse-code input:checked~.code-footer label.expand{display:inline}.md-typeset .collapse-code input:checked~.code-footer label.collapse{display:none}.md-typeset .collapse-code input:checked+div.highlight code{max-height:9.375em;overflow:hidden}.md-typeset .collapse-code input:checked~.code-footer{position:relative;bottom:4.3em;left:0;margin-bottom:-4.3em;padding:2em .5em .5em .8rem;background-image:linear-gradient(to bottom, transparent, var(--md-default-bg-color) 80% 100%);border-bottom-right-radius:.48rem;border-bottom-left-radius:.48rem}.md-typeset .highlight+.result{border-right-width:.1rem;border-bottom-width:.1rem;border-left-width:.1rem}.md-typeset .keys .key-power::before{padding-right:.4em;content:"⏻"}.md-typeset .keys .key-fingerprint::before{padding-right:.4em;content:"☝"}:root>*{--magiclink-email-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 4H4c-1.11 0-2 .89-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2m-3 13H7v-2h10m0-2H7v-2h10m3-2h-3V6h3"/></svg>');--magiclink-github-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2"/></svg>');--magiclink-bitbucket-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M2.65 3C2.3 3 2 3.3 2 3.65v.12l2.73 16.5c.07.42.43.73.85.73h13.05c.31 0 .59-.22.64-.54L22 3.77a.643.643 0 0 0-.54-.73c-.03-.01-.07-.01-.11-.01zM14.1 14.95H9.94L8.81 9.07h6.3z"/></svg>');--magiclink-gitlab-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m21.94 13.11-1.05-3.22c0-.03-.01-.06-.02-.09l-2.11-6.48a.86.86 0 0 0-.8-.57c-.36 0-.68.25-.79.58l-2 6.17H8.84L6.83 3.33a.85.85 0 0 0-.79-.58c-.37 0-.69.25-.8.58L3.13 9.82v.01l-1.07 3.28c-.16.5.01 1.04.44 1.34l9.22 6.71c.17.12.39.12.56-.01l9.22-6.7c.43-.3.6-.84.44-1.34M8.15 10.45l2.57 7.91-6.17-7.91m8.73 7.92 2.47-7.59.1-.33h3.61l-5.59 7.16m4.1-13.67 1.81 5.56h-3.62m-1.3.95-1.79 5.51L12 19.24l-2.86-8.79M6.03 3.94 7.84 9.5H4.23m-1.18 4.19c-.09-.07-.13-.19-.09-.29l.79-2.43 5.82 7.45m11.38-4.73-6.51 4.73.02-.03 5.79-7.42.79 2.43c.04.1 0 .22-.09.29"/></svg>');--magiclink-commit-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16.944 11h4.306a.75.75 0 0 1 0 1.5h-4.306a5.001 5.001 0 0 1-9.888 0H2.75a.75.75 0 0 1 0-1.5h4.306a5.001 5.001 0 0 1 9.888 0m-1.444.75a3.5 3.5 0 1 0-7 0 3.5 3.5 0 0 0 7 0"/></svg>');--magiclink-compare-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12.5 6.75a.75.75 0 0 0-1.5 0V9H8.75a.75.75 0 0 0 0 1.5H11v2.25a.75.75 0 0 0 1.5 0V10.5h2.25a.75.75 0 0 0 0-1.5H12.5zM8.75 16a.75.75 0 0 0 0 1.5h6a.75.75 0 0 0 0-1.5z"/><path d="M5 1h9.982a2 2 0 0 1 1.414.586l4.018 4.018A2 2 0 0 1 21 7.018V21a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2m-.5 2v18a.5.5 0 0 0 .5.5h14a.5.5 0 0 0 .5-.5V7.018a.5.5 0 0 0-.146-.354l-4.018-4.018a.5.5 0 0 0-.354-.146H5a.5.5 0 0 0-.5.5"/></svg>');--magiclink-pull-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M16 19.25a3.25 3.25 0 1 1 6.5 0 3.25 3.25 0 0 1-6.5 0m-14.5 0a3.25 3.25 0 1 1 6.5 0 3.25 3.25 0 0 1-6.5 0m0-14.5a3.25 3.25 0 1 1 6.5 0 3.25 3.25 0 0 1-6.5 0M4.75 3a1.75 1.75 0 1 0 .001 3.501A1.75 1.75 0 0 0 4.75 3m0 14.5a1.75 1.75 0 1 0 .001 3.501A1.75 1.75 0 0 0 4.75 17.5m14.5 0a1.75 1.75 0 1 0 .001 3.501 1.75 1.75 0 0 0-.001-3.501"/><path d="M13.405 1.72a.75.75 0 0 1 0 1.06L12.185 4h4.065A3.75 3.75 0 0 1 20 7.75v8.75a.75.75 0 0 1-1.5 0V7.75a2.25 2.25 0 0 0-2.25-2.25h-4.064l1.22 1.22a.75.75 0 0 1-1.061 1.06l-2.5-2.5a.75.75 0 0 1 0-1.06l2.5-2.5a.75.75 0 0 1 1.06 0M4.75 7.25A.75.75 0 0 1 5.5 8v8A.75.75 0 0 1 4 16V8a.75.75 0 0 1 .75-.75"/></svg>');--magiclink-issue-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1M2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12m9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14"/></svg>');--magiclink-discussion-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1M1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.75.75 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25"/><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25z"/></svg>')}.md-typeset a[href^="mailto:"]:not(.magiclink-ignore)::before{-webkit-mask-image:var(--magiclink-email-icon);mask-image:var(--magiclink-email-icon)}.md-typeset .magiclink-repository:not(.magiclink-ignore),.md-typeset .magiclink-compare:not(.magiclink-ignore),.md-typeset .magiclink-commit:not(.magiclink-ignore),.md-typeset .magiclink-pull:not(.magiclink-ignore),.md-typeset .magiclink-issue:not(.magiclink-ignore),.md-typeset .magiclink-discussion:not(.magiclink-ignore),.md-typeset a[href^="mailto:"]:not(.magiclink-ignore){position:relative;padding-left:1.375em}.md-typeset .magiclink-repository:not(.magiclink-ignore)::before,.md-typeset .magiclink-compare:not(.magiclink-ignore)::before,.md-typeset .magiclink-commit:not(.magiclink-ignore)::before,.md-typeset .magiclink-pull:not(.magiclink-ignore)::before,.md-typeset .magiclink-issue:not(.magiclink-ignore)::before,.md-typeset .magiclink-discussion:not(.magiclink-ignore)::before,.md-typeset a[href^="mailto:"]:not(.magiclink-ignore)::before{position:absolute;top:0;left:0;display:block;box-sizing:border-box;width:1.25em;height:1.25em;background-color:var(--md-typeset-a-color);background-size:1.25em;transition:background-color 125ms;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;content:""}.md-typeset .magiclink-repository:not(.magiclink-ignore):hover::before,.md-typeset .magiclink-compare:not(.magiclink-ignore):hover::before,.md-typeset .magiclink-commit:not(.magiclink-ignore):hover::before,.md-typeset .magiclink-pull:not(.magiclink-ignore):hover::before,.md-typeset .magiclink-issue:not(.magiclink-ignore):hover::before,.md-typeset .magiclink-discussion:not(.magiclink-ignore):hover::before,.md-typeset a[href^="mailto:"]:not(.magiclink-ignore):hover::before{background-color:var(--md-accent-fg-color)}.md-typeset .magiclink-commit:not(.magiclink-ignore)::before{-webkit-mask-image:var(--magiclink-commit-icon);mask-image:var(--magiclink-commit-icon)}.md-typeset .magiclink-compare:not(.magiclink-ignore)::before{-webkit-mask-image:var(--magiclink-compare-icon);mask-image:var(--magiclink-compare-icon)}.md-typeset .magiclink-pull:not(.magiclink-ignore)::before{-webkit-mask-image:var(--magiclink-pull-icon);mask-image:var(--magiclink-pull-icon)}.md-typeset .magiclink-issue:not(.magiclink-ignore)::before{-webkit-mask-image:var(--magiclink-issue-icon);mask-image:var(--magiclink-issue-icon)}.md-typeset .magiclink-discussion:not(.magiclink-ignore)::before{-webkit-mask-image:var(--magiclink-discussion-icon);mask-image:var(--magiclink-discussion-icon)}.md-typeset .magiclink-repository.magiclink-github:not(.magiclink-ignore)::before{-webkit-mask-image:var(--magiclink-github-icon);mask-image:var(--magiclink-github-icon)}.md-typeset .magiclink-repository.magiclink-gitlab:not(.magiclink-ignore)::before{-webkit-mask-image:var(--magiclink-gitlab-icon);mask-image:var(--magiclink-gitlab-icon)}.md-typeset .magiclink-repository.magiclink-bitbucket:not(.magiclink-ignore)::before{-webkit-mask-image:var(--magiclink-bitbucket-icon);mask-image:var(--magiclink-bitbucket-icon)}.md-typeset mark:not(.critic){box-shadow:none}.md-typeset .progress-label{position:absolute;width:100%;margin:0;color:var(--md-text-color);font-weight:700;line-height:1.4rem;white-space:nowrap;text-align:center;text-shadow:-0.0625em -0.0625em .375em var(--md-default-bg-color--light),.0625em -0.0625em .375em var(--md-default-bg-color--light),-0.0625em .0625em .375em var(--md-default-bg-color--light),.0625em .0625em .375em var(--md-default-bg-color--light)}.md-typeset .progress-bar{float:left;height:1.2rem;background-color:#2979ff}.md-typeset .candystripe-animate .progress-bar{animation:animate-stripes 3s linear infinite}.md-typeset .progress{position:relative;display:block;width:100%;height:1.2rem;margin:.5rem 0;background-color:var(--md-default-fg-color--lightest)}.md-typeset .progress.thin{height:.4rem;margin-top:.9rem}.md-typeset .progress.thin .progress-label{margin-top:-0.4rem}.md-typeset .progress.thin .progress-bar{height:.4rem}.md-typeset .progress.candystripe .progress-bar{background-image:linear-gradient(135deg, var(--md-progress-stripe) 27%, transparent 27%, transparent 52%, var(--md-progress-stripe) 52%, var(--md-progress-stripe) 77%, transparent 77%, transparent);background-size:2rem 2rem}.md-typeset .progress-100plus .progress-bar{background-color:var(--md-progress-100)}.md-typeset .progress-80plus .progress-bar{background-color:var(--md-progress-80)}.md-typeset .progress-60plus .progress-bar{background-color:var(--md-progress-60)}.md-typeset .progress-40plus .progress-bar{background-color:var(--md-progress-40)}.md-typeset .progress-20plus .progress-bar{background-color:var(--md-progress-20)}.md-typeset .progress-0plus .progress-bar{background-color:var(--md-progress-0)}@keyframes animate-stripes{0%{background-position:0 0}100%{background-position:6rem 0}}.md-typeset .tabbed-control button:hover{color:var(--md-default-bg-color);background:var(--md-accent-fg-color)}.md-typeset .tabbed-control--next button:hover{color:var(--md-default-bg-color);background:var(--md-accent-fg-color)}.js .md-typeset .tabbed-labels::before{background-color:var(--md-accent-fg-color)}.md-typeset .tabbed-alternate.tabbed-set .tabbed-control{width:2rem}.md-typeset .tabbed-alternate.tabbed-set .tabbed-control[hidden]{width:1.2rem;opacity:0}.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block{padding:0 .6rem}.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>pre:first-child,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.codehilite:first-child,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.codehilitetable:first-child,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.highlight:first-child,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.highlighttable:first-child{margin-top:.9375em}.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>pre:first-child code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.codehilite:first-child code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.codehilitetable:first-child code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.highlight:first-child code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.highlighttable:first-child code{border-top-left-radius:.48rem;border-top-right-radius:.48rem}.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>pre:only-child,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.codehilite:only-child,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.codehilitetable:only-child,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.highlight:only-child,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.highlighttable:only-child{margin-top:0;margin-right:-1.2rem;margin-left:-1.2rem;padding-right:.6rem;padding-left:.6rem}.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>pre:only-child code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.codehilite:only-child code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.codehilitetable:only-child code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.highlight:only-child code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.highlighttable:only-child code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>pre:only-child span.filename,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.codehilite:only-child span.filename,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.codehilitetable:only-child span.filename,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.highlight:only-child span.filename,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.highlighttable:only-child span.filename{margin-top:0}.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.collapse-code:only-child{margin-top:0;margin-right:-1.2rem;margin-left:-1.2rem;padding-right:.6rem;padding-left:.6rem}.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.collapse-code:only-child pre code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.collapse-code:only-child .codehilite code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.collapse-code:only-child .codehilitetable code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.collapse-code:only-child .highlight code,.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>.collapse-code:only-child .highlighttable code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-alternate.tabbed-set>.tabbed-content>.tabbed-block>diagram-div:only-child{margin-right:-1.2rem;margin-left:-1.2rem;padding-right:.6rem;padding-left:.6rem}[data-md-color-scheme=slate] .md-typeset .task-list-control .task-list-indicator::before{background-color:var(--md-default-fg-color--lighter)}[data-md-color-scheme=slate] .md-typeset .task-list-control [type=checkbox]:checked+.task-list-indicator::before{background-color:hsl(135,94%,65%)}:root>*{--toc-svg-link: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1M8 13h8v-2H8zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4a5 5 0 0 0 5-5 5 5 0 0 0-5-5"/></svg>')}.md-typeset .headerlink{width:1em;height:1em;vertical-align:middle;background-color:var(--md-default-fg-color--lighter);background-size:1em;-webkit-mask-size:1em;mask-size:1em;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;visibility:visible;-webkit-mask-image:var(--toc-svg-link);mask-image:var(--toc-svg-link)}.md-typeset .headerlink:hover,.md-typeset [id]:target .headerlink{background-color:var(--md-accent-fg-color)}diagram-div{overflow:auto}.md-typeset div.steps>ol{counter-reset:item}.md-typeset div.steps>ol>li{position:relative;padding-left:1em;list-style:none}.md-typeset div.steps>ol>li::before{position:absolute;top:0;left:0;z-index:-1;display:block;width:1.75em;height:1.75em;margin-left:-1.25em;color:var(--md-steps-fg-color);font-weight:600;font-size:.9em;text-align:center;background-color:var(--md-steps-bg-color);border:1px solid var(--md-steps-border-color);border-radius:100px;content:counter(item);counter-increment:item}.md-typeset div.steps>ol>li::after{position:absolute;top:0;bottom:0;left:-0.36em;display:block;width:1px;margin-top:2em;border-left:1px solid var(--md-steps-border-color);content:""}.md-typeset table:not([class]){background:none;border-radius:.4rem}.md-typeset table:not([class]) th{border-bottom:.1rem solid var(--md-accent-fg-color)}html{background-color:rgba(0,0,0,0)}[data-md-component=announce] .twemoji{color:var(--md-primary-fg-color)}.md-container .md-tabs .md-tabs__item--active{border-bottom:.1rem solid var(--md-accent-fg-color)}.md-nav--secondary>ul{border-left:.1rem solid var(--md-default-fg-color--lightest)}.md-nav--secondary ul .md-nav__item .md-nav__link--active{margin-left:-0.1rem;padding-left:.8rem}.md-nav--secondary ul .md-nav__item ul .md-nav__item .md-nav__link--active{margin-left:-0.7rem;padding-left:1.4rem}.md-nav--secondary ul .md-nav__item ul .md-nav__item ul .md-nav__item .md-nav__link--active{margin-left:-1.3rem;padding-left:2rem}.md-nav--secondary ul .md-nav__item ul .md-nav__item ul .md-nav__item ul .md-nav__item .md-nav__link--active{margin-left:-1.9rem;padding-left:2.6rem}.md-nav--secondary ul .md-nav__item ul .md-nav__item ul .md-nav__item ul .md-nav__item ul .md-nav__item .md-nav__link--active{margin-left:-2.5rem;padding-left:3.2rem}.md-nav--secondary .md-nav__item{color:var(--md-default-fg-color--light)}.md-nav--secondary .md-nav__item .md-nav__link--active{color:var(--md-default-fg-color);border-left:.1rem solid var(--md-accent-fg-color);border-top-left-radius:0;border-bottom-left-radius:0}.md-nav--secondary .md-nav__item .md-nav__link:focus,.md-nav--secondary .md-nav__item .md-nav__link:hover{color:var(--md-default-fg-color)}.md-nav--primary .md-nav__item{color:var(--md-default-fg-color--light)}.md-nav__source{color:var(--md-text-color)}.md-nav__link[data-md-state=blur]{color:var(--md-default-fg-color--light)}.md-typeset h5{color:var(--md-text-color);text-transform:none}.md-typeset__scrollwrap,.md-sidebar__scrollwrap,.md-search__scrollwrap,.md-typeset pre>code,.md-typeset div.mermaid,.md-typeset div.diagram,.md-typeset mermaid-div,.md-typeset diagram-div,.md-typeset pre.arithmatex,.md-typeset div.arithmatex{scrollbar-color:var(--md-default-fg-color--lighter) rgba(0,0,0,0);scrollbar-width:thin}.md-typeset__scrollwrap:hover,.md-sidebar__scrollwrap:hover,.md-search__scrollwrap:hover,.md-typeset pre>code:hover,.md-typeset div.mermaid:hover,.md-typeset div.diagram:hover,.md-typeset mermaid-div:hover,.md-typeset diagram-div:hover,.md-typeset pre.arithmatex:hover,.md-typeset div.arithmatex:hover{scrollbar-color:var(--md-accent-fg-color) rgba(0,0,0,0)}.md-typeset__scrollwrap::-webkit-scrollbar,.md-sidebar__scrollwrap::-webkit-scrollbar,.md-search__scrollwrap::-webkit-scrollbar,.md-typeset pre>code::-webkit-scrollbar,.md-typeset div.mermaid::-webkit-scrollbar,.md-typeset div.diagram::-webkit-scrollbar,.md-typeset mermaid-div::-webkit-scrollbar,.md-typeset diagram-div::-webkit-scrollbar,.md-typeset pre.arithmatex::-webkit-scrollbar,.md-typeset div.arithmatex::-webkit-scrollbar{width:.2rem;height:.2rem}.md-typeset__scrollwrap::-webkit-scrollbar-corner,.md-sidebar__scrollwrap::-webkit-scrollbar-corner,.md-search__scrollwrap::-webkit-scrollbar-corner,.md-typeset pre>code::-webkit-scrollbar-corner,.md-typeset div.mermaid::-webkit-scrollbar-corner,.md-typeset div.diagram::-webkit-scrollbar-corner,.md-typeset mermaid-div::-webkit-scrollbar-corner,.md-typeset diagram-div::-webkit-scrollbar-corner,.md-typeset pre.arithmatex::-webkit-scrollbar-corner,.md-typeset div.arithmatex::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}.md-typeset__scrollwrap::-webkit-scrollbar-thumb,.md-sidebar__scrollwrap::-webkit-scrollbar-thumb,.md-search__scrollwrap::-webkit-scrollbar-thumb,.md-typeset pre>code::-webkit-scrollbar-thumb,.md-typeset div.mermaid::-webkit-scrollbar-thumb,.md-typeset div.diagram::-webkit-scrollbar-thumb,.md-typeset mermaid-div::-webkit-scrollbar-thumb,.md-typeset diagram-div::-webkit-scrollbar-thumb,.md-typeset pre.arithmatex::-webkit-scrollbar-thumb,.md-typeset div.arithmatex::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset__scrollwrap::-webkit-scrollbar-thumb:hover,.md-sidebar__scrollwrap::-webkit-scrollbar-thumb:hover,.md-search__scrollwrap::-webkit-scrollbar-thumb:hover,.md-typeset pre>code::-webkit-scrollbar-thumb:hover,.md-typeset div.mermaid::-webkit-scrollbar-thumb:hover,.md-typeset div.diagram::-webkit-scrollbar-thumb:hover,.md-typeset mermaid-div::-webkit-scrollbar-thumb:hover,.md-typeset diagram-div::-webkit-scrollbar-thumb:hover,.md-typeset pre.arithmatex::-webkit-scrollbar-thumb:hover,.md-typeset div.arithmatex::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@media screen and (max-width: 44.9375em){.md-content__inner>diagram-div{margin-right:-0.8rem;margin-left:-0.8rem}.md-content__inner>.highlight span.filename{border-top-left-radius:0;border-top-right-radius:0}.md-content__inner>.collapse-code{margin-right:-0.8rem;margin-left:-0.8rem}.md-content__inner>.collapse-code label.collapse{left:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:0}.md-content__inner>.tabbed-set .tabbed-labels{max-width:100%;margin:0;padding-inline-start:0;scroll-padding-inline-start:0}.md-content__inner>.tabbed-set .tabbed-labels::after{padding-inline-end:0;content:none}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-inline-start:0;padding-inline-start:0}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-inline-end:0;padding-inline-end:0}}
2
+ /*# sourceMappingURL=extra-95634471d6.css.map */
@@ -43,7 +43,6 @@ class CustomMetadataHook(MetadataHookInterface):
43
43
  "License :: OSI Approved :: MIT License",
44
44
  "Operating System :: OS Independent",
45
45
  "Programming Language :: Python :: 3",
46
- "Programming Language :: Python :: 3.9",
47
46
  "Programming Language :: Python :: 3.10",
48
47
  "Programming Language :: Python :: 3.11",
49
48
  "Programming Language :: Python :: 3.12",