From ee976763d51eed3c8f37fb2cc75ed2bf3f3a5a64 Mon Sep 17 00:00:00 2001 From: amalivert Date: Sat, 4 Sep 2021 20:49:04 -0400 Subject: [PATCH 01/29] first commit to main --- README.rst | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 7cccc24..4884aed 100644 --- a/README.rst +++ b/README.rst @@ -2,6 +2,25 @@ The Qubinode Project ******************** +The Qubinode documentation page uses sphinx_rtd_theme to create a web browser for the `Qubinode `__ project. +.. _Qubinode: + +Building the Qubinode documentation page +========================================= + +Required applications to build and configure qubinode documentation +-------------------------------------------------------------------- ++-----------------------------+------------------------------------+ +| applications | web links | ++=============================+====================================+ +| pandoc | _https://pandoc.org/ | ++-----------------------------+------------------------------------+ +| sphinx_rtd_theme | _https://sphinx-rtd-theme.readthedocs.io | ++-----------------------------+-------------------------------------------+ + +Notable files and directories +------------------------------ + * The docsource folder is the build directory + * The docs folder is the publish directory. When you run a build under the docsource directory, all the need artifacts for the web page is copied over to the docs directory + * The -Configuring documentation page -============================== \ No newline at end of file From 3989c4bf1195465fde91b7802e9078de83e2765a Mon Sep 17 00:00:00 2001 From: amalivert Date: Sat, 4 Sep 2021 20:57:01 -0400 Subject: [PATCH 02/29] restructing rst table --- README.rst | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/README.rst b/README.rst index 4884aed..7cf6d9a 100644 --- a/README.rst +++ b/README.rst @@ -3,20 +3,17 @@ The Qubinode Project ******************** The Qubinode documentation page uses sphinx_rtd_theme to create a web browser for the `Qubinode `__ project. -.. _Qubinode: Building the Qubinode documentation page ========================================= Required applications to build and configure qubinode documentation -------------------------------------------------------------------- -+-----------------------------+------------------------------------+ -| applications | web links | -+=============================+====================================+ -| pandoc | _https://pandoc.org/ | -+-----------------------------+------------------------------------+ -| sphinx_rtd_theme | _https://sphinx-rtd-theme.readthedocs.io | -+-----------------------------+-------------------------------------------+ +============== ========== +applications web links +============= ========== +pandoc _https://pandoc.org/ +sphinx_rtd_theme https://sphinx-rtd-theme.readthedocs.io Notable files and directories ------------------------------ From c4e49da03338440bebd9d960a1887a6a1e859c1c Mon Sep 17 00:00:00 2001 From: amalivert Date: Sat, 4 Sep 2021 20:57:59 -0400 Subject: [PATCH 03/29] restructing rst table --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 7cf6d9a..a72e4a9 100644 --- a/README.rst +++ b/README.rst @@ -12,7 +12,7 @@ Required applications to build and configure qubinode documentation ============== ========== applications web links ============= ========== -pandoc _https://pandoc.org/ +pandoc https://pandoc.org/ sphinx_rtd_theme https://sphinx-rtd-theme.readthedocs.io Notable files and directories From 6a209a65f5b7f65bd82ac346dc2439fc9163dedf Mon Sep 17 00:00:00 2001 From: amalivert Date: Sat, 4 Sep 2021 20:59:16 -0400 Subject: [PATCH 04/29] restructing rst table --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index a72e4a9..c86182f 100644 --- a/README.rst +++ b/README.rst @@ -9,12 +9,12 @@ Building the Qubinode documentation page Required applications to build and configure qubinode documentation -------------------------------------------------------------------- -============== ========== +============= ========== applications web links ============= ========== pandoc https://pandoc.org/ sphinx_rtd_theme https://sphinx-rtd-theme.readthedocs.io - +================ ======================================== Notable files and directories ------------------------------ * The docsource folder is the build directory From 4f6da0b1416c8609c5e053da45838055e9307764 Mon Sep 17 00:00:00 2001 From: amalivert Date: Sat, 4 Sep 2021 21:02:54 -0400 Subject: [PATCH 05/29] restructing rst table --- README.rst | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index c86182f..b30ca2c 100644 --- a/README.rst +++ b/README.rst @@ -9,12 +9,14 @@ Building the Qubinode documentation page Required applications to build and configure qubinode documentation -------------------------------------------------------------------- -============= ========== + +================ ======================================== applications web links -============= ========== +================ ======================================== pandoc https://pandoc.org/ sphinx_rtd_theme https://sphinx-rtd-theme.readthedocs.io -================ ======================================== +================ ========================================= + Notable files and directories ------------------------------ * The docsource folder is the build directory From 63a2b1366a24f6206e2bb6b7ab19ccccfb7ddb70 Mon Sep 17 00:00:00 2001 From: amalivert Date: Sat, 4 Sep 2021 21:10:15 -0400 Subject: [PATCH 06/29] restructing rst table --- README.rst | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index b30ca2c..b71cb0b 100644 --- a/README.rst +++ b/README.rst @@ -13,13 +13,21 @@ Required applications to build and configure qubinode documentation ================ ======================================== applications web links ================ ======================================== -pandoc https://pandoc.org/ -sphinx_rtd_theme https://sphinx-rtd-theme.readthedocs.io +pandoc `https://pandoc.org/` +sphinx_rtd_theme `https://sphinx-rtd-theme.readthedocs.io` ================ ========================================= Notable files and directories ------------------------------ * The docsource folder is the build directory - * The docs folder is the publish directory. When you run a build under the docsource directory, all the need artifacts for the web page is copied over to the docs directory - * The + * The docs folder is the publish directory +When you run a build under the docsource directory, all the need artifacts for the web page is copied over to the docs directory + ++------------------+-------------------------------------------+ +| applications | web links | ++------------------+-------------------------------------------+ +| pandoc | `https://pandoc.org/` | ++------------------+-------------------------------------------+ +| sphinx_rtd_theme | `https://sphinx-rtd-theme.readthedocs.io` | ++------------------+-------------------------------------------+ \ No newline at end of file From 75077c6b164c29c753d67be85694f208a9247388 Mon Sep 17 00:00:00 2001 From: amalivert Date: Sat, 4 Sep 2021 21:13:29 -0400 Subject: [PATCH 07/29] restructing rst table --- README.rst | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/README.rst b/README.rst index b71cb0b..0ac14eb 100644 --- a/README.rst +++ b/README.rst @@ -10,12 +10,13 @@ Building the Qubinode documentation page Required applications to build and configure qubinode documentation -------------------------------------------------------------------- -================ ======================================== -applications web links -================ ======================================== -pandoc `https://pandoc.org/` -sphinx_rtd_theme `https://sphinx-rtd-theme.readthedocs.io` -================ ========================================= ++------------------+-------------------------------------------+ +| applications | web links | ++------------------+-------------------------------------------+ +| pandoc | `https://pandoc.org` | ++------------------+-------------------------------------------+ +| sphinx_rtd_theme | `https://sphinx-rtd-theme.readthedocs.io` | ++------------------+-------------------------------------------+ Notable files and directories ------------------------------ @@ -23,11 +24,4 @@ Notable files and directories * The docs folder is the publish directory When you run a build under the docsource directory, all the need artifacts for the web page is copied over to the docs directory - -+------------------+-------------------------------------------+ -| applications | web links | -+------------------+-------------------------------------------+ -| pandoc | `https://pandoc.org/` | -+------------------+-------------------------------------------+ -| sphinx_rtd_theme | `https://sphinx-rtd-theme.readthedocs.io` | -+------------------+-------------------------------------------+ \ No newline at end of file + \ No newline at end of file From 3edffda75e64a7129875b4b051ee9a284edb7a36 Mon Sep 17 00:00:00 2001 From: amalivert Date: Sat, 4 Sep 2021 21:15:01 -0400 Subject: [PATCH 08/29] restructing rst table --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 0ac14eb..eae76ba 100644 --- a/README.rst +++ b/README.rst @@ -12,7 +12,7 @@ Required applications to build and configure qubinode documentation +------------------+-------------------------------------------+ | applications | web links | -+------------------+-------------------------------------------+ ++==================+===========================================+ | pandoc | `https://pandoc.org` | +------------------+-------------------------------------------+ | sphinx_rtd_theme | `https://sphinx-rtd-theme.readthedocs.io` | From b9b816b20428305f853284750fadcb3792085101 Mon Sep 17 00:00:00 2001 From: amalivert Date: Sun, 5 Sep 2021 09:03:05 -0400 Subject: [PATCH 09/29] fixing all issues with rtd-theme --- docsource/Makefile | 27 + docsource/QubinodeFinal.png | Bin 0 -> 206341 bytes .../_build/doctrees/documents/CNAME.doctree | Bin 2189 -> 2468 bytes .../documents/CODE_OF_CONDUCT.doctree | Bin 14754 -> 15043 bytes .../doctrees/documents/CONTRIBUTING.doctree | Bin 29088 -> 29374 bytes .../doctrees/documents/X11SDV-8C-TP8F.doctree | Bin 3717 -> 4005 bytes .../documents/ansible_platform.doctree | Bin 5948 -> 6238 bytes .../doctrees/documents/beginners.doctree | Bin 24019 -> 24302 bytes .../doctrees/documents/communication.doctree | Bin 4623 -> 4910 bytes .../doctrees/documents/hardware_test.doctree | Bin 25507 -> 25794 bytes .../doctrees/documents/hardwareguide.doctree | Bin 64615 -> 64816 bytes .../doctrees/documents/home-assistant.doctree | Bin 19964 -> 20252 bytes .../documents/hw_testing_validation.doctree | Bin 17853 -> 18110 bytes .../_build/doctrees/documents/idm.doctree | Bin 15306 -> 15583 bytes .../_build/doctrees/documents/jig.doctree | Bin 10734 -> 11011 bytes .../documents/ocp4_cluster_ops.doctree | Bin 15613 -> 15903 bytes .../documents/ocp4_custom_deploy.doctree | Bin 16513 -> 16805 bytes .../documents/ocp4_standard_deploy.doctree | Bin 11583 -> 11859 bytes .../openshift4_installation_steps.doctree | Bin 17486 -> 17771 bytes .../documents/openshift4_workloads.doctree | Bin 13648 -> 13942 bytes .../documents/openshift_ldap_config.doctree | Bin 16925 -> 17202 bytes .../documents/qubinode_bootable_usb.doctree | Bin 10643 -> 10938 bytes .../documents/qubinode_dev_branch.doctree | Bin 3540 -> 3824 bytes .../qubinode_satellite_install.doctree | Bin 9779 -> 10061 bytes .../doctrees/documents/releases.doctree | Bin 12981 -> 13263 bytes .../doctrees/documents/rh-workshops.doctree | Bin 8758 -> 9020 bytes .../doctrees/documents/rhel_vms.doctree | Bin 19706 -> 19988 bytes .../subscription_pool_message.doctree | Bin 6065 -> 6373 bytes .../troubleshooting-monitoring.doctree | Bin 11909 -> 12209 bytes docsource/_build/doctrees/environment.pickle | Bin 90687 -> 92000 bytes docsource/_build/doctrees/index.doctree | Bin 3571 -> 4456 bytes docsource/_build/html/.buildinfo | 2 +- docsource/_build/html/_sources/index.rst.txt | 11 +- docsource/_build/html/_static/alabaster.css | 701 + docsource/_build/html/_static/basic.css | 85 +- docsource/_build/html/_static/custom.css | 1 + docsource/_build/html/_static/doctools.js | 2 + docsource/_build/html/_static/jquery-3.5.1.js | 10872 ++++++++++++++++ docsource/_build/html/_static/jquery.js | 10872 +--------------- docsource/_build/html/_static/pygments.css | 124 +- docsource/_build/html/_static/searchtools.js | 2 +- .../_build/html/_static/underscore-1.13.1.js | 2042 +++ docsource/_build/html/_static/underscore.js | 1711 +-- docsource/_build/html/documents/CNAME.html | 16 +- .../html/documents/CODE_OF_CONDUCT.html | 16 +- .../_build/html/documents/CONTRIBUTING.html | 16 +- .../_build/html/documents/X11SDV-8C-TP8F.html | 16 +- .../html/documents/ansible_platform.html | 20 +- .../_build/html/documents/beginners.html | 16 +- .../_build/html/documents/communication.html | 16 +- .../_build/html/documents/hardware_test.html | 16 +- .../_build/html/documents/hardwareguide.html | 16 +- .../_build/html/documents/home-assistant.html | 16 +- .../html/documents/hw_testing_validation.html | 16 +- docsource/_build/html/documents/idm.html | 20 +- docsource/_build/html/documents/jig.html | 16 +- .../html/documents/ocp4_cluster_ops.html | 18 +- .../html/documents/ocp4_custom_deploy.html | 16 +- .../html/documents/ocp4_standard_deploy.html | 16 +- .../openshift4_installation_steps.html | 16 +- .../html/documents/openshift4_workloads.html | 16 +- .../html/documents/openshift_ldap_config.html | 16 +- .../html/documents/qubinode_bootable_usb.html | 16 +- .../html/documents/qubinode_dev_branch.html | 16 +- .../documents/qubinode_satellite_install.html | 16 +- docsource/_build/html/documents/releases.html | 16 +- .../_build/html/documents/rh-workshops.html | 16 +- docsource/_build/html/documents/rhel_vms.html | 16 +- .../documents/subscription_pool_message.html | 16 +- .../documents/troubleshooting-monitoring.html | 16 +- docsource/_build/html/genindex.html | 16 +- docsource/_build/html/index.html | 24 +- docsource/_build/html/objects.inv | Bin 995 -> 1009 bytes docsource/_build/html/search.html | 16 +- docsource/_build/html/searchindex.js | 2 +- docsource/conf.py | 92 + docsource/documents/CNAME.rst | 1 + docsource/documents/CODE_OF_CONDUCT.rst | 87 + docsource/documents/CONTRIBUTING.rst | 245 + docsource/documents/X11SDV-8C-TP8F.rst | 11 + docsource/documents/ansible_platform.rst | 37 + docsource/documents/beginners.rst | 86 + docsource/documents/communication.rst | 21 + docsource/documents/hardware_test.rst | 214 + docsource/documents/hardwareguide.rst | 620 + docsource/documents/home-assistant.rst | 253 + docsource/documents/hw_testing_validation.rst | 73 + docsource/documents/idm.rst | 100 + docsource/documents/jig.rst | 87 + docsource/documents/ocp4_cluster_ops.rst | 155 + docsource/documents/ocp4_custom_deploy.rst | 118 + docsource/documents/ocp4_standard_deploy.rst | 62 + .../openshift4_installation_steps.rst | 158 + docsource/documents/openshift4_workloads.rst | 62 + docsource/documents/openshift_ldap_config.rst | 126 + docsource/documents/qubinode_bootable_usb.rst | 65 + docsource/documents/qubinode_dev_branch.rst | 21 + .../documents/qubinode_satellite_install.rst | 65 + docsource/documents/releases.rst | 60 + docsource/documents/rh-workshops.rst | 43 + docsource/documents/rhel_vms.rst | 293 + .../documents/subscription_pool_message.rst | 33 + .../documents/troubleshooting-monitoring.rst | 121 + docsource/icon.png | Bin 0 -> 312919 bytes docsource/index.rst | 40 + docsource/make.bat | 35 + 106 files changed, 17513 insertions(+), 12823 deletions(-) create mode 100644 docsource/Makefile create mode 100644 docsource/QubinodeFinal.png create mode 100644 docsource/_build/html/_static/alabaster.css create mode 100644 docsource/_build/html/_static/custom.css create mode 100644 docsource/_build/html/_static/jquery-3.5.1.js create mode 100644 docsource/_build/html/_static/underscore-1.13.1.js create mode 100644 docsource/conf.py create mode 100644 docsource/documents/CNAME.rst create mode 100644 docsource/documents/CODE_OF_CONDUCT.rst create mode 100644 docsource/documents/CONTRIBUTING.rst create mode 100644 docsource/documents/X11SDV-8C-TP8F.rst create mode 100644 docsource/documents/ansible_platform.rst create mode 100644 docsource/documents/beginners.rst create mode 100644 docsource/documents/communication.rst create mode 100644 docsource/documents/hardware_test.rst create mode 100644 docsource/documents/hardwareguide.rst create mode 100644 docsource/documents/home-assistant.rst create mode 100644 docsource/documents/hw_testing_validation.rst create mode 100644 docsource/documents/idm.rst create mode 100644 docsource/documents/jig.rst create mode 100644 docsource/documents/ocp4_cluster_ops.rst create mode 100644 docsource/documents/ocp4_custom_deploy.rst create mode 100644 docsource/documents/ocp4_standard_deploy.rst create mode 100644 docsource/documents/openshift4_installation_steps.rst create mode 100644 docsource/documents/openshift4_workloads.rst create mode 100644 docsource/documents/openshift_ldap_config.rst create mode 100644 docsource/documents/qubinode_bootable_usb.rst create mode 100644 docsource/documents/qubinode_dev_branch.rst create mode 100644 docsource/documents/qubinode_satellite_install.rst create mode 100644 docsource/documents/releases.rst create mode 100644 docsource/documents/rh-workshops.rst create mode 100644 docsource/documents/rhel_vms.rst create mode 100644 docsource/documents/subscription_pool_message.rst create mode 100644 docsource/documents/troubleshooting-monitoring.rst create mode 100644 docsource/icon.png create mode 100644 docsource/index.rst create mode 100644 docsource/make.bat diff --git a/docsource/Makefile b/docsource/Makefile new file mode 100644 index 0000000..3a9cfd9 --- /dev/null +++ b/docsource/Makefile @@ -0,0 +1,27 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). + +github: + @make html + @cp -a _build/html/. ../docs + + +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + diff --git a/docsource/QubinodeFinal.png b/docsource/QubinodeFinal.png new file mode 100644 index 0000000000000000000000000000000000000000..9fc59d2108af0123b35ef911a4d8fadf19ad3258 GIT binary patch literal 206341 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%0AsB4^O|0<63N_#-qn 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%0A1`>D+R9doO=WNh%!SyyL)&bv!)d9t757S>Ubk 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

