From 12efa2fc1fc1a1267001e1ed388634618ecd040a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 10 Dec 2023 01:01:50 +0000 Subject: [PATCH] deploy: b8f4aced80bf35c5ef2f840ad3f9e7cbb4ef12fa --- .buildinfo | 4 + .nojekyll | 0 _images/crustal-phase-raypaths.jpg | Bin 0 -> 45127 bytes _images/dispersion-cartoon.jpg | Bin 0 -> 52018 bytes _images/surface-wave-dispersion.jpg | Bin 0 -> 48104 bytes _images/surface-wave-group-velocity.png | Bin 0 -> 33559 bytes _sources/index.md | 23 + _sources/ray-nomenclature/crustal-phases.md | 41 + _sources/seismic-wave/surface-wave.md | 84 + ...e.b7bb847fb20b106c3d81b95245e65545.min.css | 1 + _sphinx_design_static/design-tabs.js | 27 + _static/basic.css | 906 ++ _static/check-solid.svg | 4 + _static/clipboard.min.js | 7 + _static/copy-button.svg | 5 + _static/copybutton.css | 94 + _static/copybutton.js | 248 + _static/copybutton_funcs.js | 73 + ...e.b7bb847fb20b106c3d81b95245e65545.min.css | 1 + _static/design-tabs.js | 27 + _static/doctools.js | 358 + _static/documentation_options.js | 14 + _static/favicon.ico | Bin 0 -> 15406 bytes _static/file.png | Bin 0 -> 286 bytes _static/images/logo_binder.svg | 19 + _static/images/logo_colab.png | Bin 0 -> 7601 bytes _static/images/logo_deepnote.svg | 1 + _static/images/logo_jupyterhub.svg | 1 + _static/jquery-3.5.1.js | 10872 ++++++++++++++++ _static/jquery.js | 2 + _static/language_data.js | 297 + _static/locales/ar/LC_MESSAGES/booktheme.po | 81 + _static/locales/bg/LC_MESSAGES/booktheme.po | 81 + _static/locales/bn/LC_MESSAGES/booktheme.po | 66 + _static/locales/ca/LC_MESSAGES/booktheme.po | 69 + _static/locales/cs/LC_MESSAGES/booktheme.po | 81 + _static/locales/da/LC_MESSAGES/booktheme.po | 81 + _static/locales/de/LC_MESSAGES/booktheme.po | 81 + _static/locales/el/LC_MESSAGES/booktheme.po | 81 + _static/locales/eo/LC_MESSAGES/booktheme.po | 81 + _static/locales/es/LC_MESSAGES/booktheme.po | 81 + _static/locales/et/LC_MESSAGES/booktheme.po | 81 + _static/locales/fi/LC_MESSAGES/booktheme.po | 81 + _static/locales/fr/LC_MESSAGES/booktheme.po | 81 + _static/locales/hr/LC_MESSAGES/booktheme.po | 81 + _static/locales/id/LC_MESSAGES/booktheme.po | 81 + _static/locales/it/LC_MESSAGES/booktheme.po | 81 + _static/locales/iw/LC_MESSAGES/booktheme.po | 81 + _static/locales/ja/LC_MESSAGES/booktheme.po | 81 + _static/locales/ko/LC_MESSAGES/booktheme.po | 81 + _static/locales/lt/LC_MESSAGES/booktheme.po | 81 + _static/locales/lv/LC_MESSAGES/booktheme.po | 81 + _static/locales/ml/LC_MESSAGES/booktheme.po | 69 + _static/locales/mr/LC_MESSAGES/booktheme.po | 69 + _static/locales/ms/LC_MESSAGES/booktheme.po | 69 + _static/locales/nl/LC_MESSAGES/booktheme.po | 81 + _static/locales/no/LC_MESSAGES/booktheme.po | 81 + _static/locales/pl/LC_MESSAGES/booktheme.po | 81 + _static/locales/pt/LC_MESSAGES/booktheme.po | 81 + _static/locales/ro/LC_MESSAGES/booktheme.po | 81 + _static/locales/ru/LC_MESSAGES/booktheme.po | 81 + _static/locales/sk/LC_MESSAGES/booktheme.po | 81 + _static/locales/sl/LC_MESSAGES/booktheme.po | 81 + _static/locales/sr/LC_MESSAGES/booktheme.po | 81 + _static/locales/sv/LC_MESSAGES/booktheme.po | 81 + _static/locales/ta/LC_MESSAGES/booktheme.po | 69 + _static/locales/te/LC_MESSAGES/booktheme.po | 69 + _static/locales/tg/LC_MESSAGES/booktheme.po | 81 + _static/locales/th/LC_MESSAGES/booktheme.po | 81 + _static/locales/tl/LC_MESSAGES/booktheme.po | 69 + _static/locales/tr/LC_MESSAGES/booktheme.po | 81 + _static/locales/uk/LC_MESSAGES/booktheme.po | 81 + _static/locales/ur/LC_MESSAGES/booktheme.po | 69 + _static/locales/vi/LC_MESSAGES/booktheme.po | 81 + .../locales/zh_CN/LC_MESSAGES/booktheme.po | 78 + .../locales/zh_TW/LC_MESSAGES/booktheme.po | 81 + _static/minus.png | Bin 0 -> 90 bytes _static/mystnb.css | 1722 +++ _static/plus.png | Bin 0 -> 90 bytes _static/pygments.css | 75 + _static/sbt-webpack-macros.html | 11 + _static/scripts/pydata-sphinx-theme.js | 32 + _static/scripts/sphinx-book-theme.js | 2 + _static/scripts/sphinx-book-theme.js.map | 1 + _static/searchtools.js | 525 + _static/sphinx-thebe.css | 129 + _static/sphinx-thebe.js | 126 + _static/styles/pydata-sphinx-theme.css | 6 + _static/styles/sphinx-book-theme.css | 8 + _static/styles/theme.css | 134 + _static/togglebutton.css | 160 + _static/togglebutton.js | 187 + _static/underscore-1.13.1.js | 2042 +++ _static/underscore.js | 6 + _static/vendor/fontawesome/5.13.0/LICENSE.txt | 34 + .../vendor/fontawesome/5.13.0/css/all.min.css | 5 + .../5.13.0/webfonts/fa-brands-400.eot | Bin 0 -> 133034 bytes .../5.13.0/webfonts/fa-brands-400.svg | 3570 +++++ .../5.13.0/webfonts/fa-brands-400.ttf | Bin 0 -> 132728 bytes .../5.13.0/webfonts/fa-brands-400.woff | Bin 0 -> 89824 bytes .../5.13.0/webfonts/fa-brands-400.woff2 | Bin 0 -> 76612 bytes .../5.13.0/webfonts/fa-regular-400.eot | Bin 0 -> 34390 bytes .../5.13.0/webfonts/fa-regular-400.svg | 803 ++ .../5.13.0/webfonts/fa-regular-400.ttf | Bin 0 -> 34092 bytes .../5.13.0/webfonts/fa-regular-400.woff | Bin 0 -> 16800 bytes .../5.13.0/webfonts/fa-regular-400.woff2 | Bin 0 -> 13584 bytes .../5.13.0/webfonts/fa-solid-900.eot | Bin 0 -> 202902 bytes .../5.13.0/webfonts/fa-solid-900.svg | 4938 +++++++ .../5.13.0/webfonts/fa-solid-900.ttf | Bin 0 -> 202616 bytes .../5.13.0/webfonts/fa-solid-900.woff | Bin 0 -> 103300 bytes .../5.13.0/webfonts/fa-solid-900.woff2 | Bin 0 -> 79444 bytes _static/webpack-macros.html | 29 + genindex/index.html | 320 + index.html | 430 + objects.inv | Bin 0 -> 324 bytes ray-nomenclature/crustal-phases/index.html | 492 + search/index.html | 349 + searchindex.js | 1 + seismic-wave/surface-wave/index.html | 506 + 119 files changed, 33283 insertions(+) create mode 100644 .buildinfo create mode 100644 .nojekyll create mode 100644 _images/crustal-phase-raypaths.jpg create mode 100644 _images/dispersion-cartoon.jpg create mode 100644 _images/surface-wave-dispersion.jpg create mode 100644 _images/surface-wave-group-velocity.png create mode 100644 _sources/index.md create mode 100644 _sources/ray-nomenclature/crustal-phases.md create mode 100644 _sources/seismic-wave/surface-wave.md create mode 100644 _sphinx_design_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css create mode 100644 _sphinx_design_static/design-tabs.js create mode 100644 _static/basic.css create mode 100644 _static/check-solid.svg create mode 100644 _static/clipboard.min.js create mode 100644 _static/copy-button.svg create mode 100644 _static/copybutton.css create mode 100644 _static/copybutton.js create mode 100644 _static/copybutton_funcs.js create mode 100644 _static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css create mode 100644 _static/design-tabs.js create mode 100644 _static/doctools.js create mode 100644 _static/documentation_options.js create mode 100644 _static/favicon.ico create mode 100644 _static/file.png create mode 100644 _static/images/logo_binder.svg create mode 100644 _static/images/logo_colab.png create mode 100644 _static/images/logo_deepnote.svg create mode 100644 _static/images/logo_jupyterhub.svg create mode 100644 _static/jquery-3.5.1.js create mode 100644 _static/jquery.js create mode 100644 _static/language_data.js create mode 100644 _static/locales/ar/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/bg/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/bn/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ca/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/cs/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/da/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/de/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/el/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/eo/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/es/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/et/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/fi/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/fr/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/hr/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/id/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/it/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/iw/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ja/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ko/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/lt/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/lv/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ml/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/mr/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ms/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/nl/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/no/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/pl/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/pt/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ro/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ru/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/sk/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/sl/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/sr/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/sv/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ta/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/te/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/tg/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/th/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/tl/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/tr/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/uk/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/ur/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/vi/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/zh_CN/LC_MESSAGES/booktheme.po create mode 100644 _static/locales/zh_TW/LC_MESSAGES/booktheme.po create mode 100644 _static/minus.png create mode 100644 _static/mystnb.css create mode 100644 _static/plus.png create mode 100644 _static/pygments.css create mode 100644 _static/sbt-webpack-macros.html create mode 100644 _static/scripts/pydata-sphinx-theme.js create mode 100644 _static/scripts/sphinx-book-theme.js create mode 100644 _static/scripts/sphinx-book-theme.js.map create mode 100644 _static/searchtools.js create mode 100644 _static/sphinx-thebe.css create mode 100644 _static/sphinx-thebe.js create mode 100644 _static/styles/pydata-sphinx-theme.css create mode 100644 _static/styles/sphinx-book-theme.css create mode 100644 _static/styles/theme.css create mode 100644 _static/togglebutton.css create mode 100644 _static/togglebutton.js create mode 100644 _static/underscore-1.13.1.js create mode 100644 _static/underscore.js create mode 100644 _static/vendor/fontawesome/5.13.0/LICENSE.txt create mode 100644 _static/vendor/fontawesome/5.13.0/css/all.min.css create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.eot create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.svg create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.ttf create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff2 create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.eot create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.svg create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.ttf create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.woff create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.woff2 create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.eot create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.svg create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.ttf create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff create mode 100644 _static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff2 create mode 100644 _static/webpack-macros.html create mode 100644 genindex/index.html create mode 100644 index.html create mode 100644 objects.inv create mode 100644 ray-nomenclature/crustal-phases/index.html create mode 100644 search/index.html create mode 100644 searchindex.js create mode 100644 seismic-wave/surface-wave/index.html diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..4e560d0 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 816aa6e40bb09a2c2bfb73a8f915a48a +tags: d77d1c0d9ca2f4c8421862c7c5a0d620 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/_images/crustal-phase-raypaths.jpg b/_images/crustal-phase-raypaths.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de47e96cb7b78f9298ecf878f4572c8de2dc6190 GIT binary patch literal 45127 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ℑsrC-Jt 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%0A%s8R|8_u07As)Tmd4pN9#Lohl}pR-KA zgLAc*{znzLf7E&HrtL^`G9L{DMhh9zc90|P94l-2(LV6~km?uM+rbSen?J{OVyS4`X+Zhb}peB5*PrvYP(0y~x+U zniQX+op2BV+cB_dsn&=3Ks$*Iu~|R&>^1Vqev#wmgtPS_BH^=(NSv!RsU`+=1pPp$ zpOn7e-Gc?jwKVc1AUY{p36jJ}a27=z1*Q&3HM z!kE%+umH_4M{1m4Wvg`hQAVBzZHdz(rvkP}L~~u@sqLD;y3TDau@X7mML}PJ{~3;& zqNY%qn+lIC)MAAWvQTnVfbT>PL;cY7oeb&ONj!tH#T*rT6i4PWp&R+f_=)4dhi#y% z`11er+J6TwO3}h_BZP&TEF9S>kW6@0pXXOPe5!THk8ngy82@_bv9x+?*NNL6TqFUn ze%!vt%LaIN3f*#2^?dKpgSi%kAkUA*WX?;i22xBB)3V2+fblF^APWrTb~>fbrHYZa z-(TRpd1|W@1=y$O=&q}$2NYFE4Za#uWH5%)lt?NJ0 zS`Sn&I#?-FqRAPdO-uE{B%pXSw@DBwT-Z-K*1lm_$}#6xzPM^4vuv)NqUzK)QSCFx zxA6deu@0Gk3--vU0U10&;`5IFiCFyn*0tBxl++pN-C$^eGC-5L7p7(`(8Yq`nh4AWTE03T7T zrr5BI5U}u{M4qc8Uq3@;Ui_e54+KtGT}C>G1JU(xM5UkPrlS%RkR|SZ{V`P&F9w~n zdP|p6EvPhToSIxbL{;;k6T

U)k4UGMB7CIuw-)SZ^iu(Flk- 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 z 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 literal 0 HcmV?d00001 diff --git a/_sources/index.md b/_sources/index.md new file mode 100644 index 0000000..7340ac3 --- /dev/null +++ b/_sources/index.md @@ -0,0 +1,23 @@ +# 地震“学”参考书 + +欢迎阅读由[地震“学”小组](https://github.com/orgs/seismo-learn/people)撰写的《地震“学”参考书》。 + +地震学课程以及传统的纸质书籍,由于学时和篇幅的限制以及教师或作者的个人偏好, +不可能涵盖地震学科研过程中所需的全部基础知识。因而地震学科研工作者 +通常需要从多本不同的教材及网络渠道获得所需的信息。 + +这本**电子**参考书将包含我们在日常科研中遇到的一些知识点。这些知识点 +可能没有被主流的地震学教科书所涵盖,或者没有详细的解释。 +我们将在这里整理并记录下来我们的理解。 + +严格意义上来说,这不是一本完整的地震学“教科书”或“参考书”。或许可以作为 +研读地震学教程或日常科研时的辅助材料。 + +:::{warning} +本书正在缓慢编写中,尚未完成,预计在未来 10 年内完成,也可能永远不会完成。 +::: + +:::{admonition} 免责声明 +本书的所有内容完全基于撰写者在地震学科研过程中的理解与体会, +并不具备权威性,仅供读者参考。 +::: diff --git a/_sources/ray-nomenclature/crustal-phases.md b/_sources/ray-nomenclature/crustal-phases.md new file mode 100644 index 0000000..1eac050 --- /dev/null +++ b/_sources/ray-nomenclature/crustal-phases.md @@ -0,0 +1,41 @@ +# 地壳震相 + +- 本节贡献者:{{ 姚家园 }} (作者) +- 最近更新日期:2021-01-07 + +--- + +地球洋壳的厚度一般是 6 km,陆壳厚度一般是 30—50 km。地壳和地幔之间存在地震波速度 +陡升的一级不连续面,即 Moho 面。因此,在地壳不同深度的震源会在不同震中距处会产生射线路径 +不同的地震震相。 + +- **Pg**:在近场,上地壳震源产生的上行 P 波或在上地壳折返的 P 波。也可表示在更大震中距处, + 整个地壳内部多次 P 波混响产生的震相,群速度约为 5.8 km/s。 +- **Pb**:也叫 P\*,下地壳震源产生的上行 P 波或在下地壳折返的 P 波。 +- **PmP**:Moho 不连续面的上界面反射 P 波 +- **Pn**:在上地幔顶部折返的任何 P 波或上地幔顶部震源产生的上行 P 波 +- **Sg**:在近场,上地壳震源产生的上行 S 波或在上地壳折返的 S 波。也可表示在更大震中距处, + 整个地壳内部多次 S 波混响与 SV-P 和/或 P-SV 转换的叠加而产生的震相。 +- **Sb**:也称 S\*,下地壳震源产生的上行 S 波或在下地壳折返的 S 波。 +- **SmS**:Moho 不连续面的上界面反射 S 波 +- **Sn**:在上地幔顶部折返的任何 S 波或上地幔顶部震源产生的上行 S 波 +- **Lg**:在较大的区域距离处,由整个地壳内部多次 S 波混响与 SV-P 和/或 P-SV 转换的叠加而产生的波群。 + 最大能量的群速度大约是 3.5 km/s。 +- **Rg**: 短周期地壳瑞利波 + +:::{figure} crustal-phase-raypaths.jpg +:align: center +:alt: 常见地壳震相的几何路径 +:width: 60.0% + +在局部和区域震中距(0°—20°)处,双层地壳模型中常见地壳震相的射线路径。 +(a)震源位于上地壳;(b)震源位于下地壳;(c)震源位于上地幔顶部。 +图片来自 *New Manual of Seismological Observatory Practice (第二版)* 的 +Information Sheet 2.1 的图 1 +::: + + +## 参考文档 + +- [IASPEI standard phase list](http://www.isc.ac.uk/standards/phases/) +- [The IASPEI standard nomenclature of seismic phases](https://doi.org/10.2312/GFZ.NMSOP-2_IS_2.1) diff --git a/_sources/seismic-wave/surface-wave.md b/_sources/seismic-wave/surface-wave.md new file mode 100644 index 0000000..1fbf8e0 --- /dev/null +++ b/_sources/seismic-wave/surface-wave.md @@ -0,0 +1,84 @@ +# 面波 + +- 本节贡献者:{{ 姚家园 }} +- 最近更新日期:2022-08-19 + +--- + +## 面波频散 + +不同频率的面波传播速度不同,即频散(dispersion)。面波的传播速度与频率的函数关系称为 +频散曲线(dispersion curve)。面波有两种传播速度: + +- 相速度(phase velocity):波峰或波谷的传播速度,常用 $c$ 表示 +- 群速度(group velocity):波包的传播速度,常用 $U$ 表示 + +::::{dropdown} 相速度和群速度的示意图 +:color: info +:icon: info + +如下图所示,波峰的传播速度是相速度;波包的传播速度是群速度。 + +波包指台站记录到的振动的包络线,代表了波的能量。下图绘制了第一个台站和最后台站的波包, +需要注意的是下图的包络线只是为了形象化表示波包而刻意描绘出来的,台站处的介质实际运动还是振动曲线。 + +如下图所示,在波传播过程中,波峰的形状并不是固定的,而会在包络线的约束下改变。 + +:::{figure} dispersion-cartoon.jpg +:align: center +:alt: "相速度和群速度的示意图" +:width: 50% + +相速度和群速度的示意图。修改自《[Introduction to Seismology]》(第三版)图 8.7。 +::: +:::: + +下图是全球一维模型 PREM 的理论面波频散曲线。对于地球而言,面波的相速度一般随着周期的增加 +而增加,并且群速度一般比相速度小。 + +:::{figure} surface-wave-dispersion.jpg +:align: center +:alt: "面波理论频散曲线" +:width: 70% + +基阶 Love 波(左)和 Rayleigh 波(右)的理论频散曲线(来自 Preliminary Reference Earth Model (PREM))。 +修改自《[Introduction to Seismology]》(第三版)图 8.8。 +::: + +下图是大陆和大洋下传播面波的群速度频散曲线,横坐标采用了对数,这为了更好地显示短周期的频散。 +可以看出大陆和大洋路径的面波群速度有以下区别: + +- 大陆路径的面波频散比海洋路径弱,即频散曲线更平缓。 + 例如,大洋路径的 Rayleigh 波在 10-20 秒周期内,频散极强,群速度从 1 km/s 骤增至 + 3.5 km/s;而大陆路径的 Rayleigh 波在 3-50 秒周期内,群速度也只从 2 km/s 增加至 + 约 3.8 km/s。这主要是因为大洋地壳厚度比大陆地壳厚度小很多,前者约为 5-8 公里, + 后者约为 25-50 公里,大陆高山区地壳还会更厚。 +- 大陆路径的面波频散比海洋路径更持久,即群速度随周期而变化的周期区间更大。 + 例如,大洋路径的 Love 波在 10 秒周期后,群速度几乎保持不变,大约 4.5 km/s; + 而大陆路径的 Love 波的频散一直持续到约 100 秒周期。 + +:::{figure} surface-wave-group-velocity.png +:align: center +:alt: "大陆和大洋的面波群速度" +:width: 60% + +大陆和大洋的面波群速度。修改自《[An Introduction to the Theory of Seismology]》(第四版)图 11.1。 +::: + +% 该图实际上来自《Earthquakes and Geological Discovery》第五章的一张图, + +% 我们利用 WebPlotDigitizer 软件(https://automeris.io/WebPlotDigitizer/)抠出数据,用 GMT 绘制而成的。 + +% 《New Manual of Seismological Observatory Practice》第二章的图 2.10 也有类似的图: + +% https://doi.org/10.2312/GFZ.NMSOP-2_ch2 + +% MIT OCW (Introduction to Seismology) 的 Lecture 12 的图 12 也类似: + +% https://ocw.mit.edu/courses/earth-atmospheric-and-planetary-sciences/12-510-introduction-to-seismology-spring-2010/ + +% 这些频散曲线均来自 Oliver, J. (1962). A summary of observed seismic surface wave dispersion. + +% Bulletin of the Seismological Society of America, 52(1), 81-86. + +% https://pubs.geoscienceworld.org/ssa/bssa/article-abstract/52/1/81/101314/A-summary-of-observed-seismic-surface-wave?redirectedFrom=fulltext diff --git a/_sphinx_design_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css b/_sphinx_design_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css new file mode 100644 index 0000000..704c42e --- /dev/null +++ b/_sphinx_design_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #007bff;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0069d9;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/_sphinx_design_static/design-tabs.js b/_sphinx_design_static/design-tabs.js new file mode 100644 index 0000000..36b38cf --- /dev/null +++ b/_sphinx_design_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..d54be80 --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,906 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/check-solid.svg b/_static/check-solid.svg new file mode 100644 index 0000000..92fad4b --- /dev/null +++ b/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_static/clipboard.min.js b/_static/clipboard.min.js new file mode 100644 index 0000000..54b3c46 --- /dev/null +++ b/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/_static/copybutton.css b/_static/copybutton.css new file mode 100644 index 0000000..f1916ec --- /dev/null +++ b/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/_static/copybutton.js b/_static/copybutton.js new file mode 100644 index 0000000..2ea7ff3 --- /dev/null +++ b/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_static/copybutton_funcs.js b/_static/copybutton_funcs.js new file mode 100644 index 0000000..dbe1aaa --- /dev/null +++ b/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css b/_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css new file mode 100644 index 0000000..704c42e --- /dev/null +++ b/_static/design-style.b7bb847fb20b106c3d81b95245e65545.min.css @@ -0,0 +1 @@ +.sd-bg-primary{background-color:var(--sd-color-primary) !important}.sd-bg-text-primary{color:var(--sd-color-primary-text) !important}button.sd-bg-primary:focus,button.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}a.sd-bg-primary:focus,a.sd-bg-primary:hover{background-color:var(--sd-color-primary-highlight) !important}.sd-bg-secondary{background-color:var(--sd-color-secondary) !important}.sd-bg-text-secondary{color:var(--sd-color-secondary-text) !important}button.sd-bg-secondary:focus,button.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}a.sd-bg-secondary:focus,a.sd-bg-secondary:hover{background-color:var(--sd-color-secondary-highlight) !important}.sd-bg-success{background-color:var(--sd-color-success) !important}.sd-bg-text-success{color:var(--sd-color-success-text) !important}button.sd-bg-success:focus,button.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}a.sd-bg-success:focus,a.sd-bg-success:hover{background-color:var(--sd-color-success-highlight) !important}.sd-bg-info{background-color:var(--sd-color-info) !important}.sd-bg-text-info{color:var(--sd-color-info-text) !important}button.sd-bg-info:focus,button.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}a.sd-bg-info:focus,a.sd-bg-info:hover{background-color:var(--sd-color-info-highlight) !important}.sd-bg-warning{background-color:var(--sd-color-warning) !important}.sd-bg-text-warning{color:var(--sd-color-warning-text) !important}button.sd-bg-warning:focus,button.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}a.sd-bg-warning:focus,a.sd-bg-warning:hover{background-color:var(--sd-color-warning-highlight) !important}.sd-bg-danger{background-color:var(--sd-color-danger) !important}.sd-bg-text-danger{color:var(--sd-color-danger-text) !important}button.sd-bg-danger:focus,button.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}a.sd-bg-danger:focus,a.sd-bg-danger:hover{background-color:var(--sd-color-danger-highlight) !important}.sd-bg-light{background-color:var(--sd-color-light) !important}.sd-bg-text-light{color:var(--sd-color-light-text) !important}button.sd-bg-light:focus,button.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}a.sd-bg-light:focus,a.sd-bg-light:hover{background-color:var(--sd-color-light-highlight) !important}.sd-bg-muted{background-color:var(--sd-color-muted) !important}.sd-bg-text-muted{color:var(--sd-color-muted-text) !important}button.sd-bg-muted:focus,button.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}a.sd-bg-muted:focus,a.sd-bg-muted:hover{background-color:var(--sd-color-muted-highlight) !important}.sd-bg-dark{background-color:var(--sd-color-dark) !important}.sd-bg-text-dark{color:var(--sd-color-dark-text) !important}button.sd-bg-dark:focus,button.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}a.sd-bg-dark:focus,a.sd-bg-dark:hover{background-color:var(--sd-color-dark-highlight) !important}.sd-bg-black{background-color:var(--sd-color-black) !important}.sd-bg-text-black{color:var(--sd-color-black-text) !important}button.sd-bg-black:focus,button.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}a.sd-bg-black:focus,a.sd-bg-black:hover{background-color:var(--sd-color-black-highlight) !important}.sd-bg-white{background-color:var(--sd-color-white) !important}.sd-bg-text-white{color:var(--sd-color-white-text) !important}button.sd-bg-white:focus,button.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}a.sd-bg-white:focus,a.sd-bg-white:hover{background-color:var(--sd-color-white-highlight) !important}.sd-text-primary,.sd-text-primary>p{color:var(--sd-color-primary) !important}a.sd-text-primary:focus,a.sd-text-primary:hover{color:var(--sd-color-primary-highlight) !important}.sd-text-secondary,.sd-text-secondary>p{color:var(--sd-color-secondary) !important}a.sd-text-secondary:focus,a.sd-text-secondary:hover{color:var(--sd-color-secondary-highlight) !important}.sd-text-success,.sd-text-success>p{color:var(--sd-color-success) !important}a.sd-text-success:focus,a.sd-text-success:hover{color:var(--sd-color-success-highlight) !important}.sd-text-info,.sd-text-info>p{color:var(--sd-color-info) !important}a.sd-text-info:focus,a.sd-text-info:hover{color:var(--sd-color-info-highlight) !important}.sd-text-warning,.sd-text-warning>p{color:var(--sd-color-warning) !important}a.sd-text-warning:focus,a.sd-text-warning:hover{color:var(--sd-color-warning-highlight) !important}.sd-text-danger,.sd-text-danger>p{color:var(--sd-color-danger) !important}a.sd-text-danger:focus,a.sd-text-danger:hover{color:var(--sd-color-danger-highlight) !important}.sd-text-light,.sd-text-light>p{color:var(--sd-color-light) !important}a.sd-text-light:focus,a.sd-text-light:hover{color:var(--sd-color-light-highlight) !important}.sd-text-muted,.sd-text-muted>p{color:var(--sd-color-muted) !important}a.sd-text-muted:focus,a.sd-text-muted:hover{color:var(--sd-color-muted-highlight) !important}.sd-text-dark,.sd-text-dark>p{color:var(--sd-color-dark) !important}a.sd-text-dark:focus,a.sd-text-dark:hover{color:var(--sd-color-dark-highlight) !important}.sd-text-black,.sd-text-black>p{color:var(--sd-color-black) !important}a.sd-text-black:focus,a.sd-text-black:hover{color:var(--sd-color-black-highlight) !important}.sd-text-white,.sd-text-white>p{color:var(--sd-color-white) !important}a.sd-text-white:focus,a.sd-text-white:hover{color:var(--sd-color-white-highlight) !important}.sd-outline-primary{border-color:var(--sd-color-primary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-primary:focus,a.sd-outline-primary:hover{border-color:var(--sd-color-primary-highlight) !important}.sd-outline-secondary{border-color:var(--sd-color-secondary) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-secondary:focus,a.sd-outline-secondary:hover{border-color:var(--sd-color-secondary-highlight) !important}.sd-outline-success{border-color:var(--sd-color-success) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-success:focus,a.sd-outline-success:hover{border-color:var(--sd-color-success-highlight) !important}.sd-outline-info{border-color:var(--sd-color-info) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-info:focus,a.sd-outline-info:hover{border-color:var(--sd-color-info-highlight) !important}.sd-outline-warning{border-color:var(--sd-color-warning) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-warning:focus,a.sd-outline-warning:hover{border-color:var(--sd-color-warning-highlight) !important}.sd-outline-danger{border-color:var(--sd-color-danger) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-danger:focus,a.sd-outline-danger:hover{border-color:var(--sd-color-danger-highlight) !important}.sd-outline-light{border-color:var(--sd-color-light) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-light:focus,a.sd-outline-light:hover{border-color:var(--sd-color-light-highlight) !important}.sd-outline-muted{border-color:var(--sd-color-muted) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-muted:focus,a.sd-outline-muted:hover{border-color:var(--sd-color-muted-highlight) !important}.sd-outline-dark{border-color:var(--sd-color-dark) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-dark:focus,a.sd-outline-dark:hover{border-color:var(--sd-color-dark-highlight) !important}.sd-outline-black{border-color:var(--sd-color-black) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-black:focus,a.sd-outline-black:hover{border-color:var(--sd-color-black-highlight) !important}.sd-outline-white{border-color:var(--sd-color-white) !important;border-style:solid !important;border-width:1px !important}a.sd-outline-white:focus,a.sd-outline-white:hover{border-color:var(--sd-color-white-highlight) !important}.sd-bg-transparent{background-color:transparent !important}.sd-outline-transparent{border-color:transparent !important}.sd-text-transparent{color:transparent !important}.sd-p-0{padding:0 !important}.sd-pt-0,.sd-py-0{padding-top:0 !important}.sd-pr-0,.sd-px-0{padding-right:0 !important}.sd-pb-0,.sd-py-0{padding-bottom:0 !important}.sd-pl-0,.sd-px-0{padding-left:0 !important}.sd-p-1{padding:.25rem !important}.sd-pt-1,.sd-py-1{padding-top:.25rem !important}.sd-pr-1,.sd-px-1{padding-right:.25rem !important}.sd-pb-1,.sd-py-1{padding-bottom:.25rem !important}.sd-pl-1,.sd-px-1{padding-left:.25rem !important}.sd-p-2{padding:.5rem !important}.sd-pt-2,.sd-py-2{padding-top:.5rem !important}.sd-pr-2,.sd-px-2{padding-right:.5rem !important}.sd-pb-2,.sd-py-2{padding-bottom:.5rem !important}.sd-pl-2,.sd-px-2{padding-left:.5rem !important}.sd-p-3{padding:1rem !important}.sd-pt-3,.sd-py-3{padding-top:1rem !important}.sd-pr-3,.sd-px-3{padding-right:1rem !important}.sd-pb-3,.sd-py-3{padding-bottom:1rem !important}.sd-pl-3,.sd-px-3{padding-left:1rem !important}.sd-p-4{padding:1.5rem !important}.sd-pt-4,.sd-py-4{padding-top:1.5rem !important}.sd-pr-4,.sd-px-4{padding-right:1.5rem !important}.sd-pb-4,.sd-py-4{padding-bottom:1.5rem !important}.sd-pl-4,.sd-px-4{padding-left:1.5rem !important}.sd-p-5{padding:3rem !important}.sd-pt-5,.sd-py-5{padding-top:3rem !important}.sd-pr-5,.sd-px-5{padding-right:3rem !important}.sd-pb-5,.sd-py-5{padding-bottom:3rem !important}.sd-pl-5,.sd-px-5{padding-left:3rem !important}.sd-m-auto{margin:auto !important}.sd-mt-auto,.sd-my-auto{margin-top:auto !important}.sd-mr-auto,.sd-mx-auto{margin-right:auto !important}.sd-mb-auto,.sd-my-auto{margin-bottom:auto !important}.sd-ml-auto,.sd-mx-auto{margin-left:auto !important}.sd-m-0{margin:0 !important}.sd-mt-0,.sd-my-0{margin-top:0 !important}.sd-mr-0,.sd-mx-0{margin-right:0 !important}.sd-mb-0,.sd-my-0{margin-bottom:0 !important}.sd-ml-0,.sd-mx-0{margin-left:0 !important}.sd-m-1{margin:.25rem !important}.sd-mt-1,.sd-my-1{margin-top:.25rem !important}.sd-mr-1,.sd-mx-1{margin-right:.25rem !important}.sd-mb-1,.sd-my-1{margin-bottom:.25rem !important}.sd-ml-1,.sd-mx-1{margin-left:.25rem !important}.sd-m-2{margin:.5rem !important}.sd-mt-2,.sd-my-2{margin-top:.5rem !important}.sd-mr-2,.sd-mx-2{margin-right:.5rem !important}.sd-mb-2,.sd-my-2{margin-bottom:.5rem !important}.sd-ml-2,.sd-mx-2{margin-left:.5rem !important}.sd-m-3{margin:1rem !important}.sd-mt-3,.sd-my-3{margin-top:1rem !important}.sd-mr-3,.sd-mx-3{margin-right:1rem !important}.sd-mb-3,.sd-my-3{margin-bottom:1rem !important}.sd-ml-3,.sd-mx-3{margin-left:1rem !important}.sd-m-4{margin:1.5rem !important}.sd-mt-4,.sd-my-4{margin-top:1.5rem !important}.sd-mr-4,.sd-mx-4{margin-right:1.5rem !important}.sd-mb-4,.sd-my-4{margin-bottom:1.5rem !important}.sd-ml-4,.sd-mx-4{margin-left:1.5rem !important}.sd-m-5{margin:3rem !important}.sd-mt-5,.sd-my-5{margin-top:3rem !important}.sd-mr-5,.sd-mx-5{margin-right:3rem !important}.sd-mb-5,.sd-my-5{margin-bottom:3rem !important}.sd-ml-5,.sd-mx-5{margin-left:3rem !important}.sd-w-25{width:25% !important}.sd-w-50{width:50% !important}.sd-w-75{width:75% !important}.sd-w-100{width:100% !important}.sd-w-auto{width:auto !important}.sd-h-25{height:25% !important}.sd-h-50{height:50% !important}.sd-h-75{height:75% !important}.sd-h-100{height:100% !important}.sd-h-auto{height:auto !important}.sd-d-none{display:none !important}.sd-d-inline{display:inline !important}.sd-d-inline-block{display:inline-block !important}.sd-d-block{display:block !important}.sd-d-grid{display:grid !important}.sd-d-flex-row{display:-ms-flexbox !important;display:flex !important;flex-direction:row !important}.sd-d-flex-column{display:-ms-flexbox !important;display:flex !important;flex-direction:column !important}.sd-d-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}@media(min-width: 576px){.sd-d-sm-none{display:none !important}.sd-d-sm-inline{display:inline !important}.sd-d-sm-inline-block{display:inline-block !important}.sd-d-sm-block{display:block !important}.sd-d-sm-grid{display:grid !important}.sd-d-sm-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-sm-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 768px){.sd-d-md-none{display:none !important}.sd-d-md-inline{display:inline !important}.sd-d-md-inline-block{display:inline-block !important}.sd-d-md-block{display:block !important}.sd-d-md-grid{display:grid !important}.sd-d-md-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-md-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 992px){.sd-d-lg-none{display:none !important}.sd-d-lg-inline{display:inline !important}.sd-d-lg-inline-block{display:inline-block !important}.sd-d-lg-block{display:block !important}.sd-d-lg-grid{display:grid !important}.sd-d-lg-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-lg-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}@media(min-width: 1200px){.sd-d-xl-none{display:none !important}.sd-d-xl-inline{display:inline !important}.sd-d-xl-inline-block{display:inline-block !important}.sd-d-xl-block{display:block !important}.sd-d-xl-grid{display:grid !important}.sd-d-xl-flex{display:-ms-flexbox !important;display:flex !important}.sd-d-xl-inline-flex{display:-ms-inline-flexbox !important;display:inline-flex !important}}.sd-align-major-start{justify-content:flex-start !important}.sd-align-major-end{justify-content:flex-end !important}.sd-align-major-center{justify-content:center !important}.sd-align-major-justify{justify-content:space-between !important}.sd-align-major-spaced{justify-content:space-evenly !important}.sd-align-minor-start{align-items:flex-start !important}.sd-align-minor-end{align-items:flex-end !important}.sd-align-minor-center{align-items:center !important}.sd-align-minor-stretch{align-items:stretch !important}.sd-text-justify{text-align:justify !important}.sd-text-left{text-align:left !important}.sd-text-right{text-align:right !important}.sd-text-center{text-align:center !important}.sd-font-weight-light{font-weight:300 !important}.sd-font-weight-lighter{font-weight:lighter !important}.sd-font-weight-normal{font-weight:400 !important}.sd-font-weight-bold{font-weight:700 !important}.sd-font-weight-bolder{font-weight:bolder !important}.sd-font-italic{font-style:italic !important}.sd-text-decoration-none{text-decoration:none !important}.sd-text-lowercase{text-transform:lowercase !important}.sd-text-uppercase{text-transform:uppercase !important}.sd-text-capitalize{text-transform:capitalize !important}.sd-text-wrap{white-space:normal !important}.sd-text-nowrap{white-space:nowrap !important}.sd-text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sd-fs-1,.sd-fs-1>p{font-size:calc(1.375rem + 1.5vw) !important;line-height:unset !important}.sd-fs-2,.sd-fs-2>p{font-size:calc(1.325rem + 0.9vw) !important;line-height:unset !important}.sd-fs-3,.sd-fs-3>p{font-size:calc(1.3rem + 0.6vw) !important;line-height:unset !important}.sd-fs-4,.sd-fs-4>p{font-size:calc(1.275rem + 0.3vw) !important;line-height:unset !important}.sd-fs-5,.sd-fs-5>p{font-size:1.25rem !important;line-height:unset !important}.sd-fs-6,.sd-fs-6>p{font-size:1rem !important;line-height:unset !important}.sd-border-0{border:0 solid !important}.sd-border-top-0{border-top:0 solid !important}.sd-border-bottom-0{border-bottom:0 solid !important}.sd-border-right-0{border-right:0 solid !important}.sd-border-left-0{border-left:0 solid !important}.sd-border-1{border:1px solid !important}.sd-border-top-1{border-top:1px solid !important}.sd-border-bottom-1{border-bottom:1px solid !important}.sd-border-right-1{border-right:1px solid !important}.sd-border-left-1{border-left:1px solid !important}.sd-border-2{border:2px solid !important}.sd-border-top-2{border-top:2px solid !important}.sd-border-bottom-2{border-bottom:2px solid !important}.sd-border-right-2{border-right:2px solid !important}.sd-border-left-2{border-left:2px solid !important}.sd-border-3{border:3px solid !important}.sd-border-top-3{border-top:3px solid !important}.sd-border-bottom-3{border-bottom:3px solid !important}.sd-border-right-3{border-right:3px solid !important}.sd-border-left-3{border-left:3px solid !important}.sd-border-4{border:4px solid !important}.sd-border-top-4{border-top:4px solid !important}.sd-border-bottom-4{border-bottom:4px solid !important}.sd-border-right-4{border-right:4px solid !important}.sd-border-left-4{border-left:4px solid !important}.sd-border-5{border:5px solid !important}.sd-border-top-5{border-top:5px solid !important}.sd-border-bottom-5{border-bottom:5px solid !important}.sd-border-right-5{border-right:5px solid !important}.sd-border-left-5{border-left:5px solid !important}.sd-rounded-0{border-radius:0 !important}.sd-rounded-1{border-radius:.2rem !important}.sd-rounded-2{border-radius:.3rem !important}.sd-rounded-3{border-radius:.5rem !important}.sd-rounded-pill{border-radius:50rem !important}.sd-rounded-circle{border-radius:50% !important}.shadow-none{box-shadow:none !important}.sd-shadow-sm{box-shadow:0 .125rem .25rem var(--sd-color-shadow) !important}.sd-shadow-md{box-shadow:0 .5rem 1rem var(--sd-color-shadow) !important}.sd-shadow-lg{box-shadow:0 1rem 3rem var(--sd-color-shadow) !important}@keyframes sd-slide-from-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes sd-slide-from-right{0%{transform:translateX(200%)}100%{transform:translateX(0)}}@keyframes sd-grow100{0%{transform:scale(0);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50{0%{transform:scale(0.5);opacity:.5}100%{transform:scale(1);opacity:1}}@keyframes sd-grow50-rot20{0%{transform:scale(0.5) rotateZ(-20deg);opacity:.5}75%{transform:scale(1) rotateZ(5deg);opacity:1}95%{transform:scale(1) rotateZ(-1deg);opacity:1}100%{transform:scale(1) rotateZ(0);opacity:1}}.sd-animate-slide-from-left{animation:1s ease-out 0s 1 normal none running sd-slide-from-left}.sd-animate-slide-from-right{animation:1s ease-out 0s 1 normal none running sd-slide-from-right}.sd-animate-grow100{animation:1s ease-out 0s 1 normal none running sd-grow100}.sd-animate-grow50{animation:1s ease-out 0s 1 normal none running sd-grow50}.sd-animate-grow50-rot20{animation:1s ease-out 0s 1 normal none running sd-grow50-rot20}.sd-badge{display:inline-block;padding:.35em .65em;font-size:.75em;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.sd-badge:empty{display:none}a.sd-badge{text-decoration:none}.sd-btn .sd-badge{position:relative;top:-1px}.sd-btn{background-color:transparent;border:1px solid transparent;border-radius:.25rem;cursor:pointer;display:inline-block;font-weight:400;font-size:1rem;line-height:1.5;padding:.375rem .75rem;text-align:center;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;vertical-align:middle;user-select:none;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none}.sd-btn:hover{text-decoration:none}@media(prefers-reduced-motion: reduce){.sd-btn{transition:none}}.sd-btn-primary,.sd-btn-outline-primary:hover,.sd-btn-outline-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-primary:hover,.sd-btn-primary:focus{color:var(--sd-color-primary-text) !important;background-color:var(--sd-color-primary-highlight) !important;border-color:var(--sd-color-primary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-primary{color:var(--sd-color-primary) !important;border-color:var(--sd-color-primary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary,.sd-btn-outline-secondary:hover,.sd-btn-outline-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-secondary:hover,.sd-btn-secondary:focus{color:var(--sd-color-secondary-text) !important;background-color:var(--sd-color-secondary-highlight) !important;border-color:var(--sd-color-secondary-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-secondary{color:var(--sd-color-secondary) !important;border-color:var(--sd-color-secondary) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success,.sd-btn-outline-success:hover,.sd-btn-outline-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-success:hover,.sd-btn-success:focus{color:var(--sd-color-success-text) !important;background-color:var(--sd-color-success-highlight) !important;border-color:var(--sd-color-success-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-success{color:var(--sd-color-success) !important;border-color:var(--sd-color-success) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info,.sd-btn-outline-info:hover,.sd-btn-outline-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-info:hover,.sd-btn-info:focus{color:var(--sd-color-info-text) !important;background-color:var(--sd-color-info-highlight) !important;border-color:var(--sd-color-info-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-info{color:var(--sd-color-info) !important;border-color:var(--sd-color-info) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning,.sd-btn-outline-warning:hover,.sd-btn-outline-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-warning:hover,.sd-btn-warning:focus{color:var(--sd-color-warning-text) !important;background-color:var(--sd-color-warning-highlight) !important;border-color:var(--sd-color-warning-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-warning{color:var(--sd-color-warning) !important;border-color:var(--sd-color-warning) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger,.sd-btn-outline-danger:hover,.sd-btn-outline-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-danger:hover,.sd-btn-danger:focus{color:var(--sd-color-danger-text) !important;background-color:var(--sd-color-danger-highlight) !important;border-color:var(--sd-color-danger-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-danger{color:var(--sd-color-danger) !important;border-color:var(--sd-color-danger) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light,.sd-btn-outline-light:hover,.sd-btn-outline-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-light:hover,.sd-btn-light:focus{color:var(--sd-color-light-text) !important;background-color:var(--sd-color-light-highlight) !important;border-color:var(--sd-color-light-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-light{color:var(--sd-color-light) !important;border-color:var(--sd-color-light) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted,.sd-btn-outline-muted:hover,.sd-btn-outline-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-muted:hover,.sd-btn-muted:focus{color:var(--sd-color-muted-text) !important;background-color:var(--sd-color-muted-highlight) !important;border-color:var(--sd-color-muted-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-muted{color:var(--sd-color-muted) !important;border-color:var(--sd-color-muted) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark,.sd-btn-outline-dark:hover,.sd-btn-outline-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-dark:hover,.sd-btn-dark:focus{color:var(--sd-color-dark-text) !important;background-color:var(--sd-color-dark-highlight) !important;border-color:var(--sd-color-dark-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-dark{color:var(--sd-color-dark) !important;border-color:var(--sd-color-dark) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black,.sd-btn-outline-black:hover,.sd-btn-outline-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-black:hover,.sd-btn-black:focus{color:var(--sd-color-black-text) !important;background-color:var(--sd-color-black-highlight) !important;border-color:var(--sd-color-black-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-black{color:var(--sd-color-black) !important;border-color:var(--sd-color-black) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white,.sd-btn-outline-white:hover,.sd-btn-outline-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-btn-white:hover,.sd-btn-white:focus{color:var(--sd-color-white-text) !important;background-color:var(--sd-color-white-highlight) !important;border-color:var(--sd-color-white-highlight) !important;border-width:1px !important;border-style:solid !important}.sd-btn-outline-white{color:var(--sd-color-white) !important;border-color:var(--sd-color-white) !important;border-width:1px !important;border-style:solid !important}.sd-stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.sd-octicon,.sd-material-icon{display:inline-block;fill:currentColor;vertical-align:middle}.sd-avatar-xs{border-radius:50%;object-fit:cover;object-position:center;width:1rem;height:1rem}.sd-avatar-sm{border-radius:50%;object-fit:cover;object-position:center;width:3rem;height:3rem}.sd-avatar-md{border-radius:50%;object-fit:cover;object-position:center;width:5rem;height:5rem}.sd-avatar-lg{border-radius:50%;object-fit:cover;object-position:center;width:7rem;height:7rem}.sd-avatar-xl{border-radius:50%;object-fit:cover;object-position:center;width:10rem;height:10rem}.sd-avatar-inherit{border-radius:50%;object-fit:cover;object-position:center;width:inherit;height:inherit}.sd-avatar-initial{border-radius:50%;object-fit:cover;object-position:center;width:initial;height:initial}.sd-card{background-clip:border-box;background-color:var(--sd-color-card-background);border:1px solid var(--sd-color-card-border);border-radius:.25rem;color:var(--sd-color-card-text);display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;position:relative;word-wrap:break-word}.sd-card>hr{margin-left:0;margin-right:0}.sd-card-hover:hover{border-color:var(--sd-color-card-border-hover);transform:scale(1.01)}.sd-card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem 1rem}.sd-card-title{margin-bottom:.5rem}.sd-card-subtitle{margin-top:-0.25rem;margin-bottom:0}.sd-card-text:last-child{margin-bottom:0}.sd-card-link:hover{text-decoration:none}.sd-card-link+.card-link{margin-left:1rem}.sd-card-header{padding:.5rem 1rem;margin-bottom:0;background-color:var(--sd-color-card-header);border-bottom:1px solid var(--sd-color-card-border)}.sd-card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.sd-card-footer{padding:.5rem 1rem;background-color:var(--sd-color-card-footer);border-top:1px solid var(--sd-color-card-border)}.sd-card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.sd-card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.sd-card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.sd-card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom,.sd-card-img-top{width:100%}.sd-card-img,.sd-card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.sd-card-img,.sd-card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.sd-cards-carousel{width:100%;display:flex;flex-wrap:nowrap;-ms-flex-direction:row;flex-direction:row;overflow-x:hidden;scroll-snap-type:x mandatory}.sd-cards-carousel.sd-show-scrollbar{overflow-x:auto}.sd-cards-carousel:hover,.sd-cards-carousel:focus{overflow-x:auto}.sd-cards-carousel>.sd-card{flex-shrink:0;scroll-snap-align:start}.sd-cards-carousel>.sd-card:not(:last-child){margin-right:3px}.sd-card-cols-1>.sd-card{width:90%}.sd-card-cols-2>.sd-card{width:45%}.sd-card-cols-3>.sd-card{width:30%}.sd-card-cols-4>.sd-card{width:22.5%}.sd-card-cols-5>.sd-card{width:18%}.sd-card-cols-6>.sd-card{width:15%}.sd-card-cols-7>.sd-card{width:12.8571428571%}.sd-card-cols-8>.sd-card{width:11.25%}.sd-card-cols-9>.sd-card{width:10%}.sd-card-cols-10>.sd-card{width:9%}.sd-card-cols-11>.sd-card{width:8.1818181818%}.sd-card-cols-12>.sd-card{width:7.5%}.sd-container,.sd-container-fluid,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container-xl{margin-left:auto;margin-right:auto;padding-left:var(--sd-gutter-x, 0.75rem);padding-right:var(--sd-gutter-x, 0.75rem);width:100%}@media(min-width: 576px){.sd-container-sm,.sd-container{max-width:540px}}@media(min-width: 768px){.sd-container-md,.sd-container-sm,.sd-container{max-width:720px}}@media(min-width: 992px){.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:960px}}@media(min-width: 1200px){.sd-container-xl,.sd-container-lg,.sd-container-md,.sd-container-sm,.sd-container{max-width:1140px}}.sd-row{--sd-gutter-x: 1.5rem;--sd-gutter-y: 0;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-top:calc(var(--sd-gutter-y) * -1);margin-right:calc(var(--sd-gutter-x) * -0.5);margin-left:calc(var(--sd-gutter-x) * -0.5)}.sd-row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--sd-gutter-x) * 0.5);padding-left:calc(var(--sd-gutter-x) * 0.5);margin-top:var(--sd-gutter-y)}.sd-col{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-auto>*{flex:0 0 auto;width:auto}.sd-row-cols-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}@media(min-width: 576px){.sd-col-sm{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-sm-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-sm-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-sm-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-sm-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-sm-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-sm-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-sm-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-sm-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-sm-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-sm-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-sm-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-sm-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-sm-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 768px){.sd-col-md{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-md-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-md-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-md-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-md-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-md-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-md-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-md-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-md-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-md-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-md-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-md-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-md-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-md-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 992px){.sd-col-lg{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-lg-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-lg-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-lg-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-lg-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-lg-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-lg-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-lg-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-lg-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-lg-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-lg-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-lg-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-lg-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-lg-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}@media(min-width: 1200px){.sd-col-xl{flex:1 0 0%;-ms-flex:1 0 0%}.sd-row-cols-xl-auto{flex:1 0 auto;-ms-flex:1 0 auto;width:100%}.sd-row-cols-xl-1>*{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-row-cols-xl-2>*{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-row-cols-xl-3>*{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-row-cols-xl-4>*{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-row-cols-xl-5>*{flex:0 0 auto;-ms-flex:0 0 auto;width:20%}.sd-row-cols-xl-6>*{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-row-cols-xl-7>*{flex:0 0 auto;-ms-flex:0 0 auto;width:14.2857142857%}.sd-row-cols-xl-8>*{flex:0 0 auto;-ms-flex:0 0 auto;width:12.5%}.sd-row-cols-xl-9>*{flex:0 0 auto;-ms-flex:0 0 auto;width:11.1111111111%}.sd-row-cols-xl-10>*{flex:0 0 auto;-ms-flex:0 0 auto;width:10%}.sd-row-cols-xl-11>*{flex:0 0 auto;-ms-flex:0 0 auto;width:9.0909090909%}.sd-row-cols-xl-12>*{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}}.sd-col-auto{flex:0 0 auto;-ms-flex:0 0 auto;width:auto}.sd-col-1{flex:0 0 auto;-ms-flex:0 0 auto;width:8.3333333333%}.sd-col-2{flex:0 0 auto;-ms-flex:0 0 auto;width:16.6666666667%}.sd-col-3{flex:0 0 auto;-ms-flex:0 0 auto;width:25%}.sd-col-4{flex:0 0 auto;-ms-flex:0 0 auto;width:33.3333333333%}.sd-col-5{flex:0 0 auto;-ms-flex:0 0 auto;width:41.6666666667%}.sd-col-6{flex:0 0 auto;-ms-flex:0 0 auto;width:50%}.sd-col-7{flex:0 0 auto;-ms-flex:0 0 auto;width:58.3333333333%}.sd-col-8{flex:0 0 auto;-ms-flex:0 0 auto;width:66.6666666667%}.sd-col-9{flex:0 0 auto;-ms-flex:0 0 auto;width:75%}.sd-col-10{flex:0 0 auto;-ms-flex:0 0 auto;width:83.3333333333%}.sd-col-11{flex:0 0 auto;-ms-flex:0 0 auto;width:91.6666666667%}.sd-col-12{flex:0 0 auto;-ms-flex:0 0 auto;width:100%}.sd-g-0,.sd-gy-0{--sd-gutter-y: 0}.sd-g-0,.sd-gx-0{--sd-gutter-x: 0}.sd-g-1,.sd-gy-1{--sd-gutter-y: 0.25rem}.sd-g-1,.sd-gx-1{--sd-gutter-x: 0.25rem}.sd-g-2,.sd-gy-2{--sd-gutter-y: 0.5rem}.sd-g-2,.sd-gx-2{--sd-gutter-x: 0.5rem}.sd-g-3,.sd-gy-3{--sd-gutter-y: 1rem}.sd-g-3,.sd-gx-3{--sd-gutter-x: 1rem}.sd-g-4,.sd-gy-4{--sd-gutter-y: 1.5rem}.sd-g-4,.sd-gx-4{--sd-gutter-x: 1.5rem}.sd-g-5,.sd-gy-5{--sd-gutter-y: 3rem}.sd-g-5,.sd-gx-5{--sd-gutter-x: 3rem}@media(min-width: 576px){.sd-col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-sm-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-sm-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-sm-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-sm-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-sm-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-sm-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-sm-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-sm-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-sm-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-sm-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-sm-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-sm-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-sm-0,.sd-gy-sm-0{--sd-gutter-y: 0}.sd-g-sm-0,.sd-gx-sm-0{--sd-gutter-x: 0}.sd-g-sm-1,.sd-gy-sm-1{--sd-gutter-y: 0.25rem}.sd-g-sm-1,.sd-gx-sm-1{--sd-gutter-x: 0.25rem}.sd-g-sm-2,.sd-gy-sm-2{--sd-gutter-y: 0.5rem}.sd-g-sm-2,.sd-gx-sm-2{--sd-gutter-x: 0.5rem}.sd-g-sm-3,.sd-gy-sm-3{--sd-gutter-y: 1rem}.sd-g-sm-3,.sd-gx-sm-3{--sd-gutter-x: 1rem}.sd-g-sm-4,.sd-gy-sm-4{--sd-gutter-y: 1.5rem}.sd-g-sm-4,.sd-gx-sm-4{--sd-gutter-x: 1.5rem}.sd-g-sm-5,.sd-gy-sm-5{--sd-gutter-y: 3rem}.sd-g-sm-5,.sd-gx-sm-5{--sd-gutter-x: 3rem}}@media(min-width: 768px){.sd-col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-md-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-md-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-md-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-md-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-md-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-md-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-md-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-md-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-md-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-md-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-md-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-md-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-md-0,.sd-gy-md-0{--sd-gutter-y: 0}.sd-g-md-0,.sd-gx-md-0{--sd-gutter-x: 0}.sd-g-md-1,.sd-gy-md-1{--sd-gutter-y: 0.25rem}.sd-g-md-1,.sd-gx-md-1{--sd-gutter-x: 0.25rem}.sd-g-md-2,.sd-gy-md-2{--sd-gutter-y: 0.5rem}.sd-g-md-2,.sd-gx-md-2{--sd-gutter-x: 0.5rem}.sd-g-md-3,.sd-gy-md-3{--sd-gutter-y: 1rem}.sd-g-md-3,.sd-gx-md-3{--sd-gutter-x: 1rem}.sd-g-md-4,.sd-gy-md-4{--sd-gutter-y: 1.5rem}.sd-g-md-4,.sd-gx-md-4{--sd-gutter-x: 1.5rem}.sd-g-md-5,.sd-gy-md-5{--sd-gutter-y: 3rem}.sd-g-md-5,.sd-gx-md-5{--sd-gutter-x: 3rem}}@media(min-width: 992px){.sd-col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-lg-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-lg-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-lg-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-lg-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-lg-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-lg-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-lg-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-lg-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-lg-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-lg-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-lg-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-lg-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-lg-0,.sd-gy-lg-0{--sd-gutter-y: 0}.sd-g-lg-0,.sd-gx-lg-0{--sd-gutter-x: 0}.sd-g-lg-1,.sd-gy-lg-1{--sd-gutter-y: 0.25rem}.sd-g-lg-1,.sd-gx-lg-1{--sd-gutter-x: 0.25rem}.sd-g-lg-2,.sd-gy-lg-2{--sd-gutter-y: 0.5rem}.sd-g-lg-2,.sd-gx-lg-2{--sd-gutter-x: 0.5rem}.sd-g-lg-3,.sd-gy-lg-3{--sd-gutter-y: 1rem}.sd-g-lg-3,.sd-gx-lg-3{--sd-gutter-x: 1rem}.sd-g-lg-4,.sd-gy-lg-4{--sd-gutter-y: 1.5rem}.sd-g-lg-4,.sd-gx-lg-4{--sd-gutter-x: 1.5rem}.sd-g-lg-5,.sd-gy-lg-5{--sd-gutter-y: 3rem}.sd-g-lg-5,.sd-gx-lg-5{--sd-gutter-x: 3rem}}@media(min-width: 1200px){.sd-col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto}.sd-col-xl-1{-ms-flex:0 0 auto;flex:0 0 auto;width:8.3333333333%}.sd-col-xl-2{-ms-flex:0 0 auto;flex:0 0 auto;width:16.6666666667%}.sd-col-xl-3{-ms-flex:0 0 auto;flex:0 0 auto;width:25%}.sd-col-xl-4{-ms-flex:0 0 auto;flex:0 0 auto;width:33.3333333333%}.sd-col-xl-5{-ms-flex:0 0 auto;flex:0 0 auto;width:41.6666666667%}.sd-col-xl-6{-ms-flex:0 0 auto;flex:0 0 auto;width:50%}.sd-col-xl-7{-ms-flex:0 0 auto;flex:0 0 auto;width:58.3333333333%}.sd-col-xl-8{-ms-flex:0 0 auto;flex:0 0 auto;width:66.6666666667%}.sd-col-xl-9{-ms-flex:0 0 auto;flex:0 0 auto;width:75%}.sd-col-xl-10{-ms-flex:0 0 auto;flex:0 0 auto;width:83.3333333333%}.sd-col-xl-11{-ms-flex:0 0 auto;flex:0 0 auto;width:91.6666666667%}.sd-col-xl-12{-ms-flex:0 0 auto;flex:0 0 auto;width:100%}.sd-g-xl-0,.sd-gy-xl-0{--sd-gutter-y: 0}.sd-g-xl-0,.sd-gx-xl-0{--sd-gutter-x: 0}.sd-g-xl-1,.sd-gy-xl-1{--sd-gutter-y: 0.25rem}.sd-g-xl-1,.sd-gx-xl-1{--sd-gutter-x: 0.25rem}.sd-g-xl-2,.sd-gy-xl-2{--sd-gutter-y: 0.5rem}.sd-g-xl-2,.sd-gx-xl-2{--sd-gutter-x: 0.5rem}.sd-g-xl-3,.sd-gy-xl-3{--sd-gutter-y: 1rem}.sd-g-xl-3,.sd-gx-xl-3{--sd-gutter-x: 1rem}.sd-g-xl-4,.sd-gy-xl-4{--sd-gutter-y: 1.5rem}.sd-g-xl-4,.sd-gx-xl-4{--sd-gutter-x: 1.5rem}.sd-g-xl-5,.sd-gy-xl-5{--sd-gutter-y: 3rem}.sd-g-xl-5,.sd-gx-xl-5{--sd-gutter-x: 3rem}}.sd-flex-row-reverse{flex-direction:row-reverse !important}details.sd-dropdown{position:relative}details.sd-dropdown .sd-summary-title{font-weight:700;padding-right:3em !important;-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none}details.sd-dropdown:hover{cursor:pointer}details.sd-dropdown .sd-summary-content{cursor:default}details.sd-dropdown summary{list-style:none;padding:1em}details.sd-dropdown summary .sd-octicon.no-title{vertical-align:middle}details.sd-dropdown[open] summary .sd-octicon.no-title{visibility:hidden}details.sd-dropdown summary::-webkit-details-marker{display:none}details.sd-dropdown summary:focus{outline:none}details.sd-dropdown .sd-summary-icon{margin-right:.5em}details.sd-dropdown .sd-summary-icon svg{opacity:.8}details.sd-dropdown summary:hover .sd-summary-up svg,details.sd-dropdown summary:hover .sd-summary-down svg{opacity:1;transform:scale(1.1)}details.sd-dropdown .sd-summary-up svg,details.sd-dropdown .sd-summary-down svg{display:block;opacity:.6}details.sd-dropdown .sd-summary-up,details.sd-dropdown .sd-summary-down{pointer-events:none;position:absolute;right:1em;top:1em}details.sd-dropdown[open]>.sd-summary-title .sd-summary-down{visibility:hidden}details.sd-dropdown:not([open])>.sd-summary-title .sd-summary-up{visibility:hidden}details.sd-dropdown:not([open]).sd-card{border:none}details.sd-dropdown:not([open])>.sd-card-header{border:1px solid var(--sd-color-card-border);border-radius:.25rem}details.sd-dropdown.sd-fade-in[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out;animation:sd-fade-in .5s ease-in-out}details.sd-dropdown.sd-fade-in-slide-down[open] summary~*{-moz-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;-webkit-animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out;animation:sd-fade-in .5s ease-in-out,sd-slide-down .5s ease-in-out}.sd-col>.sd-dropdown{width:100%}.sd-summary-content>.sd-tab-set:first-child{margin-top:0}@keyframes sd-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes sd-slide-down{0%{transform:translate(0, -10px)}100%{transform:translate(0, 0)}}.sd-tab-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.sd-tab-set>input{opacity:0;position:absolute}.sd-tab-set>input:checked+label{border-color:var(--sd-color-tabs-underline-active);color:var(--sd-color-tabs-label-active)}.sd-tab-set>input:checked+label+.sd-tab-content{display:block}.sd-tab-set>input:not(:checked)+label:hover{color:var(--sd-color-tabs-label-hover);border-color:var(--sd-color-tabs-underline-hover)}.sd-tab-set>input:focus+label{outline-style:auto}.sd-tab-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.sd-tab-set>label{border-bottom:.125rem solid transparent;margin-bottom:0;color:var(--sd-color-tabs-label-inactive);border-color:var(--sd-color-tabs-underline-inactive);cursor:pointer;font-size:var(--sd-fontsize-tabs-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .sd-tab-set>label:hover{color:var(--sd-color-tabs-label-active)}.sd-col>.sd-tab-set{width:100%}.sd-tab-content{box-shadow:0 -0.0625rem var(--sd-color-tabs-overline),0 .0625rem var(--sd-color-tabs-underline);display:none;order:99;padding-bottom:.75rem;padding-top:.75rem;width:100%}.sd-tab-content>:first-child{margin-top:0 !important}.sd-tab-content>:last-child{margin-bottom:0 !important}.sd-tab-content>.sd-tab-set{margin:0}.sd-sphinx-override,.sd-sphinx-override *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sd-sphinx-override p{margin-top:0}:root{--sd-color-primary: #007bff;--sd-color-secondary: #6c757d;--sd-color-success: #28a745;--sd-color-info: #17a2b8;--sd-color-warning: #f0b37e;--sd-color-danger: #dc3545;--sd-color-light: #f8f9fa;--sd-color-muted: #6c757d;--sd-color-dark: #212529;--sd-color-black: black;--sd-color-white: white;--sd-color-primary-highlight: #0069d9;--sd-color-secondary-highlight: #5c636a;--sd-color-success-highlight: #228e3b;--sd-color-info-highlight: #148a9c;--sd-color-warning-highlight: #cc986b;--sd-color-danger-highlight: #bb2d3b;--sd-color-light-highlight: #d3d4d5;--sd-color-muted-highlight: #5c636a;--sd-color-dark-highlight: #1c1f23;--sd-color-black-highlight: black;--sd-color-white-highlight: #d9d9d9;--sd-color-primary-text: #fff;--sd-color-secondary-text: #fff;--sd-color-success-text: #fff;--sd-color-info-text: #fff;--sd-color-warning-text: #212529;--sd-color-danger-text: #fff;--sd-color-light-text: #212529;--sd-color-muted-text: #fff;--sd-color-dark-text: #fff;--sd-color-black-text: #fff;--sd-color-white-text: #212529;--sd-color-shadow: rgba(0, 0, 0, 0.15);--sd-color-card-border: rgba(0, 0, 0, 0.125);--sd-color-card-border-hover: hsla(231, 99%, 66%, 1);--sd-color-card-background: transparent;--sd-color-card-text: inherit;--sd-color-card-header: transparent;--sd-color-card-footer: transparent;--sd-color-tabs-label-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-hover: hsla(231, 99%, 66%, 1);--sd-color-tabs-label-inactive: hsl(0, 0%, 66%);--sd-color-tabs-underline-active: hsla(231, 99%, 66%, 1);--sd-color-tabs-underline-hover: rgba(178, 206, 245, 0.62);--sd-color-tabs-underline-inactive: transparent;--sd-color-tabs-overline: rgb(222, 222, 222);--sd-color-tabs-underline: rgb(222, 222, 222);--sd-fontsize-tabs-label: 1rem} diff --git a/_static/design-tabs.js b/_static/design-tabs.js new file mode 100644 index 0000000..36b38cf --- /dev/null +++ b/_static/design-tabs.js @@ -0,0 +1,27 @@ +var sd_labels_by_text = {}; + +function ready() { + const li = document.getElementsByClassName("sd-tab-label"); + for (const label of li) { + syncId = label.getAttribute("data-sync-id"); + if (syncId) { + label.onclick = onLabelClick; + if (!sd_labels_by_text[syncId]) { + sd_labels_by_text[syncId] = []; + } + sd_labels_by_text[syncId].push(label); + } + } +} + +function onLabelClick() { + // Activate other inputs with the same sync id. + syncId = this.getAttribute("data-sync-id"); + for (label of sd_labels_by_text[syncId]) { + if (label === this) continue; + label.previousElementSibling.checked = true; + } + window.localStorage.setItem("sphinx-design-last-tab", syncId); +} + +document.addEventListener("DOMContentLoaded", ready, false); diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000..e1bfd70 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,358 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + this.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + var url = new URL(window.location); + url.searchParams.delete('highlight'); + window.history.replaceState({}, '', url); + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar : function() { + $('input[name=q]').first().focus(); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + return; + + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box, textarea, dropdown or button + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && activeElementType !== 'BUTTON') { + if (event.altKey || event.ctrlKey || event.metaKey) + return; + + if (!event.shiftKey) { + switch (event.key) { + case 'ArrowLeft': + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) + break; + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + break; + case 'ArrowRight': + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) + break; + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + break; + case 'Escape': + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + break; + Documentation.hideSearchWords(); + return false; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case '/': + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + break; + Documentation.focusSearchBar(); + return false; + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000..7f2df83 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + BUILDER: 'dirhtml', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '', + NAVIGATION_WITH_KEYS: true, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/favicon.ico b/_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bb295e84368d15b66302a19760269aa601058dbf GIT binary patch literal 15406 zcmeI3S#VTWddEdMl}a8`Lf zwlUaj_J|#`3E5_`*%z~8V|F9;BDHpq1ZV*X5CX(5kYv!8|L=64=Bm{#wS-)iRL!Zn zx_$3G=X}fg&bJ=r)lU&lKB2N zIXR&}&&m0r`e=wo#NX?dRf|TWKd!Dmwz#eBa&1>vSI6!4_Ky0xleI;W@M6AYnj{no z{c$uB%4<4v`ktDlw$|1QRveAoqfcXF;~xd*;W-)(9X@xqIXSGnyv*j#nQgIHaq``T zmKIY#uEW6db1>(Lnwn(4hWdIpZuZQXcKGn2V9R3DGe5sBn69-2hkz1z2MTSG&G z-Mo3zy1TpWN?V&Pm_OfEtz4OW*V)-=mo8nhNT`rGx)~b{7cPkv7ul&(r|js_qgGc} zXC);iR$5wWAAT^yR09;P^h-Ksi_B!Jb=U0Deqfx zQBkjNbtg~8Y0%iBaH!*AYpZ?x?Y9;Qhh5*RSFgJ9hYuaHty{lv--44goj&cxGuDr9 zX*q8*rcHI-R<2lXOP4IMZ;l+Xd2{Djo_>G5_bdBs)k@(LwcvP%e{&rFlP6ACthiWs zgzWO=%i?FfmBeCpgrC}7n?Ubd_I^y%|8EZ zm2KLv!M^$Ci0fBYS`w!p{w3D$j@FNMVE;aQd%}3TbLWnGX6*ib`|R%ByYBhMjT?!v z@%3{u5Rji;J9pZdGiR(+>-2H{GGoobp|G&PjZc*y#yiNn2Z6kNxXpP2YljhvGMS<`G^0 zs0;n{psk>w;7>}5ik>Jbj^>?dY>Y~lTcw9OwLd#gH#W8w7e%7*fIjqnP_nf;Wmb#`T;>`G{KCS*?~9HKXbI}xR9KmwZ(P4_G3f)wC$5U(;^M!`28WVJlZ$gphMy1{VQCN zP9BgG`XD?o5FhQCr=GG`UVh2S%gg)fn%tN7c@XLXrpJN3%C{ofV(An&*NPP@?4;}|_S!eT zeZ6=~>5@X6g3plEtv>L;yarnGbw)mEO1WZRgG% z&L`NkX_MA@rhWP4mv->rLA~E;8)WC^&Yf%3l8yQDKfvm*_Q{TI*|Np* z^Yd-#(xo{-we= zuz$b(&oj?BpON+IuXT2IB;h9MmrlgK@LUt{wXR;dVxN4R@BAA-FMd*i*4g_@yl)jx z(MNM;&ocCFU+u2!W&p1L-IWgh+BK`4Zd)k*?%S>%JKVe9efWW$ke&53H_A6h7r!U@ zzIgGX>wZmsF8+3HZH@ES6suS!_`<0d|IvT=*ozi^K=!tGH(K zrj53A@nXX-Cm!;;r>e5j#z`*&f6wmSj)si#*T??5A~`@OjDPbD=R0rOxWUTH$_%>( zO?|c1pMU1`jo;Im_8g0)3(C!%;u3x|A^f^2}QCn;9VrF3NgKG|6#2dj@ zS`zaz@9x0#eyV=Q?T>7)w?DzL>_z4uC0mC*3APo>Kebm!kFp|-ZEwG&t3CMH{RVf> zV}A#xw|}u%AwI6t1I;P+w@vZdD=)q1;IpP)#yk)o2hqpJnf{x@Rpk z!{N04M~&k&@_NkEp6MQpzmRj}nz>Tv&-OVPe-=gC`;0$j-+lZk zxb5ukppTm^yiEO^o|L~PKS{Z~#;9y;YgcDym-bhe;_=p4BL2pw^Lj1QT)%&Rp9ADc zl%mafR@YGENiX9wBCOfi-t!>BjIc4?@IBJcwn&YqVoHt@=ZM*+%@mDqHy6DU;%Te zXekbd|2`5f+$|Vg#;93l0oMinHxRbMl@2Ng+5EtZuy#2ug`)$dh zMJ~R>@1wS$Jan*YuiuPqYrE`tl(G&64&XA7bzt2*-;*EKX!hwI-Y#?%ZjN-KL4Ek`@j8M zYq3}{<@HR<*y}xYjtpzyY@BMle-WfX6Fe063B0U@?EJa2$$80Zkyr6o@P+FW7%67rQ~RAobO38*706^}I~IYYp->SJGd?f5M;f{m7XH*Ly0taP5aRibH42 zn9)lYQDYrFYLwNh4o~~)tFIK-FLn4o_KROAhrKz8|7q#6^~(3KS3L~&Os#S+JVQJ3 zM_q!td#K=O8al#F;LI8b+%V<$--!EBA=|NStIO}LTD8iMTXN*Nxw$UCpO=^Ca_TEo z10a_^U3K0?()HB+$-gg9&UyLr<+fJ&K*o=h{6GHKW42v+C~&G&{QKVI$u@fQXd6C! zxIH^!gnJ(O!V5M^^aE$K@&vI>|H6g+ygZR#!&;O*1(*|DSZl#eq)8Y3RH(roPkKL1vvZIL$oAir%L(m)R>w% z$s_w3y{9eRT`{Ijkj-7RaG|RMJ^l1k4nNLORH-&NkcNNf`P%y)ZYBnDv5?lpf3KHs z?&WeIuzX+mx@*@iBcF}#c}{CEkiF~Y;SRs>yF6~GcW@`33%>6wzZ9IiuixZ{CyX0s z|M1hFI=Q9hHJGM6f>Hkn;urkwV$n!sn}3JwlTUuoM$PIszaD8n{?Xss*w>b+*RimwMM( zpepGi=OgnCStGxf+FZ>&8dWYjn))g2Gxi5PGhxC6=RcFbBxgC$rh_qk`4XZld|CM4 z@pNIcvE9K|soL#S)>?|Yt%P@zgv1S*w%dhxqI*FdvomTmMhRK#hdu!*dXXT-I&oAjmwYrfaia@{fiEuCIo!u z4L1D!M$J!+W(&1_)s2u9E@&Zkq@Eaz$%tzC>+mHi@@nx+2$-;v9mJGMLd03Px|jszb+EPt0881W;#%eJAH!5^Q`?`_6r z<3Hd71^qYdHFWpae2hVza?-?!$$Uvrj;Bc{afXyL9mJy8VRQ>|9rVEqa*)*9Im5z! z3bsD|w@BQ7>(74<&X?{ta)Qr6jdPvs6#B#KD^Ck|>VMb~&Ze<<(Z$e)-o>^YIee%G z?}0_0GAJ88en&!E%gV}J{@vxl6Lnhp=uCAwRC~OGm+T4d-rr^)puahXyYK70$s9zG zj^J z;;9WBkT1Va$nCI?$+h8U^_3q`{Ua^zaeD5@kBJyk@q0)){rho1Fn$l>1x}o^Mjkx= z??^v#20dM4Jw8(0MID{Ju5(d+@`gFsTPJF&Gvc2bze7WLdFXpumwxjn=pgij$NfE> z(LSm35zv*c@g8}?mN5n&g0muhwSneOz@J8LNNb?lYUcbEc5C*`T!#ziG4N-616N{M z^0%Db3)(mG7kV9;_@6J^3NJS)ruTXt-0^j$O_}1paZU;U z$2Y!j-?lC3OJJL8BqO{JHgX3U_HDoUL(S7~{uX%TmN+jNjOW|sLy~t0>Q3z1ojdo> z6QTP#rwHxr2Yd=@+rBaPgXC{n0~$4#p84~}9EL<~y|m?6=l-NY4*2XKGzyF!*INM!a$7H(cJGJaB2O8UKefh29qpt_!ll z9zCZsj{f|HYCX;5keLJjkvX%0J(PV|W1qt&ms;-6&onk3lmB>GaZrcsT1R6;-DRDZ T_&;-gW+-{^`?>yqbKrjgZ25nj literal 0 HcmV?d00001 diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_static/images/logo_binder.svg b/_static/images/logo_binder.svg new file mode 100644 index 0000000..45fecf7 --- /dev/null +++ b/_static/images/logo_binder.svg @@ -0,0 +1,19 @@ + + + + +logo + + + + + + + + diff --git a/_static/images/logo_colab.png b/_static/images/logo_colab.png new file mode 100644 index 0000000000000000000000000000000000000000..b7560ec216b2d1b6f77855525fe966c741833428 GIT binary patch literal 7601 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 diff --git a/_static/images/logo_jupyterhub.svg b/_static/images/logo_jupyterhub.svg new file mode 100644 index 0000000..60cfe9f --- /dev/null +++ b/_static/images/logo_jupyterhub.svg @@ -0,0 +1 @@ +logo_jupyterhubHub diff --git a/_static/jquery-3.5.1.js b/_static/jquery-3.5.1.js new file mode 100644 index 0000000..5093733 --- /dev/null +++ b/_static/jquery-3.5.1.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " +{% endmacro %} diff --git a/_static/scripts/pydata-sphinx-theme.js b/_static/scripts/pydata-sphinx-theme.js new file mode 100644 index 0000000..0e00c4c --- /dev/null +++ b/_static/scripts/pydata-sphinx-theme.js @@ -0,0 +1,32 @@ +!function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(i,o,function(e){return t[e]}.bind(null,o));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=2)}([function(t,e){t.exports=jQuery},function(t,e,n){"use strict";n.r(e),function(t){ +/**! + * @fileOverview Kickass library to create and place poppers near their reference elements. + * @version 1.16.1 + * @license + * Copyright (c) 2016 Federico Zivolo and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +var n="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,i=function(){for(var t=["Edge","Trident","Firefox"],e=0;e=0)return 1;return 0}();var o=n&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then((function(){e=!1,t()})))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout((function(){e=!1,t()}),i))}};function r(t){return t&&"[object Function]"==={}.toString.call(t)}function a(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function s(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function l(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=a(t),n=e.overflow,i=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(n+o+i)?t:l(s(t))}function u(t){return t&&t.referenceNode?t.referenceNode:t}var f=n&&!(!window.MSInputMethodContext||!document.documentMode),d=n&&/MSIE 10/.test(navigator.userAgent);function c(t){return 11===t?f:10===t?d:f||d}function h(t){if(!t)return document.documentElement;for(var e=c(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===a(n,"position")?h(n):n:t?t.ownerDocument.documentElement:document.documentElement}function p(t){return null!==t.parentNode?p(t.parentNode):t}function m(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?t:e,o=n?e:t,r=document.createRange();r.setStart(i,0),r.setEnd(o,0);var a,s,l=r.commonAncestorContainer;if(t!==l&&e!==l||i.contains(o))return"BODY"===(s=(a=l).nodeName)||"HTML"!==s&&h(a.firstElementChild)!==a?h(l):l;var u=p(t);return u.host?m(u.host,e):m(t,p(e).host)}function g(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===e?"scrollTop":"scrollLeft",i=t.nodeName;if("BODY"===i||"HTML"===i){var o=t.ownerDocument.documentElement,r=t.ownerDocument.scrollingElement||o;return r[n]}return t[n]}function v(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=g(e,"top"),o=g(e,"left"),r=n?-1:1;return t.top+=i*r,t.bottom+=i*r,t.left+=o*r,t.right+=o*r,t}function _(t,e){var n="x"===e?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"])+parseFloat(t["border"+i+"Width"])}function b(t,e,n,i){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],c(10)?parseInt(n["offset"+t])+parseInt(i["margin"+("Height"===t?"Top":"Left")])+parseInt(i["margin"+("Height"===t?"Bottom":"Right")]):0)}function y(t){var e=t.body,n=t.documentElement,i=c(10)&&getComputedStyle(n);return{height:b("Height",e,n,i),width:b("Width",e,n,i)}}var w=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},E=function(){function t(t,e){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2],i=c(10),o="HTML"===e.nodeName,r=N(t),s=N(e),u=l(t),f=a(e),d=parseFloat(f.borderTopWidth),h=parseFloat(f.borderLeftWidth);n&&o&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var p=S({top:r.top-s.top-d,left:r.left-s.left-h,width:r.width,height:r.height});if(p.marginTop=0,p.marginLeft=0,!i&&o){var m=parseFloat(f.marginTop),g=parseFloat(f.marginLeft);p.top-=d-m,p.bottom-=d-m,p.left-=h-g,p.right-=h-g,p.marginTop=m,p.marginLeft=g}return(i&&!n?e.contains(u):e===u&&"BODY"!==u.nodeName)&&(p=v(p,e)),p}function k(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,i=D(t,n),o=Math.max(n.clientWidth,window.innerWidth||0),r=Math.max(n.clientHeight,window.innerHeight||0),a=e?0:g(n),s=e?0:g(n,"left"),l={top:a-i.top+i.marginTop,left:s-i.left+i.marginLeft,width:o,height:r};return S(l)}function A(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fixed"===a(t,"position"))return!0;var n=s(t);return!!n&&A(n)}function I(t){if(!t||!t.parentElement||c())return document.documentElement;for(var e=t.parentElement;e&&"none"===a(e,"transform");)e=e.parentElement;return e||document.documentElement}function O(t,e,n,i){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},a=o?I(t):m(t,u(e));if("viewport"===i)r=k(a,o);else{var f=void 0;"scrollParent"===i?"BODY"===(f=l(s(e))).nodeName&&(f=t.ownerDocument.documentElement):f="window"===i?t.ownerDocument.documentElement:i;var d=D(f,a,o);if("HTML"!==f.nodeName||A(a))r=d;else{var c=y(t.ownerDocument),h=c.height,p=c.width;r.top+=d.top-d.marginTop,r.bottom=h+d.top,r.left+=d.left-d.marginLeft,r.right=p+d.left}}var g="number"==typeof(n=n||0);return r.left+=g?n:n.left||0,r.top+=g?n:n.top||0,r.right-=g?n:n.right||0,r.bottom-=g?n:n.bottom||0,r}function x(t){return t.width*t.height}function j(t,e,n,i,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var a=O(n,i,r,o),s={top:{width:a.width,height:e.top-a.top},right:{width:a.right-e.right,height:a.height},bottom:{width:a.width,height:a.bottom-e.bottom},left:{width:e.left-a.left,height:a.height}},l=Object.keys(s).map((function(t){return C({key:t},s[t],{area:x(s[t])})})).sort((function(t,e){return e.area-t.area})),u=l.filter((function(t){var e=t.width,i=t.height;return e>=n.clientWidth&&i>=n.clientHeight})),f=u.length>0?u[0].key:l[0].key,d=t.split("-")[1];return f+(d?"-"+d:"")}function L(t,e,n){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=i?I(e):m(e,u(n));return D(n,o,i)}function P(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),i=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+i,height:t.offsetHeight+n}}function F(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,(function(t){return e[t]}))}function R(t,e,n){n=n.split("-")[0];var i=P(t),o={width:i.width,height:i.height},r=-1!==["right","left"].indexOf(n),a=r?"top":"left",s=r?"left":"top",l=r?"height":"width",u=r?"width":"height";return o[a]=e[a]+e[l]/2-i[l]/2,o[s]=n===s?e[s]-i[u]:e[F(s)],o}function M(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function B(t,e,n){return(void 0===n?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex((function(t){return t[e]===n}));var i=M(t,(function(t){return t[e]===n}));return t.indexOf(i)}(t,"name",n))).forEach((function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=t.function||t.fn;t.enabled&&r(n)&&(e.offsets.popper=S(e.offsets.popper),e.offsets.reference=S(e.offsets.reference),e=n(e,t))})),e}function H(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=L(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=j(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=R(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=B(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}function q(t,e){return t.some((function(t){var n=t.name;return t.enabled&&n===e}))}function Q(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),i=0;i1&&void 0!==arguments[1]&&arguments[1],n=Z.indexOf(t),i=Z.slice(n+1).concat(Z.slice(0,n));return e?i.reverse():i}var et="flip",nt="clockwise",it="counterclockwise";function ot(t,e,n,i){var o=[0,0],r=-1!==["right","left"].indexOf(i),a=t.split(/(\+|\-)/).map((function(t){return t.trim()})),s=a.indexOf(M(a,(function(t){return-1!==t.search(/,|\s/)})));a[s]&&-1===a[s].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,u=-1!==s?[a.slice(0,s).concat([a[s].split(l)[0]]),[a[s].split(l)[1]].concat(a.slice(s+1))]:[a];return(u=u.map((function(t,i){var o=(1===i?!r:r)?"height":"width",a=!1;return t.reduce((function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,a=!0,t):a?(t[t.length-1]+=e,a=!1,t):t.concat(e)}),[]).map((function(t){return function(t,e,n,i){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],a=o[2];if(!r)return t;if(0===a.indexOf("%")){var s=void 0;switch(a){case"%p":s=n;break;case"%":case"%r":default:s=i}return S(s)[e]/100*r}if("vh"===a||"vw"===a){return("vh"===a?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r}return r}(t,o,e,n)}))}))).forEach((function(t,e){t.forEach((function(n,i){K(n)&&(o[e]+=n*("-"===t[i-1]?-1:1))}))})),o}var rt={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],i=e.split("-")[1];if(i){var o=t.offsets,r=o.reference,a=o.popper,s=-1!==["bottom","top"].indexOf(n),l=s?"left":"top",u=s?"width":"height",f={start:T({},l,r[l]),end:T({},l,r[l]+r[u]-a[u])};t.offsets.popper=C({},a,f[i])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,i=t.placement,o=t.offsets,r=o.popper,a=o.reference,s=i.split("-")[0],l=void 0;return l=K(+n)?[+n,0]:ot(n,r,a,s),"left"===s?(r.top+=l[0],r.left-=l[1]):"right"===s?(r.top+=l[0],r.left+=l[1]):"top"===s?(r.left+=l[0],r.top-=l[1]):"bottom"===s&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var n=e.boundariesElement||h(t.instance.popper);t.instance.reference===n&&(n=h(n));var i=Q("transform"),o=t.instance.popper.style,r=o.top,a=o.left,s=o[i];o.top="",o.left="",o[i]="";var l=O(t.instance.popper,t.instance.reference,e.padding,n,t.positionFixed);o.top=r,o.left=a,o[i]=s,e.boundaries=l;var u=e.priority,f=t.offsets.popper,d={primary:function(t){var n=f[t];return f[t]l[t]&&!e.escapeWithReference&&(i=Math.min(f[n],l[t]-("right"===t?f.width:f.height))),T({},n,i)}};return u.forEach((function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";f=C({},f,d[e](t))})),t.offsets.popper=f,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,i=e.reference,o=t.placement.split("-")[0],r=Math.floor,a=-1!==["top","bottom"].indexOf(o),s=a?"right":"bottom",l=a?"left":"top",u=a?"width":"height";return n[s]r(i[s])&&(t.offsets.popper[l]=r(i[s])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!G(t.instance.modifiers,"arrow","keepTogether"))return t;var i=e.element;if("string"==typeof i){if(!(i=t.instance.popper.querySelector(i)))return t}else if(!t.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,s=r.popper,l=r.reference,u=-1!==["left","right"].indexOf(o),f=u?"height":"width",d=u?"Top":"Left",c=d.toLowerCase(),h=u?"left":"top",p=u?"bottom":"right",m=P(i)[f];l[p]-ms[p]&&(t.offsets.popper[c]+=l[c]+m-s[p]),t.offsets.popper=S(t.offsets.popper);var g=l[c]+l[f]/2-m/2,v=a(t.instance.popper),_=parseFloat(v["margin"+d]),b=parseFloat(v["border"+d+"Width"]),y=g-t.offsets.popper[c]-_-b;return y=Math.max(Math.min(s[f]-m,y),0),t.arrowElement=i,t.offsets.arrow=(T(n={},c,Math.round(y)),T(n,h,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(q(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var n=O(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),i=t.placement.split("-")[0],o=F(i),r=t.placement.split("-")[1]||"",a=[];switch(e.behavior){case et:a=[i,o];break;case nt:a=tt(i);break;case it:a=tt(i,!0);break;default:a=e.behavior}return a.forEach((function(s,l){if(i!==s||a.length===l+1)return t;i=t.placement.split("-")[0],o=F(i);var u=t.offsets.popper,f=t.offsets.reference,d=Math.floor,c="left"===i&&d(u.right)>d(f.left)||"right"===i&&d(u.left)d(f.top)||"bottom"===i&&d(u.top)d(n.right),m=d(u.top)d(n.bottom),v="left"===i&&h||"right"===i&&p||"top"===i&&m||"bottom"===i&&g,_=-1!==["top","bottom"].indexOf(i),b=!!e.flipVariations&&(_&&"start"===r&&h||_&&"end"===r&&p||!_&&"start"===r&&m||!_&&"end"===r&&g),y=!!e.flipVariationsByContent&&(_&&"start"===r&&p||_&&"end"===r&&h||!_&&"start"===r&&g||!_&&"end"===r&&m),w=b||y;(c||v||w)&&(t.flipped=!0,(c||v)&&(i=a[l+1]),w&&(r=function(t){return"end"===t?"start":"start"===t?"end":t}(r)),t.placement=i+(r?"-"+r:""),t.offsets.popper=C({},t.offsets.popper,R(t.instance.popper,t.offsets.reference,t.placement)),t=B(t.instance.modifiers,t,"flip"))})),t},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],i=t.offsets,o=i.popper,r=i.reference,a=-1!==["left","right"].indexOf(n),s=-1===["top","left"].indexOf(n);return o[a?"left":"top"]=r[n]-(s?o[a?"width":"height"]:0),t.placement=F(e),t.offsets.popper=S(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!G(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=M(t.instance.modifiers,(function(t){return"preventOverflow"===t.name})).boundaries;if(e.bottomn.right||e.top>n.bottom||e.right2&&void 0!==arguments[2]?arguments[2]:{};w(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(i.update)},this.update=o(this.update.bind(this)),this.options=C({},t.Defaults,a),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(C({},t.Defaults.modifiers,a.modifiers)).forEach((function(e){i.options.modifiers[e]=C({},t.Defaults.modifiers[e]||{},a.modifiers?a.modifiers[e]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(t){return C({name:t},i.options.modifiers[t])})).sort((function(t,e){return t.order-e.order})),this.modifiers.forEach((function(t){t.enabled&&r(t.onLoad)&&t.onLoad(i.reference,i.popper,i.options,t,i.state)})),this.update();var s=this.options.eventsEnabled;s&&this.enableEventListeners(),this.state.eventsEnabled=s}return E(t,[{key:"update",value:function(){return H.call(this)}},{key:"destroy",value:function(){return W.call(this)}},{key:"enableEventListeners",value:function(){return Y.call(this)}},{key:"disableEventListeners",value:function(){return z.call(this)}}]),t}();at.Utils=("undefined"!=typeof window?window:t).PopperUtils,at.placements=J,at.Defaults=rt,e.default=at}.call(this,n(4))},function(t,e,n){t.exports=n(5)},function(t,e,n){ +/*! + * Bootstrap v4.6.1 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e,n){"use strict";function i(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var o=i(e),r=i(n);function a(t,e){for(var n=0;n=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};d.jQueryDetection(),o.default.fn.emulateTransitionEnd=f,o.default.event.special[d.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(o.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var c=o.default.fn.alert,h=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){o.default.removeData(this._element,"bs.alert"),this._element=null},e._getRootElement=function(t){var e=d.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=o.default(t).closest(".alert")[0]),n},e._triggerCloseEvent=function(t){var e=o.default.Event("close.bs.alert");return o.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(o.default(t).removeClass("show"),o.default(t).hasClass("fade")){var n=d.getTransitionDurationFromElement(t);o.default(t).one(d.TRANSITION_END,(function(n){return e._destroyElement(t,n)})).emulateTransitionEnd(n)}else this._destroyElement(t)},e._destroyElement=function(t){o.default(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.alert");i||(i=new t(this),n.data("bs.alert",i)),"close"===e&&i[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}}]),t}();o.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),o.default.fn.alert=h._jQueryInterface,o.default.fn.alert.Constructor=h,o.default.fn.alert.noConflict=function(){return o.default.fn.alert=c,h._jQueryInterface};var p=o.default.fn.button,m=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=o.default(this._element).closest('[data-toggle="buttons"]')[0];if(n){var i=this._element.querySelector('input:not([type="hidden"])');if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains("active"))t=!1;else{var r=n.querySelector(".active");r&&o.default(r).removeClass("active")}t&&("checkbox"!==i.type&&"radio"!==i.type||(i.checked=!this._element.classList.contains("active")),this.shouldAvoidTriggerChange||o.default(i).trigger("change")),i.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&o.default(this._element).toggleClass("active"))},e.dispose=function(){o.default.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var i=o.default(this),r=i.data("bs.button");r||(r=new t(this),i.data("bs.button",r)),r.shouldAvoidTriggerChange=n,"toggle"===e&&r[e]()}))},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}}]),t}();o.default(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=t.target,n=e;if(o.default(e).hasClass("btn")||(e=o.default(e).closest(".btn")[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var i=e.querySelector('input:not([type="hidden"])');if(i&&(i.hasAttribute("disabled")||i.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||m._jQueryInterface.call(o.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=o.default(t.target).closest(".btn")[0];o.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),o.default(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=t.prototype;return e.next=function(){this._isSliding||this._slide("next")},e.nextWhenVisible=function(){var t=o.default(this._element);!document.hidden&&t.is(":visible")&&"hidden"!==t.css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide("prev")},e.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(d.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(t){var e=this;this._activeElement=this._element.querySelector(".active.carousel-item");var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)o.default(this._element).one("slid.bs.carousel",(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var i=t>n?"next":"prev";this._slide(i,this._items[t])}},e.dispose=function(){o.default(this._element).off(v),o.default.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=l({},b,t),d.typeCheckConfig(g,t,y),t},e._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&o.default(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&o.default(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var e=function(e){t._pointerEvent&&w[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&w[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};o.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(o.default(this._element).on("pointerdown.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("pointerup.bs.carousel",(function(t){return n(t)})),this._element.classList.add("pointer-event")):(o.default(this._element).on("touchstart.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("touchmove.bs.carousel",(function(e){return function(e){t.touchDeltaX=e.originalEvent.touches&&e.originalEvent.touches.length>1?0:e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),o.default(this._element).on("touchend.bs.carousel",(function(t){return n(t)})))}},e._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},e._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},e._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var a=(o+("prev"===t?-1:1))%this._items.length;return-1===a?this._items[this._items.length-1]:this._items[a]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(".active.carousel-item")),r=o.default.Event("slide.bs.carousel",{relatedTarget:t,direction:e,from:i,to:n});return o.default(this._element).trigger(r),r},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));o.default(e).removeClass("active");var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&o.default(n).addClass("active")}},e._updateInterval=function(){var t=this._activeElement||this._element.querySelector(".active.carousel-item");if(t){var e=parseInt(t.getAttribute("data-interval"),10);e?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=e):this._config.interval=this._config.defaultInterval||this._config.interval}},e._slide=function(t,e){var n,i,r,a=this,s=this._element.querySelector(".active.carousel-item"),l=this._getItemIndex(s),u=e||s&&this._getItemByDirection(t,s),f=this._getItemIndex(u),c=Boolean(this._interval);if("next"===t?(n="carousel-item-left",i="carousel-item-next",r="left"):(n="carousel-item-right",i="carousel-item-prev",r="right"),u&&o.default(u).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(u,r).isDefaultPrevented()&&s&&u){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(u),this._activeElement=u;var h=o.default.Event("slid.bs.carousel",{relatedTarget:u,direction:r,from:l,to:f});if(o.default(this._element).hasClass("slide")){o.default(u).addClass(i),d.reflow(u),o.default(s).addClass(n),o.default(u).addClass(n);var p=d.getTransitionDurationFromElement(s);o.default(s).one(d.TRANSITION_END,(function(){o.default(u).removeClass(n+" "+i).addClass("active"),o.default(s).removeClass("active "+i+" "+n),a._isSliding=!1,setTimeout((function(){return o.default(a._element).trigger(h)}),0)})).emulateTransitionEnd(p)}else o.default(s).removeClass("active"),o.default(u).addClass("active"),this._isSliding=!1,o.default(this._element).trigger(h);c&&this.cycle()}},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.carousel"),i=l({},b,o.default(this).data());"object"==typeof e&&(i=l({},i,e));var r="string"==typeof e?e:i.slide;if(n||(n=new t(this,i),o.default(this).data("bs.carousel",n)),"number"==typeof e)n.to(e);else if("string"==typeof r){if(void 0===n[r])throw new TypeError('No method named "'+r+'"');n[r]()}else i.interval&&i.ride&&(n.pause(),n.cycle())}))},t._dataApiClickHandler=function(e){var n=d.getSelectorFromElement(this);if(n){var i=o.default(n)[0];if(i&&o.default(i).hasClass("carousel")){var r=l({},o.default(i).data(),o.default(this).data()),a=this.getAttribute("data-slide-to");a&&(r.interval=!1),t._jQueryInterface.call(o.default(i),r),a&&o.default(i).data("bs.carousel").to(a),e.preventDefault()}}},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return b}}]),t}();o.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",E._dataApiClickHandler),o.default(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),e=0,n=t.length;e0&&(this._selector=a,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=t.prototype;return e.toggle=function(){o.default(this._element).hasClass("show")?this.hide():this.show()},e.show=function(){var e,n,i=this;if(!(this._isTransitioning||o.default(this._element).hasClass("show")||(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof i._config.parent?t.getAttribute("data-parent")===i._config.parent:t.classList.contains("collapse")}))).length&&(e=null),e&&(n=o.default(e).not(this._selector).data("bs.collapse"))&&n._isTransitioning))){var r=o.default.Event("show.bs.collapse");if(o.default(this._element).trigger(r),!r.isDefaultPrevented()){e&&(t._jQueryInterface.call(o.default(e).not(this._selector),"hide"),n||o.default(e).data("bs.collapse",null));var a=this._getDimension();o.default(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[a]=0,this._triggerArray.length&&o.default(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var s="scroll"+(a[0].toUpperCase()+a.slice(1)),l=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,(function(){o.default(i._element).removeClass("collapsing").addClass("collapse show"),i._element.style[a]="",i.setTransitioning(!1),o.default(i._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(l),this._element.style[a]=this._element[s]+"px"}}},e.hide=function(){var t=this;if(!this._isTransitioning&&o.default(this._element).hasClass("show")){var e=o.default.Event("hide.bs.collapse");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",d.reflow(this._element),o.default(this._element).addClass("collapsing").removeClass("collapse show");var i=this._triggerArray.length;if(i>0)for(var r=0;r0},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,t._config.offset(e.offsets,t._element)),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),l({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.dropdown");if(n||(n=new t(this,"object"==typeof e?e:null),o.default(this).data("bs.dropdown",n)),"string"==typeof e){if(void 0===n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},t._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var n=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),i=0,r=n.length;i0&&a--,40===e.which&&adocument.documentElement.clientHeight;n||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var i=d.getTransitionDurationFromElement(this._dialog);o.default(this._element).off(d.TRANSITION_END),o.default(this._element).one(d.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),n||o.default(t._element).one(d.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,i)})).emulateTransitionEnd(i),this._element.focus()}},e._showElement=function(t){var e=this,n=o.default(this._element).hasClass("fade"),i=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),o.default(this._dialog).hasClass("modal-dialog-scrollable")&&i?i.scrollTop=0:this._element.scrollTop=0,n&&d.reflow(this._element),o.default(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var r=o.default.Event("shown.bs.modal",{relatedTarget:t}),a=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,o.default(e._element).trigger(r)};if(n){var s=d.getTransitionDurationFromElement(this._dialog);o.default(this._dialog).one(d.TRANSITION_END,a).emulateTransitionEnd(s)}else a()},e._enforceFocus=function(){var t=this;o.default(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(e){document!==e.target&&t._element!==e.target&&0===o.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?o.default(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||o.default(this._element).off("keydown.dismiss.bs.modal")},e._setResizeEvent=function(){var t=this;this._isShown?o.default(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):o.default(window).off("resize.bs.modal")},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){o.default(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),o.default(t._element).trigger("hidden.bs.modal")}))},e._removeBackdrop=function(){this._backdrop&&(o.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=o.default(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",n&&this._backdrop.classList.add(n),o.default(this._backdrop).appendTo(document.body),o.default(this._element).on("click.dismiss.bs.modal",(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._triggerBackdropTransition():e.hide())})),n&&d.reflow(this._backdrop),o.default(this._backdrop).addClass("show"),!t)return;if(!n)return void t();var i=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){o.default(this._backdrop).removeClass("show");var r=function(){e._removeBackdrop(),t&&t()};if(o.default(this._element).hasClass("fade")){var a=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,r).emulateTransitionEnd(a)}else r()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:B,popperConfig:null},X={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},$={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},G=function(){function t(t,e){if(void 0===r.default)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=o.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(o.default(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),o.default.removeData(this.element,this.constructor.DATA_KEY),o.default(this.element).off(this.constructor.EVENT_KEY),o.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&o.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===o.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=o.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){o.default(this.element).trigger(e);var n=d.findShadowRoot(this.element),i=o.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!i)return;var a=this.getTipElement(),s=d.getUID(this.constructor.NAME);a.setAttribute("id",s),this.element.setAttribute("aria-describedby",s),this.setContent(),this.config.animation&&o.default(a).addClass("fade");var l="function"==typeof this.config.placement?this.config.placement.call(this,a,this.element):this.config.placement,u=this._getAttachment(l);this.addAttachmentClass(u);var f=this._getContainer();o.default(a).data(this.constructor.DATA_KEY,this),o.default.contains(this.element.ownerDocument.documentElement,this.tip)||o.default(a).appendTo(f),o.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new r.default(this.element,a,this._getPopperConfig(u)),o.default(a).addClass("show"),o.default(a).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&o.default(document.body).children().on("mouseover",null,o.default.noop);var c=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,o.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(o.default(this.tip).hasClass("fade")){var h=d.getTransitionDurationFromElement(this.tip);o.default(this.tip).one(d.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},e.hide=function(t){var e=this,n=this.getTipElement(),i=o.default.Event(this.constructor.Event.HIDE),r=function(){"show"!==e._hoverState&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),o.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(o.default(this.element).trigger(i),!i.isDefaultPrevented()){if(o.default(n).removeClass("show"),"ontouchstart"in document.documentElement&&o.default(document.body).children().off("mouseover",null,o.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,o.default(this.tip).hasClass("fade")){var a=d.getTransitionDurationFromElement(n);o.default(n).one(d.TRANSITION_END,r).emulateTransitionEnd(a)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(o.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),o.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=Q(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?o.default(e).parent().is(t)||t.empty().append(e):t.text(o.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return l({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,t.config.offset(e.offsets,t.element)),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:d.isElement(this.config.container)?o.default(this.config.container):o.default(document).find(this.config.container)},e._getAttachment=function(t){return z[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)o.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,i="hover"===e?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;o.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(i,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},o.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),o.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=o.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Y.indexOf(t)&&delete e[t]})),"number"==typeof(t=l({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),d.typeCheckConfig(W,t,this.constructor.DefaultType),t.sanitize&&(t.template=Q(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(V);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(o.default(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tooltip"),r="object"==typeof e&&e;if((i||!/dispose|hide/.test(e))&&(i||(i=new t(this,r),n.data("bs.tooltip",i)),"string"==typeof e)){if(void 0===i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return K}},{key:"NAME",get:function(){return W}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return $}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return X}}]),t}();o.default.fn[W]=G._jQueryInterface,o.default.fn[W].Constructor=G,o.default.fn[W].noConflict=function(){return o.default.fn[W]=U,G._jQueryInterface};var J="popover",Z=o.default.fn[J],tt=new RegExp("(^|\\s)bs-popover\\S+","g"),et=l({},G.Default,{placement:"right",trigger:"click",content:"",template:''}),nt=l({},G.DefaultType,{content:"(string|element|function)"}),it={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},ot=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,u(e,n);var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-popover-"+t)},r.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},r.setContent=function(){var t=o.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(tt);null!==e&&e.length>0&&t.removeClass(e.join(""))},i._jQueryInterface=function(t){return this.each((function(){var e=o.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new i(this,n),o.default(this).data("bs.popover",e)),"string"==typeof t)){if(void 0===e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},s(i,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return et}},{key:"NAME",get:function(){return J}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return it}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return nt}}]),i}(G);o.default.fn[J]=ot._jQueryInterface,o.default.fn[J].Constructor=ot,o.default.fn[J].noConflict=function(){return o.default.fn[J]=Z,ot._jQueryInterface};var rt="scrollspy",at=o.default.fn[rt],st={offset:10,method:"auto",target:""},lt={offset:"number",method:"string",target:"(string|element)"},ut=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,o.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":"position",n="auto"===this._config.method?e:this._config.method,i="position"===n?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,r=d.getSelectorFromElement(t);if(r&&(e=document.querySelector(r)),e){var a=e.getBoundingClientRect();if(a.width||a.height)return[o.default(e)[n]().top+i,r]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){o.default.removeData(this._element,"bs.scrollspy"),o.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=l({},st,"object"==typeof t&&t?t:{})).target&&d.isElement(t.target)){var e=o.default(t.target).attr("id");e||(e=d.getUID(rt),o.default(t.target).attr("id",e)),t.target="#"+e}return d.typeCheckConfig(rt,t,lt),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;)this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&(void 0===this._offsets[o+1]||t li > .active":".active";n=(n=o.default.makeArray(o.default(i).find(a)))[n.length-1]}var s=o.default.Event("hide.bs.tab",{relatedTarget:this._element}),l=o.default.Event("show.bs.tab",{relatedTarget:n});if(n&&o.default(n).trigger(s),o.default(this._element).trigger(l),!l.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=document.querySelector(r)),this._activate(this._element,i);var u=function(){var e=o.default.Event("hidden.bs.tab",{relatedTarget:t._element}),i=o.default.Event("shown.bs.tab",{relatedTarget:n});o.default(n).trigger(e),o.default(t._element).trigger(i)};e?this._activate(e,e.parentNode,u):u()}}},e.dispose=function(){o.default.removeData(this._element,"bs.tab"),this._element=null},e._activate=function(t,e,n){var i=this,r=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?o.default(e).children(".active"):o.default(e).find("> li > .active"))[0],a=n&&r&&o.default(r).hasClass("fade"),s=function(){return i._transitionComplete(t,r,n)};if(r&&a){var l=d.getTransitionDurationFromElement(r);o.default(r).removeClass("show").one(d.TRANSITION_END,s).emulateTransitionEnd(l)}else s()},e._transitionComplete=function(t,e,n){if(e){o.default(e).removeClass("active");var i=o.default(e.parentNode).find("> .dropdown-menu .active")[0];i&&o.default(i).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}o.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),d.reflow(t),t.classList.contains("fade")&&t.classList.add("show");var r=t.parentNode;if(r&&"LI"===r.nodeName&&(r=r.parentNode),r&&o.default(r).hasClass("dropdown-menu")){var a=o.default(t).closest(".dropdown")[0];if(a){var s=[].slice.call(a.querySelectorAll(".dropdown-toggle"));o.default(s).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tab");if(i||(i=new t(this),n.data("bs.tab",i)),"string"==typeof e){if(void 0===i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}}]),t}();o.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),dt._jQueryInterface.call(o.default(this),"show")})),o.default.fn.tab=dt._jQueryInterface,o.default.fn.tab.Constructor=dt,o.default.fn.tab.noConflict=function(){return o.default.fn.tab=ft,dt._jQueryInterface};var ct="toast",ht=o.default.fn[ct],pt={animation:!0,autohide:!0,delay:500},mt={animation:"boolean",autohide:"boolean",delay:"number"},gt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=o.default.Event("show.bs.toast");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),o.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),d.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var i=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},e.hide=function(){if(this._element.classList.contains("show")){var t=o.default.Event("hide.bs.toast");o.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),o.default(this._element).off("click.dismiss.bs.toast"),o.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=l({},pt,o.default(this._element).data(),"object"==typeof t&&t?t:{}),d.typeCheckConfig(ct,t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;o.default(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),o.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var n=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.toast");if(i||(i=new t(this,"object"==typeof e&&e),n.data("bs.toast",i)),"string"==typeof e){if(void 0===i[e])throw new TypeError('No method named "'+e+'"');i[e](this)}}))},s(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"DefaultType",get:function(){return mt}},{key:"Default",get:function(){return pt}}]),t}();o.default.fn[ct]=gt._jQueryInterface,o.default.fn[ct].Constructor=gt,o.default.fn[ct].noConflict=function(){return o.default.fn[ct]=ht,gt._jQueryInterface},t.Alert=h,t.Button=m,t.Carousel=E,t.Collapse=D,t.Dropdown=j,t.Modal=R,t.Popover=ot,t.Scrollspy=ut,t.Tab=dt,t.Toast=gt,t.Tooltip=G,t.Util=d,Object.defineProperty(t,"__esModule",{value:!0})}(e,n(0),n(1))},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){"use strict";n.r(e);n(0),n(3),n.p;$((function(){var t=document.querySelector("div.bd-sidebar");let e=parseInt(sessionStorage.getItem("sidebar-scroll-top"),10);if(isNaN(e)){var n=document.getElementById("bd-docs-nav").querySelectorAll(".active");if(n.length>0){var i=n[n.length-1],o=i.getBoundingClientRect().y-t.getBoundingClientRect().y;if(i.getBoundingClientRect().y>.5*window.innerHeight){let e=.25;t.scrollTop=o-t.clientHeight*e,console.log("[PST]: Scrolled sidebar using last active link...")}}}else t.scrollTop=e,console.log("[PST]: Scrolled sidebar using stored browser position...");window.addEventListener("beforeunload",()=>{sessionStorage.setItem("sidebar-scroll-top",t.scrollTop)})})),$((function(){$(window).on("activate.bs.scrollspy",(function(){document.querySelectorAll("#bd-toc-nav a").forEach(t=>{t.parentElement.classList.remove("active")});document.querySelectorAll("#bd-toc-nav a.active").forEach(t=>{t.parentElement.classList.add("active")})}))}))}]); \ No newline at end of file diff --git a/_static/scripts/sphinx-book-theme.js b/_static/scripts/sphinx-book-theme.js new file mode 100644 index 0000000..a8a305e --- /dev/null +++ b/_static/scripts/sphinx-book-theme.js @@ -0,0 +1,2 @@ +!function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";n.r(t);n.p;var o=e=>{"loading"!=document.readyState?e():document.addEventListener?document.addEventListener("DOMContentLoaded",e):document.attachEvent("onreadystatechange",(function(){"complete"==document.readyState&&e()}))};window.initThebeSBT=()=>{var e=$("div.section h1")[0];$(e).next().hasClass("thebe-launch-button")||$("").insertAfter($(e)),initThebe()},window.printPdf=e=>{let t=$(e).attr("aria-describedby"),n=$("#"+t).detach();window.print(),$("body").append(n)},window.toggleFullScreen=()=>{var e=document.fullscreenElement&&null!==document.fullscreenElement||document.webkitFullscreenElement&&null!==document.webkitFullscreenElement;let t=document.documentElement;e?(console.log("[SBT]: Exiting full screen"),document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen&&document.webkitExitFullscreen()):(console.log("[SBT]: Entering full screen"),t.requestFullscreen?t.requestFullscreen():t.webkitRequestFullscreen&&t.webkitRequestFullscreen())},o(()=>{$(document).ready((function(){$('[data-toggle="tooltip"]').tooltip({trigger:"hover",delay:{show:500,hide:100}})}))}),o(()=>{var e=document.getElementById("site-navigation"),t=e.querySelectorAll(".active"),n=t[t.length-1];void 0!==n&&n.offsetTop>.5*$(window).height()&&(e.scrollTop=n.offsetTop-.2*$(window).height())}),o(()=>{var e=[];let t=new IntersectionObserver((t,n)=>{t.forEach(t=>{if(t.isIntersecting)e.push(t.target);else for(let n=0;n0?$("div.bd-toc").removeClass("show"):$("div.bd-toc").addClass("show")});let n=[];["marginnote","sidenote","margin","margin-caption","full-width","sidebar","popout"].forEach(e=>{n.push("."+e,".tag_"+e,"."+e.replace("-","_"),".tag_"+e.replace("-","_"))}),document.querySelectorAll(n.join(", ")).forEach(e=>{t.observe(e)}),new IntersectionObserver((e,t)=>{e[0].boundingClientRect.y<0?document.body.classList.add("scrolled"):document.body.classList.remove("scrolled")}).observe(document.querySelector(".sbt-scroll-pixel-helper"))}),o((function(){new MutationObserver((e,t)=>{e.forEach(e=>{0!==e.addedNodes.length&&void 0!==e.addedNodes[0].data&&-1!=e.addedNodes[0].data.search("Inserted RTD Footer")&&e.addedNodes.forEach(e=>{document.getElementById("rtd-footer-container").append(e)})})}).observe(document.body,{childList:!0})}))}]); +//# sourceMappingURL=sphinx-book-theme.js.map \ No newline at end of file diff --git a/_static/scripts/sphinx-book-theme.js.map b/_static/scripts/sphinx-book-theme.js.map new file mode 100644 index 0000000..dccd768 --- /dev/null +++ b/_static/scripts/sphinx-book-theme.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/sphinx_book_theme/assets/styles/index.scss","webpack:///./src/sphinx_book_theme/assets/scripts/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","sbRunWhenDOMLoaded","cb","document","readyState","addEventListener","attachEvent","window","initThebeSBT","title","$","next","hasClass","insertAfter","initThebe","printPdf","el","tooltipID","attr","tooltipTextDiv","detach","print","append","toggleFullScreen","isInFullScreen","fullscreenElement","webkitFullscreenElement","docElm","documentElement","console","log","exitFullscreen","webkitExitFullscreen","requestFullscreen","webkitRequestFullscreen","ready","tooltip","trigger","delay","show","hide","navbar","getElementById","active_pages","querySelectorAll","active_page","length","undefined","offsetTop","height","scrollTop","onScreenItems","tocObserver","IntersectionObserver","entries","observer","forEach","entry","isIntersecting","push","target","ii","splice","removeClass","addClass","marginSelector","replace","join","observe","boundingClientRect","y","body","classList","add","remove","querySelector","MutationObserver","mutationList","mutation","addedNodes","data","search","node","childList"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,G,sEClFtC,QCSXC,EAAsBC,IACG,WAAvBC,SAASC,WACXF,IACSC,SAASE,iBAClBF,SAASE,iBAAiB,mBAAoBH,GAE9CC,SAASG,YAAY,sBAAsB,WACd,YAAvBH,SAASC,YAA0BF,QAyM7CK,OAAOC,aAjDY,KACjB,IAAIC,EAAQC,EAAE,kBAAkB,GAC3BA,EAAED,GAAOE,OAAOC,SAAS,wBAC5BF,EAAE,iDAAiDG,YAAYH,EAAED,IAEnEK,aA6CFP,OAAOQ,SAhJSC,IAGd,IAAIC,EAAYP,EAAEM,GAAIE,KAAK,oBACvBC,EAAiBT,EAAE,IAAMO,GAAWG,SACxCb,OAAOc,QACPX,EAAE,QAAQY,OAAOH,IA2InBZ,OAAOgB,iBA/LgB,KACrB,IAAIC,EACDrB,SAASsB,mBAAoD,OAA/BtB,SAASsB,mBACvCtB,SAASuB,yBAC6B,OAArCvB,SAASuB,wBACb,IAAIC,EAASxB,SAASyB,gBACjBJ,GAQHK,QAAQC,IAAI,8BACR3B,SAAS4B,eACX5B,SAAS4B,iBACA5B,SAAS6B,sBAClB7B,SAAS6B,yBAXXH,QAAQC,IAAI,+BACRH,EAAOM,kBACTN,EAAOM,oBACEN,EAAOO,yBAChBP,EAAOO,4BAyLbjC,EA7CmB,KACjBS,EAAEP,UAAUgC,OAAM,WAChBzB,EAAE,2BAA2B0B,QAAQ,CACnCC,QAAS,QACTC,MAAO,CAAEC,KAAM,IAAKC,KAAM,YA0ChCvC,EAxKqB,KACnB,IAAIwC,EAAStC,SAASuC,eAAe,mBACjCC,EAAeF,EAAOG,iBAAiB,WACvCC,EAAcF,EAAaA,EAAaG,OAAS,QAGnCC,IAAhBF,GACAA,EAAYG,UAAiC,GAArBtC,EAAEH,QAAQ0C,WAElCR,EAAOS,UAAYL,EAAYG,UAAiC,GAArBtC,EAAEH,QAAQ0C,YAgKzDhD,EAjIkB,KAChB,IAAIkD,EAAgB,GACpB,IAkCIC,EAAc,IAAIC,qBAlCA,CAACC,EAASC,KAE9BD,EAAQE,QAASC,IACf,GAAIA,EAAMC,eAERP,EAAcQ,KAAKF,EAAMG,aAGzB,IAAK,IAAIC,EAAK,EAAGA,EAAKV,EAAcL,OAAQe,IAC1C,GAAIV,EAAcU,KAAQJ,EAAMG,OAAQ,CACtCT,EAAcW,OAAOD,EAAI,GACzB,SAOJV,EAAcL,OAAS,EACzBpC,EAAE,cAAcqD,YAAY,QAE5BrD,EAAE,cAAcsD,SAAS,UAwB7B,IAAIC,EAAiB,GATG,CACtB,aACA,WACA,SACA,iBACA,aACA,UACA,UAGcT,QAASK,IAEvBI,EAAeN,KAEX,IAAIE,EACJ,QAAQA,EACR,IAAIA,EAAGK,QAAQ,IAAK,KACpB,QAAQL,EAAGK,QAAQ,IAAK,QAI9B/D,SAASyC,iBAAiBqB,EAAeE,KAAK,OAAOX,QAASK,IAC5DT,EAAYgB,QAAQP,KAID,IAAIR,qBAtCO,CAACC,EAASC,KAEpCD,EAAQ,GAAGe,mBAAmBC,EAAI,EACpCnE,SAASoE,KAAKC,UAAUC,IAAI,YAE5BtE,SAASoE,KAAKC,UAAUE,OAAO,cAkCpBN,QAAQjE,SAASwE,cAAc,+BAiEhD1E,GApCA,WAkBmB,IAAI2E,iBAjBG,CAACC,EAActB,KACrCsB,EAAarB,QAASsB,IAEe,IAA/BA,EAASC,WAAWjC,aAGYC,IAAhC+B,EAASC,WAAW,GAAGC,OAGuC,GAA9DF,EAASC,WAAW,GAAGC,KAAKC,OAAO,wBACrCH,EAASC,WAAWvB,QAAS0B,IAC3B/E,SAASuC,eAAe,wBAAwBpB,OAAO4D,SAQtDd,QAAQjE,SAASoE,KADX,CAAEY,WAAW","file":"scripts/sphinx-book-theme.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","export default __webpack_public_path__ + \"styles/sphinx-book-theme.css\";","// Import CSS variables\n// ref: https://css-tricks.com/getting-javascript-to-talk-to-css-and-sass/\nimport \"../styles/index.scss\";\n\n/**\n * A helper function to load scripts when the DOM is loaded.\n * This waits for everything to be on the page first before running, since\n * some functionality doesn't behave properly until everything is ready.\n */\nvar sbRunWhenDOMLoaded = (cb) => {\n if (document.readyState != \"loading\") {\n cb();\n } else if (document.addEventListener) {\n document.addEventListener(\"DOMContentLoaded\", cb);\n } else {\n document.attachEvent(\"onreadystatechange\", function () {\n if (document.readyState == \"complete\") cb();\n });\n }\n};\n\n/**\n * Toggle full-screen with button\n *\n * There are some browser-specific hacks in here:\n * - Safari requires a `webkit` prefix, so this uses conditionals to check for that\n * ref: https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API\n */\nvar toggleFullScreen = () => {\n var isInFullScreen =\n (document.fullscreenElement && document.fullscreenElement !== null) ||\n (document.webkitFullscreenElement &&\n document.webkitFullscreenElement !== null);\n let docElm = document.documentElement;\n if (!isInFullScreen) {\n console.log(\"[SBT]: Entering full screen\");\n if (docElm.requestFullscreen) {\n docElm.requestFullscreen();\n } else if (docElm.webkitRequestFullscreen) {\n docElm.webkitRequestFullscreen();\n }\n } else {\n console.log(\"[SBT]: Exiting full screen\");\n if (document.exitFullscreen) {\n document.exitFullscreen();\n } else if (document.webkitExitFullscreen) {\n document.webkitExitFullscreen();\n }\n }\n};\n\n/**\n * Sidebar scroll on load.\n *\n * Detect the active page in the sidebar, and scroll so that it is centered on\n * the screen.\n */\nvar scrollToActive = () => {\n var navbar = document.getElementById(\"site-navigation\");\n var active_pages = navbar.querySelectorAll(\".active\");\n var active_page = active_pages[active_pages.length - 1];\n // Only scroll the navbar if the active link is lower than 50% of the page\n if (\n active_page !== undefined &&\n active_page.offsetTop > $(window).height() * 0.5\n ) {\n navbar.scrollTop = active_page.offsetTop - $(window).height() * 0.2;\n }\n};\n\n/**\n * Called when the \"print to PDF\" button is clicked.\n * This is a hack to prevent tooltips from showing up in the printed PDF.\n */\nvar printPdf = (el) => {\n // Detach the tooltip text from DOM to hide in PDF\n // and then reattach it for HTML\n let tooltipID = $(el).attr(\"aria-describedby\");\n let tooltipTextDiv = $(\"#\" + tooltipID).detach();\n window.print();\n $(\"body\").append(tooltipTextDiv);\n};\n\n/**\n * Manage scrolling behavior. This is primarily two things:\n *\n * 1. Hide the Table of Contents any time sidebar content is on the screen.\n *\n * This will be triggered any time a sidebar item enters or exits the screen.\n * It adds/removes items from an array if they have entered the screen, and\n * removes them when they exit the screen. It hides the TOC if anything is\n * on-screen.\n *\n * ref: https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n *\n * 2. Add a `scrolled` class to to trigger CSS changes.\n */\nvar initTocHide = () => {\n var onScreenItems = [];\n let hideTocCallback = (entries, observer) => {\n // Check whether any sidebar item is displayed\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n // If an element just came on screen, add it our list\n onScreenItems.push(entry.target);\n } else {\n // Otherwise, if it's in our list then remove it\n for (let ii = 0; ii < onScreenItems.length; ii++) {\n if (onScreenItems[ii] === entry.target) {\n onScreenItems.splice(ii, 1);\n break;\n }\n }\n }\n });\n\n // Hide the TOC if any margin content is displayed on the screen\n if (onScreenItems.length > 0) {\n $(\"div.bd-toc\").removeClass(\"show\");\n } else {\n $(\"div.bd-toc\").addClass(\"show\");\n }\n };\n let manageScrolledClassOnBody = (entries, observer) => {\n // The pixel is at the top, so if we're < 0 that it means we've scrolled\n if (entries[0].boundingClientRect.y < 0) {\n document.body.classList.add(\"scrolled\");\n } else {\n document.body.classList.remove(\"scrolled\");\n }\n };\n\n // Set up the intersection observer to watch all margin content\n let tocObserver = new IntersectionObserver(hideTocCallback);\n // TODO: deprecate popout after v0.5.0\n const selectorClasses = [\n \"marginnote\",\n \"sidenote\",\n \"margin\",\n \"margin-caption\",\n \"full-width\",\n \"sidebar\",\n \"popout\",\n ];\n let marginSelector = [];\n selectorClasses.forEach((ii) => {\n // Use three permutations of each class name because `tag_` and `_` used to be supported\n marginSelector.push(\n ...[\n `.${ii}`,\n `.tag_${ii}`,\n `.${ii.replace(\"-\", \"_\")}`,\n `.tag_${ii.replace(\"-\", \"_\")}`,\n ]\n );\n });\n document.querySelectorAll(marginSelector.join(\", \")).forEach((ii) => {\n tocObserver.observe(ii);\n });\n\n // Set up the observer to check if we've scrolled from top of page\n let scrollObserver = new IntersectionObserver(manageScrolledClassOnBody);\n scrollObserver.observe(document.querySelector(\".sbt-scroll-pixel-helper\"));\n};\n\n/**\n * Activate Thebe with a custom button click.\n */\nvar initThebeSBT = () => {\n var title = $(\"div.section h1\")[0];\n if (!$(title).next().hasClass(\"thebe-launch-button\")) {\n $(\"\").insertAfter($(title));\n }\n initThebe();\n};\n\n/**\n * Use Bootstrap helper function to enable tooltips.\n */\nvar initTooltips = () => {\n $(document).ready(function () {\n $('[data-toggle=\"tooltip\"]').tooltip({\n trigger: \"hover\",\n delay: { show: 500, hide: 100 },\n });\n });\n};\n\n/**\n * MutationObserver to move the ReadTheDocs button\n */\nfunction initRTDObserver() {\n const mutatedCallback = (mutationList, observer) => {\n mutationList.forEach((mutation) => {\n // Check whether the mutation is for RTD, which will have a specific structure\n if (mutation.addedNodes.length === 0) {\n return;\n }\n if (mutation.addedNodes[0].data === undefined) {\n return;\n }\n if (mutation.addedNodes[0].data.search(\"Inserted RTD Footer\") != -1) {\n mutation.addedNodes.forEach((node) => {\n document.getElementById(\"rtd-footer-container\").append(node);\n });\n }\n });\n };\n\n const observer = new MutationObserver(mutatedCallback);\n const config = { childList: true };\n observer.observe(document.body, config);\n}\n\n/**\n * Set up callback functions for UI click actions\n */\nwindow.initThebeSBT = initThebeSBT;\nwindow.printPdf = printPdf;\nwindow.toggleFullScreen = toggleFullScreen;\n\n/**\n * Set up functions to load when the DOM is ready\n */\nsbRunWhenDOMLoaded(initTooltips);\nsbRunWhenDOMLoaded(scrollToActive);\nsbRunWhenDOMLoaded(initTocHide);\nsbRunWhenDOMLoaded(initRTDObserver);\n"],"sourceRoot":""} \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 0000000..0a44e85 --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,525 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +if (!Scorer) { + /** + * Simple result scoring code. + */ + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [filename, title, anchor, descr, score] + // and returns the new score. + /* + score: function(result) { + return result[4]; + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: {0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5}, // used to be unimportantResults + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2 + }; +} + +if (!splitQuery) { + function splitQuery(query) { + return query.split(/\s+/); + } +} + +/** + * Search Module + */ +var Search = { + + _index : null, + _queued_query : null, + _pulse_status : -1, + + htmlToText : function(htmlString) { + var virtualDocument = document.implementation.createHTMLDocument('virtual'); + var htmlElement = $(htmlString, virtualDocument); + htmlElement.find('.headerlink').remove(); + docContent = htmlElement.find('[role=main]')[0]; + if(docContent === undefined) { + console.warn("Content block not found. Sphinx search tries to obtain it " + + "via '[role=main]'. Could you check your theme or template."); + return ""; + } + return docContent.textContent || docContent.innerText; + }, + + init : function() { + var params = $.getQueryParameters(); + if (params.q) { + var query = params.q[0]; + $('input[name="q"]')[0].value = query; + this.performSearch(query); + } + }, + + loadIndex : function(url) { + $.ajax({type: "GET", url: url, data: null, + dataType: "script", cache: true, + complete: function(jqxhr, textstatus) { + if (textstatus != "success") { + document.getElementById("searchindexloader").src = url; + } + }}); + }, + + setIndex : function(index) { + var q; + this._index = index; + if ((q = this._queued_query) !== null) { + this._queued_query = null; + Search.query(q); + } + }, + + hasIndex : function() { + return this._index !== null; + }, + + deferQuery : function(query) { + this._queued_query = query; + }, + + stopPulse : function() { + this._pulse_status = 0; + }, + + startPulse : function() { + if (this._pulse_status >= 0) + return; + function pulse() { + var i; + Search._pulse_status = (Search._pulse_status + 1) % 4; + var dotString = ''; + for (i = 0; i < Search._pulse_status; i++) + dotString += '.'; + Search.dots.text(dotString); + if (Search._pulse_status > -1) + window.setTimeout(pulse, 500); + } + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch : function(query) { + // create the required interface elements + this.out = $('#search-results'); + this.title = $('

' + _('Searching') + '

').appendTo(this.out); + this.dots = $('').appendTo(this.title); + this.status = $('

 

').appendTo(this.out); + this.output = $('