H1lDS^i*{Vlg$C?Pv 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

ax%xvc@ z&bEdA85?+|gGk`mwDv6Ojo7umsAQ2P4OTxb9jqG2Bz{D5{j4?=gxyQvUpKf9KX>D9 zlQXU})-n1}rn8*H9`HPW6zreNixo9~kA(nBMXik;thQ@Pb@+ ze-kSpbM)>ijPo=(CAnYH{1S_t1)70MGv;mdXn1WI`(Jb+Q+E~w=upzj zgDs0RH3QmyL^%iCb-M~7cy^H*`y2E85kDu}yX-xghhP0WGA7$cr_@|YlgkwKZe1K` zo@&r#64m}vW0%hkdw=Sg#|~Uyc`^or1~s4Ph%0DzG^Te;6X6J5d2YV*3~J^h^NCYL rQl5RLZP)Dj687Pa-evOBRxq+8c4@uR2M((k^gZ%E-QQC7P%iyHw%KK3 literal 0 HcmV?d00001 diff --git a/docsource/_build/doctrees/documents/CNAME.doctree b/docsource/_build/doctrees/documents/CNAME.doctree index 55b966894c05027785ebea927e6d30450da206ef..17e937b47a2c4cf587410bdaf236143d1c4291ad 100644 GIT binary patch delta 179 zcmeAbTq4Zcz&dp%=SJ2P4z~=>9=_tr;*!+d_}tXu;>7gSDU+vYHcqLXqLIOx!Ir@u zJ0*h~jW5^}?O0lpA6!yYnp~2ZR%xX$S&h+`zjX>in^?yB$@PpfoTVA68C)4+8Eb$% zS!33m)Uwo^Dc+1dEG3l%sZ)AbJpJ7Kr}VHD=a&{Gr%uUG>tV^s%uAi(%>>f8sx&Ea Iawdlg0Qw_7xBvhE delta 18 ZcmZ1?+$+f1z&f>wVfBKe(i*G`S=*t4P}( zx~w^=WvMw+ycv5~N-7Idr}VIR`nmZ}>0v9*FD*(=osywlnxU1Y%gn$~nv^)X&Qb*c DfEhfY delta 18 acmX?Hx~Q17fpzM1%Z;p+mXqgOsQ>^<83#20 diff --git a/docsource/_build/doctrees/documents/CONTRIBUTING.doctree b/docsource/_build/doctrees/documents/CONTRIBUTING.doctree index abac3b9d012a47ad329db904c85c85e2ee5efe4c..523ff8edf1df2c830d0a049097cb4132aa68886c 100644 GIT binary patch delta 174 zcmZ4Rm~r1zM%D(_shf*7vX&RRWpMWJ6;~FQq~^xwrWO|`rl(GsJVmo{O6?Sl4Au;` z4EES58FpxVv7RKy(vtk(lA_Y&lFYP9D}~AVj3NB3QxMvuvp!D_OqHLUAkM}to%I34 z*6U%-Ni9pwnc~gZ!%|XNkUFJ@#naEte@YKqaeir0a_W=}?a~abtat1T45dkllWPi9 E0Gw|?j{pDw delta 20 ccmdn@lySjhM%D(_sZ$F#vX&Q4o>im*0AJh)uK)l5 diff --git a/docsource/_build/doctrees/documents/X11SDV-8C-TP8F.doctree b/docsource/_build/doctrees/documents/X11SDV-8C-TP8F.doctree index 61dfa9f84bbe6e13109acdb85df7eb951eb2aeea..b8d7f7857aa6e231bb73c4debd8e9a76ad8c04ea 100644 GIT binary patch delta 174 zcmZpbT`JGoz&dpn|3=mrKDP|c9=_tr;*!+d_}tXu;>7gSDU+vYHcqLXqLIOx!Ir@u zJ0*h~jW5`f;#gXeA6!yYnp~2ZR%xX$xtcMIzjX>in^?x3$%4#E%wicgfwYWC4{J_p zS!&J{Z^j;$lFEYADLpKnes2C#df1BdON)|Ir(~%0u;gUsrB3nYDa}yLxL%r+I609| F1pxImJ)8gl delta 18 ZcmZ1~-zv-6z&f>xZzF3A-{eMq6#zDq1$6)b diff --git a/docsource/_build/doctrees/documents/ansible_platform.doctree b/docsource/_build/doctrees/documents/ansible_platform.doctree index 4c930fd08381be9265f9355b224e178e86416f01..cfa238df8185135d64d54c6e26bf9e6793bd5d18 100644 GIT binary patch delta 168 zcmdm^ch7*efpu!I#70(OakmW49=_tr;*!+d_}tXu;>7gSDU+vYHcqLXqLIOx!Ir@u zJ0-&ojW5=d=2%*iA6!yYnp~2ZR%xX$Ih8SjzjX>in{?KL$q#u|nWeMt0%>`@9@d=H zvecX@-i$pgC6xuKQ+ilD{oMSg^sp7@mlh?bPRY z8SJrBGIY`SVmSETmu6^X&1Pj_C{0S7ygpV1 E0G!4>(*OVf delta 20 ccmaF2m+|s$M%D(_sV8DLvaX7qd@4=_0AvRV8~^|S diff --git a/docsource/_build/doctrees/documents/communication.doctree b/docsource/_build/doctrees/documents/communication.doctree index 0d54f396039999d3fee508f77612108dbd271871..e750de5ea15710e7ef1b2dea49bcbf2d83df6144 100644 GIT binary patch delta 174 zcmeBIS*OO@z&ce~cq8jGLAMOf9=_tr;*!+d_}tXu;>7gSDU+vYHcqLXqLIOx!Ir@u zJ0(LGjW5=d>{wcoA6!yYnp~2ZR%xX$*_$y`sC5cLn{<{xBLl-^LuMs5=`0@zQ%0|c zH7B(!HD`)9V-HJ7WkKqc9u`kOH~%R;Y{mJdMaijCGPFxGw6eT_>PwRnC%+a{0RUP` BIqU!c delta 18 ZcmZ3d)~~|az&e#hXd~-0!O2|0DgZVs1wH@( diff --git a/docsource/_build/doctrees/documents/hardware_test.doctree b/docsource/_build/doctrees/documents/hardware_test.doctree index 06eb568c83de3e366e893c7c93fb85d5635dc74b..0274a4ea6987783287236a9f30144d2ffe2ef6d6 100644 GIT binary patch delta 148 zcmZ2{obk{}M%D(_soPUFvQ{MvW^nfK6;~FQq~^xwrWO|`rcch&k&(<`%V3Y4k|EZU z>{wcoA6!yYnp~2ZR%xX$IfOA(pmj>)l-em88LU8M(pehplM}U7SfsO5*(W#J$m_D^ zq?V=TOz~#yVJWFBNS)Hd;_2t+Kc$DQIKQ+gIdw{gc4>xImNGj7LupdtUH||9 diff --git a/docsource/_build/doctrees/documents/hardwareguide.doctree b/docsource/_build/doctrees/documents/hardwareguide.doctree index b79718c00744c1bc2b62c783cfa075c09fe4f590..897f8e4b7c9c5297966227e7993555d6a6c7b5be 100644 GIT binary patch delta 9350 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 delta 9454 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 diff --git a/docsource/_build/doctrees/documents/jig.doctree b/docsource/_build/doctrees/documents/jig.doctree index d253adb6f9535f4794343ab5aa9109facb49d650..7c974d41eb4e57c69947f61219eb6a4eb68c3b4a 100644 GIT binary patch delta 173 zcmaDC+#JT*z&iDZ)<)K&nr<1KJ$%KL#U-h^@wutR#fj;uQzlQ*Y@AX%MI(bXgDrzS zc1ngW8egm@(y_E8Ke(i*G`S=*t^<>IbR- diff --git a/docsource/_build/doctrees/documents/ocp4_cluster_ops.doctree b/docsource/_build/doctrees/documents/ocp4_cluster_ops.doctree index 5e03ff81d06d5475535e57baf1336b8257f0366a..2582242d0ad26a1b6161891f7c262925e3b39072 100644 GIT binary patch delta 168 zcmexcIlqRrfpw~g-A2|cHf|Z5J$%KL#U-h^@wutR#fj;uQzlQ*Y@AX%MI(bXgDrzS zc1ngW8egm@&9Ss3Ke(i*G`S=*tzNZ)ZF;o)Z*gA^wcSnr)V}#shy&c!J5IA z!5%v$Ll=!N)|25_T9O}JQdF8;l9^U%r7$_4F-oX)3PPK7)<0$jhRKP_N-WY@znLeW zS69%RhR}fik@yFw1=Vx(Ugz8^WJNFMa(;Y%obNp=iS<$Q74zcJmSyvx z4FWb3$hHrHmlYLppIiyu_EzSCN&7t}!Y;=GYlmfzAASY|OBapw!;HfNn-0MwVhYS( ztx;IZZLTo&88`B3F7ldKeg1^ptVYX+89R;~LGv@@A5fn<=NKD+4tKOPhJYBUh9TpQ z3Jrw!$u4!t-NJ-RdUjDWGzDdqpGz01RGd_J1x%o)Dv!wSZo4bS%3%hWMcD#ud4j?% z9e)$7-cI{0CAuvUC8l7+n-*T_6E9IA0;?v$9-$T$aS1d(2aYNyn^zmEB1~Aa^aJ+UYkk)}&G5k!XJ}1g8QuhL8cQ4lmpfbhA!uhlN8V-(PUTZNGE3f~)ZT z$PmJ+b{}M@gD7FN?oG*2p$+{;N#5xQ2;q^Kor9p63DT5+S$hY%ZeI*yxNjHaS7O zHca8W_=9c0*S+n%yrfW;ozCW@^jKQTW>cpm1(ZLph)4d)D++Q?K9?EFP3FgQr%z5F z2*5QqYQL`hK0cq^VT7$fEuMhI)Z*^F`a328t2YO>dZKE6U9yCDizi^SNhl}L7Tw9?kecRA0QYE?j33oLAwb0Sai<43NC7Mc+YvC=Q+nT z!EdSpgSggw$eke|_WGmvyScG7$t(~qaZsd1csN#?GJ34={?h=bh!)3_svC6cS<8I@ z9TR?S-v|+gxls}){F>6`bPZUhKMTrDC%bNYDC3{NCwPq82gcy(jt38p2am%NWg0xh z&0t(va3~f06+Ggb=frW6rWR!!YAY)14&ptDW^moDBr<%(MeBO1{*sqjyVv51dCHRY>A_`(Famk6Ktnym2@QR6LvjCZUg zQpO(3jOPZl+(^5zGuQ?z+6&f2Sf}2L)@WD*Z=*!@kkKIFN-$O5M@L1%kHOgPLN>70 zkq-Z_70*((k`Wh3DOQN_Lq$4Cvos|F6{$`&@0vS1sYp51Bzz~%s^iizhIiQCVF-Vy zaW|95vC6BhA7EX;l|(B}MqhjLj>$<0HQ!;#;c%=7m+?((OuD)&^PYozWi2NfT~M`NbroC$X-$vZS|y0_lEXD#>nw+}oSxzEg2QtP zrHXeZUo6a(uM}qasSW1oHb=Mdx{cLKLgiZ)6b+7AfF*4;{xr6lkz?H^N^v{=9csAM J(~nv<@fSFq@YMhS diff --git a/docsource/_build/doctrees/documents/openshift4_installation_steps.doctree b/docsource/_build/doctrees/documents/openshift4_installation_steps.doctree index 2ef405f8256f3b597446e92291b26205c5db9cd5..b121ac50a5319420fef4ac923fa29e523c7e4116 100644 GIT binary patch delta 655 zcmX@t!T7q1k+p$!YJ%%V)>%fA9gJ8eZ#BBiag>>XAwxRr@Z<@`hKvU$A2P0$y#^9u zkDZc{t=TxGc8W#@YZhEcZ1Q~*jma%0CXBZyD;mj9zG33ecmv2%n*3jflXV)@iGgKupt$_xm1bUyf8d&@19kiW@z^1nnJ4cv zlAJtGOJH)Dxd_l{-R9>w3|PRf)tj7XVaTXGd9p<=qupdi%U~u4h>4|^{!BJ3lMM~D zCV#MG0jl_FxtTF?@=7Z`fpCyknGEd=S?_s3o3uASx2k34UI`TK;Y%$l$}gI1XeYe6 z$IXK_4{Vwr*d)Kw3xAg zr1iko%Y$qNTWTQ;Ule(^IER zo&t;13^s5i>!R_+dWs!OOY(zDib|79GSe!p6eiDPOciLI0!<4*ZPHnMtiUiR)>%e^J*&9e9lT^mLlNF8RCm%EMXS@YuDNX*b z!^t`gsQVg-$Cj}G$h^^K_t& zUmzYkL^Jc`HAa$?=V=K{PB9k&x~9_n9ETCeEa@zR$^I6GjJlH>EpizhCcn1`W^#g< zm~83KWXCeu&_IiI4p5!$p;wE5V4*KNUQ-7`+-4`wFg9Kfh5#HL>Y)E1`?$`oOy}4 zsU?*Ksl}jh%4(Zj=p?QRGRF^Wh96kJA6Ty+Sf5{Mh5|@s^W?Qo(t2RawukDga1)jduV5 diff --git a/docsource/_build/doctrees/documents/openshift4_workloads.doctree b/docsource/_build/doctrees/documents/openshift4_workloads.doctree index ab244349e15ce3c72e1db062d378a5cd3ebc9449..e6a9359d8d63599d613a0b5e3e54e618372baa04 100644 GIT binary patch delta 172 zcmcbR^(}|Bfpu!O*+y1%Q@0Gx9=_tr;*!+d_}tXu;>7gSDU+vYHcqLXqLIOx!Ir@u zJ0(LGjW5=d8t_}Q%E5-01JssI2K CcRUvW delta 18 ZcmeyCb0Lehfpw~@=|)y{)5$?*Dga3+28RFu diff --git a/docsource/_build/doctrees/documents/openshift_ldap_config.doctree b/docsource/_build/doctrees/documents/openshift_ldap_config.doctree index ce2b369ea8dea6e968ef6d33c1188cc303b0c989..6c639a4f473a86edef1594aa3f9f6438f65c8f0a 100644 GIT binary patch delta 144 zcmbQ+!nmo8k+p$!s=D(=)-R4`Suv~(44REoYNu#qux7Aju*Xix$VB6d^<+DimgEPQ z6qP2IWTsVGDNN2}j1_2|g3u^c5P&%s&Xnqe{aeir0 Xa_W=}?a~abtZ1N6X;R|kpN=X3sMRmX delta 20 bcmdng#yGcyk+p$!s*ux0)-R5e`J7b%O7jN7 diff --git a/docsource/_build/doctrees/documents/qubinode_bootable_usb.doctree b/docsource/_build/doctrees/documents/qubinode_bootable_usb.doctree index e2514fb2075953479904cd5f709d62a6e09547bc..4320c3e50485047713418e74d85604bedd46e300 100644 GIT binary patch delta 170 zcmbOnyepKofpzM7t&OZ%nr<1KJ$%KL#U-h^@wutR#fj;uQzlQ*Y@AX%MI(bXgDrzS zc1ngn8egm@+p)AHKe(i*G`S=*tGiPY zq?V=TOz~#yVJWFBNS)Hd;_2t+Kc$DQIKQ+gIdw{gc4>xI)+r_ihSH?O$@!Wp0NBet AAOHXW delta 18 ZcmdlLIysoNfpuz!=0?^m&B@cWQ~*MJ28I9t diff --git a/docsource/_build/doctrees/documents/qubinode_dev_branch.doctree b/docsource/_build/doctrees/documents/qubinode_dev_branch.doctree index 29584e8c40b08c9174ec477810bffc0180c0a8b3..45b0f514f4c6b48c19f7dff4b5b8adf62bc91ba6 100644 GIT binary patch delta 170 zcmca2{Xv$sfpzLrzKyJ_dEGKNd-#egi%U{-<8xDsixbmRr%axr**K+kibe)&23rPu z?34^$G`?6*rekSIesD=qX>v(sTBVi3&bS5S z$!f9Yq?V=TOz~#yVJWFBNS)Hd;_2t+Kc$DQIKQ+gIdw{gHc0)A(xk-68+cU!8FoJf delta 18 acmew$dqtYHfpzLh-i@rQc_*LYQvm=*N(S)& diff --git a/docsource/_build/doctrees/documents/qubinode_satellite_install.doctree b/docsource/_build/doctrees/documents/qubinode_satellite_install.doctree index fd3dd48d588efd1c5e3e82b7daea44366c3a9f55..beddd1efe5c52792fe37436add455a7784301c98 100644 GIT binary patch delta 129 zcmdn&bJmZwfpw~r`bJhRHM1;7CI$x0#woQ^G%{E-*fQ8-r)21&@x^)y97{{`gG-7^ zlS?wwDyx7mlafpw~e+D29`waJ?5DgZru1$6)b diff --git a/docsource/_build/doctrees/documents/releases.doctree b/docsource/_build/doctrees/documents/releases.doctree index 36f3fe6a4ef52a4b34708d19f3e0e9722f273b14..968dca5f97c7088b9bacd445c9d86659ea4083ca 100644 GIT binary patch delta 172 zcmdm*dOn@CfpzK;mDv0;q_duam~whO ztU0M=sX0@;8GBetDhpDl^sspPx%p4&VJprrElN(ElA&Fip_TQRiGiUsDRJ^dBNYIv C8a{>q delta 18 acmX?~zBQG#fpzLCqm8URMw3??s{jB?MF&*? diff --git a/docsource/_build/doctrees/documents/rh-workshops.doctree b/docsource/_build/doctrees/documents/rh-workshops.doctree index b45d5f1e6fc4e250cba0bd04926bb62b6f7dd364..e7ab60310e8d5632c41a54b0bd49b74ddf07ba42 100644 GIT binary patch delta 1615 zcmai!+fNfg6o*;LR?2p1%e6>LTObInU>XVWk{C6J8l)s%;zJ>%B`d=UqHWj613^qQ zM%P4hmKYP`B}U&(gA(x)UW_Q=4^UJH5)&VN@~&rQw@?}hFK74sX68F*&Y77<%}-nS zv;1hV>LLHY1ZTyZGan)4q%*n4d?uUggy*^b;xKWM0CBfkaKK79 zVp5`{1AgbmZ6nkpt`KpDP>aH_CB|JsPzBiYaz#}kenM#@N>l>Q>0Tn)R*;V7^>BCL zMcxtaK3o&M{5>4KP5-zsgoSSY8Tu2TS{t}=_$rL@Gw4qdm3gLo#J^cRR}uh+%>(a6hxpdm7o9f+KgA2kKbJowsHAJ3m6uuPro#d~ag(^KDsV>lxSYT7(DeS`C!sEgfop_lpW?i^Q zh2<_(|Gx`zQDxd5Z^8AVTH%(Cx;l_#(dKZGl^=ZH{=q=tXjOoC~ znZOMQOs)mYFA1apr=htdC`{|XnM`0U0$&@VhnDX@8K#aL_)5#{^e~d;Q@8-m(v8A` zPG8KV*CBA;5WCi(tLB6I_8jnT(J~_ZpllknWNF5E&A1yf8!VT9Wd`nCnw7OWOF^qC$8J3;a#{| z-a*Y)YMQ7qV~Vngn)B40qb5iP8qg@JbeEDCIFyJf-HF~~gWJ3?$Q>?NY70&)m)~F}w1l}~bY4*h-~W2PPdY92X|0@^ jLpP?WIr~E`?V4(i4=Ay2Nh1Ngvhquuu0$hHP+9#CPAJwS delta 1416 zcmaKs?MqW}6vzE--n@I>oZDR6bem@CQWGmA2`nEdtXYxJ8=e<`9MWcFJzP?MelmiMEnCPOcAmE0wb*R`&~D8LH6cw&-b3+=RDl=yB{0h*9&)q ziGY7jc%imLgiv2k_dqm~)!B756z&_2y;l2GqzhIw9{45H8#}0rwui4!`{i(gqFMZZZpRwJqc&hPh!%pD8@YsOf}XMA`&supv#~j`uZ{LkAelHn~jzo*8K=;wCR(x26CR3iSEg?%j7&aA( zJ{eO0Q>KDsU3m!3XNm)BlH3Y78{aBu&9y10YG^Sxiq$gexB``rfMaP<28$;J)eJ{1 z1!A*|x}ZRL5p^yt>Z_$jlWY)9W|u)t_6bpvVN?P0A*_=r0&fwBv(zOKjFePp*h(Y@ z&xWCc{nl$Z_=vSvd?Mo>@xhNXXLs<0dk?-P$Dh*T6x_`z7N=y)jH0R{%=I+c;-msD z58iDnOF_-UC0ms^FQYyvPzMq9E-h-y7Dz!YL500iT#`}C3RE$o7MYUIX0=CEiJbzy z!)a#QMw4GbS_ie`khm^$Hx%3wq^+ebaoS<8*hT$i5JtC0_FX*PaMoKLy&v7#a*4lm zN!yAHrI_JQ+6?D&y(vSm!mZpQja9|3mQ4lICciOpSp&$jaEY(XWSW&>pK%=Oob6;G zHtXD0k)GI$`V+D#%X+!_>=SSOTi&bh^ONG|sttiTx)y7|UDqZjl@C#did93kv@O(P*Qu diff --git a/docsource/_build/doctrees/documents/rhel_vms.doctree b/docsource/_build/doctrees/documents/rhel_vms.doctree index b09e02ab7ceae8a1051facd5c0b1ae22a86228f6..37f830c48f2e1df005028cea3545378102838ed3 100644 GIT binary patch delta 171 zcmex0lX1!%M%D(_shoZrSugsyWpMWJ6;~FQq~^xwrWO|`rl(GsJVmo{O6?Sl4Au;` z4EES58MTq1Gt~ZDLtvj0_Bu71$IwxH81DiXj{s z^B&fm)Uwo^Dc+1dEG3l%sZ)AbJpJ7Kr}VHD=a&{Gr%uUG>tV^s%uAi(tyG$!npFtY MSeleLxmR2T0G_5kod5s; delta 18 acmaEAxKW?AfpzLK@r|q<;*$?br~m*&BL=tt diff --git a/docsource/_build/doctrees/documents/troubleshooting-monitoring.doctree b/docsource/_build/doctrees/documents/troubleshooting-monitoring.doctree index 3c826d1c3a4e1e7001d17bf91d73bbaa03981581..4eef65825dd1120e891c7c9124012392cff7a449 100644 GIT binary patch delta 176 zcmZpT-5Af>z&drA{zldqJ+}7gSDU+vYHcqLXqLIOx!Ir@u zJ0(LGjW5z&f=`ZzF4r-sE0=6#zkx25kTU diff --git a/docsource/_build/doctrees/environment.pickle b/docsource/_build/doctrees/environment.pickle index 71c52933107396179e647753caa3bd7d8db91319..71f21e9307a4bd9d826160c4febab2bde187d280 100644 GIT binary patch literal 92000 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 diff --git a/docsource/_build/doctrees/index.doctree b/docsource/_build/doctrees/index.doctree index 61f3b78f1cd84e2dbac90c1082b8f2b33dee604c..663d67a541d2093e962f29cecb688d8acf9f6b81 100644 GIT binary patch delta 1377 zcmcIk&rcIU7-faFv;hnrFi4a^C@nwQlmAdAc)WR~P-3bXk_?y*nux%^Bvv0{5f zrxu|V>Ifph;3u2}OL0slm{}*nCUx6$iD_&YR&|<`JwXgXIM|+9AxLd9EGD7bSes!X z2P3X+3$iL~UAT;`l8WInT^O4zs~}cV5SLy4659@i-k88^^!Ya>a9_2ogQ$!;)D8WF z94)$GYj0II#aUSaT#asCR3h_30k#ijVVaL0Ca)|oifVN z1Ox`l+KXP;xZn_Mbw=zTMCYg z90u`!1XGQ#J;T}(j$9wF-A~L0-V-RH_5gCCU3sxO^HcHK%g$%?zbaD`4rbB-u9lcJ$sKXx7paIy?-_`#vA<(_8+G1s(%0y~*c5Ho~S#m7+tf8#`UDl!z_3u5L7= zc@X2wDOld0QLR<3Ns$U@7Xmu-=gB=4T(JMQoIfdZ9{*%hZ& zBqGQBH&$7`PQheBlhT@1aHuqwJf>PDp7U+bIZUJGRoT2H0%61u@+1&v`}|=#ozQSd@aK?tWTJ4O%k?$@+6+Fdw#R4ibC%L8-5P zAKH(V^o?d3y>VD5l9J3X^>ZcccJ)_9>AJazEk#MXtq^>R9kgwxdsWhUwO=zjIU7bp PppB5Lg_jh55J`LiY0JD~ diff --git a/docsource/_build/html/.buildinfo b/docsource/_build/html/.buildinfo index 8640403..64c6ab9 100644 --- a/docsource/_build/html/.buildinfo +++ b/docsource/_build/html/.buildinfo @@ -1,4 +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: 0142de1d02fda9b001af6b68285781aa +config: d4aad98f01e6453428bce1cf2bc18cc3 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docsource/_build/html/_sources/index.rst.txt b/docsource/_build/html/_sources/index.rst.txt index a6788e5..bf312ed 100644 --- a/docsource/_build/html/_sources/index.rst.txt +++ b/docsource/_build/html/_sources/index.rst.txt @@ -1,5 +1,11 @@ -The Qubinode project -=================================== +.. Qubinode documentation master file, created by + sphinx-quickstart on Sat Sep 4 21:42:06 2021. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Qubinode's documentation! +==================================== + .. toctree:: :maxdepth: 2 :caption: Contents: @@ -31,3 +37,4 @@ The Qubinode project documents/subscription_pool_message documents/troubleshooting-monitoring documents/X11SDV-8C-TP8F + diff --git a/docsource/_build/html/_static/alabaster.css b/docsource/_build/html/_static/alabaster.css new file mode 100644 index 0000000..0eddaeb --- /dev/null +++ b/docsource/_build/html/_static/alabaster.css @@ -0,0 +1,701 @@ +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +body { + font-family: Georgia, serif; + font-size: 17px; + background-color: #fff; + color: #000; + margin: 0; + padding: 0; +} + + +div.document { + width: 940px; + margin: 30px auto 0 auto; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 220px; +} + +div.sphinxsidebar { + width: 220px; + font-size: 14px; + line-height: 1.5; +} + +hr { + border: 1px solid #B1B4B6; +} + +div.body { + background-color: #fff; + color: #3E4349; + padding: 0 30px 0 30px; +} + +div.body > .section { + text-align: left; +} + +div.footer { + width: 940px; + margin: 20px auto 30px auto; + font-size: 14px; + color: #888; + text-align: right; +} + +div.footer a { + color: #888; +} + +p.caption { + font-family: inherit; + font-size: inherit; +} + + +div.relations { + display: none; +} + + +div.sphinxsidebar a { + color: #444; + text-decoration: none; + border-bottom: 1px dotted #999; +} + +div.sphinxsidebar a:hover { + border-bottom: 1px solid #999; +} + +div.sphinxsidebarwrapper { + padding: 18px 10px; +} + +div.sphinxsidebarwrapper p.logo { + padding: 0; + margin: -10px 0 0 0px; + text-align: center; +} + +div.sphinxsidebarwrapper h1.logo { + margin-top: -10px; + text-align: center; + margin-bottom: 5px; + text-align: left; +} + +div.sphinxsidebarwrapper h1.logo-name { + margin-top: 0px; +} + +div.sphinxsidebarwrapper p.blurb { + margin-top: 0; + font-style: normal; +} + +div.sphinxsidebar h3, +div.sphinxsidebar h4 { + font-family: Georgia, serif; + color: #444; + font-size: 24px; + font-weight: normal; + margin: 0 0 5px 0; + padding: 0; +} + +div.sphinxsidebar h4 { + font-size: 20px; +} + +div.sphinxsidebar h3 a { + color: #444; +} + +div.sphinxsidebar p.logo a, +div.sphinxsidebar h3 a, +div.sphinxsidebar p.logo a:hover, +div.sphinxsidebar h3 a:hover { + border: none; +} + +div.sphinxsidebar p { + color: #555; + margin: 10px 0; +} + +div.sphinxsidebar ul { + margin: 10px 0; + padding: 0; + color: #000; +} + +div.sphinxsidebar ul li.toctree-l1 > a { + font-size: 120%; +} + +div.sphinxsidebar ul li.toctree-l2 > a { + font-size: 110%; +} + +div.sphinxsidebar input { + border: 1px solid #CCC; + font-family: Georgia, serif; + font-size: 1em; +} + +div.sphinxsidebar hr { + border: none; + height: 1px; + color: #AAA; + background: #AAA; + + text-align: left; + margin-left: 0; + width: 50%; +} + +div.sphinxsidebar .badge { + border-bottom: none; +} + +div.sphinxsidebar .badge:hover { + border-bottom: none; +} + +/* To address an issue with donation coming after search */ +div.sphinxsidebar h3.donation { + margin-top: 10px; +} + +/* -- body styles ----------------------------------------------------------- */ + +a { + color: #004B6B; + text-decoration: underline; +} + +a:hover { + color: #6D4100; + text-decoration: underline; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Georgia, serif; + font-weight: normal; + margin: 30px 0px 10px 0px; + padding: 0; +} + +div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; } +div.body h2 { font-size: 180%; } +div.body h3 { font-size: 150%; } +div.body h4 { font-size: 130%; } +div.body h5 { font-size: 100%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #DDD; + padding: 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + color: #444; + background: #EAEAEA; +} + +div.body p, div.body dd, div.body li { + line-height: 1.4em; +} + +div.admonition { + margin: 20px 0px; + padding: 10px 30px; + background-color: #EEE; + border: 1px solid #CCC; +} + +div.admonition tt.xref, div.admonition code.xref, div.admonition a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fafafa; +} + +div.admonition p.admonition-title { + font-family: Georgia, serif; + font-weight: normal; + font-size: 24px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; +} + +div.admonition p.last { + margin-bottom: 0; +} + +div.highlight { + background-color: #fff; +} + +dt:target, .highlight { + background: #FAF3E8; +} + +div.warning { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.danger { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.error { + background-color: #FCC; + border: 1px solid #FAA; + -moz-box-shadow: 2px 2px 4px #D52C2C; + -webkit-box-shadow: 2px 2px 4px #D52C2C; + box-shadow: 2px 2px 4px #D52C2C; +} + +div.caution { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.attention { + background-color: #FCC; + border: 1px solid #FAA; +} + +div.important { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.note { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.tip { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.hint { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.seealso { + background-color: #EEE; + border: 1px solid #CCC; +} + +div.topic { + background-color: #EEE; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre, tt, code { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 0.9em; +} + +.hll { + background-color: #FFC; + margin: 0 -12px; + padding: 0 12px; + display: block; +} + +img.screenshot { +} + +tt.descname, tt.descclassname, code.descname, code.descclassname { + font-size: 0.95em; +} + +tt.descname, code.descname { + padding-right: 0.08em; +} + +img.screenshot { + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils { + border: 1px solid #888; + -moz-box-shadow: 2px 2px 4px #EEE; + -webkit-box-shadow: 2px 2px 4px #EEE; + box-shadow: 2px 2px 4px #EEE; +} + +table.docutils td, table.docutils th { + border: 1px solid #888; + padding: 0.25em 0.7em; +} + +table.field-list, table.footnote { + border: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +table.footnote { + margin: 15px 0; + width: 100%; + border: 1px solid #EEE; + background: #FDFDFD; + font-size: 0.9em; +} + +table.footnote + table.footnote { + margin-top: -15px; + border-top: none; +} + +table.field-list th { + padding: 0 0.8em 0 0; +} + +table.field-list td { + padding: 0; +} + +table.field-list p { + margin-bottom: 0.8em; +} + +/* Cloned from + * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68 + */ +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +table.footnote td.label { + width: .1px; + padding: 0.3em 0 0.3em 0.5em; +} + +table.footnote td { + padding: 0.3em 0.5em; +} + +dl { + margin: 0; + padding: 0; +} + +dl dd { + margin-left: 30px; +} + +blockquote { + margin: 0 0 0 30px; + padding: 0; +} + +ul, ol { + /* Matches the 30px from the narrow-screen "li > ul" selector below */ + margin: 10px 0 10px 30px; + padding: 0; +} + +pre { + background: #EEE; + padding: 7px 30px; + margin: 15px 0px; + line-height: 1.3em; +} + +div.viewcode-block:target { + background: #ffd; +} + +dl pre, blockquote pre, li pre { + margin-left: 0; + padding-left: 30px; +} + +tt, code { + background-color: #ecf0f3; + color: #222; + /* padding: 1px 2px; */ +} + +tt.xref, code.xref, a tt { + background-color: #FBFBFB; + border-bottom: 1px solid #fff; +} + +a.reference { + text-decoration: none; + border-bottom: 1px dotted #004B6B; +} + +/* Don't put an underline on images */ +a.image-reference, a.image-reference:hover { + border-bottom: none; +} + +a.reference:hover { + border-bottom: 1px solid #6D4100; +} + +a.footnote-reference { + text-decoration: none; + font-size: 0.7em; + vertical-align: top; + border-bottom: 1px dotted #004B6B; +} + +a.footnote-reference:hover { + border-bottom: 1px solid #6D4100; +} + +a:hover tt, a:hover code { + background: #EEE; +} + + +@media screen and (max-width: 870px) { + + div.sphinxsidebar { + display: none; + } + + div.document { + width: 100%; + + } + + div.documentwrapper { + margin-left: 0; + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + } + + div.bodywrapper { + margin-top: 0; + margin-right: 0; + margin-bottom: 0; + margin-left: 0; + } + + ul { + margin-left: 0; + } + + li > ul { + /* Matches the 30px from the "ul, ol" selector above */ + margin-left: 30px; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .bodywrapper { + margin: 0; + } + + .footer { + width: auto; + } + + .github { + display: none; + } + + + +} + + + +@media screen and (max-width: 875px) { + + body { + margin: 0; + padding: 20px 30px; + } + + div.documentwrapper { + float: none; + background: #fff; + } + + div.sphinxsidebar { + display: block; + float: none; + width: 102.5%; + margin: 50px -30px -20px -30px; + padding: 10px 20px; + background: #333; + color: #FFF; + } + + div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, + div.sphinxsidebar h3 a { + color: #fff; + } + + div.sphinxsidebar a { + color: #AAA; + } + + div.sphinxsidebar p.logo { + display: none; + } + + div.document { + width: 100%; + margin: 0; + } + + div.footer { + display: none; + } + + div.bodywrapper { + margin: 0; + } + + div.body { + min-height: 0; + padding: 0; + } + + .rtd_doc_footer { + display: none; + } + + .document { + width: auto; + } + + .footer { + width: auto; + } + + .footer { + width: auto; + } + + .github { + display: none; + } +} + + +/* misc. */ + +.revsys-inline { + display: none!important; +} + +/* Make nested-list/multi-paragraph items look better in Releases changelog + * pages. Without this, docutils' magical list fuckery causes inconsistent + * formatting between different release sub-lists. + */ +div#changelog > div.section > ul > li > p:only-child { + margin-bottom: 0; +} + +/* Hide fugly table cell borders in ..bibliography:: directive output */ +table.docutils.citation, table.docutils.citation td, table.docutils.citation th { + border: none; + /* Below needed in some edge cases; if not applied, bottom shadows appear */ + -moz-box-shadow: none; + -webkit-box-shadow: none; + box-shadow: none; +} + + +/* relbar */ + +.related { + line-height: 30px; + width: 100%; + font-size: 0.9rem; +} + +.related.top { + border-bottom: 1px solid #EEE; + margin-bottom: 20px; +} + +.related.bottom { + border-top: 1px solid #EEE; +} + +.related ul { + padding: 0; + margin: 0; + list-style: none; +} + +.related li { + display: inline; +} + +nav#rellinks { + float: right; +} + +nav#rellinks li+li:before { + content: "|"; +} + +nav#breadcrumbs li+li:before { + content: "\00BB"; +} + +/* Hide certain items when printing */ +@media print { + div.related { + display: none; + } +} \ No newline at end of file diff --git a/docsource/_build/html/_static/basic.css b/docsource/_build/html/_static/basic.css index b3bdc00..912859b 100644 --- a/docsource/_build/html/_static/basic.css +++ b/docsource/_build/html/_static/basic.css @@ -130,7 +130,7 @@ ul.search li a { font-weight: bold; } -ul.search li div.context { +ul.search li p.context { color: #888; margin: 2px 0 0 30px; text-align: left; @@ -508,6 +508,63 @@ 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 ----------------------------------------------------- */ @@ -634,14 +691,6 @@ dl.glossary dt { font-size: 1.1em; } -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - .versionmodified { font-style: italic; } @@ -770,8 +819,12 @@ div.code-block-caption code { table.highlighttable td.linenos, span.linenos, -div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; +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 { @@ -786,16 +839,6 @@ div.literal-block-wrapper { margin: 1em 0; } -code.descname { - background-color: transparent; - font-weight: bold; - font-size: 1.2em; -} - -code.descclassname { - background-color: transparent; -} - code.xref, a code { background-color: transparent; font-weight: bold; diff --git a/docsource/_build/html/_static/custom.css b/docsource/_build/html/_static/custom.css new file mode 100644 index 0000000..2a924f1 --- /dev/null +++ b/docsource/_build/html/_static/custom.css @@ -0,0 +1 @@ +/* This file intentionally left blank. */ diff --git a/docsource/_build/html/_static/doctools.js b/docsource/_build/html/_static/doctools.js index 61ac9d2..8cbf1b1 100644 --- a/docsource/_build/html/_static/doctools.js +++ b/docsource/_build/html/_static/doctools.js @@ -301,12 +301,14 @@ var Documentation = { window.location.href = prevHref; return false; } + break; case 39: // right var nextHref = $('link[rel="next"]').prop('href'); if (nextHref) { window.location.href = nextHref; return false; } + break; } } }); diff --git a/docsource/_build/html/_static/jquery-3.5.1.js b/docsource/_build/html/_static/jquery-3.5.1.js new file mode 100644 index 0000000..5093733 --- /dev/null +++ b/docsource/_build/html/_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( " + @@ -55,7 +58,7 @@ - + Qubinode @@ -65,6 +68,9 @@ + + +
@@ -86,7 +92,7 @@ -

Contents:

+

Contents: