From c88e23c1cc65ebd31e49f3a492a0e8ec4a316c4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Sun, 1 Oct 2023 16:18:06 +0000 Subject: [PATCH] deploy: f2b495b3ecaa8ee22ecbc0c544acc473036ff229 --- _preview/88/.buildinfo | 4 + _preview/88/_images/LEAP_knowledge_graph.png | Bin 0 -> 103274 bytes _preview/88/_images/email_org_invite.png | Bin 0 -> 133845 bytes _preview/88/_images/gh_org_invite_1.png | Bin 0 -> 72056 bytes _preview/88/_images/gh_org_invite_2.png | Bin 0 -> 66258 bytes ...-main.c949a650a448cc0ae9fd3441c0e17fb0.css | 1 + ...ables.06eb56fa6e07937060861dad626602ad.css | 7 + _preview/88/_sources/contact.md | 5 + _preview/88/_sources/guides/education.md | 29 + _preview/88/_sources/how_to_cite.md | 18 + _preview/88/_sources/intro.md | 15 + .../88/_sources/leap-pangeo/architecture.md | 200 + .../88/_sources/leap-pangeo/implementation.md | 125 + .../88/_sources/leap-pangeo/jupyterhub.md | 397 + _preview/88/_sources/leap-pangeo/solutions.md | 30 + _preview/88/_sources/policies/code_policy.md | 1 + _preview/88/_sources/policies/data_policy.md | 1 + .../policies/infrastructure_policy.md | 1 + _preview/88/_sources/policies/users_roles.md | 177 + _preview/88/_sources/references.md | 4 + _preview/88/_static/LEAP_logo.png | Bin 0 -> 66863 bytes _preview/88/_static/__init__.py | 0 .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 158 bytes _preview/88/_static/basic.css | 906 ++ _preview/88/_static/check-solid.svg | 4 + _preview/88/_static/clipboard.min.js | 7 + _preview/88/_static/copy-button.svg | 5 + _preview/88/_static/copybutton.css | 94 + _preview/88/_static/copybutton.js | 248 + _preview/88/_static/copybutton_funcs.js | 73 + _preview/88/_static/css/blank.css | 2 + ...index.ff1ffe594081f20da1ef19478df9384b.css | 6 + _preview/88/_static/css/theme.css | 120 + _preview/88/_static/doctools.js | 358 + _preview/88/_static/documentation_options.js | 14 + _preview/88/_static/file.png | Bin 0 -> 286 bytes _preview/88/_static/images/logo_binder.svg | 19 + _preview/88/_static/images/logo_colab.png | Bin 0 -> 7601 bytes .../88/_static/images/logo_jupyterhub.svg | 1 + _preview/88/_static/jquery-3.5.1.js | 10872 ++++++++++++++++ _preview/88/_static/jquery.js | 2 + .../_static/js/index.be7d3bbb2ef33a8344ce.js | 32 + _preview/88/_static/language_data.js | 297 + _preview/88/_static/minus.png | Bin 0 -> 90 bytes _preview/88/_static/mystnb.css | 1722 +++ ...-main.c949a650a448cc0ae9fd3441c0e17fb0.css | 1 + ...ables.06eb56fa6e07937060861dad626602ad.css | 7 + _preview/88/_static/plus.png | Bin 0 -> 90 bytes _preview/88/_static/pygments.css | 75 + _preview/88/_static/searchtools.js | 525 + _preview/88/_static/sphinx-book-theme.css | 5 + ...-theme.d59cb220de22ca1c485ebbdc042f0030.js | 22 + ...theme.e2363ea40746bee74734a24ffefccd78.css | 5 + _preview/88/_static/sphinx-thebe.css | 129 + _preview/88/_static/sphinx-thebe.js | 126 + _preview/88/_static/togglebutton.css | 160 + _preview/88/_static/togglebutton.js | 187 + _preview/88/_static/underscore-1.13.1.js | 2042 +++ _preview/88/_static/underscore.js | 6 + .../vendor/fontawesome/5.13.0/LICENSE.txt | 34 + .../vendor/fontawesome/5.13.0/css/all.min.css | 5 + .../5.13.0/webfonts/fa-brands-400.eot | Bin 0 -> 133034 bytes .../5.13.0/webfonts/fa-brands-400.svg | 3570 +++++ .../5.13.0/webfonts/fa-brands-400.ttf | Bin 0 -> 132728 bytes .../5.13.0/webfonts/fa-brands-400.woff | Bin 0 -> 89824 bytes .../5.13.0/webfonts/fa-brands-400.woff2 | Bin 0 -> 76612 bytes .../5.13.0/webfonts/fa-regular-400.eot | Bin 0 -> 34390 bytes .../5.13.0/webfonts/fa-regular-400.svg | 803 ++ .../5.13.0/webfonts/fa-regular-400.ttf | Bin 0 -> 34092 bytes .../5.13.0/webfonts/fa-regular-400.woff | Bin 0 -> 16800 bytes .../5.13.0/webfonts/fa-regular-400.woff2 | Bin 0 -> 13584 bytes .../5.13.0/webfonts/fa-solid-900.eot | Bin 0 -> 202902 bytes .../5.13.0/webfonts/fa-solid-900.svg | 4938 +++++++ .../5.13.0/webfonts/fa-solid-900.ttf | Bin 0 -> 202616 bytes .../5.13.0/webfonts/fa-solid-900.woff | Bin 0 -> 103300 bytes .../5.13.0/webfonts/fa-solid-900.woff2 | Bin 0 -> 79444 bytes _preview/88/_static/webpack-macros.html | 25 + _preview/88/contact.html | 382 + _preview/88/genindex.html | 303 + _preview/88/guides/education.html | 433 + _preview/88/how_to_cite.html | 427 + _preview/88/index.html | 1 + _preview/88/intro.html | 437 + _preview/88/leap-pangeo/architecture.html | 650 + _preview/88/leap-pangeo/implementation.html | 708 + _preview/88/leap-pangeo/jupyterhub.html | 995 ++ _preview/88/leap-pangeo/solutions.html | 434 + _preview/88/objects.inv | Bin 0 -> 1043 bytes _preview/88/policies/code_policy.html | 352 + _preview/88/policies/data_policy.html | 352 + .../88/policies/infrastructure_policy.html | 352 + _preview/88/policies/users_roles.html | 678 + _preview/88/references.html | 362 + _preview/88/search.html | 332 + _preview/88/searchindex.js | 1 + 95 files changed, 35661 insertions(+) create mode 100644 _preview/88/.buildinfo create mode 100644 _preview/88/_images/LEAP_knowledge_graph.png create mode 100644 _preview/88/_images/email_org_invite.png create mode 100644 _preview/88/_images/gh_org_invite_1.png create mode 100644 _preview/88/_images/gh_org_invite_2.png create mode 100644 _preview/88/_panels_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css create mode 100644 _preview/88/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css create mode 100644 _preview/88/_sources/contact.md create mode 100644 _preview/88/_sources/guides/education.md create mode 100644 _preview/88/_sources/how_to_cite.md create mode 100644 _preview/88/_sources/intro.md create mode 100644 _preview/88/_sources/leap-pangeo/architecture.md create mode 100644 _preview/88/_sources/leap-pangeo/implementation.md create mode 100644 _preview/88/_sources/leap-pangeo/jupyterhub.md create mode 100644 _preview/88/_sources/leap-pangeo/solutions.md create mode 100644 _preview/88/_sources/policies/code_policy.md create mode 100644 _preview/88/_sources/policies/data_policy.md create mode 100644 _preview/88/_sources/policies/infrastructure_policy.md create mode 100644 _preview/88/_sources/policies/users_roles.md create mode 100644 _preview/88/_sources/references.md create mode 100644 _preview/88/_static/LEAP_logo.png create mode 100644 _preview/88/_static/__init__.py create mode 100644 _preview/88/_static/__pycache__/__init__.cpython-310.pyc create mode 100644 _preview/88/_static/basic.css create mode 100644 _preview/88/_static/check-solid.svg create mode 100644 _preview/88/_static/clipboard.min.js create mode 100644 _preview/88/_static/copy-button.svg create mode 100644 _preview/88/_static/copybutton.css create mode 100644 _preview/88/_static/copybutton.js create mode 100644 _preview/88/_static/copybutton_funcs.js create mode 100644 _preview/88/_static/css/blank.css create mode 100644 _preview/88/_static/css/index.ff1ffe594081f20da1ef19478df9384b.css create mode 100644 _preview/88/_static/css/theme.css create mode 100644 _preview/88/_static/doctools.js create mode 100644 _preview/88/_static/documentation_options.js create mode 100644 _preview/88/_static/file.png create mode 100644 _preview/88/_static/images/logo_binder.svg create mode 100644 _preview/88/_static/images/logo_colab.png create mode 100644 _preview/88/_static/images/logo_jupyterhub.svg create mode 100644 _preview/88/_static/jquery-3.5.1.js create mode 100644 _preview/88/_static/jquery.js create mode 100644 _preview/88/_static/js/index.be7d3bbb2ef33a8344ce.js create mode 100644 _preview/88/_static/language_data.js create mode 100644 _preview/88/_static/minus.png create mode 100644 _preview/88/_static/mystnb.css create mode 100644 _preview/88/_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css create mode 100644 _preview/88/_static/panels-variables.06eb56fa6e07937060861dad626602ad.css create mode 100644 _preview/88/_static/plus.png create mode 100644 _preview/88/_static/pygments.css create mode 100644 _preview/88/_static/searchtools.js create mode 100644 _preview/88/_static/sphinx-book-theme.css create mode 100644 _preview/88/_static/sphinx-book-theme.d59cb220de22ca1c485ebbdc042f0030.js create mode 100644 _preview/88/_static/sphinx-book-theme.e2363ea40746bee74734a24ffefccd78.css create mode 100644 _preview/88/_static/sphinx-thebe.css create mode 100644 _preview/88/_static/sphinx-thebe.js create mode 100644 _preview/88/_static/togglebutton.css create mode 100644 _preview/88/_static/togglebutton.js create mode 100644 _preview/88/_static/underscore-1.13.1.js create mode 100644 _preview/88/_static/underscore.js create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/LICENSE.txt create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/css/all.min.css create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.eot create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.svg create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.ttf create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff2 create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.eot create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.svg create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.ttf create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.woff create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-regular-400.woff2 create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.eot create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.svg create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.ttf create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff create mode 100644 _preview/88/_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff2 create mode 100644 _preview/88/_static/webpack-macros.html create mode 100644 _preview/88/contact.html create mode 100644 _preview/88/genindex.html create mode 100644 _preview/88/guides/education.html create mode 100644 _preview/88/how_to_cite.html create mode 100644 _preview/88/index.html create mode 100644 _preview/88/intro.html create mode 100644 _preview/88/leap-pangeo/architecture.html create mode 100644 _preview/88/leap-pangeo/implementation.html create mode 100644 _preview/88/leap-pangeo/jupyterhub.html create mode 100644 _preview/88/leap-pangeo/solutions.html create mode 100644 _preview/88/objects.inv create mode 100644 _preview/88/policies/code_policy.html create mode 100644 _preview/88/policies/data_policy.html create mode 100644 _preview/88/policies/infrastructure_policy.html create mode 100644 _preview/88/policies/users_roles.html create mode 100644 _preview/88/references.html create mode 100644 _preview/88/search.html create mode 100644 _preview/88/searchindex.js diff --git a/_preview/88/.buildinfo b/_preview/88/.buildinfo new file mode 100644 index 0000000..ee4db4f --- /dev/null +++ b/_preview/88/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: fe86a250aa39242c7e298ca3ae89f448 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/_preview/88/_images/LEAP_knowledge_graph.png b/_preview/88/_images/LEAP_knowledge_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f20f192cdc027f232d40c72bc73948ed485d84 GIT binary patch literal 103274 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 =QZ`IdXKEx+=+STP$Iz!D}1d1|+g31BJLvBHx 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%0ASPQ06%&Tje@^`aA#OIuccA= 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 aw?P4P-8D1qQ-A&ed<^wWb<1wrhy6dcIF-%- literal 0 HcmV?d00001 diff --git a/_preview/88/_images/email_org_invite.png b/_preview/88/_images/email_org_invite.png new file mode 100644 index 0000000000000000000000000000000000000000..116f32d1dae634d9be3d8baa7223b67a35bb7130 GIT binary patch literal 133845 zcmeFYWmKHavM@?;Ng%id2|l<5*WeC=yM#f4yF;+x?(Xgo+(Lr8y9Rf6yF>PS&e`j1 zzPs+aMP;F6{}Dmlb=5h=&LP0r5^kTo?!e0WAsv0rdkO7Ti)O!V&}l zfw*caBqT2(Bt$H4Yh`3=4uXIX4~k2GQ&Kd=>S@0o7y2v}_$_vndmMq7+z(4YkSkD9 z91?-t4+Hw3cNIPy1{0N*l#4oBFDLLFY8M;T6(6y0U^Oz9dEp!!t-jIK!O@)Cu+!1; z;^MLAb=!Gc>NC{04}GX1HF^#Z)gsIiN|pS)ADM!}@gd$5Lqb}^x_&5E8Vn763l}JJ z*FGQ6EY4<7f6)E)@&5REiq*v(fDJ)~yQY*Ln-XS?U%hPCg@y}JxGuhEm?h2AeT|wg z83~I@h_`-WBN{Q4l`qTaz(Yw9>|aR^;fxkQDgpOx!>4oCWzjwt833yfhbl+)xdBI? zsQlY+p#~`Zg@c1sCPL9!v_5PofoajisJnvXU9X~y;?j||TpAaHa+}|9@Ogh|Wjmg4 zO`hsO#(k6{jAB?4#0Wv3TL{k{j*Peb0P3+^+y>G9EvFAQSiM39lu0xoavA0b^!NFT zDWACAqbK|X%|QgX+(yy2<3D#K;x~i=Ba$(di7|sw(rGj!p~~Gb?se6kS;Q2c(dT|P zHI(YfxCCr*zk%K4XH=kPcZJI5$wtBcxtct$WYu1kqc{YE&#^Uj`FGnPiHe`{5c-#$ zAHMx8N>u~3sclv8NTp&H4Q?C5(5#QQm~86cp4rMChAHv=ek*ITLFQ{h3}yQh>T@L2 z4l%?jkQi3|8x*49gZtd9KRx@s(lV{}CSKO0K47qAdwKnP+s*)H1cH<^48Kl2o|8p*6k*gR(#d%b+|G9d}{ zAf&&MS3=4DeCPaz|2_O?LFm9YL3(_vkZ*cn(JJ55!qNyJP(kf?7|Fvp`Yh@3b3ljt z7+E8xLSc6(TSG0ri4Z{9fvfn*cmpB&5&oB;VIbtL!1qX8Lnuzcx4m$Pe!sG)s8A)n z$3LQy1z-u$WHA?hDE4s_tQ|$&fwo6(dg~yBlBr|z-WAEiTY(WF|JPk5Cl8d-Pic;~ z;ojRFyVmqt@Yui2)+8HX`QX_*wpU9|2pZr#VIndiBw<8^aI+5N-(nzPdP{!J%OWex zD+DUR6vHYeAFaLDRqeX zDB2Vi6qr;_<&$zql+??CMYd|2(UKMY#?cgg$(~;id<{&5H8*JNbxYh{O*Vu5dd3>^$;m8z<{&4NiUI@6 zUrJqKPN-2}x4@tXONs51uZAeE@L@Kxnd#R?lP=RuGi9^1>AkEhlPy*@x{$hX$5_XN zD^T(i>lW+NkEw~hf~C|e1-GWU3^v_nrDnnV@GESBCfQ8c{9)KMqcqAU6K%64&L$)W zryZS9f@ImWqfcqvt@d|gyC|1>yk@Obts<_?m*u-*JNP?r`yrS0dl@rC%$c}1xQ009 z%p6}BO~jclm@x1xnR(1^qRT~$$7^=tE|BjkqtX=uqZUmP6cWY?tNd+BZK7;^Ptnn{ z5q^^m8OBI7_f-~U?b1$kvnR~`<(#`3^)!jSBvP9fL-@%zDNO$cgYj!f1}8hI8* zwo2*~(?}b6S9$GG>q@he?A5yW(&B2p-y_}3J=hYo2MCcJP_)tJQAH6$kV_EVuq+Aa z5v=eO2eAj}Br*#5g`_>il>7yn=A`tf*Bh=|mcs<`eiB!bA9s07LqdZC^UQ3eZc)yb zc`{n|TI7({u?Podda*ZkX)5W}v>D}blx_w{E=Z2DuewA-RB4a2e`!^l0e-MLnBFtT zfVu|m65tqC+I<>G?7AvMkVQ5{j#axW%;}~XbaWQ4g-%c$$cxFNquokcR1P0dA9GH6 z%BO})>dT*W`e|B$Tki{L@mC=l%?};8fbz=e_S1t_vzw z_YG|pQaLLln%O&h8G^)#i60 z#@f;!74EseE}5C3>=3A_!p-#U!=g|Swb)Rt%1gCsKbFI42+iqRt9jmRM#YjkMSLf) z;P2*8@mf5%sS}m_Vv0VgG|IY2YjR{NVZO_U>YCj;RZ@GJ``G7E5Gt#jG0oL_^!8Nx z6t`>cR}HDfpSmo&-R--1>>vDG8P-pZJ*na4Nc!0H+Haej+hXQiuA;B=6cczEG8%q0 zjJr=Aex3L&cpGVJ*dp9gOiZ^@qqe(wCLXsC!=DQ&Cu zM7e)biz<^3(9GP}=iNh{D@9j1*x84-f|jrCQI-rpYxE!gOfaj7%9A!A^G&s~T@^C={qf z>uE4nu84>DATsHkJ}*SzV%`2Jy1wAgu)3M7!+Kbvuz$`ldT560M}GSAjG%8pbdNFV z3kP<2<3VZ?Mlv!G)Zk}$2$(l$5K!Q!H{d^rH+T>*f1e>BB;Vlw_cQPf)jwk(As_-w zA)x;mqXGVYc}0RhVCa9op`yP-ysU!;{`h4={?}+|(M+iSdWQM|?t>6i6q1kte=B~m z1%WK>Oswo_;QZ~u4G7la>UIziSmZCCHxfXy69@>%SyLr7do>wpt}j*=^!kQY1|WK8 z3+tD8Ab6a)z>gLndwpVO3v)|5E@xhnzazN7&o9jkB*cG**qiZ^sL99^3t8EMh}q~F z=^07*5Q&M2d29`hxPZc<|A2%4<0Ub%x3}hEU~qDBqIY7Ux3V>6VB+NDWME`wU}mNR zkD#-2v9#BBrn9so{nsS_HIFdJ?u)IdwY{m8CGpF=`UX}G_Pit{FAM$m>tA?+oK62{ zB}==1wguiG!%GhX6FnotYhd=KM*jz}m!5xt{oU8Umg9Muj7#3s8Dy>|Y-#}}H5fHM zCPq$Hp1+gq*0&8mNJdO>Z6Z6psS8os+Mw;sHTadLqMP_6#hY?6wDS? z+wM^mc;V$$Fl;~Uww%Pt;$(C**xJ5*-sm*!GScih!hFuR?UJ#b+a3q+4=w)fm3K9< zcTCM{BBvo5@tarPmGJURzmU9N0Td@5K+7~B8%TFWPJONWTQI5)6qx|zf4H5nvk ziE}f3xB&Wn_paJu!ErAC37LRvqdzV_o4SeYZtXHDNM(*i-6Iw5vHxBp|71nVm|2VSOYR0MAXO0pSHO| z_iVs+OM=Ju*RM)+bf7@Id}!&)N!r^FtgKsDBx}Q@?vbImpM0due|i70c||IFi6N78 zn3zrbX_!q;M&JIrm#e8H+?{Q+_J+aCq2sgUS&KIbYad5XcJ z9Ej~l>3vIl?abf`5GzuPzW-XUK5$)gH2f=m)+ik3tSP}(zd zr{|uQeC1^K2@+4-;1p@LM-kInQ6qe)mQ8ywpms>|ApcL<@Rk-KR#XcO#be>i1?F0> zeP$Nn72S&w7bOmqb2{qRNB|Nx5!;3ECWo}l+ z(Z=|Q_^qjw=;*JI<{PwuEb%5LseG^iCz|AE0O8hP8bgj~MBL$mlXzn_C|9eI8JI7v z-j_$qAB+L`Q+&0WC8VOcP-hYIZpDL=Ce{`Pi-cglJ|=!BrQvLz+Y^Ib3;1Q?59KR* zm@NKhQIG|FU0DYnX(|w!4hsO}F!_DCKOL`W)z-(A9v_dzs#^&a5L->A)F^MU;9wx} zuKPupxq~uZVVD3U0&(OxpQtF!3Q5&_Dz?u6_RqCz1s_T!e@T>fqm>g7zG_5nA_V%W zMISUm9@r;C7r5+qtY^FRZ+(~)UZoD27%>Qw)T)JPg`J##z`|V>OTSxuKHN|m)zNqE z)f4s>8VF>91VKI6-o#k8pN;kEP|zeLCFcJfCx5?=6y zySmm!{P+#R0&u6V5wUG4umZ;w?c8 zAy?{c&(8Y1A=WF~2;_bl*qH{8|GNLe49#3-u(A3^L)$Q^BoXR0tw8mn9L1UG#j=hg zsVab2q_1cW4pec@F7a|L(>8el1e+asTlFyWg|;Qtm876o>BRIxr|9@CIVMQ=mGWnL zCJc`skRoBaAyFj$NcV+N>aXni8}zso@g@c-Xy6XzceBA}|HWC5`t1nmPRL4S8`J&= z8j@EKqm_IC*-qE&y)H^-1|=W2oDSb~f>$P*q3hO2K4DG0`A+x zatwMc@rKxLc6uYSS8%m|AtJn}=H*t3I|?4M+=9bNMdFEe)ktVgtU-6hgtC%)kpWD` zCl>tIWJtgjAvf1xBfeOf6puZ=N`NzZ=cE-17Ucy4k;xfXhkfDLjHLeq!q(#}lGzOD zHsk}UO)3B`WUJdlNSh(bU)d)c>8(5## zIo(RUI+ZabpyY)EkxH$bjtNun7$k}m?PQKh*f&=u^M7>a+B^bKza;lZj5c7>#Mk%h zEmW*4(hh(vjO1MLyjqn(9I&(0{<3RUFR>G4S#!1dkx}`S@ippwLwQ-LV^&&)RQ!0f zEzI701uG?feL}t;m1d&-d22WcSH75ILS{j}X|iaAajE}(v!!vyA*<&rx)B1QGeJO- zOSd-ahsmv=Yf6=VcP38qYQx{EK8h+Ns41RU?c-QtR%y1Jvu62D^}Y=k!TC8LMfjvOf7Ge zTJkhbTB#Hi=R?l>sHgslV(ATr2F~{cdi?s#sh-BXE0Qn{<l-h<7#CIQL{G&MB!ty=iU-fL^Wr#Nu#%F)~u1^X=-OV+7kATft(axuJ$osx( zCKJ8(z|>X>srEUP*R~@K%^YR`O_}G}Ixosk5(rcT`z*}HM=jrkRPMCS4xBGvl3G>mJxAGI5g z{^QjyF%9)yuZOVNq>Q0@;(_KxzE*Eq}T>(Q10c?gFU_aUl7;;Ej7#5JnFcQ zo@*>buN)|{H{P^mI1-Rg2d`RW0a&zNW+_wVNTw8u|5Vj)(8Ph@@Rn>hNWcD7OZ7(% z95vst7$Loixr8LRmyDO`0P7XRA_X46(J`7=xB2TS4vCjQK9}SI3)iw zl1TSz=tc$r_eNiIR%*VA*C{19De-_?1M>>EiM`2QQWnwaIF2E&Sxm5(RfrSB|E2Er z^g}MVS7IFfx8*Cs3)Ytz;Eczq@!)H*&^PGlSa7d|tHCVYt9ad@gL6Jlp>wbEG5RGV zBq8^#m%;{|48X9knztKQN7W%B<@(ft3G$pzi*K^tG!j@zH(q2Q2v+dS^cHS5fQ znF5}D>AY@(+%6}hACuURWo{p@`ExDPG=PP^u>2Ou}7b&YMUOP zv7n>ftVi(YjwnKHRIK+v<&>zeBR3ZHzw>?^tnM)5;WIv~U-67_v1+5czdlajsx_00 z`sEMyB%&vir@Haq-lOn8k*!m6s@U)#oLlWuYCg5`OO4v z$*#Z<@vQ|;>($IbWl5F-3>EZ+!IwPL5zj!?+;W{q^JJm+3a}}=J1VEAzw)DR>9&fw zhIqL~^}Mst*z@hS%-Plgl9qb$iYGoMDLu(z(5E-;?WP7xmX&waXDr?;MIGgcf1MG5 zI|Rf2JXWxdP9SVej}4Bqip-}wirJ=Yqt&gr7j-;dCT#*j!|U@_uQeZU{ss~CbtX_q zEO8%4bAO$RK^SSLT5viDOgy_#HHM8Pp>qGziIBwO;M#dv`PU}yKpVBNac5$5RH0Ko z#Y-sW@6Is~d8*)B<#XD65YPV@Y2I#nBi+lIfCcyYMIA_h6CUcJ2lKU3-Qiw>M#G-k z;RN?qNuOCey&g<+cvuW_dAMz37rm^cTpGT(neB#UG_`5Bcf?pc!dfN&lb;}d`)1-C z^xJ7gUFuAhYd4oMPx08AY~A0*BVyTOvs0H65~@tAF?w;SP+u zTiT!Q_-|L9PwJ(@Kk)7Wg6pd)In?VOzTmRiN5-~g#!^P4%jdX$x;41OQ#~W7SG7B| z`x~rgfBd#Ra2CPmh*_p{$krDsiTai~`t;B3^RSNyJsV|)JKA5~Nnm&n+VWB?SS5?6 zBLs2HME!_SFAov#9&CBB8Ig$4%>D)&c?pyQqsF3YQY!X4Cz!zX@P)iR8TRj50gnk9 zM`wMM8GsBTs{yxT2FIl099i1hqLmZN-R0Vl#heeh-=muxz7A05;kaD4b`{Hc^?g!R zjlMs!KrM!kc(D%O7$BX~J?`eVtM$g3`0V$QWT^Q6SpoguKj(K1D7+(bx+|R z4(ZO7JK=;wIqh$(GmrS6c_`$HO-NkMQt9ef9L{!leZ;TS?$9Rp zFS*1a0f+9FVU6cul2Q5Bi*!gU>6A`XF?Rfts025=U;m613VOJhJ?+~%Nwq2H3zo*$HmdlKe-+YaG?7u0_Oco zcF3uZWG6p6gy>?f1hT(;xlZSePijt!-9D(5LAGdjUKj_6USS|nb zEDT%ki5MtmP#MS{N&(H3^V;6j|F(^HU4JLmkT=XNN8kPc$ z*@%{+kN)M4*m&0C3OD0>{$ciVdnksIwq2O1`hMfu?s(aw+I9-NTIkddePcp)fZl(q zkw!hcLCawiQ$gK>b3qjP+lXpu_1;R((ZGu5v$k!?CZ)?%t!Al-LXrGaf8mkL57guR zc~0c*x+ix|ZYN95OQq{|t#%dZ>wTw{XX5?1%Y}-)^tooQjMSX+bzq*Px@TUFUKb(q4}1?P4>lVS0$7UtLSffV4tzGUADf*Hkte@ceNfrQ6t1l?U`6gFWde z&YES8zwlJ_s4-966IklD!;wD9pzpWsKO#8F_1tsfgr|7$q|f*-eSgF~KAv>uM?bVV ziFt7*(PVx;N^y;qiOnrP+*W(1odPsj-f-KRioJ*4sqL)rWGy`((K#iO-r@v8Y~APD8hd{GkJx;HvbK zI_u_8I&aEknWB_Gx+OVzFg6RwCNB(!Q)rVtzhcOB>8$F{ zAhXr5G(fd3l%=mW?0r9}Xjq&`$TAWx6P0dT3s5dBPdjD0Z3Mydq@`6at2T8n#cHN` z-r*>Ba}e-uYP`@$24AxuZJUXI!DRcfOUiKmLbVLRv66WeK`b%s_^Tn^I$}J-y#2$C z)k0PbB?$tCrPXj+8HM7uOR+2lsoZZqG&UNMX}botWe)}u=fgi;!IA@5L$m=siHu?- zx}KM{p@iJawn~W40v*sXw+oi7bBKM~nF3FGb6UHnE#=zpa2+!T3zcWeAdbo&!dNZF zXXD(a_w918V;;3ltp?Ne0f^XMmBQUJiB!6Pfo46(D{vOJCRQ<@XTo?;sei3NJAkXs zij-iX-XYI_q4BxHvD$S=L$$6eWVtSVMEotg&LX|W zp~jfNdsxYz2^2C>Ge$%4E1vgaRqF>(bv72i461C_o1r}`4FJyR{8L_$CH)k|X?(3s z&Evlgd6sJfHcb|jtojESa1yfSN5)n2Mu&2_b_d{`9*46GV&^DBb~LT@b3 z?Qd56)N~_G4X{d|^Dj)iCOS)w*U}M&nL6(|cg$%f9ZM^a6g5vDWMw*8##kxx|C$LB zgwCr36-d|c02T^vS%7-AAJ1Gt0Sln=@p{E;;19Xf<`KovW-wx0p5vpa?J<-^*$Cpy zB5?%Im7n?IO-4CixW;8^d$Pk(EU()Y>|S3yT}r5@Wy8M3eASm8(AL2Wl*_@p z3x$Mr>Iz*!__gMgACWyx_9(>|g4&4(L#dy{if2k`&X?V3%rBjr4>9~jWpVEI2G?{NP64dt_fY%x+H9y@doy$jwGVBGtSXN_dYc&7+^>O ze3-2>LlDGkxxWr99MjsXpgZDA{^*v`l_^uS3Npj)``b>$*)?{%XKnJ5W3+rz5 z4Vasz(Uuor>L2&B*Ej$-jwHxn!w$aOoXF!Lh}C3Lc-hrWP(BYH(fkP%a&gE$`p0Xd z7gd#@!_oTra(6)&K$+4XFu+%R6r<-7g-k=O=6l;3@yA6wV6VVq@WP!le`%rD?V;hC z({JBoG_rsWMw2QJzTej)W~u z^SFf7#8A~txZX!QiF5HK-;Ht6D%tsJX_9Dy<^6i#wVk{%raAxg2%t61*|UJ+Pf}q- z!2MsFj{1_khD3Tpn_w;3<7lCUh;)zRN$a3sRl_Ku-MS^k&3O{Eo=7!gHK`Ww*&sdb zab9-0j?OR8{=6mzN0a2_>(44t1Usuzl|Lv|Y?WlRxOf)l&S5_(J>Eopvyn|^ zrc+FZ%O}@E&0jK#r>TIo@Su9p!6s3b8173==u~eL!VCJOx;t_}1bMTrjOu^bW*4@>9yD z-Yg`yaMKMPJpKH<`zM6qhf~=|2HTT4FSmBkM@KAbvyYEF9f2^;H!LB)mc-~6A%m|kMIQT1`KTWj^&geOqDEc-STzY((y>mls=C9 z8CRz2MDCxo8lBZR!z9tn=Z@_kjBY)ya!024?T z6JM3RDE7^p#>~mvX*Bd3u8!z*^kin(7^K8nUA6Mk+Ek$m(x`hl6oTmV);rg`Kt3(o zQxRaDwCTWgKr1p9e|9P)sDHgbU{LdX+j+3Z=HO}i&~Uq=ohw9b;Y7h!A6%EL6c7ZF z+x9Yd@Pk7w8X}H&_)n=CPm0rsLkCfvfabY z&!tZ)7m*yKGuY->kQLMNSvA3yF;MYIA^2@VG5gYvbX^^KSMNmS2s9O4Dr5#Mwzhp% z@M^44)ncyuUg9$Rue^H3JU<}=fi^N|#u z7%nPEF8*bi__p@ZbuY^F8Hdamo8{3svqrm&yrUjw+iu(f&9>0h?ayBK;q+l%Pa;LS z_2E07VtZ5Ne$J$IZt+peKq4ydJR&K@r(8pm8(`laOR9ZDPt3`V7b;(OXq#4Z3= zhVjy54In|lV7=WA%>J?MxqjTe`h9k_;UoEv6uh1r<5Ki>(>vS=Ru6?3m{q_~j(do9 z{4}n*1lN8q#Q3vWABWs8J?*Q&(b=9#KZqv^#^F#jY1z}OB><=0R;2gieg9$o(jJ&; z`tME>fqopAiq7W`SKLUsjzf6m4#%HBMw+5$>zwcOU;16vF&@3yNg9Rs}lhEqqo3dz>@F>D{kEkmKnt7gTZ5CeDuix zE?x?$czQcffE6z7ezEQPyK;LsN`=satMT)>yC;>ipB`me`o>I+1ZNl4-Y7`g=`N1B zXCjIV&Lh7|y(SZFTv4TpZaUY~;z$lO5=dt}?yod&3r3t}0N`rYfv({F$^B^l<)dTt zCGN=n{FFSTV`k{yLP5b~slw8wxwrpB%-7vWL-14%V9&8_RucsQfv6w(8$ybvxt&lydKd-xsElb+I_InKmu373* zc|(SW2`{pHr0-d2aXFsLDAVeafC!$FPdw@c0Jq<1j+)|fa~5{z{a_5A1%)Lh?F;9;q7xZK2%F--=f-B#%j=)(D*9A z-Ej%uwn`WUbzLU*4+4vht6Y)q8VSGHXy2Gp#;+6wIaA!>qMyISPXgKSxs$-;iW!gf zq}65X$67*_#P?scTj){vtSd@y43k=zH$i3ww;j#L@Tpj$#lj6+dy?hFm+Z0Sz6wXH zWou>?(ov%Cj_qZ%Bbl-fKO9qsZY(9326BICmIz`eRDJ^2zwZ{-SIrbyU7H) zuDqib%y>2U!*^Yw^i2j3J?jqI`xZTJL|7Q4Q)sl>Yr&3oB|B`S>A2Ko8myQ0>oIct z=egc%VeAcMn{3olA2`I`Qifn9#g9!QtJ2cS9~kfmEV zZwvqrp|702m|$u%A%9brUt-D_0dX1|X!nQbUhM6pYgF55rRu8vX z<|xB&*<1dnU$l_nWj2r7>+_hcu4T!Vr?g!MBqEKISHuS9$b~)|ZAN>HkZMTd(Od2haI*mW#2=XRkgHl`fBO0Vb%AS2)(%wS; zX&&MWBT6%TaXps0?*1|&)TsOFrFtzu`J$_hV{zW*0!7Zbc0~FyW&!fw1#Z{eV>Wp_ z1DGklA0xE`#gmY@VLbT_07EIuUqYD;zOIiAqYNY&HzoL%KAsI!>O9CebWtC^E#oho zxq9=yIP4?T{eV1()8M%ybpcBl`*SCB!K%gOZrHf6| zd`CM#o_OuodS~R0=MZ{!Dqd7z=t&p2V5^O&6+IrSG6US!0(6%e0pGps!=$L1` zMDEhiKuM-*r(>NNoMC|4Xsy-pL$3cPTE(Uxwg)>;YnI!!{3-0sJUxxjbjpa;3PSaa2 z*UJ6lY0VZ3?g2e~ep(`z3xp0luL1!8v*&?$-fYo<^p!bfa8$t>Ji7JD)=0*RD&Xc~ zY}2cGamL%DCDC@(M3?)<4}C70XJUwu2i3oC(PG+9j2oYk0&) zybeEEhM;~BbJiR{6V}8@u?3O-GU={E2h5>mf8t=?3ibawR6M zy29|3SfKR-o;23ip7-P>-?91$JyY$AH1dMeF&tNZyq!>TnhgdL`6uuXT5!oMoaGSoSVTh_9J@J*s@dd^}Oj_K^u=K z|Iy;JjHWTsaDaD>dBY)1MFWo()`*QC*A!?Zo!1rk>uN0(OP|tflGbT87fV6tB*4xm zXp7%V70;uKgS$ma(Q!?!IXuFdVhBvWtEe2Y3$n2|6ACjwaZh0vyptrx(>#gpRP@-q zz?DAvY#dx}Ji$L**sc{b@?EIA1`)qCXk&xgYX~=de=7-R%vXa-^!gS$gy84~$c1IN z+;<{twM3nWcT0aa5=89Jt9y~utWp-R zHVywHprTa<%`XA-`(Ob{fT%40l0}h?8WMsT3Wn8O1UR9*tc;#@V&y9%3j>8|f`1pC zUSk*FcvOgq(wM?t;a29TlR?>$E1w-{q5>`gIc|x09S7Nqp%$Xk#wiPiMuPzw#miD;?3g zsMPK~Cmb?3*80~h?8(j+tlIk;5E!T^!>nB5bwz*?>Fk6vwacO{*QiAR9mo>jHBwQS z;vU{MLI0}hoH7CZ?2tYK!4dR|N3aJPn4cT6+gP?ecAazUIl2#Dhf+dRU;sUBZ#L}? zQ2VokF~N*Cam&Ih<*?6S+}cqmlPc{1N0TABn{V?k8^;5-aW<|0W#d*m*9}wP(C0Y;;)G zo7|h;6t>MZ-T9E8{}kk1Bgh|3CF*$>t>B_ke)rk3Ij8Ph%25mjmPhcV13?HMxfDUI z*_8Y=%+YdU{KO8bS*81XEF@g=pav^s8c-TNxY#%v^XsUM1%A?3OlPJuHw?#UeHEEk*6a6uPIaN zFU8ziygY=w-ryiV=a@k1<+7E)1HAARHJj(-iE_=;mgn}cZrJAP>}f$5KU}!}IDstR zy}LhU2w~i>;gii7-G!9tZE|eggL%1;VL^+=$c!dr+%E&iY z0}u7fQF9gTAMrnP7z#I^)V`sKW|%??#I2A<5H9MCi{IMCT8_qe`{&zC%cFm1u@ zoT|0w@oR&CzpaDDSVQ(QNow`OL`COW)763z^#+YrVPr6dibCqhxPL!au3bU6_tA4T zD5Uh>$U~0^pTZ1E^*hJ$zYgxB8uOkI|ITmhaGmaBzF5x_)ys}?6ey9*Sdm$+dlyp; zQN^6Q!*0f{##(Wa!pRG5OcUDP??s_SN5ox<)N`!#6F0x#^(%ENIW@SFa9S3xOh#Bc zB=;xoA*-T9h{+LyJ>MO-p6I{Fmmd<4k8^6w1iotPG817Z{rx3tY+3Fa6Gis9Pu62o zd4!2dr}AhXAg@I`@rzzXh3}IAd46r$+TL{9IEfdJbh*QRu=Qhg#P4j_kAbHFjA@B} ze} zxWbRV@%`SvQB)z!8mgu>gZe2EGAV1r8hmqq8GC@`V7u^W6n#6(Xo#EH-ViLpnf9Y1 zy3s{M?1#t9w0%sQA#7zjOY`(y@TJUa1wG+!p`Iz4KIt-c#RJZiSfz*@GW2m$ijGWr zLT$%9>+=d^6xAmhqT`a5pOuc9`Ql64GQfsf#dz=(T*f1#^p4e#grW?Uy*;`o+UN{I zA0{)qpVlmP9Z%nx9>94A(kuh4D6wwf zR7|9NxEMI8G*v}5*RipHq4UFQWtrKmo7FTIgET?cv1pSRs2Z#XA9aJn{El;ee_lzI zxp`Go^qfvF_f)i{h?%$da8mBi|;eo2dNV|5pW(8*3n3 zKlrVt0$fNx$WqL|fU%v5Q*9Wp`jEZpQ3iTAM~6YgwLQTlaEb<)y#mE)DaY{XPlD^Ay)iNt!{B3Q*A6eT}6&}%8VEq3Aw#` ztcs`4D#`jb6Mkp5Ev)6X+k9+j=rsRr{&i%w$jGJArMIBXW*>(B=RP!Y9&$dlvkcS5 z?aYsFwzei>VbGrPWm7C4JE#G%KfcaMud?DmA_Xk-HoH}~w>t-&{XWa4T#^;XAZ>0n zynE1DnrH%7wZd7yIv1pyFRnaD-Nkth2S4h}3^OO`<42iWPGC&b$)PT|c5)88I(+4J zVlm`Ky$;)TdB`$y!Ld9^-09I|isp55#B{uNR8_^IcO3!tlDNhws)tECn9bO3f(sf{ zI*W~F7WpNYPuJC@n&;Ax zLHBZPD8KCo9P))_%Nm!QOAKZoxEAc;@7sk&WZVfUxA{!rUf>?cF;hs|sNl;zHBMLo zXskhYM_uty6&mUET57U_i3z5O%SLJ=xH?=QqN=;`&5Q4nNHiAQ63%kGu^-W|0#Sa*?Flx9+#uA_U*smCRT^5>2DhO~ z{&CO__{yRjq0iaf!oGrRPc))^<24pHYyH)IU}$SI%=;I@tT;G~U~HCu;1U}4Iv=X{ zIgXX`RnyuL%3wakoViZ&l%eGki0}ezT+b(HaM6}kF zIH*w2&c(8E_O>~^AOm+zUDJ}t&Xc6&pk^e@@o~u2Bb-HQ)IyOg&3x`j9cUYTCSpA> zq^u2M>cio&Po$xnls%@r?;F)0X?pThl0+%^*|&N)W$8enzTk2HF7`{$lji5mz7s3R z>Ed=Cm*VY8%fpR6J@K8XoRYj)J3=m-KUOXqRg{JcY!!KO**Ki{F|-TD4`vqY2Pmme z-_aLWpkf*D3m~VID0F6Oi^`Pbnl%8qj4lp{rJ{N^+p!CAK;~(E7P;t{R2j7eS&-j$ zrX-kUP#_1)TInu;*E1cn-spSX5#7aO^mMN=bso!wN;MjA-Lb@zHft0FVwr2rt5h*91i6cy*JUR9Jp?bV!!B;>k#m2s`H^82-O@h7U$^0du zk8wgbRV%lr83Pr$6FE~hGkhU&`E;E4d zkrW_R0L)VKqVghft=cu~4^3JEF8aas$bE~vJHFVlTC+xiViNai!l-`xvV5n5lg%ue z-(Jf*CqecOgGvH&z9Xth~7o(qkl7; z-0yMC+lyluy44gYSc9sp-_-u)Q986xXi)m)0vh-SVJ|-wAsrp6pp;3XIBu(-4Mb9b zmBMBK^5HiX6|yRq_F}l4Z$ypfNl8pmv-g9G2OEzfRuXg7Ajr*To~ytXM$aF5>i!c5 zMjbvdu_HcrXUo6pbMFo9C)jnfZ(1HCi5tFSwtQ@>r7rmgbavh&Nq(p638ri%;kz(@_Z_y&@D;(MsECymAi2+h}oq%Z;60OpaS7llOSm8fuBo(t; z*i^jrbZyX)K5A@^+7{zx_Es3!S_Ux;@IMLTElvraTxoi(BZT;f_UjJ09lOPGM>u%S zPSmYH(-QgGl4-JC7qd&#yI#8VE6QZ!xZn-1LQ999s4N5E=RBT$Ey~P(CWRkPmCQ)i z#9zC`JMG*aJUZ*lIN~Sm)|9hVP4|2^_B(=;96=xAqrJ7KTw16(!`>x4i`b;x|=b$fSGGE5l@Ijs$^?5fK`6{|FHL$L3N~S7ciURyE_DT0)!yJ-6gogCb+x1yF+ld%?7^SGnq5#1EuvrGO!WE`&Vx9LhLbUUt*{zqLy z3}0)a5oF2)XXW6Q@8{-Tr6`nrJJNj>bi_-SBZAN)IB$*k7GLVPZUJ05(eBx9gYdxk zbosJHi@MW9x-XJMq*i~IFYM;j7X2lFZ7b(tH!qeCHQ zoMi$Nu70#7cUSOje^D92Lk6VJ{%S66Lg8yrs3Ie$rzRB){?THWQnJzW_P?|M9L^au zifhtjMPuo-=7ZnB@Z;P53TCe#Cg^c$17ITOl1}apo{LF?dqfUvU*3A3-1)*20prf( zwm8vNn^&bly5qZR-la@SDD;p}T}xFrrHe&x+;;1wYPx(Qm^iN-m7s5zH@pqbv3#C) z4fWq^YU2wWAyUcjopOLSUD4R9Wp@GaM z$m3U@srV3bpEj5Jy-x=9LM%94!O~ zUOgLV5{Bi9-Mb!(b8ljZZGY~I;2+H{+Yy2RID*#PnloISP2hpD0M(aMyeH2??(cW{ zi=B|4?&w{nB1=L+2gOUayJMQ+LHdA=jN!@vi4@DS>42cUmf(W&&n?tb$&hLrS`nyo zI0c-;TaqtN9*OGNJtWr`91losv)@UysSnu4JgXC=6dFAa!<+AaJ)^Ua4MTpN9CP-B ze5x&m*yS0Mp{(~nf0vT#f=`!FEKb>s{NsYqPkfHviCAKnPqP_bOOMRoW_^h>64}&h zD!m`?!l?zF+BJXgTp};7L-!_=7tU3_gLg#X6mn z3m(_T|Mc3LD_NXr{hr~*jbm{^fY+`rF&zLhp?6j*s$tNM_xcAyG7OR@r-sM)z68P2 zZ8!z$jyN}GSgW-0k_!|xJLw(i__R~j4PDMP!#wA&u=uw*vxwUi`+(6Lj#RyrYh)bv zwHot!Vx}xjwfsnhEQ0EO z7y=eLz8CRa>*8b8uEHnkD9OVD1xi`N#v4d&1{$G4ovm2{`mV)pCS>=fHw$DjL$7iw z$YjTw)W+>Ha1W^+`w(lKd$i=WP{M54E3gqot?&T&$lNP=&JyEL?vTvEOvcXf02i?? z#4SI1idQqnK5D1a8Ljl9XE|WhJzW7Ev znNP@CNm&c1?BZFb?B9v!*hU2&SKE4yhKsoKk_RU)uc#j6*{v8bdGR|6x@+AOaL2hq zE#1gl4HHU%$qs;0oTXLdD7(Y4sGcKkI)@UVz^`IvxsULDSlMhqG+cetoiVW6&-_f? z?Iza6Rp0je^BBK&nEn8=V>(4;^5v68x1}q-7#Q7vAhu!~Uj#@Iw4S=vbzP9pes^c_ z&QD9H=gP{cO~al}0`0~TflL)~Ec;XoWZLFoHUWN+RVy*LJ==~2`aKmfNUAl*nn-1s z-5lmq`SdTBJvxF(V*rdMuf(Wlf~x_D*I?cdIzR0WO4E9$%-VatH`%8wn60ZUJU4}- zxJ0yuW#Uryyg~a8ZA+M+UGvN=Gu-)bo-V6Ly1eo^AJ7sS&Cu&`8KRVq4Ag$X@dE9J z(9L2QcfbC%<4{}pEAl)Nkyn+)Z5M31KK}gCo#*vzRe5Olrgs#m8O!L(1kG3r;> zkVHyUN4%`IEO;KMFCbTZkYJAj+!X!SlwOM>)HKSa@^AQ$?J@SR4H@c+s|8VWrS;d|WKT9Y`xo3Bu=hT2u$ymIhP$)}Zd9d^KJII_|+ zR`LpM>{^aay!%UZg771Zs@iwty``A&QfM2AI+fp>uRyLTi6)dgG5Lx2gyGToz#q(m zCkV9&hKS!$b|O}5e*%zTAphG20mIeXgG!9ExgDBf+b_c&ZPjZXS(3Zs&_16wA8l%yz)nS;nTb9L z$oZ;k)L6F%O0IXH6koxVHzH1&+8mYl8|?)UO<6^D2h zza<8IR$<5Owqrm>5)zl@HGRCH$H8i~=c{yQqReQ((;M<}AN)y$7bu1|47P2m@I|rW zO=h!-JLGm!m9QV?tqI&5NM@fe{4;U`caAE&3ZM+n4%zp&THE~MCe9$YXJUZn0NOMk zjyN9-L@L^2=PU1@_y7NoO6ensR?04R3;K61rI;j?u=PY)=^Q>VE&^^aHm z=L`SOkuV6#@$94s(E1mx1;E%Dpd8PE_^N-=Tmjn5Oi+&J&1Sg;w0ZwOpHnD{)8iK8 z^n2(0xqp5ieMrfHv#9B~PNDyLU(HaCCxg!Pzvj(8T})Ic12jnHO@r{iJTNJ;4wT~=&tUPd z>MEl8FnQ#kSM=wrvP8oBkCxmGN0ysFGvEaZigdf+6ov9H=)LJWh=n77i|))G>LQ?x zoU`9{+Y^_Nh|cr_yN@USvBU)etN+6KQ^;IEI40pF!{x;JTkyfh0fl4NhHSTxNbIG7 z>VEUBG9UN`4a(qByW3JZo6+(1Kd=G-%;EqFEZePWA=`LpPww#-0jFCr0Qhg4PzIPE zhD-BGX%6In0M9^Zvwt%5bi5w#k&21{CRfxe9A;7T>HM?zylr%F=sk;h)ix(%8sHe`_HKAR_kyQV-8xV)j*%^z;IR zj)_owr}s1}CDjk)%{*#pSj@8Yb(`xBGXsbKqQ_Q{?%aIz7yj+}EYp3&;!2@Ew8u@6 zia;7+3L}fX4`l<$LIq0UumXfFg=cVm7A!hQ1CNsmGO>-W=b}fI!}2!#-tmuz^JF674_F{vbh^+Z zGkUyvUP>!`4*_Y;L_Uj8FdJ=w@VIy92_BCf;oZyt>+*drOC-Qo$q>FY2SKvJwTATP z^o$jQbt9m_U?4)-g<=i_v{MO#uqiMJ|G}&h2u6j{(@K{bayB|rjV_ZILh}eUsui~O zf-$yoso8r&*)`UZe*G7j?9%7o`GNTELLbwfyp4Y<42#5S7!2*1P&2yLAj%)T|4B z`4_9%v^bm9Ll=uv<6MzKLmbayMJhVIVz2#TqHP=qzfA|Kqy&Vrv&(uL!~UPU%r*}i z!BrMO`P(FM zX8Z2}2JRKzu=_o`U9N&D$W&(>&W$EhW;EIY0* zJ|9FwmtPLY8*(Z`IVxBczwE>utdM>G%}-KQ^+TrU{|Yt$;!NW7IX*Lw@f0$*Ht3Jm zOD-Lb%wB_{oB;EUr{{+hr7U4f2oA42z}6Tz`=mePm(SXien0`h20yHhvf`gDUGw(> z*@xjh_}CC&)Ah?8JQgD-!sBV?k8%PcTtr3pz$8aPU41ye;R!z-0OGCmD9#uH@~_~M zjPlf}G>z;)ML9n8Lgf--pbF-<)Hq*p(`W{pr&8z?$nVspV0vBMif^sjX4>(A{kFcK z_a~%q+KZ0akHi89k^IKjn|tCIyqAW8Fdk!HCdQHC)dotg4wi7>b~(#iV5#h^7cfr=y@}>DCT2v z3ppRI^muZ6_zd!JuvEhkfhR3+zBPn18&H-pWieAosni00_Lf#v02s`na#+uQ`Lyl0 z;z0u>`4|_MH>WMIGnRAAMw^gx@%p1nH1WQ#7OhmS7z@#!TqeSk(EuS2m1B0P(j**` zJO54LSEKo>uHd(^h+AbBm$WZ?p5AwOHUT10XZyoCM#m4Hc41tPIRKv;7;}JXIeL)I z-D~zJVl1muQn_os2c^CtTa?SulqyS!<85d?YY*@Ar5NTPer9-Gx|C*&RAm2cCr3f@ z6~xYNdSg*~)6>_8bhcufHbiw(?*>JnFR9Abhl-I6n z9RPdo_NbLk$A3skvMrNEQ#E)iqd&)-VodW+$`JK)dxKZnDbiv7F^Q55ILxPO$@-Ik&8GD3nQOSjaDv zqBbIr_*Auocd?>L-~*1N@8?>e_YJ!7BV)F17rYhM!feZSsrbRHO2^%}*H7bXR58xv zTB=mzLnC9eWs_|d-Cg?rK(YCOe69q&csEvdXRwqzjz?p0VV;Y@X~~PP!O>Mwy~+~5 z7aJi@fT$|+*B$BfOn^P@;@>JGK8hsB1PTEh@~V|r65;Z&Hl`w>F5UU)fW}D!>unDy zg3Vy6Zy>AlqPA4M^Pzqdlf}#!Z=c!pCcf+D+8gCaiOFn8#c-S|u9Qtt&;nJYR; z=_{0@!88^X@WtWIu0_6i7%nGqSu>jim3(u=XM?op^)6ox>e)*m5BUDx#!yOfS5^eC z;(32;xY#c@8&IfKUeV}mWpK2uV8rWC8wiKms(tx|(VFxLQ}s2^Y-v_8Sij1P@)sX* z$xrWJk>wISwsbtKx_~|xyG{o3{lF++Olcb|+DaZ62~^w)p)7fW%R|YL_Y$*-qRHJc znybnjyNK=c7iJrPlotEZCaEHXxha^FfVyDuxD;8nnKGG%4TnI(M7-#3q4%v( z0lJLqRo&Ql)=V@Ca1EaxbAat+?%lvJ+Ac+DC^rtd$>@N=4Rajj3D{V zk{Zl>`$hU<;D*>K_wX$jmLnBK0hpeoH+AE~92>6&DEw&T4hOx@>3FHu zJyqR9@RJ`z*p z)V9{&IXy?9Xp_Z1kmaM3gn6Wy(Qz)hRQVzJS>f$Iwh&$<2kyhcIYwH2`Q*XR36KO^ zRm>2TEGgeulZmVlsYmc4KoRK|-!-SozIB+(hs5)YHN{ufM=Yocqg(Ex?{$yoC)*V2 z`@iDX^6#2@9{hbc+!>7);euo!u3<#)XwgKi+0DAp&M!p;^mU8@eh=>v^8IYT?D2d; zu$Kojj>hEH@ad-(?_5O3Bd0W%)350`4K1qH1uu`Bfw8aJFI*eGCe8Buka`(rFc`ku zZ};y)F+vVj-kfR(i1aQVJd63bzHzi_?OjO92)yq67`B9aTnWRe!u{s31Ij5d3Ktjf z#YFX&zwjn0U_ZijAnXFe2opNY`2t!#Ml)~sHsUN8Seu^|jVC|k^e*m^`1=8d>Z^Gz zTD^RLHns(OK3ien+ehNT0IQI_dI*_kXo(tNXn1d$n)ybz-EFBVmd=|D5K*a#0~p3t z+@_HL!LS&79=y0vC^X7b!F3YV#?@Df6K!;ZM3sX()_%J8At%Dkv6~hv4;>wVQH2&) zo-AF*pp6dc(>yIKBGY{Sm}*IIyOEwF>$Eg1BdAhXJa5+zq@r+6Ynz~=q>KR2M@q*B zSNS|AsewK!-2GDRO66tGV^0ID$@7CiIXgdj^=y&VjShz)P3J?_GuZ&AwEgGJa>7(C zIQ7SblVdtl{-X;3Z<66e393se@ReGXbM9<}u;-eE+uX3Kw7tf7Dsa5i`GL&lIt6eJA zSfy0^pjSs#6nC!`!@@D^_5^T7@|oV?O|Hb^@4kVo3KG|{>n`nFtUXJY?3juo(^~I4 zFQ9l-aB2e`br())4yh>c=?K4aX2^3e3bdujI*tyh=OgayJowuNkey+ua^9&~yF|b4 z3Z%E?fF}#4PjH_s&>C=K(NGm~@VSH`_eszMW6;j|{D6@lwfxYTZ~;wYpG)gW`Bob@ zanUhm3gb)0F&)7dn$v*d;4;XQh4>}TdVDnc!p8(>1LTkwk1%xtu*2@tjX?ds#BGaRz(7FqUhFf zz4fn5>nVf8cHMp@$I&mRE>D5^w)sc*b|rMg0EX#egp?lhnkC{Jztxh8Qp?Jh9SBq@ zHgM51lT~Pg)X#vi)V223yKyWkD3Ax{MaxN1rijvqM4M(UU@{FBl$xb6VApSJVh04q zWa_$|S!19)b+EpPFH$;!fe2O0yN=1*RAUN_besHoY}R~&Y0iADe9_2us0eVHDGi`9 zk(=5j4=?Z`d%#nC4bI4)o?|AE4OU1Z`3i3;s+8e^_QQ21j{_e=M1{ky{8|5I{AA@O ztxO#tenHpd?xYYFGopw%9Ix4v*?Us-&d0H%7o{U)Sl7PDlo=pS75+fmx~8qW-JJME zTd#>1s{4YdjN8d=G6(&`DgIKLEmhtDHA`^bl2US^r^+YZ;AFln> zY+E@G5+X<7$S2%F;SIjmw2}LOdVZ1;t2!Vi%!LB z2^j!sOue$`Bn4iCJO5GPNEp|>oH%f@CMc`6Y$%o62~G>7Ams1wL@ktp@iEbMXlnbU zo&Wx#lEp%@T8|T5QaABwoODiL>UBR2L;OyfCzt7F{DoxL+Ar1kV2n~wsgi=uL8C6B zklL0-BZ{-654qz^o@QRQkX&}d)<-6^>CbhADNu`+GnJ!uI z<+|?7er}Wh2|;pGCy7U>+(Q_XQnQ@4m8u+{QOK!oFL)qzj%UIDB}NpnP%u2WXyDQ5 za6J0s(MIE?ydIw)6{c)00A_{hNdRycovN6_pX)e;-P&Mrf(a*3V_D62Wh-;9-`)8O zHts(3=~@BcH%vG>w4tXrW1qDHhPjZN!N4Hak=zxKaZsu|b=#V>FW8x_w`o4jz7_jo zlPq-HeB6)7F92AsbB_OfTa{eaRVsZE&SX%;kjns`cxmH0B8{d^K2O4hcea*FKIYC) zxB%z45M7opnjXKek))6kyq<=wRwC`v!NwIuTyqSK#`n{7j?DzA z_UP^^mdw*J+fU=FEK4POGpSqDGI!~k96@Rfr!AcqRN+`x3-~@*jKHUT;6~f>32By* z-vS4sGJOBLFDcLoD=)$HBSn?#Ihv)`)zO^6#VHh1=EsF=nID(^%G)XXvskb;|JBR4 zC(WVXbY4MbLlk|bAaXJ}!5AJ&Du>e=A;FPluWSnSsQg+?VTa+Rf>EN+2o>+8Vvk?! zfWGOvY7~+YwB7s~AY`+Ks3ld`&gA#PE4Q#T8GX+ckF?bxM38tbp6cBUIoXi$dGG!V zF}Wp%WVITJPxn>F%XIvk?=>Fa#F?@DCBT_h@eJf27!1oa#;yRfB9^{+dbJ;4DTZWV z;$HlE6V3osXjA~>n!l@r$M%bB*H(O8Tt}w#B%ZXK%dJuTSF0D1p-}yv*s_neMX+dq zg(=WI+t2%WoD^5F>xix(jsg)P=?X5gv*s`CFOxlqXm!HTJyMbM?C?Cgs93Kl6+Qb< z@xr8E+Giv)a^#J|K%g&;7qf3(Wq8HxFi^i>l!mL?8sq&PJyzod`T-9Pkqz&S03?8T zHz4WqvI(2M@@*8xs?BnmQUcSSmCK5g(N60&HIMLyU!Dz{8k$7p9zrW|mTl_&T=pGBRSAM1evx2D_WiNWa#)8^{*fuXvzk;AL$BYSE0_W+_ zuZO{f5yw3S=+1t1V^m|K61KH$`*B^|^2g@lUp06h?K(kHE!lTL+m@A#xMf%kI7~6EwliYH znM}Wjdjih=Aj5Ty$&68f{PWPRxx^X2s6@p4m70>gBW(Ll_plFT@DVK*(dX7*@|fVnT8m_IJR1ZH;CXhBw_YjofFV2 z=vP_+D`W`@poCT9F*O zLRu|UMY*5Rw2^P7zW7bJh`)abTc0B^St@H`Qb9KBr2+s;5ni6|+|ljU6j3I#!-5HI z4s;Y}d}7=CBp+i2|IwypBC@rUG#3*f3p9S(f+RhLfzI*v;PrhtoDRxxeKmI66I>)v zoDO@}2&SGQj!A>zc|Z z0ciyN*%KoiOG+Y8Fz{LUdz-LQ++{q$vED=y6UkzU>H?!@s>G`^?QjE%l6HV}TU`{2 z5S%g`V^O%UDywO!AK^12S!OB&etO+V|5m|OggOYLAOYYlg#FasWKXqN(ko7POC9+kd)spB z)btbR@2Q1+edF`}?iJdSrg@OAbQOe7MV(&l(tk#sT2Z6V=yOU3z%L2$e|u&5R47R?7=wm9y-amWKa9Q5 zO%UPh_7nyQg*1dNoOevCI}DpBQ1hwLiY3iM|S*E*d5Jv293t6>^7`C;xd!`U-8IEC~KofBD4PM!>xZ+*5hf^(JP zjPg?OuXF0Z-2=N7%E*|=&mIo8PXKOf!4vh$kn!2y<%A(Iv}UaPAOudxQL`LOxvUpq z@~w$5=;5~!aFPv~KRt)?_w32_)R-qVT`OszQ`8iJg;fcgIS#cD~po^NO;m?AgP)ZIja(`eb z@>1RE^pzdG`5v+d$*i6Y0q_NQlf@IQE?W0D6EeP{0(CKD(zLK~ylt>=ERtE9C}!6L zz%gbMbO9MYU%lCpKN~&ZR9sNefx^b0i;MEl@b_Cika^&^-S<@^37JAwN0zwmFD8sO z15IG1t4JdMvuu5?djC)l7j=Z8$Qyq`T|`Ecmtq%OG$6sJx&7G~UPvfEXx92N4tGG@ zAxE?*Zb;M7peJng>}=C4t?Kl|VyslkLMBlZwX~%gq+S@+p=t=Qno309cKd}1(vDH; z>~f9hG=!z%)(QIhJJYFVeEDimitvbC5oKhKB~F?1V*Z2ZW)MRY?$5r*N@s#Ea!R-O zJ>I(r2x7l{M%|BnE6<(wU-wD#wxt1vB9KV+-yHeF+je?-it zI8MPqWfmh(6zG3-&U+kczcXC7lXh1ZO?E!Q`N#s9%(Px93TC$yupAvl$-#GCxo)sa zwwe3kKg?&LnCNH;j{YiMDlE^OE_M3t1rk@6mHaG13q(IIU0bQqt-y-AX$Oa0p@=&A zJkzDa>AmtqEqRx7pBEFo#pG9s9DRm^@v$Q1GWu$fV2klitlcfp`8%Cicf~WXWpl)1 z^R-V89pBv|KX0K$-me(iXT0zF48kjX7NSU2#H+Us%ML*u*SsgX1#*fq4=Y(*ab!6% z=rTGtoTpbKZ|^@nc?ydx02~VCTk~K@oaW~En%wI&TZRsG0T-rL+PsGt%6Xj<)v(lD zJ@Fae_1A|~?`6{($KVzeZ0sK@kM}?NRAgIjj>K&iT4War_>E#&EoS<>P#8GHb6m8N zQ!WTbS~6lLC*{MVIMu|-Y3VFY&g1Cj>nv2(2INOtq|<)vJl@I|-1k&&_`D!sz7^NZ z6T+xAdB!ob@_t%UPK;r3>+C>M2ixJmRZA1w{=9t|6GwpN_NFVuNzLL&!j&v91;c(_ z3O_!IjFxs%?471v3v|5o4dldqcL1L*mo-dz?uqlYLPvA}OswY8nibBQxwJjttd`>( zlwJwii>Vrsmg6o8X&p^}1c%ts^mgbkRPv8hTleACo20XX#Lo{yu+`=dSu10#h1y6L zdXNSwlL2JJ+z_I~S1c?!P)yaJOCMLAF>65!?_Ic^_mu?xMravfB-z-xNKePYsThoTmjfQES((zh=94x5DS7JF1G4hNpIPEiM&dn7*dD$cf_=i)ABKK& zO;fgeV9!A7JU<+`)?EjAmA_+36xIm0D4`f`qDH zJ!%q8Z+(5epR2R4zyR%`Uc;)#%L(S$z{80p`$Rf@!i6bx zE6Y^`+GYtgNT zH;M6cR0B0%1%Q3vp9<%fao8=wBRkvN@V1*%NyKE`oh#4OS{uAf?;SGE&TL5U>emb? z*?-AT5!*z*2jJGBZ|@0AGd1#o1zwF9!;0HZ3%w7_oeB@P)#i5@{+QGTZPf#vEqut* zef@SJ&E;B8dcxYR#m}M5x!(SMmq8PO!>~qDs@Vd&1PvYCGX^Z z&!sx+nI%a6?&Rm}7_s+F(>^+pOn8Z8Q=~C^xKxDc`FITNG|+vgw~tDm9|?O6Oe)Su(ZTQoYgub9_iO2EIFls_ASGCpg^3xH)EPcejN{Ddyc&sij?q z<4k>1nfuUWD#as&o%b@nr7!HAxRg|pZNVB&X+w8`#$=tiwZq<|9Q%q(>Mf_|$X0Jq z3#4$MtbRDr%L#1O@x9q$o*{`Xa<{0gWf!(b^9?hDb^RKcT5Ef@+9q$|{=xa0ldWsS zB!05#aM*n^%blG9%c5yk)dZY2G;-cm%diwyPPHt2YUS>IaKVogK}~z*tzcbu_~w3h zEkK-%sQN=u-s6L20in@aMe~`Z$TH7e_>NY+#d#3qE@wyUfqg#5_XUIb_(WJQh{kaa zBJOV#uV%eiifZUB99DDFKGJupP15tXWe~60`=D^6Za%mlGkbeJ_h^6_{e z7^yv|VOSs3*|YkR&78xSXlxY5nO2X)d-FvN&!k$cx^~HmC7I2J%9&JX&4*6o{Y;Ct z?Y+GIN~Hvb^TBNMBEvD8fIh*LlD>gKj8$&ZEJH?*{6YL?p`_@3DH7Z4>D}G&REM|Q zq85fp_IJF)buqK??26KsEAtwq2IqbCql*w;1OyP02I|!j9b(Ar4AP==4O%bFadYCV z-y3|%>Zt)bw(GW%nnguxJelRjvHI~i)oo14D;?6$X^LiJ zC5{?)hC$0*N1iI0PC?}NTy=v=1qb=DQ6wtC>7!vM*!D-Jo_9+~UC#0I)z_YrSb4j7 z2radZCiVfEmN1c4^FQNKwPTZ$P0sMG3LI9ua^x7?PVWNnKf{c6H5iJtYkr=(>~dDB z#WT-MluGBRpsZ1pa<4X9nkQq_=Z0KVjzCSq(btiP+{G?P&AN6IeFTx=K=e5@+FhvU z2mIcv@He0@`y6@%by1bVp^7cdp5m8IkZb-u8FCJJ4yz2s=M2kwk4fNVZkzs6I6I!M zZ4B3)l9{D#zS|xCv{)%@jXC`m!TMxv`NV2V*^M$8Ub)0i!Fy?(d#{$qRyXq~}Fyq_)vimBQwM-J1ROFbxKJMV5JK6SyDr<{a#aAmZyn#%(Tgt+cHtVmY^} zb}Ap8Ruf9cEoyqsKNo4O<8fP6spx$Apk%y&=_O5V&pRpfS6<+u)JpM;#3?u=^+-SO zZ49jw=L!?1w)%DiB+9Yru&OC-g#We`t6gWVd5-55+vkJ$bWhErK*R>@9-Oj=g$;(a zD~1g=we^i~Uimrtx)T2R%`%sRG5#bfN)+q;7>|vp@ARV*3_L1pdz@t9+{-ggjwH!w zMBDG;XYrVC&^^!E+=qL=oPqVxUOwIiJ+cgReTz{UI&^nZoa`Zhs7&vw_UCMuEnig{ z{XjZ&if)|Qpd@4 zYmc`1#9lsiMrPr!(EWuS{>D(Zvwdz#_aOc?H))Gu#e|$Cy`RY-?saH#p^ds|-}&2S z`m~*F+jP$`_%aS;-S8@%$>#e#do9=793$;?iDcvKJ~MKx-5MRQBhq9#8db%{<|TZN zRnmKo2b$=HH7<&9;lArb3mjz50&ktry9*NDy9=EZ*lO!Cnsrm{c+fnx#fsyMW=?v` zqw>{DU00n4OYImLJ`Wi-s?tL}mFW z&ToowT6HqspPgUVPm(Iq)zMZ_^enXSY2*Q6u$j!_^nK>*SSGu?V*7<=*RvMKuClfzr?z0J z9Pgu|iAqDAgON%8A#^F3XBumdu-Sj`(c_2I9*mFA`aXFcaYF?}ir^Sv5%R z4)<7`$i6N$Tqk5+xu;;D`1<)x)+F*o0Kdm;C?;A1{deODPi)nHm`ze5|psK**j}A-lO;7&w_%a@2*6q z;9&1A4>j~!2h$entt-;;CUhET%cP!|t0-60@gD4SlfUDQ6KFrxj8FYoX?5phZ`FY4 zWjtguL(WkpMz2wADo59rxUp;F+B5&SL{(=ucuj6QUh(Pf?2UaKop!ZloxL|wawAUl z>}JCihqHuv{6a>0i&?x+DT0i98t=AufYrLiU1fS?q?xdbf1&en+Hebvk}HmMc6xN7 zLnhsyl?SpwMm?+tAEUnB0X5O};{y?$=Fi%X6x>_cUQKS>FD=nbmc4Cd%irMf6{E9U zFL~+FG>2^W85?%pZI{)=^uJUjXOzF4=7jOtKr4S53TS{}u~f~_cZqbkM1I6jaT2)sxSQP zqRY0owk#ff1b045Qfv^yBA>YW0Gai#iIJW<%>cZ_b7vN-;vf1VOFTC{A`;Jmra{m@8@zp zRT_^>{bIu8EP}s0TpH-xjf#%m-;A9#j4FwXwVh(qJ@0p^_b3}caP|2sazazxDtg=Y z=fa3WhY?NQ#eniQ=-kp*Jo$uin&+TW%6B$b%EBJHBGQIF zE%&zwR*SV_$&$^$KHo;JK#~d8LfGRkYtpoqH<6joeDh~A{ikQ03~NQec}LX;$oNQK zefR*ptKu(sT37yRVPK$E9KXP-3`5w8iGHzXRykRrMHlG%&zo$fT4nb^S!v|Gzy^w2 zg$(N@%BK7DnZdKg%8U7Z8}rjBGGnoW;E~xT4NNWjso45o?dLS5lCS@187JmGX!>>9 zWpA%0hOL&Wr5c=%sT?m~X;gR2QG98hq{6E(9k6-B_v~8!Iaep;4O!Uu7 z{wOn6cVJ+JA&_USTmMNefB(+v2=vVDk^SL+UvyLV#0Q1{@rmv2|D34=&UiQ9X>$K_ z(V;Kci(WvtbAQEn? zjtP&5sAwu0`0elf(7wNxu?_}H; zyh&Ncjx60=5n3^Ax$5l*IW30 z+5G>9mxg+d83aM0>BxI)8~bnb$KWe&Z!3&+gb>o?U6wl6Tk>G^!e8q6#tItj-_MEv z@PdCIY=6Md9$#H?H{X}qw4Bc~{&y#9{3Gr;hp0%~GS6ubdt_ zd)}q4cwLu;uA})xehNU0+pL;1_wy6`sg6T{J{c zX$|+paiLVTgveMelK#&XtwGeXH(D(x4c<~Zc`~rVph|n(`0~++q^mWL|9+K(vY{~k zE0-@@?o>7k`Yq=vU`SkVon%AN-~B>cqC-nc{of1JGfo=3)|?;5Sqq(!BERij<~aT{ za6uco$S3+wVMw$+?0;eZw-<+3EPLVuC?EabMgO-Dzis3H7UKWY3n5^8$tJV^+mEas z!_0Bkflqfh`+IxG^I72XwJl>>qHXX0Ixhqyla0TOM=}2NDbj*Ic@JP6PZqCSd$aWL z|ynDqlXMS}h_ z8nz65{JObYaS6s3=rj|?v{OPmND6*%V_jFE|HL6&3|;CWxtGdN?FxW=NwRB?GRbZAsR=~-`UWRT za}xW-sZ2>JH4zabLGn^3IbxnokoKm%`JBtoDL$W2{)ip|8C=iJ?Wtc6Tq^IR=KL<0 zA%cW7G#X`%53%%3U@;0x)Gj_~o z2^sBtS9Ix-{xBq;y|=1$=9Q(jMlBs=2y$V^wZRXS5l0+z_EyjYZY(6L~7RJlP zWQZ(9qnh^TWc3@)Gc;V)r7T0n3pQAw4`KZ=pYH5_8tBE@v1CUFT*XQ)W1}1UGKLOO zVpJ~G+9zN;zE%!Pv^noJu-U!EYB73LU0+(vBE1dpaDH^c_6KR%?2|>Np^xY*?21lqL+%8S z;)SD!JXEys!8)qqPL|&WcvAvYa4k)jnjC-rpohNPw2w>6q07MSJoPxI)q{1<&M-#Q z<+ep#unR*nPwi#_^dnkiDs-~sT01NGsPSWDq+?7ikqY-)L(2Vf3*xEvXO^Re$4Qch z8qrySTx<2$naP8ukzPr>RzADm(U*!HtX-2kvb(-8QlK0xx)wRK8HJm*{iyPnIt%%| z|Ga2rA8Z)BUUlUBF82h?d_D!RTzJbgW$jzLscTdpFl7nCytE7IBp4!-2j^$G|GB^yr3$i)|_#_BGM4+-Ep2Qp5T&fDi1TuZQ`c zo*zF3yxTasP0Q8hKEe%ascQ1sjeo69^nyIk*?5c2YN-W^k(c za!z_QTdPO8{xPzGoI`&a!n)Pr-0YD1>-`b-Ivb<@{@fEuJhT*q0+JlO-l-6*fhvn@ zuT-9l?ZW}xOAifZtH^=feUnHGArw|Sf&U|(^FW)}?%I&yhq{{W4Er+0&s&K|x z7ir0MVGHp!>ll`T)3K=S-dACXwJ{8aI}1OOF{w}J%Iu??lzn!k79HKG;2Hj7rReU< z;NcFqzl<>8%Z~T@DH2jC>hFybj3CL9B`Bp8LFD-dDdx*>>$dQVNPliL`V{NO!1!bTOA=GQrir~g> z2I%N^H#3nGKcEnG48a5FPW3Jo6;*m?2p0JBmnRBF_|uDw5MG&?U&1uBte!iAtnppF zy`yI~*hj;^nQ58FI8ZmG`s%i8Vj?0^hnLtH6Dn&y`Ok_)?P`50>fjrsk$#(x0Nbot z4p}|gH?EJIpn=>+B@O;`FFvutS6wgDEvDlB*cThRVO#Ce-zzK{jFGA3Kxws?;W#e| z^6+j1dQox47082meU&AI)3~L@0yLak-}Fr7tI^CH`o#y#mefagzg04?J2(HL7_Nki zkDF}A#6P3)?Q}2MUNqiKf6ntTcTn+pcENeelYC~h~AS|v%2R(`A*g%%72Nqzng3h%jq^1l{&PYh6x6- z^^g7e9n_Pa6WD`{g$2$W%Ci%59}e~({KgS~)Y2wovYA0_bRqpiEP+RTHNg{#{ZFw7 zCLz*<#f`e{U`H*x!{Btv&+pq>le7G6C6r3ZVcuxLX!0g7VPs#FSO^0Dj*Go^5f76v zJjM`wby`|(GsIMTbR}R)FxIfhnf3kNnAFiUe8-%F8y~&8a{}~uzfLmh0qzc6bbHi_ zH0>f^hWv-=o6AundS}eF>|F{7`h^V5dC6JNggupgB@LSwnD?4neiG5kUX>Fh3! z{ArDgBt?#hgN6CYHZ}IAg!0c)i-@9V72A@7GGpfq*6=i!PTeo$k>(lEbnA8)Nr|>d~+Np@my~uGzb~0EhAs{>SknPuW}#%rf9N1?!lwuq8SUK zpV&lFI@y}sl&+ExN>Ip=iIXaoIzjP^doA$`6&l+h5sMGT(i4Ls`NewqpWnKhl}47Z z$u&~TANtLKl9PR0>071e{Qcj)2R%@Z^63cW_^&?G%S6pe65Q#18n}?F9W1nl_gg_e zxg4~5a`q;k1yb^q4Q~dfY77$=r1vN$k=`vx>l7QU3=H#cd=SGq&OZ~=8x)~o!NS&3 z>v*hG?sDz|;yM{zP%*HJPKzC&hC6Nz6o61C;l}lcyr0Jex8F{!gLxz!c~bs}7V)IR zqV<#P2JMc!g#-uLEq+LhkXP7c&~b6}G^|lI}oAmY#PKbvL8w zTgs+q_}LlZR$>8LbFt}576lAF2?9pHTD5JB(tDxye|{?6rsVbxoa)LBCagalfqQZt zZw-}a5%YmsQDnDL?M|PIUT%K_Z5!RzeTc|i`hj&4t3Yiu8A5CkUgVloy1REXD1~Zl zXtXJ06-vXhK;H56Zr$Cqyc)h+%?Y{Ov6>AwPq$_qSNt0N(p|qH*meS(180%Zid|BJ43?)aqC;Pd{kaE`5lCYb;1>OO(24*C{ zl&rn+GdncpPT#8vD40dT4|g;$YrB%h#Ry2SH5CFmN&y{TN4i3(J&upcG&Ck;M`B}5 z95yC(e7+rzJu02vJJpprDnqS2-uf7U61)+QNjn1zd()D6sO_@q#q9CKj zH#LaV&}og_`)1pMj927Lj^DcplVV{(5((oef%N2v#thKk@QW?G!{Q!c> zJx*?zLVgnDbV;1zdFOhRQyVJhdh9hxxqnq+Cs^wcwJAg0H`&S^R2%ho1I&?E9)r8n zQ|;TX$IPyN=_c4sTTi8%4wii$P&wWio0-tz_jDep3*bbv^&(RCK`Aa7(m|6NON9M3 zW|Q??3c8*r`tv*b9nU+j2caieKS64z?ijc)h)-Vr(l0}EJK zg=>#=XF;L3?d%MBLAN#)Yzry%=YvTR5w6n2?R{NpVzvd(Ba0`yDdcAIOWP7MZfno0 zBD#-`O8v6>BnqTvD!_A!oR}LIXK!tgF=;{@pM~=vnMeY)jv4 ze?HzAQ%O!H>+EqLebv#?IaKGMF$w3DiUU`bRJ}KUHzL5mS`K#kCXokCPwQDZyGjKC zrZsydAG+RV$aYkRsv>#|#!P)>5;#z(fizo=hvJ-JY)X`4-IIqLFSi-8L7ck(mNhqUlkUg@lO3LV%1jY=gMEjLli* z9f#-qM!@q`_lK#*^#0PEJCL%)XKjoK7N^e3K+1(GcEoO^m!2E{B zAsdwr#QtG%n&z}06BDxO--|z!zm&BYsd&$Ty+_-AsPKzGx<0}+N94E5MOP{_kJO_% zw=vutW7QxVwXKq0oL(h^L2vLO7j!#0xZ8c5^y-bRAuHBuz4c4d#%Z11bcZ93!g3A* ztdqY%*9(`W-Ru;6xHKuUzrGQn5>1?Lw?lWRHMSPc8OroVs2z4EE6zTf--i)i7-%ed z&5x}JKzGsCA17pwD{u&#!%C#mWfwIo@#z2twby5Ik_<{H-CJiKyDQ51{zy_rp$e%{9 zGv*CtYw;P|H8z#|!vBpnNMBlCGq(9Le=T@;8Dj*_y}g#PAsif{G^KAxcB&4j=!~4- zho3#~kY(n4*UUbZrJn^odZMscurk1?{;2W1gyQYZ)!tJmmuncdcCqnXY3^$lR>u`` z3(ZOukgLP6#%f4bkv_yQu6JgNPf3k4e@^wYJ7H{by2rK4^5}MdRXzb1_>*lm(cl*z zspADUD`y<1^W)4oSvZ9lI@5?p(hYKlzUR$yrQ&Y!-<0%UU*jeRc)#5lHkZ5LuE7TN z4X93m53;4SYPqe#MJ;(~#Hgsb@fq0!z)ci}LPE&cn z+@6C+WTjVqX$y_BRL@r0BOJJb_`Cb~V2*{I!`igi_2U!PA)n`Knfpo!*S->9wn4T8 zuf76e*D^EXFRE`ewAi;zdL}KPtPaUcuk3Q{p56Wn-?3k_EV!Nqk=*Su>uv-vc)dib zM=U;!++wnP*v`{q2LF-G^>z%e2~qIoQlZ}@^PN52Kybx9xXo0)S36JJHIl%UY#SQAIptCW||11pV_A!(;vh@)cFcb*s zI#1Ysp;&($iXtdU^5P|a);K4!cf>!3#(43b%_uk(=FpRSeS$LymC?)^ivfO+o9Ky!vzvIb zTkDBOvG0=RaK5J)uF?HP;E1YX9{56(6HV1g`p3fMSGtnVKO^iR^Lnb8Hm;>k_a=e# zh4ro07YzGEru(SZYZZY{T5mYLi<6#(_T!-u6C^sB*!6S-4VCfb3)+F{A~uwc40NDV z{r+Tma}d!wehTk#*UfSAXSn=`m7$nI>=lJCs#>Wu!dRI*kK{~LE=Ly^cc|R&dX-Q? zPy((EF9f`43*0abYF=i@tXr*LuF)NH?KSc?iuhge;(F^ zYbklM+u%)Utmf<;X3nSCO!=dnLWrP@f$xV>3FvZC7B6RvKCS8J_k6;UtWRINhw-Jh zq|ojU#aWiuYCYZA8uH+ShKc1ZI`*@;y{;?r06S*E_b|94tqW+N^=C3ooI#Gr#hhmy z%aCdJG=U*Qiia2Ux)C_)qyMt#ACjy zOlYNfPWn?d@J&Js@9u&EecUIG{q_L%<>fbV7n?-H($cE-Za?3VclHJ^NF;UTV&mu? zgv6H7xt>s(4y}Mpr!q90N1X2%wMR%b%77z@nSE95`yco&tb%sMYZ!KjJXSt`U)4X$prte-4 zNzQR5>3G%8K-)vD;UroLZ$RX6QkA4sKgIPE#fvM$Uv&)9x z15qhHBi7D@NpwmpLlvgN+y`CGWz$A-tRmI$kc~Uw`9D#84qmK)v9p4FbA_dvo%3Of^^LxYT+A_Ovt3r5-+m=L*l`Pq&7NjLSZ5ZV)r-@nMo+ zXZ>VZuS7PBijB;x39kUQ}T42rTYb<`e0 zGGt^T)N}1|yQ9p!@7CX0U_=E>!t)ud?7ah z4IvM$qMQ&=!5Fm;I@8N$4ddw3>%Uk_zB!SMMyZ#c3pZ)|% z=G`>?;|;|ExamkJ??iDT%|thL1r;^#hI;%T?z^pcrTS@)P5=iJGiSn1HA@A)!fT!} zG*0Ep##T~hc}y)6$2~=tV8Y;=4CfTzVgv>F5SFxqp!X_ZJ(udEE6j%Ceqg3-f3I$2@^ zfA{YFaEVM!xHS1h*4oE%%dvN^j+8t~+Q7&;q|l_2!$z=QPt-GMX@JjrpG1{!R^+Pn zK}<(jd)I0H1yX%Trfe(=yal7BH;Vr{ap|ANp%BwyTGia>{Gs4V-Ga6oNRpt_suW{v z>2Tb;p=3KPY+9bYD5+82&{i9C`;{t+;oC?Z+sZeVfusATLv`t#R^u7ZN)0TWW;XCS z^s;}ad>JkR6`kbMsTa4R2ygvH5&o7aC{Kg2VE`9Ds^Dp8_dS*{qy$NTjK?WfvVuqvU6So1ZqZ2 zPCKl!=q<0F!(xL*Nw%*Px?$+Kr@M@Cbk4jrwT6l}ipPD-J*K-$Ycyf9htU@219E zako+3N*GS2Fx?%;8+!S83Nawk-pmZy{7C!A!c};N0aef2KC)6ebo-k}+MQZ81}(WTs|0%q-Ny;`}ij2b*xagg`o#8lB@f z21w8JD40KGQ>5tcw#oh$9+r^%b!5V5wlA!;2aE;TRs#NPxW;hEw$B8S5>a+NU+@~v zCz41UkDc(3)Isl;0h)OS#2)*fZZztOuaxO38?mfNrla$_Bi#hf8Vp^QlFd*9BKPL0 z?%pO5(0XPIXLEYfuMt??Ve>z12r_{2bDX^tS*JeV$j(gC9^PGxtu`_c)up1MHtXp` z2jV>cg$2U(ghRQpeoRDVE^0-%Belu(Mh}$dm@8kmRAb&q6e>oIA(7Rw9p=U&8b4;G zX8qxq^0PofY$`~q=b)B4#AY7Xcs=BCf!f#(aoJwwvL?T$@4A^jN1&CWy}%CVmct2Q z|4>lm`sa*k1Mt|1J8zkg_+!V|wiWFOVF~pziBW?2^AvYT+@D%A=>}>pVY%x$nH;ld z{*3#0N_hD{IVlP;de3@pgge)ng!AO-(}6U)r{yDWM)>rGU(XwKFdTJ#j8h!mJ#|BMPih=NMcQ=|&mnEZqNi+RD$*9R~6=x)qWQ7&7k}Xwv0%g+= zi}=b>4HoeTZGwcJPRP1WSbQOWgf`5<1v0sK+l(JJ@KeFPoa0=^gH0sC*DfZmIk%_# z=%*M7j48*G*qC0yytaDM;2?F$2rthl!YZ+3kRj&dN&k&@`cC)IACVb{WkX{pdk^{t zO#;|^@>vj4Y`uNtM|{<4pYmGc_;ZFRMn-`%GkJ^CsKfg;>_I53+b`GgJk$btUZ(RJ ze!OLcSKD2Z)E*!BP3mXlG;^4xP3_kA@^e8pCUptTOGb2Qx`)GkbEW0U#4#P3qCQ98 z^z?Np$;S?tshLE*nTs!B&~jCar*f2;eG$)6aobTVdF;46$lI{O zUJNfpLXQvGWGExQcd+SX637+g1|3PqxcD+RZ9dL&)-Am$@-yrUkWSz37}8Cu*1${P z8vdP{_3fTHrTWjBd548N`rOl42@MFPs|Ee}j)H~W?=N^8Q5<7T)f~^)W|%pwR`iSw zI+n*0GXc+6tt=-YJ5;7?Y&OYk7ZvT2wN~3M<_#n@$tl|u!lh?J5I1cT?B95s8#iLk4*k!BEki`IbLRq2L{pQ4aG+&`woDIB!r6+A zW~r%9hHS#3G;)auF&rU;hU#w`CBrBy1oc@@>`{qEZRSPvo0Bx5;k%%>AqE*R)rz(2 zi|*$I{f>7IQdZbI;=)nY-abvWP`!|!t%-uAXv>X&)3F`B60}1JzCQ9?JO(-ufPYsr z0xb1Y91?{WN8dyI2c7YPZ8Iio_A0po%Mdy(OV+LrIJdq>BF2}%5=g_Sb=yGo^&%F0 zW%Ldo1L6itx#qnpEN6G5{ZP@-RgA#ecsF}&&t@eL z#k&AU{str`Xt{|VR?bW5`r4(90Rn)^V{%pw7-O!hwY#)jHFUCHCg-JtKUFQ~u{!#> z&{G_IzpVtR0kqd<`D*4)aS70KC`p6AQG>=6D3*a@fj;axa#>He1t#~CMyH;{3gN!% za}Jp2L>$3e+oIB?!hEjoJX?K4ie!aHXu)~fUSt$4Z(882Qase#ejw*o6a!vItHMIT zONq-9lKwh@$7t{c{wYj`{7DYAr=`+`#4>uBzsHGaKO3bd;47`HFFMwbhR#W=w)JjH zD~>wF=y$mkJ9PDaf%KHrCPo97iFfkTmYWO!lM6XHV%c~|KjHmNKQ+a_i@9^BS+d@Z zJ}%rn%sNHyQpGS1*OWQetY^lhMw0Ca-LK}Xj?ORVz{`UUvWekY)nO#%^971cId2R} zWfb&Ot2-QRDtP~~Jy^XWiB-G_tKS2eoO|QJC*PKOG;{3ku>P-B4bE5M2&+W_(gl^6p`-6lG zPuhI75Tepi^oH85(!V3+bdsGY%6R`ooUG7#!xx z^@Ac|O^3n!#<8v1yq!n_gGWt6R;Ig&*S=O&{JYZ?ZO)*$D{}k}=gyuV)sAMVE7Zjd z5A`?yGky0K^=N&jk;ifd+S6uV1KM9sVG!Facx)vPVv92BJ@S?1!432a$k?5pw z=sfTu|09#hE$gj>0#R~u%8F*z*X7Yo4%qqw<*= zYP( zO5D0Q8L!0$A&iip4_tv09LW7x)xUobwwS*7&cXn<-<@sMIN|&}RwtR%h(b_zyMZU* z)TYaB*J;JnwraGRTcTw8Hw>)v&rGAtTwkZrdE13xr39#<5Z^En^BgQJFo?%5e|-$r zZF*D-sBF@pb~w@3mrupQzKS`YFepq44#}~7GHA}O#UWJkZ>IF6S^Af7k@Z^2)p3+s zyI0V0P_VdtWM)(^Qr#RiS5EM&Vue^v9lb0Vt1+p z1&6;`R@Pd3%JP>kzA$1Qy~Ah&LnE`%;d9yEu(|7X)sf(ka8MZa>*leV?gdm&)z*iHw7wOzS0tgd{Sm{FDnq9XHIkhrx0gK<)XT-ns(4J;9Q%(X#fa4_t+KpA^bkPd z*3#M4Wp|Lwf4Vy6Fhs1z-J$<`^RW}oCqUz;B&JxWr=QAhATQ?#()&;31(@lxSYSVp z!av*JDcZbquuNv?Wzh*+W5EnlumMueWI$PAp_;G3?^#8C!y?01u>+YkouJkMY@gEZ z&5Vj_$}nxj_v4Hy=CP+nosvzRM7~KxX@B+(GPB3Me0ruZU*V*Mtv*w@^{yRBabR0@ zrvQxZvYd-*pcmv{xDA_wBa2b?Q)>bPAj;| zAnmWj2EyE@eCRQc_Qaml{i8Z8zvj*QbfEa!^i%QbGAnVHaXRLc`2qtY1Kw0gEUXhg z5$yO+9E{sVr51?vuG35M#UglGgBVK;d=zqI%ShJdGs9oMfZ2_M3Dyc2wjNRqq&NUU z@52?$bZ@j(5Ncg2><}mdyW4+c^enPFH$98+)Awe>qM+qgNAx=ym{^6a*gOw!@(3mn z&?X$U7zt=G>+InQ2XNy0<)MLiN`hgp-J2HKT7XlDJEV24K{rVwl6J`Grlckrj`S}L z$Uwv`gqzu95ICSIz%C4LO(Wx=ndT9t65iBVl?WL|KX+3TAL;Y4F zD$ui$D02Zw+VyO(9>TT(J)rEnk)b|lAA6dzr>lVCn>nsDwlxI7sW>!@n z$W|s*8Fe#H=PuqoKFwIO*2^HMzyL_lqKL?mI5BQ{+R{eX ziy}||B-VasR)j)4$yCftS_wcF9Gk=|NQ8LVDTfKqVzaWl^kHWl)^pA*r;B3G7*c(=Um45ubc2Lb4HB7h&O*?5)fBQ#Kft z`sE3YSxZ1q?{GA5@>L2@S;j|9AiL82By0SXiw;$LHoJmyo|4>FZJ|-=M)QmTV7gPi)+(`K&viR0&$47#?mF=TYFS$uw1g=C~K*wb%Pfp z@#TwL5x6HG*9Y=t=Be*-$!lu_RHWGXWMsOD+Ow33INf%0F#cR~psU2#{mNN*=jE9T zTwb+ZxJ~2G$lG4$$K(J387#15ND-@hgK4UA+xE-z$0s!4)f0h9u$aLT)ayeBmj0LL z`}xqED&o(22a#XnYp9ayg>>TZsrx?}4=qXPGZAOo^$MjfB}aL{EG`7L$9SMXYK&M~ z(nc)p*{kWPyc9O+eQI?jb&snPwP3Cx(+k+NlKyU8wY6hh-^o}iU41vJ`%S^xb!)Ib z$N6eZfKKT{Etd+-o$OuF;WRAz{w2VV_`U#FsTHbKGUXq2A11ABs|gN_%JA7YE*mqn z2R$!#7M5H=D1L+ur?j+HEP8(m1x>=mt^;jP>~wr300(}rqz>*u_S)V8M0pw z+i;{81l7L+({x?<$7iBLYo&^3V;HHqqC>ueykqefy_h&A;el6-a<7gy4|!v0K5V; z5e16&L7T(au2h_#1_AZlVUaU`KuqM4G8?XO3~KDw+pgsdllhuu-dHF0q>k?F!vtX| zb#;^d-}KY6Y$87-j5OxK_1y{=^Usjuvbi&pIMj_3+;cWKXkm!WAvb4xGlh}*VinpR zGtN1L#LFi{oI)K-sBEyW`4CFUIYHtCe#*CR!(9F(O3je85#E8?*MHy$(&_s%uHt?7 zU_jNoIZavMsND>DIc17%{e8gVR3~?ITa)OJ$CKbTx9-|4#m-ILDT^&XqYl*o__9~W zTT>%(2ueDO64Vk~%tA6lTi~ZrVTtpU^29Ea!q_)-A^K@FCf!M zz`exctP{O1C!0X`9pY3J^vx(?|hV!S9HJ+>WWw zT_4%D)1ANooWc-t2sM(9%PkbTme6%Sh*;^>P7@0z#Gw+h=+8>*C187(`D|S+JKbH4 zQ7hM(4Uf-Xy^lzs<_v78_U9a6@=3)9vMj@O;!ev8IuZTi<8`jW=Mll>V?j807XIZ1^SwbwP-Ar`<(0IQ)2^vn5}+S`dC8lXX6Atu^-AiYA@k$_GoS|TfvLf#WBB- zlwaOdDC@fI)s~i7X=}R+oa~hoc$kuAGW|=b-(qJ?TjAfV{>Ht-K3+iKPgd3wpz7or z(1G^3+@$v%pLCI$wZ+aDp>@+%O2~L}p7WXWEG8tkX!2H9*{%~@U(F~3wCBXc1b{4! z%kkj`J93Me+>auZzMT}Z@N5peOed{}rMaW}6YyW9rDXF#q7vlhZdC)jH@GXbZ3kFN z2fGbR7s$yJ4zn8=g3iw#s_!q}*R@C4HjG^P3 z_(gWJ4Fr(;kgw?|e?b2rj zJ-M=7$2fPOpZ-PeVgKX~o(=S@DBhbKQ*Xq_iboBkx&tYqn+dpvmi4#16PTpF%Tvri zS2Y?uUH1^NL;-2e*Q{2fX`m!Af<&dBs1b+~QDn#`aXjbgC}>=JbR+A5`2JCu=umvAWs1 z*{5JF|D(&M<{@!4iJR4<0)7%Syi>cnb$2YzYP`@P{I`R~F1No?(a=ywRg5I&8h<~g zWn+`Vm_0W}MnPIz$0Hp;h?rV5X5*j+%9XJHS!eqR?|n=00b0pR@X^L^e=4EnVq=jM zR`dFppm`%;vo%Yt-ZDK$?gCuh>VD+oabF9En5{)IH< z)UAi%nF19>ijQn85LEg(W*@J-ZR%g`fvMb2&iYd}y|j}ZKI3~u+gEJ$N)Pys zXTP-JL|x@@`9v6*J`;Yn(Y_5D`qQ_e^1gtu&D+~MeIvS3zpHio;;gn1w$2KX>~Y3R zN^Woe*pn!zOE_l1$ZNm$Bhlq*U~`1MKx9Dhp=n41AF$(4z4U4?ot;ci61YXM2|sp(gKS!( z%}XP#M1HiOsFVP`@*>I%)=^e#IW3@2q+A)8#m$3Bf8sbIAB#>*=!8zoY*6q(=0X6bnESamPgdw+ZFK2Ln_(eAe$kQK>#^w+m3Goibo zf3imVU%wXqnE|}la3uTc1M2?opA`NTbvaaieSXhS-bcT{;S!bsD2Z%3aPPxt?+)Bw zoUTIy#KxPJsKj@({}3(#&;ZCS17|>KFyZmN&fyL&{2gkIEFjSso5A9Jh_L_rJPs=1 zPiYxxJP+kI_t_s{EKab$>S8#R{X>c5f1hV62`DIJB=&`tKJ# z8IAaZ#1Y)z^1LKvuTFzSoT?Gq%;Y)+$e*ql^xoE20Z7#NtH z-A21~Owm#E#gjz_$e6uvo>S*M$9qN!=zw+MZbU*jkl8;mo2+1KT-WP5qn@2rxllty z!1g>>0U9Lp#jpX-64iCPNdDsURL@;1hH>nWxn@a`hL-lDRn3K!ub&@$Yt{D@^^I<^ z;;qvSa!d#^3d;JinvNoj*FpQ_vgxT{XyRNtol@pz1>dd>&rhYc=NB7+ayVF63ng_yC*ZP7 ztH{^N1)2%A*|*$Y{`sxgmako|8TgWUz$@Z{Z*%4)#h&0^%bDie_V)4q7k(nOOiiIgE5Ur<<&UkJ1* zrsJV%N#%sw@1z~}5$4;8CoLjL@$p;dWgKdW7>qL-L;hOsV~ER`cf6 z0#0jBpbSKmP+ug}1*MWS393y0%CEQ`%Ux<~quW!}OMQs~F?li-R&ye$V$aguoae^U z6~yefrxg^Nuk1F;aC(?!V7z6iLHKO65uZtsgkK|}+Hdr$LSH&A2rbjx)=gDdN@$cC zJZ~JW!I_wW2smGT9jDYLw4AZ;!;*`~Xe*@lmM0R2{Hlas@|FM2LTeGMK;&wF!HdMw z`aZL;NmP+mtSOxaas2rS@nD8K&HA#amPJ9Oonm^xa`uP)lt?mnmu;{fDe2T#1cQly zB$H#P!(eg3+LdqMk;G!gaH^T{MVZZe9zYou$BN9TTm1v_BndIp_X{=adz8*dI>ngh zn6LjqNEUysQDRVLzV9|!XNM>7@;N`-_c_Pt?zne_WCZ@d%Rx}1g%?OQ)SvuZ`8+ap z97$Qf{PV<1xE_mYvoFY0KKGZI|6-CNx0gA7Hk#kWx^}A<87SNEauhX-WZ+ z%v#@~1DI`6az*~ml`_53T9jfiWg~?XuB#yNrftEo_i`c zptTa)W2a~W4>YhAw$ot3RO9glYw6Vs2$T3tkEdVOmu?~1Q*j;B$M9hc~puf0)s zU|ukO=O{Q`>Q5%861v7q9k5F}+&8JDC42SW53w{iyUQ z68$nu)`EcjC$s2h@qcu_U7a5ccCXJVW^yld~UG%PsQ{% zbm`VD4Cyti8I76~TcwB8udU-ic$!1uWMuk-B9Ffz(Y=UE`2P&r-x3^ zJoWqjeJzq#g`Qry=$|NNwQsSh@cF8KL5uNU5(k)e%G}jUCqggl(0>s|P|8Y!hcbZc zraBdR2u5gc%nGZt@{U;RZHA0Ae>u?+zYKAxn)bucrPb1F4HBUXr^zH2MN?=wSYEq6 zoppd~J7V?1>b)w=CkmvXj9RMmsVTlpv-Bv{0n^|AP!(kM#8Rm`Op1*)V~ynz1-)d1 zmNh#}45nx8_>nr5)f|UWh=YCB{8BwhQ}y-SNbw}aAbPE2IyJu{=~xw^JFWW6?$!28 zRAr__1S&NSQxGVdqxS~REvNW1!n}Y>_hSOhI=yuIkQjvBDYzd_rO~zvl*6@PDfFWb zU0@sMC4C3%lGt>j2DK%Gcq;7n%paS5|B#uu?LgM|z%c8}tHNFcW)VKyVQvuCvelFZ zTsDE5j;DA9fke<{KyI?hs3%SwxQiX~p?+VC({!e!YEivPe|g+UBU3g>1h~AL2FBwW zeWuwXRm?W#wp$ORK1XS8Hg-d;ccz^QIE-ovvZi-yWP%CZQv%1to)NHWD?XuL9LkV+ zKLdv-it(H{ORND`*AFE6(&4G zTIO)+N@R0>qn8pjvNj&$3a?+XKjBm9+}hm?EipH~R6Qy#5%io3%&U1xw|rtaM~{E) zKnmd)Ezp6B&AD9)T+_X&3MCd|O2oEOZ2F3t=IZKw<(xfFb4&*gr>uK@z+K4P_w0sb zG4BW3s9kp3pC4pvNGac+HU(DZ{S4G&YFM|6NsCw?swtyqkqc&1eeuaS*N{Oqz0|mm zCqOQOn&Y}g4|V_OmEj*U2W@`-BwlyuxXqyJ?n*MH1QtWYtDVC@?ZapbBIcU}lgU%1 zEa4lsoTE88m>2~IM%UFsnd7Rec(qD>entf`FJH(qj96<_iYxSyk6+Ftc~VSe-s?Y6 zw(1jDn3!bZd=*>z%awCu+#$}H-&wA2Edy>^B;&G7{7b@1gz?9!4cRuv>+)G8Cxz@* z-Z;GIB-<{d0yW)|qv6pDzehQt*}*fO??ZeHsM``L`3fDPqc1D;;iIzdb?xVlJCiaq zE+@%{tIX{RvX!E~UkvsdJi=|oajww_Esp0s2KvYYMVP57ndhRex3k1Kzx*Sphn5O6vKGb< z%zsa+C|)|3zcD6ruPzHOU3ENMiVg==xkLrvFsE+%0d6oAkU+2I(L(8PShj*R38_5= z8=k`LQcgfg7R#=D1u?hnk|5_7Ii7gSFGjSm)Trsk&4`$xjKR*x(({?D>9R6Ph<*T zyEv$H8+Aidc~6f26rF|7R)Zdcw91xCs(&yVKr2l*&rGvq^q2Sh>I+g#%Qt@I<9ycO zw3wAVCSWJ8ql@#661tTn&9#@^L}8M#vi=jas*sTY7|?xSk0D10e7Gmx@s)O+%VI~^wWvv>HUc=f`0G|y^?`dpY+!TnT4a4 zF18KBcmG-EN)wjd)!{+S@LKruUoKCw*- z=8^B`{KU6cB%g)`|Of4H1ajV{^<(e$j}rHnFXbnbsUXO=a>! zFhP_cA(t4`C@s&bKDI;;8PSk9ajVjFN(UP7$1)MPRvN2MZ48AIcY8b?4#=Kddtr+$ zQZZ5i!iJgvb}4!8xqCRApXh$E9%*27T+{^a{)HMcG#O(g*tqBtQMAVL)Qwo5&BKCL zt%AMfJLY>ri;3bWeb<8+-JuKg_~~dEt|dS2AZfDZh~&4HJPvs=I_v^arH(W0_951R zC>ox9b7{G%+Gn8TCC(pqxqWhY3jwRNlKaDqd29a88f9~m~z8Qz69tFANU{HI?>jhoxD&b6R~y)L(zzA2dlOF=Q~4--BE`r3iom$4HL*Uh z*k&)>J*9g*wObvdx^m;Qr_qp+n21yn1RhN(mo07>`YDFyiKAK1sQPyAgOP>iN#E)gUU-BjQD?wDyZ4CQ|2#W^2VRmz!~oV{b{iR~2>7$O;9X z2*1?}^(ZRG;h&QO3xa;hi%3SliIX%^4cHs=H2fs)*Aj>uMs!$wG78egHyE2?3%GQPl^58bgbiICzu23GeInUgBHMr()r>48K$c#VPz+5?$ z;jtL2)Yto5V_!kD=t4f$+bo}BTq0HRZBwuO#BLzxp7!|!TSks$xW(6lmUd$VwhPnF zNd;a$SKkU7AP?hZ(H!6ryN{4hwE<(DyyFpq& zKuQGZ6s5Zs9n#X>-LNR>mKGM>9p~ZIcklh~N%@~vdUxsxb?}Lb3GNvcz17W z=T730DLDdZv|{L%5!-DF7_-6*awxJ3UIl5oL+5;Q{Zn~7 z{4&+OZ!ZTD1=Ll7dZ`mVXQjCI=R^jzt0!qgw8GN5oDap&sp7Wxi%M2$fUr$Z!KOrT zF9hD;dK!?S+6Ni3qiUeuD2y5jx-KnnJY*euS(sdNJAqoguHmgp+yT@KqI^^`9 zwmsA&-5?vrUi_?;mSdy2*M_C3vK~(ZV6B9O?qkf5%Se4v5N^uu6~SEYW13GrU#-Q_ znY`I>?vG=P(1?1|lY#tmAPaw@fG#?IFBcuuLDRv_nc_ls%r&=BvP(2uWlJN@#n5u# zPSZSHP9c-o$|UH0q&fi7efPMe{Y~W&YROmDw@O}6OI9!2*!v&O{7Lx;6vxsU#W(x? z(sbDY$$8DrGs}Y3OSod|?vr5P%{%hsMCaRcvbk8xm{!&-cAaQ?#2m6yVPtw4_v9BK z#A{DxJL0)KQJt|k$$}U0eNY9ydxhqtBd`o@`{i`r>L$9V`WR&GX!=T+fW>U+rN$L) z!4(0sRfGcY@2|}#$~*|H(MJzwJ~E|%beK_|gHAub1YI}BbLnSeEz?c+S=0;>J-6g_ z*jh)n1JhmQ5fr`})rVjI9OABZAetYEAwIOaUj#Oudnbd`zqlEFHU8C;-(SUN^>tty zXnoxNSbNxI9#Q@Il@IvTQvN33#VMk}ehkR4j0qw0dxZ`zSVc^sL-oUJb1STn3xezl zH{D-4Lf`8%yTpwH6U!CD#i~|En(p6c>$E*De5I7(F0kgtXV5d?uA87YrZ=&^)u;!U zphMlQpyxyWC@`->d=w0x$gAih$>ANXd6orzA?!iXtTGIEJ?NW)2l1|&y`l6v-Kt_F z!YengW{H=#RnD<>5@cbacuvCdoy{dTY}dDWQM zg>Zys-*U<9Y%2)NrBmd?z~i{D%)~HYaxmI{V=_l?|87dVoKQK{jMZ?@#`Dma+E@Y- z64ezv0$*i8Q;~Oe>0V!HzM0&Ou^B?c>o-Ql z6^n^NVQA+TjfD50(WSUTofs&0?2ec_Y;I4w*Wy(e*ZuBX4N=#H8(=4@opW8rx{X{W zxcsV0M~%OKU#^F0=5`@z+bx-!NT_m7kK{NeXy}JUZn#>0i7dge#`hx90ZahxN5`D} z=X~OQR((1OydQ)N%(n=caCgI7Ws1i0RH4bd747v3yNUI5A%)J)bTNg6EAY-|%IVL2 zk$!Tj7usp3LVB67;ZcZHOcrWgD%Pk2Q@Z>t5U{Bno`D^2>|;s;I2MR&*YTAx=|(OC=ZQ;-|Y*uitR(|j<5rsn(_ z<;6=Z)+BqVV4-S1G&oWHnf+(y7i~C#L$Eqw@31K#E?q-M_$kKJRgG|4UC38)F4nGI z;iA@;8blidhC?x4i;c-ulfox@zM?wSu5S#mj(;+#1okq`rSMj(cHwb93Jn?9RB6kl z>+E?9>ZzUyQr-y`KbtUoDIoaam`%`&R^lSD4MKJHG3(im88q^sFT>uhpD!ea8)D98 z+JA(@R%=7My?PkUWTT&AEgdhon&Rymf+qFbJ4c3n%yVa!532UE`TgG4%xeJnYOuuoeL8H^YK)TWlCG7>HK{LIUd6`IO^aSS(KZ+jGo86+cIbeq|W*tl4J;iy4K?DhkR5CO& zOk>MgW!_n15|t9VSA*|OI$G`ly%e&!Ipq2;*72$Dz@nBcv3(kOA? zgI44o6<1buu!_D)l~qUkfOZ6z;pdM0{ZT)nm?l@}8d#<>Ou$7Q*Fa_~Zk#OV(x@ULolKvM`TWqC#I{_7otz>GY@1!jz zavqljW^ug3mY+RNCGHO@Ezlgqq9`_C*gYCyyIv&(CG^n@NuDxk)z&s|Rj;{6Q_oN0 zv5RejpeD1es>w0JZUY;Y1zZWtA0_jWxTDLAI(K|!X_HdUMSTNP)=#ERsb8#ilAM!Q zG#^&;A659(T!tQLF=V#vcSu+-)dIQFP7qc-lId{8oi@9iRtr%o-p+|`{@X9N-^m_z zNo}5}e}Ac-2q{CGT{oPu6UG}tgby=iGL#6T0K2%{H+Ij^B{g4z4)QUJKWpK0cs)~l z)05lbkAl&U)pEnLTll`3%8(LB`7@a3OZ4;VJH%FV| z-mAYfNkC;V`dUa4f34{g6?E;{-pM4ViFPO<;1wonvxTZbtg&QakfVi@%??{qnXNaP zI5@(ZrAVSwRzx`02nkUR*ywf`Pl*%DEKliDXZ_Hgzk{i20*?2~d}g|9Cuyn=J4bU6 zwU$mO;w$~F7Y}0GrZZF2h~ol^=12pxXgiQhR(ppV2SJ1O3Rlb=n^>-i@Fv!!bxYG8 zwqpyCGph;}MlQQd(O_C5sxwf3i0m!dOa?`fk<2sRF4d=JW@RSZj^;D6CVVBPM|1m@ zG0H2Hdu4CE$qklV)^T@Lz{Nj33Xtq=TZiDl4N_z2j?J863aL?5U$MrXV&{l7CBc^frNJ5ZX*}p( z_VAKOEA>@+Lf-f8L=Le%6Lk=gHfGm(IIzgpz|2P@+9S-)SVE>4^({+!COl%i1ZDL~ zyb4Te#h~qM?U51)4a&ex@k@CN_mqjBPL4Z$w{2S7KawjznASQX;tECcCGBNei_=g6 z%j^)1AO2OV{%N^Ys=QU^7x5*b5@gC5ak0~gm{ecoBJo0_61opRJ^`79h`dU}8@S>G zjHHAWnwb}%d8b>#KQkJtbZxQFKjTd>rk1s%(XT`ZO**J^r?H-q{uxw*%R|g^>FY5a zpj?mZroa9+{J@_yu4b!dg3jNg(I?pvs--SYOiajs#R;a-A2(-Y_4f{x$9iUGSlsAZ zL3O>Qeu^Y$r(eOa=sxX&b6++ZKqR|+yNWtnVMbCkSE`&yo<0bQLN76*07*>eepY@r zQixb*%=11bZZ(S9t!^uV<#`L5R^AJM6V4incb>2&t*6D*^6d@)pV;4@1hQz))&zMM zXON1Ot_-}Ro$2ij8E=x6WTwoCfN)a=_nO}C(MfPM33ijkVaj-Km>$QVXA5Fz1XSyH(*}lm+kWL-H-~pLct=y5u?S@;wig%`P`qm4TpA+E^2TzfEm6geK3(fmi zJqsh`&p&d><{$2XT*nCM%f-H&<0txBJ)AL7!a;?fe* z{XlG`m?0sT=gyM|{oX`EhkO#*BHq}K)Ga+pX~~>VG4-`NHrGS@<4?LY$Lmzxm~Vfk zE2W0S27{~R1+3R%4KUQHsNowr%c~f^1x91NkTW-pDH!V7ashy58%&AlPL2BL|qQF<@>G_H#&0|8nIl^i)* z-0WFm9y>7yEBk}f7@I&%-W85suQViIKagcA6IEComcaSG;Md`n3l+_i_(M!6e|n`V zkM^3F2J?4BG@k&E>$7c(P$0>j<9S_m5S?EAGYS)*!HGWYW7Vl6VLjbc*v3rcR&Az5 zHq&+K64X(9y9oC3I6syKRn4uCaE=yhiqFJty3VF4e2XU2{<=XNA0#qChwTuAt}jxf z-0_sh1pC^YMMWc<b3HQ;C0DtzfU6b3;{PV2z#mv2ReacAbH* zF{niRZp927;@ynO8m`xHuEKn1I7)v|F(GhBHc0bQ@$SfFa>O+T81epeo4X*Asr*f&;-;JwH;5gc`d$k#<6Iw=A znD)svzD*>o4rKb_u*DI9N~CkfFuJr_A7<>ebC6GkjKh$QYBBMO{(VQceC4}7l?Cop z8FEFkdCXIFiD}S0B)N&2!|_D5=>O%I(%$y<5~aE-B-hJS-nCS~;JFuv<=! zKnyhU6e^4-0o+ptG*L>+?Pb2Mjv3<}_rZ9~UjOqbed!{Gi9qv6Ii-w>A%6$x)eA7M zR~vc0UWFeN>A4j)+g*ipJ)JBT(@zy;@2(b}$dr$4-=t02n+Wtg;E@PxKnI^s8N$S18pszG&x6F;=Tx?w(KB zRfRF=u+wdqZQU(>`|eLuv2a+-qeC8fTp>_h&;1Z-P&TNuXxoxFPW;@@ zQHT~0_}OFsIyieRE^zxEOx~`HR0ITE{r|{BbK09~8@7#>+pmDX|;Nea!xxI}ku~&Wc z4Egkx-NE+ZOHM9Q zg;lIVRjp5HL`_i|CDy(faBbY+U>psGN`x4d4}eRpfR zE@`zpq;UYkl=t^>cW2N=6huB1sKaTe9N0Tv2g_8iF-Z5yk6i|NMD~ z#d=jQ1I)bCTX2ZRyuTj1zaU)I{y2CVTEJm7*Q{#ST^zb$oQY~J0p$y<*h**{`zuAL z=uB4Rfym{>TU9b2LEj38@2(quMkjaHa_xx^#$z>HH6S)&` z48cL@dcs@Df>dRxt|^{0Sh7f?k^fCSm)PTE89s(lPaC>!fBci-`$N_JXP<`=3PY0GxfO*hZ>)Z$_hb8 zDQOq4_hk+IXTtmDFOkiM8ZUV$(U}aj^T+#3I!Pw;7_wJ!kxZ8EN~XRtSG}J}w)^QG zoXYPZ0pB^EQqp`UaSo0>27`1G2O4uh{px$vn9ZsZ;V)!>gxg48pWHN)Y|1PXT<}*w+p;Mis4;ao?#W&Em_V!2Vw-%eK&XumKRxym3DPYPplV^b#q>T%pn zoCw5jnEh})M3k>l5mwq?5{Xv8^A%Ox{UpWR7`8A#7`5dmEO%yE#Xd@O>)_h!x$e{(=--b71O)*lCC>MS+q@IDi znYb0!@-OhP>5c@;>Go~+T`EP6MRT}BPbLYR?+Z5<@XFFN%1`Bvx?rZcJy? zh-7cABvf!@tE~X3f>YGx|$xChQJ@!jW6md>n|Y+ zF=IIYB-5f89=p3rvLOmfo<=0o;h@*&($t2EyjOc-n4qNa8odC9AIubqo9E>6T65N-?_yu7WG(J2)Ypwr9G zqSN|uzDRMl=CRr>ug*tuz?LqoK+kNChlO7F4#HGuQ>iNU`tW;^BnecOg%|JbHW*XH zJKaM#I@sce+ODMUaiz^%VmDGSj`i!iRhbn*6y;0_<{NUljb)Y?RU2n*wYf>A*g)`D z@0_TSwsJ$5-kRtb189(^($d)V$4p>`IFf2~cj)HazSnn30v@X@w%b6HwKv$0^}1lf zXeeT|ccxz#B(GrmPPhAiaW-?vd!`&@Jpp8)(dn+SA>iybQOT$omQV928mSkoVo1LJ z8qDqMHj8DlSF0WzX#h%%zpu?x?SkS4MW%`bFCmi0>767+Pl#sMG0ZhO^m|?s;}4n)gZ6m5EnmRH&r-t<-w4KCB{4vd>Ak;s7ok-7(!p>D?u;t)tNZ2Bm(DO7#DKlWnjd%^ zfZsBKi)*MsM*}9e)7C$V$~7v@Ml5;R4)xHY6la{8sRqD@A%*QBN_5#|l${dJ5z`{K zsUacH%9E=Xsir1{YmLopK98x^)EKTexMTdsV zDPsp5Be@_Nj=7b~x91u^0745l@0lr~R##_2@{eR>Z0;uWBx;vNsIemCoT>cuImPI8cx2JlmU`AQ<0VdCc~lgVl-pK(;Gh zxx=@vZaa<8^4M(nLRgMcW;`}l43g)R1Lb8d-?OIz$heE;IDs@2PUb-IM0uCdnX`KdJT z76JUG54;5(kg`G3m5*i$(K#|a(ZT|n0758@4kFPhbC{$qv}ejJJ7SIUPLRK{O18H) zE}(OI3=+6H*;43uiu!8MXyUf5QsfKfk1&dY_!j}24l!VljVdMK-c5ND9fq8T(5COb z?}I%}sfsHR22#6Dv7NSInp;Wy#&k_*iFe$6k-a@c|K4wO%5wO~Pun$>q)7hxyOLjJ zb5XJ!+h46w^vY-{gAFwsN+=8_AGGtr*Moq;UB;nX_zMjR74`XLuky zu5sT;K)K#ud>3X@<0AxKqlhJW)#^~r@^dOJR<^*Wl!Dg!m1~~S;N7qwV>ZmKD{_~x z{xSu58AsA;d=X=Q&;+Xnf{UBOJ{`BQee(EDDc^i`7xGUjByuxP{@VHO=i6h6>Vm4s zhS)3g2lC%^;uNAXzJSGtASOLNr`sN4$UlczPAQDnlwu98Tp(cOCEOZAQF#26C=H1# zRk__LfXcIW6k0vhovG}~J@n4%MVGB>^^nmbzc>=Mn!HVP{|b{_hu^a-ZlkLwf`oXq z%9SPnea9prq*@z~E40BD9ld*1R4ZKB;03s3K(+j>ZQp$ui^7i*at%K_>K7A+Sk!S{ zNJ9X>MyA>BLfnABnb7hJ*f`09ib1DQ$gbS_r*2G~^*wNBUoHw3@+}Ekf0zVdWwRbW zaIYLnb$l=;by&qt*vFm1@S33aZ+{^};1Rg4Bp4!z?^~L>%raFMOGd;!Y za$^lEd~5VF6R4~2HD?o82(8$D>KD=V7KicoN#>;P(AfbCgQw%(zIMoI#BSKdUoK_d4*p_Bu62+_?iP zG;#WtJm&IhgD;9{Ze{f%S8TL9)bk)3bVd0kFo4PGy`OgVV9`d&BGG!1mdTa|3BQ`_iF0twaNE0ilCBmI(VaeG&tdbn(umNNqNgCn zpNQe!?UskX_Wo09uopAAk(8>Au3l~-{v183!S)5`&|Tv6B8DJZKgjS&hRyqhdhsq9 z@E8N-fP)wR<;M=F&t7lWIcGDKK8Eb&QB=eZ7f)V%aV(1oQlIPh&Gr5iyP{^nT8b}I ztG(n@+6f*_H98Yc+T6SDJJuvR3seQg;&(A~i!4{$0(`ckZxe4Ou+&vAMSJ|J3e;?; zN){tfxK?0fx-x@;aeyj+t0yI6FVg;|c2L%O9v+y&$fon~60SqxC2< zqeNK27j6U>vMDoI&nsATs-QvzQ^l$&KlA94rb;xrmI21^1L>C!@nnzp6Aq((z9pfe zx9;uSus$f*;R!kU8@LZPs4pzkutebI)kA!gqDcWvhZ0S$E8ycCcdpUuT7kl+xXzW+ z?=IpIF333OmUBf&RxTgTcDS{hOj7`)(&4B)2m#{(?grUvsGSsa=wrgH91RWos8t9 zu4cdKTuhNowALnm`zxfVzu4Bb4{YmsH!h)FS@PsBK-i#o<#x4`uqNt5Vp_6TdzW?} zh7iO^cz8%?Z!X{(JK%>xKG?bLa%xH@pEzzbQ_f?Wi;nuRG*Yy7xM@lB;Up)V=|#wQ z;oIAvV|`kBTpNP0wKdn_lrpfu!eG!29#+(d7=iiKJUU4s0zPPp^s6A>cZM|FG}i5)I-Qp|_N{@15b1nzU*i@+-+TM5+%PWu1* zBP0$K9AKjm{?{-5`r0T1_w|Jf*p(3Gl7#a!v z>>m<3e|)eSFtYM;E6jh-_~F5=1!9kaA~o}BMl}BMyuY7~4UDYD_2I9p@Lx|QJ)i?7 zwWhvhU5WkwXSo?IGNI!Cp7DX9H_fp4D{ix-&9Mze>GCYa=ynbkVYGj(;2!OD!~4fo?-mr)r?+RyM^~PF zqye%9*d#;nOK3w)!PVY>4OB~xHgN7Kmu)-2%k}F<0PB21>kVZ!gF*!DPHbkIjdK|V zk||orlHG8vAMQB}S}7~AB|G!H5zl`w8hE{lW{Ezl)%t|xJ$|>pYU%TZ< z{fLCZai6Rg{;wPN2-Z-6)GVwffI%#VOa=?1S>lJ9gzxy>7k|_|xl72&NgpP79*Fp} z^TD9Jm9;M))<|of>-=69@Z{Ga({)ay1iw$R5f+Ze;T@30V&&0>$V39QNh*`{2}HK( z)yHdxnDzEhma>W9qy5Q2og8^YNtB$>F2uiwLVp95V7_5rj32NWRy=J$e1SiFH7q%zX(t8W6QGS{{Y zCV_qQOJ306VB=*l;Wocv{IylB#BdMBrv`|)Ear&7aE+x-!C-pzPHoKtw;oeLu*{EDt4B~r!>xFWw1ktA{gR0^ zgoC3JWE{pELDV~OTt?k2cvNC3%AP>XB$aGA>HRg=q%C))V7r#+e)G_l5`EEr%|f+o z=~Ou9*%H#tGaB+`@$UzcUs0c2Xq;Zy-t@JPN1tLt&-l)5eC3x#CZsGoci zbaSz1bGmHR{^kNPk6r>4JZZgz3*hScmM}bqp_U$vYni`4!NytPfF0xxZCgYkcc+hvc`9HL3P; zG*9Lc8}T7NWtlX_-Ov2`s1*|B04O$tCyqrNNxSk5$Arzak3#B=q(d0$L+WRuK;5>p z!bGYC=8Jh>`TE+9LNbp79X?+v$-4VC14Q#%JVi_6aaZTz1K$t`Ej|9hVn;(qPf27q zr|0GmCDyxL=qzj^m@JNh#DQT<9kLYTVkH94T9T-145Q3hP5&adZx{vUv0tC>edq+! z=|m18h(|MdrzBNdjL2#Fw7j;Suk;1l6=j1KwZw?ixe@`kdQ2w~%4|6-d-d(al=h|V zv){7L@|*BIk39X`;8A*$cwHrIjbC?KXCsILC&PD+sLl;8p?*^GK+U#FNe0%!0zr$Zknnkt_juqj(A(l7-iu_R4fn(AAhrq zXv@P|oaC$AU%JKnfb45E_<5RRI^{17Sij+^0SL5xY3-;z$#ut} zQL?r>Ixl+wl5Adt+hVieCcwbWc6K64ysO{hRPx^xl$27qNg#FdVD{Fi*a0l_|C zII6kBn{R^vfD34hOh+re7A-GmEw)3Fq18WGkL#MMaa`e?ZnlxN2j_?nQFwj4F(_+3 zniX4KiW&?AztY#LzM1M2*)VDM?(MI^Uo;#aa{%DX7UzcmUUgY>4y*Y>*?yT6n|n?z zyPx@dGnLX5`Pa6h<^WE57je*McYF05@R`zCWXg+(ss8obMK_r7dL<$n0Uf#MoC3xPyIgwca5Dx=0!~#V~kdWah{L}q> z19}G%Sb?H36Ll{NzvrX0;#`8fT)WfFp@zz4!*!1K5Cw~wOHj%C%x61qt8_MiH z<*B-wfLF7^d4VEV=1QE)+8_RE01HPC>issmVBSCAO^9{FX%*^4#NVEdJ=`1S4AIXB zzhqvC`omrO6C;vmvr6CIc;*^xyCn9^I&4E*+eGsV2{>(HW0yU4tDN(lcZIL3i#B(Y zxhqG)R{7n|(XSat{8T7|#;8xX%`=I507hqyUW3z^0`q#0`kQTBMG=i?a|Xa-I%>%s z=Y-M%HDi9ze6>8WFMcSw0Q8kNlqPU%WD!9(iV6>uCZsQCc5lh7P{v=Mu$>KKNNMo2 zHHIKePFJfMxCNrj{4I7dkLV@jMwa0IGMqx+Fkb1z*1Yk)QAom)zku{o=d=Rs(dqVr zxLTzBmhj9D~R1qn~YW}({&sEoFiatrpcIoyC3ln z^^SOWoxgkxANmI>{|iVe?6yCy1Wl3p6*6DS%cKv6>u_N`aW(+C~rsz5by z_RZzVq@cD7Y@3WuE>ln2i@!Fl_FtREMe(RBfR%^qmura@1veekN>h9Mxu<^?-&c~# z1V5WSn6==3YocHc;uV-s6qjJ07NW(X0Z( z%UU^ga$I<6`Lz{FD+&r$p21sy%c?NkPpwn4E9JFwuPUHsJ@c7DeoHNe%hqTGihhXM znJXDiJYv&QqMVKF`}qCpo8@_R0v1y##Y{g`u*S(q>KL*A|M!$!%Cr2S)3(_l_`IGl z63&4nK6921XGQX8#54klk(x6X#8H?&@;?eO)1Ps>eskTu1oq%`*ClUfU z!(@|&Xt=-B7`wMxo(dinkNZV{VI#}YL1ZRGw8t}loR;YN$KG0BitLeSyC*}8;m@5q zwIU1bWy{WK?wubVUf(k)Wx-m{&d+zpn3M@AB;e$4&n#uE+uz=&!9VLSw_F>`Rm>C3 zEw(=#rA!GBeR`TXrN`9@X7#0eII9Fu^>4L`76ey#9)uI5M#}o@ZcAbI-u)zqVe$23 zkMa$UL(?&fe{$A;IJaNmkn1uLuSV;k8S+vtKH>iGuF_ z8w=zh0?uNNprI6ANnEC_A`sW|5s4SDrE%Lw)9gmjBNB6<`kCkON8c&O>E4Vy?mm6H zg@#oggkLA4=K+*dqeCw)K_|DJ>z7z;nGSu5yOt&hbC%Pr@qhLdS1V@26 zuhuuB$^!YSIorxO5Kb=)KBefpQPvBd8Ez;&t<<;CX)iie+_QH-WXyWu+cK2-wKcB%1Rz@41BfHs_0eDnfs=kskG{Mnm0myDnHgs9YrZGQ>4QYhx)um zJG-~R#f~7SLTBv~8TXb>h4l5r^`>YGq>z4~*jR^_;_P?kgjDUpji%#&!u{(9d{k)c z7HWwnGh7yn)m7;&@D;F`;=vL?=eS(MFYxh{hui`t5G;Vw!iUdl5g)G-nNq7@B84U> z0H)UuiDgJsY;vtNTWG(Wdq7~WPp}FWUvSkbX^@`HaQ4JUGSN%3(`k7WFt!kDbe%RZ4^jS3YYruR1V#nZ)N}h2L&^*wc1`k zxNc0JVkQJ)M;$gc-{NIZ{G*^qng7l-8{2C9fJ`k*Nm#q|9pdgngCZwU05+lBtEgcb z1qGYjvfcLv{pH5Uzhfy!aFvH zw_P?0V`XN{EJjUE*bq4ksNahoK~A0XZHPPos3#|C<9W}}jh;lmW;Uh+_*{)D^0~$Q z_J^QY#;mCdlZmc=boV4dmm?A$>f}#HGPFRlM5X-g-Dv{(6!w-*ffm2VRm@$JXA1GW zm(Xxm%L{a7F@u*ATF5T_%+tnmI(3n#za=tW=+)wN`ir&~aKBst??)I**tU-QGX?p~ zKy`GbT^EL^ES5qq4kNpTmsDd$7)xnY+m93-8X)@%dAIZ1ngV$zp^STN^S`~o8lWcP!IHZzKXO4=?{T@QZPAG#; z!4>c;7xvdgP!ZqIh5ENf5dPjMcgog+Ho4?iu`6A{+qTM$83Sw5m=D!a#2eyIe=FF( zevuzgvLmd*&weW?IG@%cotjO5D69E`U+5@=8F+guYoTT#mmK%UwXfwSGQhRoRt6F+ z&&J4pC6xY3v5J6&UgeGgmo`81soih?k;pq3muVz0nmRCdl+WcTex(H`4TD-i4rp$Y zktH4Fqvtk4`tO-UAi}9KW9Z?){+(!hG`32>7-O^IM_e_OqO=6_)&fi!DtnS}iBE&gXhmE*ya8{~mo`4zkW*PlRg8;io* zI5hE(BU?!TS>+@LgwDTR(|^nkfe^@6!uH^^|Grm$KRfH>?lT;X+YT zl>gY@e@zY8Xy7=xCch#6mZ*QMyVdl;o6zzXBK*fff6val^}$>HP^kQ;6#b`9gTTl} z6)4_Z|DMZ#EZQ45hW{P#?+6DtVDC+iX!yTnQb-BGYM~y?@qYeAOuaHK!gPvIB)RxE zA#YemT+E}t)wbqCMgxg}<=1x~0vL^;lg$x|`9$BdhxfsS0O_9~^p*%QvR?<_`0`U8 zo8u04?;phk4edby;aKVZDB7hI4~h6`5O96}At1jbk(Bg701-^pVE-t9k`Dq{ruj!C z=aZ1og8-rpe1rSb$gN=y0%%+!^hZ75{Rs^aK+Xoa`HTntuQ7jposN9)I{$aTzlHFB2mGH_Ui4FLt_&I9PR`j;*gs>KL6(uHf_+&ih0 zjS2wJq|%0O5r6yF|4==xqOfi5`#oy-sJzI1zeBTsdKm5gfMQu5ivz&_KPaA0{ttEt z?M2kT-R^(67XVEG6;N62xlAK}*0ZR9j$R>q^%DMXOZcBMi$DTc4j)B>j6dsH;s+fq z`bG-nPgVy_;K3%PHH*pqW3hiPjPF55|A!;}kN-sK{$P^?JOX3?u-r!o&JQ{o)tij_ zPrD&>@nDnOuP_+?Xh;ttfUP8k6}9`5)dBDvz$RUsP-_3tkS>t{TgeCKxAtH5=GWI{ zQNSi0KxHfcY)D0ct#n3s_P+yuIO+cr2h3unQ@-D+$K(F9x!41hL@<*VHFflhmN?M#S-|pn0$`)DH2aIB*f-+o zz#$5t)q37OU8r~H_s94g&91hNg2FJ41j_^nrA@IKqso+*&tZ8tJR+H zJekv3wH$Zs{M+Ro5kzcvh8Q9fmhG_Arfccd^fx0>olFA=ZPW)#%cA*8bv$53%>;p~ z+H`|!N~~_vTD{ChJmoh_&)L@y)nS9<=rh~9WR=s6vNtyjG=1e*Mb!5qV4ewg#0s61 zTI1p4u)*Ro>1Q|)aD2}h)PW8pRGjReZl5UeDN)NN#;9aTDd3If<|3{4k6!OL$tq`v z+0t#4G}!PA-B({fWv7jsx4nsxClQON3B#PWm05z0#pR~K-Rmuo4Yb_rQ{M##1bpc9 zJsPUs<$XZ>v#56Nk00Fv{XKx@dc|Kk`odTeVCr0sW7&u=_&^f6dY}P_aN|9K70`-H zA^Ap?e4kYcU%Kc1}w60`>Od`+i0M?L{}w#Adxj3=+h=$ zq|KIzx;;Lb4W>Y9ImKs~IV!P#Eww}ON$49|@2Mk75D_oOLW@@#MrXL9P4l7acX21m zv2k?25s=;$ zSTuzO$)$s3it&Q|M?3&4coyNGNb}^!bE1m}p6A$wnMj*ji36VA{`Q6<0Bh8k5WS~zwAaxZ;_ZIY{$_tku9QJTrbMXB<#ChZ%%Zz$J&D<1 zqAxL@vk(Ay0SMyxC?w4*J2;MUWWQi))X@;i@zu*FU%M^}kyh;bix5{Rr`JKLB_04W zVW00ecD9f;&`9_oX7^uzVpy-Xq!wjFQvyte7|i2_AL!H79`GKsh1iE3FNQu-J!z9gHK;QJq;&0>!VA%8BY#RzB0U577P?5ZMLHMR4G%IY6Zy_gYdiFLn*r_b^}a zDa$Y9+!x5M&?J_zjm$GrPL3bCeUjF66@Ze`EVcZMLJvvgz{yr16jj0Lb4auf4^Vds zOYsuYd@qpWbC{uewZ;rh8L;i@$kPgoJ3J>5$mH+Y8?Cbp5769lp(uLy(Qg`yNux3@ zkZ-=heU(`c-HUJ~$c`l^BoEYvo8aJ^AXeHj+TxoQCMyzo<``B(W7zIPMLRK)ygx8g zVXtx_Dn;i$_ZHJYYT>qiP_;b_5!0T7HGCl6do&mq`A&OH{!KwJbw*>r=18_VyB%Jk zSR-}L^oIak&68uVbpvz_b$HY}%EH_zrJr(4qZbsigGSlFT$Mz*HDM?he2 zWR^fUohDTIj;Z@gq#WPEMp*>3?F%l8Z7Q$R-e}QWjZ5500Il!{(Ax<%m-lj5&|d3A znS4ZWN3@s7;E66ye~*W~aH#@7#WX>OsHS?ZSuY*cE)d4(hC+<%()hh3MxNj@08J~j z3{!0PZd~f!&Qm)CRe%O8>tpr1Kv&+*^)>FUAiOdA#>0#H>ooQ-5Z*e{wEY!On+TBU zWZ{K(3f1<~-WlC=Vz2hneDJ#exW!hsPyOC(Yn+xAX!j~1y$}@L6JBuG!02@YHE_O)i?0uO588JB7FaFsgClEk2A3<0n3*^bxx_vH?wdM!CfECZ;^Oa5NDC+@JDemIp^F`QU1 zD#x^Zk;ChWqE~^$K;5v*)ueeDhE7he6y)We;cTl%du+#!Q`lIRbhP#nNp@pR7tSQu zw7HwFsfM7hkEO1D3SyU}SE7YNoV53}S>V`VmZp|>lD`f$zRy~%CHEY`AOXK`iGGO0 zIJ)1dW;mtq^T%by)(dH%8+RzqRbXqUw1EtjhZQXg&}q|ke}OMQ>T<>XY@Qn`Jm2fG zBIzIyK|I}Zb49Rxc+Gj`yutX;*fWgfr%kO)8iR}Btl-Mni5h!L*~i*#r_}H9Pd46N zPHq=&DEZEdw7tqVe<~9#W_{*yH7c6Vy7Mij`fV{BTVCiL)ez8Vt3f6@wkg8UKKhv& ztpU0EP>Yz%%r<_f9o)@wG2@f3L)P)Pg8$8+*Yh}g|WRTO*WSr`YsXeECalO zNo>Du^*Vt~+TE9TgNY9Is%3Ke66xRGG2D!*0UY#Kyn^v4cmh!x!S02X(T_n-rj7Dy zoTcAH+hu-G;QMd}6;w*3`g#)C!Bm$m1ODoL>#F)04l$%Wu^U{XrpKbZL2Dw5JNPjx ziP;h*6z$^`_rS%nPCco zjov)R0$$?)b6 zsi3qFbP5r>=BXx2YNPdHmRI5KzCqH;Ks(ypWl?xqMc%WGK-?+sFaFX!i}II2L0F8N zTxQi3785q(=^vdYpn|A`S?5RCu`3x!&$pHzU#o4{%-0HM_9%P>n07Piq|umfg9fA+ zE}hh>$_dxcs^xs?+E@1TPud&b-C1?G|2SCv9MVnI<96+~+*tgX(>SgFq2Li`dCW9!78ElQefX6$5u5c2`ujp-X3$RXVDce z9gceFMBpl|ks}XqMcK{gBk++6R4Q7H&30;svo?@S5?=;ls`f>7nF}rI^JHf_x{Ha0 zN9;X58rQE&2KwdVoPT<+4{}?xtJLW;=sih5Nn<#2@r3R#WDvk>4z}))42#W) zr85Z#8K60(RjernDp~FGfnvNB;_uoCa(11&gH3v%+=g@Qx+9>dRhH!b;-a7rGfypW zWt6tM*J8dhyK;ZX3$rI2Cm1D0mGacS(9MqIRkRN6rAdY9ibZr0QG^K^N8!B;d9 zP1&Z%j1z9EkHQsuJR zQf94L9$f0rTLenzblNU(A)C-Z(zUc`d!|<409;P|y?$F|@DU~jG84$i4>bcUPG}l- zY*rg$uFWIo3YAi1n$2#92(P_4p9RQ^%3^-4|I=#2J4i!}o-MIYty@pm<9CgUA!s&dF&~qDtsEa(Fk3TzMu8VA;E5yiwwfh^A$4gxym7nPCDr|f2ES*`|hcN zlM0;-GQ(b8Wr}h0V58C8gVOrg<6HUFVc6}L<&}{q)I}zFDTX<(cbX9B^jd|nu2#Mt zzK=MPw{`qiY1)5g~YZ(Zc8^H3K>7 z{S72w(q8;kdW+9n_)CP1U#)uyRzLPgCaA27$!AKv?}w$5OCPCJeii6%cS*l*x?dKN zNPN4c9L~bO|G4;6ZQ#BGg3zA4Q%1mtie9R8Tg{(0T13Q#?xoNX%6Itc)K?*J4O{vp#z zHWu%m-_P0p;b;N&f$erVYaBib?tGHF0gsDTAc^{`_3@114 zWP9ISfaooA%CFVw8*r4K8VB&vmF4Yg@u;;>4`tDA61IFK64j)SW;9pR3Tx!3lAR1D z1ZNKy`GkogIAqPRa%?}@*lUvJGA}tXHUM>m$Qz#+s%IFq+O&K}6w)aPe_<!uLZosYs5M`d>fUbLKw>4Xg54!*R)09$wEeCB6aVmw1S|d zpda4x_eE7?&-N_^dw%5=?Mif${jwgfh;6GLwq(BMY*asd()ZYXMsp`{W)UaCP@!16(lJx)t0ThGZo=Pld9KkVKQ zo-O=JOpdasJ`v_x&iCk0hhJ|rLrQ~GD?zhai+LN%S6`Ub^Nt`0)AAfdXWAm?s@Ce# z=N0YqfHsi{mp0D)4cJU7IvE8HObs|0+%*>MfT;uBX{h=c?LpeA!_<$&vwz%AQBy_L z=v1nEo|!tG)NT*<2{Ty6G}xrls22=|!a}2bs2&vhr5}X{ZjSp7GVuPRxXQF{boOx3 z(^gBbL88#aox_S@h0|uT%>Nz$E%EitLM5p0aD^;PNy8Ec^vzx&E|LyM!AzSi`p0N# zjWfLP+D_qBq0w)uL4gS<_%qa+KAT=nnR$B0-aoaGtlBr5k&*U^Is?c|6|A;m@?$GF z|0rz)(tY~?Gz;{xmX2k9U0s`9kLr#F;_6tU$*9!JEtG*|BI2|ju`_=32 z4F$EYViyD&m8zs}nF%t(7_av=Zzq7O7mKv2lQ&!1e7ezfgAm?=QRlPNeO7jml_aB! zk+eWmxRggrOD-Qth3R9PNs*>#yHe6nNcj;oTNv?oJB>a+sPbn#U|D|e z!MyVqo95w&n>vMtWcx+avqj0r)EJzB#b~OPe%pJYd!2z_)lpkxAir-JJUUHsQHTb5 zSHv?!O+M;qqNKDy3nEW{e3DYja_|MVx3-rdErOqn9|8buk5rGkV4|6v31WD0Gt2zy zb~^&_WnARc)9SWPS^?ZKg{XsufvVy0fz5{N317k5sh<~f-XQ{+lZ|iAHrhn_v=puT zQvVKNFINMatrmaLDf5vu%JhC8BR{=S)-1uR>;A~|Ro^)IK1W4^iFrH29TRgNO-E%_gTzk* z;0}GXnr_HbXHEFwj@lJRS@9|GvA^U#F$F=JG%3cmZm! z<7hwb)!Y0?&Z>3~#}rCDZ$BIc1N(sPMM&SvJPx0#jnBtTQx`(y%GdLUyI-S8{gM2k zFOqV&oFzS9!SiYuI8muo6CmJDX|5jpFEbMG>KuDMfI8K?Z5~8Il`9S;FOT88aFGBN2KuZ&iMg8thy4kAKj$;>Z-!9fm z9srH(P9@$VkAc&xNK|fri89J88~_VD$)+*|GJT~GP=(S%OVSUtECa*8$2l{0W>~K; zGrb|E*0F$=FQja_sXzjJEiCmWH@$EMwAUOSo#$m`IZEzdK0Hs~mwJ#Hs3XYqWG6W+ zl1b%3#07-q0mvbcl1YS0Nm0;>QpA*4QZU3&)YQZv;;3L^NW*|)ZX^j@yy6i!~tEPi!$25ATQj;$6m^eRH4CscV9f^`-HsLP?jj2ZAfc^=aH zQO=T$`=4YXkv`e#bmdG{ctR&wMN5V$XP%_?&GGeW0p7soVTg?GodQjnz@JylbJsK( zqBpZ%(FMdrO9fw`ll%kq8se32^`4|9 z_M226LzAg1qYlZVcXJ<3e(q2zVCNyed6zTK(NXu9TJpuCF)Gs<-oA>KUD;T$37SLR zb8!1TYsIT5lYCtF2!^Q`R^am z&&C)IGl(OCeOVpt;cw(H3D)*JQ84KO;C&Ttj)qgRi-+d_u2Zc-s#yb zv?n%-F+1Ml@S7naO|)(68?o-;nD9;qnKv%CsG7+I(Ya$%;5ZZF# z6~D$tkpDWhZXPplem@B*i|pz}glY`;@ztyD$T}qo!040Ba3P04$HQT_Q-))+-U!)a z{=xmBdD`>2!pa_kB_OowogA&F5T(RUt141z?r!#A93}Y*kla)>NgGDoXgmo5BjG=% zrq$520ZSs{Hk(PvL5HIfvnEd~OFf*_l0`atb(*1~xhS6vrTY~j8WhOfs$;}eI^%t? zY?)TgGXufLXPZi$AkM^C9pe~yNy`OdE;UkgwsbRIG4)Kl@>)BT&MTYPgio#z{_ec+ zK-ZH=JdP`sUo)x;K^R!VB36Ql{!19K4lO8ZqR!f{=*ik&xyxK$TuO`s)68#wTZ#zt z2-zvAI$*vz^x>qk)BnS+f-NzfIT61B$f40|w^_=>x&g+-RX788qNRT}F z*96l64I&{W{;}O*zDyl0nIfhogBTh52Spsg6i)5$70>d(a8_|dmz1mKzc}Ud9;%uyI&2Az19r^i+RM~Su^4!6L3$8t^hiNb zYSoE5Wp~9AUQA*ob%1U7zL>0>D@FXoYi_`RpCQTjQ zk9Z+RFBiVx2%$(NKXy!kBMedDZm$hX*=4BmQ(Z+HuZ5Z1gtp2Z^W+Dw)IC#YOK&_G zV1x6vtXHlJi6X-!v7_9Wqb3#1$sj(R3X8?5p_lt}ck-xrvwX<(G~2>#6)4$zrOig2 zp?L$pCV}#<$^g)^IX+}JDiN5+zECzOAN%P?QWR_XAK%5GULpT(2@f!e(e-|zCHJC* zg>w1j;W%dsz8{-?fFZQju?&sUL|zTCC%VQKbOMXm%@88}vU6a7U8FwpmsQeEG@6=m zaiHmuq_lF;=`VXw)KtEsGU?X_*DNyOZ5|02Xw3;j<0|wfgLN2c3Ux;r_#@9OX^?V5 zVk4U-H>sE|eq^!bNLMSkC zy~(LPlR6trGU!H53L- zSt`4An5F(P(!0jn>h`*xS7@hY$(W5wk8hZV?G{T_)-VG-M9*>EF;zLC5qRHMHC=2m zbY)ZzW40mSVU;5WL(({aFbhHHPLqgn#FVJW4a5FPQkCloq4KA2eGlS458USkcwlyq z59dv}WImoZ!Q}~se4eV(h<)dT^<{0mPKG+A!HP@|M5a!oXgDL|)l;d$P2x(^=0d|s z@U|QV=A48<;o#L8=t57guVH{*yd|r4S!N3FrN2kIIuf(mh~7 zTldH$GY8X8FIP z>Sq!v&6pKQo{Ln%uEI`9&pD7ajwAo#p+zNdZIWt^Y)l3o3(2Y!%#OEV_&rEyJ~<(4-aI0I8)7b&+C;OeVR8 zc5AuHb0XziYhW_qSSmK06VxaJ7Qrz7TflwUAl_!?qMM8hv&4}?HxR85!-hD?brn=O zEczAxP9jq3ahDC!T5C{D&xTg77%)6M$dGeFCfGJ44ReBrcGiSaU0k*vhcO<9u$3E3 zC}l*!2-(!whVeKfUylaiL~St_{Xk-aBMpV$pda1zMC9m{@&YnT^i;-Tf0y^}c&za8 zrC+K_LKH}STFa^6HhREQnHc#VM1TT+X4sIR*->t`S5bpuHaJK9Z;H6OG5#jjPL z@O;Mue7VPr7e9TipLhob4b6L)jhiRcTV*Y=$MY^flvqbQ`#M2K zB;Ik5Y-Nl2*o(LO1lO{fFF=8ZFgy6KO^OV}xL4{>JAJ71-+;vjLKrI=x|)~toTd43 z5pG4nLvlI&yI`n;hXm*kild4wrc%jDU8zUqYa*aP6Kcnk*}!{Vt{gXJuKh#Z95MUc z)A7shFWKFd=Ze6Vu@h>8NM5&b73xW)na~N_`;*9oxtPUXko^A4@UeDiC{68EHltYP zm*R6s`16IS{VlJ&weN!En{#6 zP8uhIkB;~HzSr1zKD)%M=CfVeotyewnY}>FgZIT(rn(3_&ex%T4$j`p_NXLPXCT z{ty@SxDLHi(_AeK+UdgeZk>#5s~cy} zPZ#P3;u^sq4+nBk^p;?Xg7?jyFKJAopxH;MQSSr&rY49A9(~mQ8R&DeVGfpnBtk&L zBQuUvSZtA^Bzu&ixWBqc#gM_yu$Q|1Qm<|O9a_Zg)xAWb&*l?1%KbKQ@O00*2vRL* zHnrmBLTuc{XT*x;>V*r=%8f5;FVg&|>Wu+wFUkCMzD|x@uQf*CX>Db#9)+x&Q2#k-E9$>ByPkRKc3d*nZTV$tHb-ig0sXdin~9s2`vnWM@G@Xh zD7pF<*9OLW_o@DrW-xPuuYZK|BJKZhLcpG{%{&X)(Oe^Wu3Y>e(=GN9fAc%UDy@9@ z{KfLPK@ol$IeN!^UQV;XAHI<9a4(Ej;9W;iQ>3;AI#yFHp1@$hPv)CMr6O(yWHRob9wSSSF_;=hH4?8Oe(HFU#N<6GOSIFr3QY` z^1X=WTb$Kjy1-Vs{xK?_csYpROn;y|HEE1-{2h5xJ zaNOeW%si(EIxrz&)|yIfJK9W)KJ}J71P-EQ^QsxfQXkd@d7E@>BI81-_A4MzXP&@;S3YtszBx z3vZ}QcL)JWf-*`39}#nIcH8XCG)z;~u8BioQDXXX1^ffWD#02giM7vzS-%-a4Sb58%}ajE=_z-<`9Ru4`6^A+kjlt2pjx9_b3;f3WByi^jKw z8##js{AN;j&m2-FwXe_CNBogvx9%;}aX6DVZ!!mRH<7$8=$`&$PXXq6nWB=6yzWK# zwQ>2nm4jjNPM)ll1^x*p0>*k3P2$4hy&hO2?9xp3aPfo zfSHKuN*rKyfA4H4-59g0?+y$jbQLj{{HWtAR0M!hYc4n2>|ZX((TyLxU%b%K)dLYh zW7nZ*FiDE!LFZ77A%XR2F1xj<O^@4P7fWOZLq=?6?*_f*vA31l(;8{|fH)B!B8Jo=>t* zpQu=6%G!0Siz@a2K``hW#sc#za#vs{^)B1pDCS!EWJe|x@<$+h<{%bqt1cPF%~mfa zH$?o6cxxkOjYR$v(IFTJ9oU_D5%h5)NK74xmK_4lLq9jzQu!oMe5qW@x$@nRgpDc~ znErArD9_&!F}f?h$O{f%xoa!bLu1`isEQf#^=07xFwIe!kLE|(tXXim@a+LH7#iju z8OjakN8~P}r&OGd!8~(9-~&;Ip?4aYNShtsK>9{F#9XI(jf@?H9R^Lh%l zMd!ZkNQ3fAd-CyPdGt?CiFW<106FmH+)Oz@`G(fHRQcgt6|WnKq5!WQ=e#?OI;R-T zs@Lyee%JGqcshj34WpN)+0PekGgr_dbyH+;QEJoAu-MBmCjwu*GV$PTby_Q8BHEbC zknKNFXw>CDFXKLE4-USdP>dd-t@wpIX{5?O423U64SeoWje9vuJ7R-}BQE)cav|0t zd{MWZW0%SpfH3@X|AAu?*y8mY^8eH2*qH@V!u?;`gDW2F*$&2`Zq1JDir>dOR@XugRo8m^^tb#&%1&Ry4b6-IqwS?-)TE=^%nYZ3zY>T%p~zHw%eJ67^2s%_6NUh9;ZXMn{hm z8T5kt?zds+RiKQa*Zo6aKBl(8RP9Q`1$^bVpdLe5Xi9i2Kn#}1QGV=rx9-*&5sQ9X z>_F5XgKPPa9DWz>qd?e%Lb9ZX+ol|?$MMjd#s&dU|71fA?K^ujG{ufaB{jsdQ{<{+ zwR4Z8{djhQjCY%nF;{8#fqb2ltJ)dHVgh`gt z7xH~_G~9{Qju2dR1Dwy>oHD}6`T8Qe#yihL+p(zv*9QcRf0iQ+iKrJRviqB&rAfi^ zAtNA%9}a_upPuaU$%5YsQlmf68YiShsi{WQGpYQBc2ncoHIGPHg=Y=CSmGNmpLYBv zr{k5aF<6(M3AZigS8>-7M<7GUAd_GdsW@I+iBR-)BcXl#nC<~{#o;Lwh>uy5*Bkv7 zQs`;OZg@N@S0^Vin>s~$4&un<&mp(sQ65X{@t@D|gj{ybHMPuWWCyKJQiyBU7~)24 z#AIiD-mt!x=XNI2zu`#Ym*IhSrR^8L3&~N1N~8OZ(=+2%z#h9JE|7l8a`9fqW;Nde zs~EkYOh(vqVPOa}3B|5I3cmb-fX^&@bzfvZ$Ozq%?;#!vpyxG#^~Axk*{f`OJ*v;u zX+ZD?DvfNo;um;dES0(8aqCQg!=fq{El2djZCsV-67yDc z?EoEPp`ldxdAEST??Va=_@T~=?VBe@*}mSSA%Sr;bP}^krD$rcY#j4TvTq zOc5i*g5Kx-x~mPn<>$_HC50vsEOuf^aLGyv$FEmZA)L7s0T2zaFypRQBC&;JO?YCgQRmDqAN&l@;_@omJpJkcg6afI^S;e`#SES5PxcZ3weD9$1jO~ zYq4js`(NWuO%16iJpXEqZzf(tT^~G1Mx#zqIS5^EGE?E6B3m1|SumSgvV)E3YO$G* z+3q-wE8q~V^LGnLv*i?NOMjHK6r2=xpWCeQvs)k&|Ex_*Vl>Yd++0zy8h zWe!zP>*}BLvROvH+%*3|zz1=a=DZVU;{IE&8eJtNlMZqnkD-M1x$z1Gv3uzh-;{fK zMyk(7K!QdS8|+64e6hQtSsHyuO?$ZG!=k;#Ss7;-{A61fLwKV?kb|__98ZOWlGU7< zBD!yP-3@wBO@hz5ic`;tCEF%v$KV1bA*O%N(=U&(geaH4>GV&rtc4OtRs%8km^$0; zm&|~}PL7_Pt_`6;OJMII zxop-}8`o|oTW$tSdP+8!)0LrFaMga%mmcHLd!%?3@At%2$@9pNVzHLo+EB7?;MzMVsBrB$Gq1ZZUO$GwQRozLzgZ zm*Xf4$ad#3c;%if);K)AAOO;(a`>}s&Li8l@1szcZ4d(V@uAOH3Ze{8vnmM@Bo>EF zvCC5vEULUIxf!Z5WXge-5P<$DK##TWWlMHndd;lWkBybIC^OJn08Jtti^J34>mO{$ zmE*4P>1a&rG(556OPK*-TrhkAN0xCGc;gJ&c{c}t0G}qid<^DxxfVARHMs+#BKkcv zleK`oWcR_2pO+($um>`m>lOsCYy#~AOiU?H4ikZ- zHzh#cU`%c^Vde671&$2Nry#*>uEb3Crvh5=!2GccMio06S+YDj1K1K;Po03y#VQ6b0or zRoa{52^vY)xQSb3H-SFTf?fa>rmS|m0=y50rfCu%N;A&eHc4$I&Z7P<%;NKD0_E?k zZB?&{hx?_84pWQOvg+Ksl{#OLlCn|nmahhzL|EN2FkM2%95tr1{jDpj?Yy?3O3z7ks{%n2gPQ4UMkhLnKgm}|ZxaL7vEn$on zvLCh)h}uOS_Ia6DIG$|o0ff~!H4%Z|SkY&7Z4rw|$$~Z-vr;@nZw!V0_!ig_@8?a(d*e?gL}xTF$IxT9<$dbXGl zalv`fPXEZ!z^4=CqqtJ_5RA3h`UqYsliG=R$8ElYV%{2iX8kjpU58$pL20ZMosW2F z-2WVbPhpvWFSy~->KvS_9Fcu!Q3g<#nGe8t+bmB0z?CIr6c53-(i8w_k{`7Y+?bOC zEo~dd19{ykCJ)uQ&t0b(3G=>?gdv!TIFF_30m-^pbbrRZtzQIdFAmLQdx@D?yn3>` zaFWjU0;5~~JqwZIC!czAJv*}-I?hl6cK1ElhPc5`BzCL>Olq;Ar=}Gz7r?RUE z-_>Cv-g{tDR^mQ4_H#LlZBp%a-T5TN0=Fj@z!FBmoCN6o{Vo=PF=>d#(?BFu5pP_A z+eO~!^z4Zm`t&qglj+ucS7CZA;10mkdatF;i)1R+hn~0&v?A>9le~jfbPb~DzPKA!^AP|?IYnTs4-{;!4`^;-Md)FOHz!KE? z?KtFde|1B#;U_5iXYro&1Y( z6aT_*n{a*wNtq7C0Ow-4H5Jpiz#@L^Ckcz4;W#F8y$Egz_pME<{R>nTzQ$eU_KXLp zv)}!&<0B=Dpb^kVnOfEIToo}tmCmy{Hn&FsANQUoAi6QS@j1WYNE16l%Rmo^r~U>+ z%z~3VPid^xRL)P#i8j4DiVdT3(LuQ;#GRqQpKHGd@?IG&qDD0lp7EfT0Hs>uVCU&2 zWPjFD*k|Sm38666u!RP3hlGK6gtog}mCP{wdqT4Kx3rn01}kZYg{hLg!x-WiTB!x+ z+NKq>7Q7$cl*_skHlmGZP*8cy{(LOvQHrxonw7*@CVP^JOoG;0S2dwVAeOMX zU~jbo4OGcS`czPbV$w!VCD6#gSUE_bXK@si6c3AUsB%zS#)Mm&l7w7=ouxJC!7ff+ z!M?T6iS1;eF)x6z=V&v{?p5jY3&_N=_R!$WoM{Y>QP%jud1+1-?_6V}SiYr8oN<`% z1OQSL&HFC0Y16^LzvO-nj5*`MjY;vB73)UpW*>DZU3Bru-S1JZmK(I?#W`Gg zTT$1+A=|r)(A+sau2PhgnQ?5f?Dzz0xBLWj-HdIHB{n(@$32*)u>u`}if6bEIz#l_ zSE!IvDj;}eg={w4NrA3MgJv*t8@V@NFt9&{!lK_MCe-#S9@d`6J;Oe}HR#0kYSbRB zzb-EZNNuv$ctAd~MFUrtf%cu*%PLtxJv%~)bo8SyI14-ZA8*Ydt@V5?5QaANeP{~G zAB+$Tuk9yJ$ZML)=P~k=f@VH*f8mEHllmq!zBLHH-aqc=xI^Vl0Cx8x9uTge@z1=4Ift8# zKfiRzph>MnmGRm0Zt+8!Mf)uB)swiA!iux+!h8~jy_0vTo-YQx(es)DW^&e9pz#fb zOC|Hv+U80gD>Ube&U2gXo}}Mw_QzPii(f3a&k4>x-7V(n&}e=e&{j}|gmx*G?7Fpm zrdX)?`^`i8R&RTleB_AS%LoMHJ$V%~tpxi*emv>CVNGxlE6bK51ja=&u^;1~zmO~D z%Wn9C2I8zi>F{2#i`RMH1d>!*fIozO9mLPebk=r)!~Rti%J_IwZK(=O2b9!(ul^jARD-gu1cS-EiKVZw|%o!NSz2FLeYTGC*$7;RuAb&P+! z_7?=App^+FsHG44Y40?4EqixB{q@ZmI79)wu#z9_gYTk6bgAI zTb@qgywIbV+g%n6xhIj>!}V9N--fmZ3}=jCP=^s~+rdUkzKxXzB=KI<{EVzMg;&YHNV)agU{+~1e2VY_q=#4-%jgg zL)+7{c7xPP)iURkSsL<#F=sw;$R}PePUVlsPGpu#w@ZnQGReGLL0fw>*VHeYEuX_* zGt@fz_-zTK6*?z=W^KZlKO{pEUDl-gSv2Dpi>1mG^34yY!c#VMYje1Q{ccKa%NMS; zT6Cmb`|YF|)#?D}_gV{DP3GN}o)bgwunWc+{-mQ_xQBSx0gFt*sFlpjH;EVb?k+q# z4s``~At#8kNK7A>bvud&DCb(CN7$plQ0zG$Pp`oU0>+1Z3>7{Opf__>N`NhdnrF-> ztZOxo>+ZkxMb5C;0}hd^_(O)G2}_nQtE(7BV2SPv&Zwlz&9Q$cJ1q#rZ8+RP9(SM; z2!_$$ze8r!aRuuvyFboh>gNk~>2L^D2pGhdCp~WDFRn7`h588r$45y0q}cj(|4{sj zq1qoK#4<1va~6ZwhynBR9<0F2?OmN4BkmdtN76Q6^&VkuF-(X0D(udW&jXioLt$wH zoIuI2F5btRr@3vr3r%_~M*cC0)_*{1594}YzQS24XEWGKBKq4KSvm~^`W&0kC;d<` z=c+XPPSOLN@I=h$X8_L-Awo!nMRMKNJAK6r1ttU}UTV(NbT~C)u(;83k+MIC=YOfH zPjkDE67Dm*2t%gKQw-( zTm67O=GAtKcUuy2;3F`UHtfG_@#uVV5kThV0w<6>7KiF(ju8wFbj^Y0hsNmfS^)>x z%KpIRC&CGH@@%m*D1z2kiFB=f$@DT7*bk6~06^k>cu=o>_6_I;>VOD1Jq&v7&SZ>= z3kN^sB=SeM&anb5!E0d=a6CQtXZ)4f5tLGk7=!&F;7$7dL4h$xthb+)>Y_ty1$dV* zVGsgKcj+w-hwXJji5!9IOu~!_fYfd?5|)vx{O0+iX6u+eWk*i$zR(JNd8=uBgKca5~gh2NfnevevNe@%-eHyL#TzFZlN)`p+We^Va=T zr$H(ndbwBN9?a*Th0>I%XZ9Lx-KzATZ?=exP`VUQm^dV>6S3Vp^q|Tl6YEpa<~bi; zU82r>0P_ff5ITgyl@6}`v|^XUrn^Cb{yk$|DNSp9%Q9VRecqZmiw$Os95|KEKvTSO z#!^ytIc>vc3K$j>%mpka76}gyg&m3!gv!Rw5svbIIu0BNm2!#Vj_uYFo97l0kT;qg zpG|w!{1G$YJ6}~$g08UaXFvY^tPp{kB738n7YS$a|CvVr1_gZjAMXQr^nd*sI4s=H zD2@zkxfu6ddU_VSq8xq*B{!h2+Cq#7q=MB@_$cse(@s9uZb^gD%M1}< zUhg%0RQ9!@dGq|4NQ*}@n<@Q7(wWKpOO>T;_iy7lI7Fgz}&V0xWy;XRnwLeTj) z-69c`H(;tol;>+r%65aVvU97$1oC{XaJyyc^V`P&2mT}XnV?VhOnF=%sVRH?X$l2MV-;m+eze$g`TdxJqtswrRQT z^OI*w4oy+z-G>r80Zjf?<<3P;*1!5P?zeB(*2;4e#6mCO1R4t}bI&Sj-D`aee18SE zB`aCXhD7(Y@kNaE8>!NU|2Ze}Zh%A9x7)h=;~yQCpHEo^xX~xmnZejA{t0iq^U+BZ zFFhjypWWI_Vu~LBgg*U-#5+rk!N)p3#Dq7FdOP7%or=SrECCt9_o;KV-P^)n&E9kR zlQ~={HE(x3bE-wv|{(TzL+WElfuVNgLpV_v5BEd~a4+K$~C} zcoCzRp;#oXKxulj*#Gq=49Bhj$Nn~d z+m`>EZCHNt-1g3-NAwGDXr$A$olN06iBn-Xs~YDi9Q$E4Lsd0?U?Bg_D86M#`=TAE z9vX?7;C7rLIisIG!x<|wpcc1!97-`L)}ToD8SF1R0n)RET*$C$g(AgA5e?P`V7qBM zXFp)jiz+YsSJJY-tJi4D?fQO$es=nSetI5&ZK+gp*q5wG;~9P)wV};%3vXn$n?od_feNk9*SLAJ{x&eF`tR zUL##l$+%vw+HK6wta?Qk5ikCp?(9bLxt7>~>=W9Ry4%OsD%GAjaeYC=R8xq7F;Ho4 zw{=_ou|XzGDp>@V8mGudem>sY6Ekj?gQ%!FO;$QG1@r)uBb5z*(WgeN)8J$O${)*< zrni$GJw}(Vj(>)c0u2v;HzY*5g!Wev;1{gR#8q_HxiSd1(3m@^(Q9Yc_jmW%`3^Q1 zzdEtnO^^Rnvps)}CrMB=fknRj7eCo`uMqS3eZ%1KxvPu%v_IhByj@YZRUYiT5;?$# zj%~*Y5o!LpXZ02|#wX_ey@S_F4?=YgM>@UO6~3h$U|t$7$2Pk}7;x{_{SEx%!1jz@b?D%~s|~&@J)$aMCnsW@T$U#RBIWE&tP`!FuFlc_;c&jJO0gwpcsr^-L>%I9JJcTIFT#yeMcz& z0Q{=y_GKKu2H{JOP*RF70cYpE>k%Am|$nm3w$z7GnGAJaOn$){Dqk z{y$Mp&;bm-i4^LxF<=ryN`flsT{`%b8h+k1rXN*xIlBjoc);7nNjDy<9V>kG&^6oo zUyKE0m?gR00R(^bug9iy)xsd~pGy(@s)40BIj1`tEvFq8Zxga6}aZHuEz- zIg~#kFSyW{93cWl#r}nKwCh_OoIwUezi-O(-(N@szasRVSE{vsuEbcn81z7Z-L-fU zFcj?Yb*cck+%+}{V6Om??z|-m4J$Uu0IM0aKOg$tm^XJoNfZ{dd1}WCjc>8ZGssm7 zP@oobc`B_i0GxyvRod2K~ z3tmCW@VLFf)NK3Z#XU607B;Jfkr69zpnu&ABN@I#g~G=^i1aj#hglu z8e^RQJWeb>9eN3MbkwagkNW?b(`}c2kJDGS40SI1jwQ2{eoZfMjO6bVzV`~`@h>HZ0QE;~#bLl&hxqN=%%{!^sy zl2bv^HmEI4x%yhIQxRJ_eFFKl1)WQVcDsr1UZ~ry5lNR-)cWsRP%{lPh?Qh8mPH^ufugknw z+p$qjqj`isd1+l@99spX6+EMj|IpKI=WVsm?jmK@f6}zyY<%n}VlXn?V;mFQ@m#he)`3QLYvi|iVAe>5+<3Eagc=K6Z zu88*D-TIzu_d9Ry)YCo!UJwxZ#T6dUksh<|8Z38P;bQX{wIb{HkC$6yB&u|`AqkX= zY!t^{O?M!vd!?Gv9>-?&)bYW*_;<#*{kt{X&+jtYQle5ZjewHq+*PXztt>Z=h_KmR z>P=z^Ze4$1-#1EU^Si=qtMycx@OQVHH{_;F)G0J!@{DHyfcjP+iX!LVTP#8bJ8@_f zLZtOrY;L@Cn(Yx-AoyM2rx57wFaNUR`Myyw81zSN76v{o8RD_{7Lmu&qX5LSa*Z~d zR#thwf%p;t6LNOEPjXt8uOY?c+FhZkbUua|Hkff&Daa%AO)lpd+-kd7IO27!*2Dd> z*rXsJmEeGkeZRo?c6z9=bhbo=Qf?mGMK*B(MLxy%;^jto+mQRR@2!9K+u7Ilz;tBk zH_C0yK$m>DTm0!fHSha27i*5IiBOY8?}Tw--*29q-nt(#MDQrVg~5=-r|E;9v%(|e z_J_d8@{GyFQ|$sv2SRgcL7BL8*5+j=_;DIz?~i54j|<-KPc|+oSX6+NeA9s+wniMk z&M`d!CXphzC9i1}bv*dgk-nHEWm|*KAy$<<^b&1;qW+a;#6p>)e#GbFrq=oUivD2G zt~`h1HVF?Jao4;m?VJCak2sUzx%y;L2K;j)C&m+?IP@|)Ah3xej!H2Oqy0H_C*4Ny zX&C{YvRg46kr(vIP=V!CqpZQd{O8`6aFqwitaIOY@@TyU_V3?r;1!N7)kn|zKqfq) zPIF3bH;FP!A7*oWwQ58ta;Hke`la0YO_!W$x!5ocZPO~gn0wcdY%GHhL? zgkd}(td7eoaLil`88*f58^xm++0}gt`R7Gi5Ek{m+f9gy{QcTr$9}jIdJDKS-U-1N z2%8SM7V{mAH-%w`C(B<%dVyHWu`mympUCi6%fDGJkbrq(6iGz*(KC^c|Le>EfB!^{ z;S5@&=EpPVMzG_n8gZb4NE}Y$0Z8uC%2i!uQlhHhk4L8o_Gwtx=qFm z&fwj3iTuWJN~QPY#vcN%euNmV_6eKJ^&4(SZiCK+D5J=J1rk;#1-%nRdY$>aj zcL#N6cl>kbO3jXo=9MlIu4wKg&WV1zk5wAn^2ql%j&F~a*b~oJ==5*8GZdwc(`C|W zltS?@*Fx?Zb>#DL64MiT1dJJJ^m^iDbHja$OzvkpEi8OX<$)$#qG1m;D>OPEPsmxE zudZZbHDg1Fr`zsoWf*VZ2GbYEh@;(?iST$eo-%;b@6*t)x%DP+UWAi8F=h>TcbnHP zs5KT`CaY@cTCWqlIOqIB|F4P+@l58|jne`1HSq-Wxx&$eyg9Cs(h zB+xnsszRzD!~o|V%5MKUQx)H~?FIXE^DetKjbAr8EmcH>=z&8q-)V#m6VjjlQHWZp zbx6Mo`z9aXS~il;pxTFyz>!M5q!i;91j|qoP9`s4rS)`L9`e-sRNv!t$qx1TZttUc za0G?aqahx5XB`{DNX0)aE=7)4Cb5LL-0Senz^0^33T`=V zj|hwg9!nsG2%SFUxxM)ZLRwg5S}Pj#hg4y0oRe4xPntXUcKNEdyyBBzH+O*NLO`z| z`P0a=!w`QihD@7N@S=+|d}n}pBQrqU^>U=w+#g64l#^h7%H>F5M8U6`H65+_aVd)g zSSkeU&-<*YzrDVA+z2m>5~b0fbK8}XsDOEX9fUql*TpYDvCm>f#IdlHoRs7O?3nWE zwQUKg3&D7O*=g(j*TV%UcpJ5#2#Q0s!R1Cj7+)3ODe`ms1$7_19{7GYINifPGVnOy z%#@0SD=&+Lx;Bn%Qo}iCXI}71!uSHgR6IC~D&%LlVn3>%R(sdO@O2K0>K}z=PZw@q z96CMT!Xl;!KTWv@9OlrDI-%)orQ+?9lZ1Cd2mKn`K8&0NU}F42IPtq2K@~c=jfGhJ zCDVp~iE0>T;*S(*uP=}nJ^gK3h@k>z*`-y~cJsin0HB+Nst~}u>)>fDa>%49-%#Y= z0}S{&o>*)Jzf^68Lne2y*q$GuQYNp|CBdWfkhW5T|LY{P0~sdNd+zZy7{9gcid6&N z!e;$qd5&q0e`*J6fDngu51a=2)63-C#p~1`L8Yb3x&4z;1QoE=`sZ}lrOf=;;Bek-FuS^`BN=V5 zm|@8U0NCVd*YDx7h}ii|xl}h*=$C4B60&4czy7>Os~0>Q+8Q%bTa&LA#{Z!1Eu-pc znm_H}9^8YwLvVL@cXt8=cb5crf;$9vmxFtd;1=B7-Dc;0Wd5_>HS_)b$XVyGclYjH zRo(Tgt7=R#>DGZv^ipL14!3}tk)IF}gneW!*@qzGWvEC2^+?+jAvr%^n;_|KF$f$V zy{Ed+bHjO0x9>7ZE#ZVVi$b1oK}UndIlfhT97IM_O3aGHJptZ~4QC6tKg`6-)M!d& zizQoap+?ilcwYxqq!K+~%mGwgSq!qkOBk@>AQn$Pum?U!QbQ$WiNULR+b3w&{0Vvn z8f00}cRS37NLTBciy&1P)cmdWAVsc3pEFP2ohwhc+m1QF6@cdhJa1 zy75a`^D#|8TdDN2#4NH2e(nf){@|!Vg+1QO7TBg942`U_3ZdCGIpe#%42n-@x07>M zFCUZ$Q)NL9vwQ4#2h(r4z>faJ{{tS2TIhaVbA`4X=5Hont+m^wHQ627skRXA&lFUF zQg*!q3;aAxu?xLTMD4QZb$fj&fh)b<+RIj$in!3*VTaMz9^PG))}a{2j^CLZp)gp@ z#3y$##~Naxc`^`iP|c5OB&Rt;1-~#yGa1vCd#b#gC4%rq?lUHSW0&(sW}b8LWxHqP z*d{E{h7TZP(bhf3te(fXI;l`A48zh+qx?3K4coWEa)Y1ZqP%0(o zT3HMskd@}2eB?5wQk91@hKG8lpaGL}ns%+wc-|4U)HzE+vrk{m=MYO0=q)WKr*Df7 zCGq|A_w`%K=Ki88{#F~a zD&({xu~fOxGE{=_kQSQNz>oSHC|Tjnk3rh0iR$eD=`EPi`(KCPaH-W~*k*|SadmS;UAiRn765JqwI2u)< z=!Q#DY{v#1zIs|;*AYF`^IQ8@y15CCQ$Cf>xZj_6%yLJOSbVbpcON+5nq&E-=0epxtp4yFkM0?L@i1qE z5T)yVQ}UL<@2U0eq^R&)3TuE=*IX*^NHZZpsph`G95mK;DzZodq%-hD1a55&pEf{C z0=~_XLS8?8hpMm&pr(sz(oo?kcK8uyW0i(9a@%TfVSb{QeA!ok#55z3+EPgWtge7* zYCE&HUh>P7UmfTEZ7l5}I^4_kd_Q_@%H?Fy5m3cis?|-RYiRoi7G@G1`}XeP9580L zueqP|17Iu@zG4H}9N#yJ@~U$s#+>$hpP)7WuUNvjBT6TKPeW?`V-JA-*&0ljo6^)l z?)bm2&NZ~;leX^cK}GqlXBgcvJwQjn%mkk;kyZWs(r$A|tYrswdcb9ryDB1;Il8;9 zy&eoOS*qAzAYYm2`RBD)2v~8PWSfnA();vqUwJ9Vjes*$;O1HhVTv2sayGtv(LVouHj@nJ#8L%%B+VFYkogTqFlE}{igLh0}DnJ(|pDpW7n z34o$PHn-eNV)G4LIZ6`5Suo5tpD9_t=**89Gvs!^bXT#KAg+`Iv_=1ZZ8q0H$Z;cc zzt}pht7HFQ4Oz>gR4FHM%!5!95!(47foJ{-T;ZT;tFuWoj`B{t#v_C$?03|FB&IXW zeogY{IfO5)r zf_t2nO2ZkP1EZf@tUOnt7B>W4h$vJb$Rl;Dbvl|;ne44?Zb8qA(DU*^m>+r?OX(N| zumAO#Xx*EHIgDANryHW@3Or`^tZ}S3UabQ7yOSeTi0%FD|lfHKtIKJ!eFT30o%6qQUI2ZU#+LxaDUth%%T} zvbf1l6~fhV?h@frap-!u8HM|~gd6*$6mGNqoDEs_;A?;TIY`mae_Q)S zkT4g?AzV-Y#AkceHN$TceZq7(oen3oT@;g!>5e2@{_fQ($m6^h1%%#2B}1nAu+Aw; z)OqLHxt$@Oo51IS8;CTj)UK^UGT7|Hf=QW2Lugc9ewxgFX94(>)V{x_#|yLw5bl>0 zYV={%D?G2UsU?#6R}cAU_J{7?*vu?Q091mp-&*>9wS0P$5`H)i(~L*wa=9euh)E1f z)ZZN8#dv%bL9A(%5t=e>j3I15$6kwIQd5vGyrf`#Cu*=>ZZqG zyGSm5#AWt7G9*WEbh2HLV$oyyr@XG!YTK>BQb=jQaBYD>BMyQWWmt>|tvDr|mrl(^ z?AQU9V{biIiAE#5>o#0OR&FAX;|mT&OgNjvMyThNQo*+fmY@fwPQ8;poT)jh^cs2G zJod2>!D0JKVdM+OP@uq`4~NWXbj)j?pF+REd7rTtW=$c^0WO)wq?+uvXCV$$*$Pdi zW&xi85K{L9of$VdgXt3G%G0X{g?=$X!Lq*_fL->j@U!ndyDQ^LY0+J@vOKHE4y~-> z2^{$7*5%q)yU1?9*6+C$c^9!SJAQ}!_S37`vKGtksWIXSd@J)L(nuIaG@2Nv3iBtz zL}1qMgNaZOz%5um-+ZwlL6nZ^&n@iSA5SIOF!P5*tjX~gl)d)n%QIT+Mdap;LX~vsGf>a*#W**bCKrc_qRspK_O(aCRrWP$TnhzMMc}P*6 zy<7XFGIqSU@9zl^9>`}ala@@Px@)R{kU!h(<+r-!U?8)^TNu8g3gM8^w$dcs=GU}Z z$M75&6dcsJpc-`Y3XPhi{(P=Mq-=)xGQ5?>8vgbLPdJWlcneZ;J)?j-wDSF>)8kwr zg+YJFl^E2YVQN9oK@WgXyQGA{ahfK9a6;LiNUsHB(kiZvSpJ(K7qEvwDCRHz4EGwX zh0)9s+$0(M$(}|0rn4Ihn`7wXrA2>Qy=CgCf;taFrqw z6WNM)0Gbq){(aa!DYyZgOKW;)QlPM)Y2DzD?la*4jxe+jED0Xomyp$u58goN{zKjI zPu3Hxq9`B%$=4stTy8LrRK@CYR1!x0b-!gT{u!Yj!oZN2WJ_%0s&6lP$8~g@$=>cy zBMCtitQL(s>B(BR5Z@ekN9C#ibE4K21y8JMb;Bh%(GCtCNZ!^&f-KRs0t??Z-Qa7K6)KfjgD!?ge&rP;wI(A7Q1NY zPKubEUV%pvh3b*sZO>UEGUXByAF@j%c3^Cni^=L{Q^yl}whHBW8Y2EjlpYl&%uIL` ze|)UrGTG=M6!hrvBb$D1pnXzAi@cW=4pu^g&L)980Y(y*Qn-w`7KcpQck*@B)F{xK z7PtVKqbQF(fOF^{N&b9P+BYrwaOmnacr6|lGT|(M5 z6G8%KI@bN6%#s-m0a}e5SizBn`XE~oKQd;)xPecz3Fj4CFQ8yZDsn0a)U~DE(PY;# zl^P*GIs-!t$*0P1r!aZmUsemq<#+W2MQjFgQ2j^TW70@t-Hv|l;fDna%X4u8r^i>> zp))xSzcRTzRWKR+X56O!y`vRq%jjrmywTAoI{L|ivSf;j!K|naZQyGH@k;f> zD!e4?#cpv9^@3^7Q3%-N{?oIJYqv-<&SY=ZP}bb}rEYQwmGCa)Q+3N4Fo-X(rVrjso^jXNK%@9muqQiZun8eK#RuE`t7OgLo3Ns0Q! zl=ST2*4SDtL+lYDagx!4eOc9-=YCA>bdp*N+EyDIc{e(lekJ`Q%FF}YZnc^8d;4Rk zf?z35Q+yH-WX-REYN1u1b5pLH!=|pqcoE&Rq1e7ff&5xvFrVaCw7)G1Vo50Jf*A|* z8{G-Gku)f__E(NZu1cua(Xx2aoZrDpqiLrmGp5c@eHlNpv#dOF8H9EFJzzx9fAx9+ zrmj7kg@b``|A|rcHNH~_=K2>>&)v7U60u>=n(fOOe_d_(eHlB3;Yuln57p8lUKwcL zO*t&0AjuXrfu(5i5})CCpr+9!P?Ece9mR2eIY=OfvM8iIz`@ON!lS4}74Jw;!6?m? z$6`RPAh_0FmF~alX(0X9tyI@y_xA7|{f2A>3Qo*zP>N0iN~hzlp$->9Iv-#PXm&L? zj*YY##i>tx`u$qhb$9bjc%*f$X<2d!9MS|_x~6gdpf>pPr64D-^(?@`lOdHX(br+$N@ zNv>!%@4bYDe0Lh!XU`)S$(7pdy;;2%ESbMQTR(r;@;Dk90@;cYvtor+t_YNk_SBe( zpt>QRK=-^f?kaxnHhgo~GG2jbVt+xsaV2?ke|v#iZvNWUWs5pMr5OJQlX4`1%Gq`w zgO$r=8vDqrgFh-Zl3AkrgJ%rrTqvIugQuIxar2-L#fEq^Ws>X-hdNd@{j7>fF}vGt zXCz~#OoT}@2iK`@(HqglEl+_g3KeHQ8BW90BKrVxFkZplA@u80A@QqD-@ve47ug>^ z*OjPaALbpr5=G_*YL}ft%M_i7O$m0zd5lqw?`H%M5~`PdTP1w$U$SQFOJa}WW;b0z z0;M*Y)-_18RIzmW(8!2yUOC1o1FKXV4kNA=Kx!V`Qf)htH#o5CQpawpg!Evq0?WU4 zM$wqG!E}l34}vJ6;>lF4X7D{k(CXSVl0CSOUImI9X%68$U06S6Eel#Y>z*VH5f-nY z1j$Tp+wyrV7{`u7dmA+GGi%|8In}%(ll*Zvj)F9yl=1T>G#A}Z%Q$FM{79qwS*a2t zum^$?!LM&^U2&4_mn4H$9X&>bSw-lyLT<<3)#LIL#SKJ8GKMNz1bE-JVo-LG2Z4UH~G;NIx=Yi$sTt1GmpV2#h;K-VbBtAiy+8Kyfp?F7B6qp=a>Pe z371BQk%e^kh)dl`-bp&o%laR%8zmxqjBGEo^MoJ511`a-q+>^ zx4|9#>64=;@sM&9O=G8tUhN3z8sB5&Rw7878BqLwbGfT#@qYQx+2gEYqEh2{P|ai_ zhItsRZGMu?b<0}(Vl+`?7AxDzMkziS-fs2vk28#G3Xd%vltD$Eg;ZV?i>OY)%p!qJ z6z?33qj#(qQz5xQ4A0$DJ%5F-Fwgj;7I9EvT2}Wb+|{C*&psWtebzd^z8P<39dzep z`)#E8gxgUU$!0|vtqd}Vf1dx-gi3D+_|rP8^#dc)_ns$Q1+T(&n-W}vy!R(Qoh?!B zCi_QbUuO60<*+~!&%+?e|F8faJ_8~)7@`t<8BE%*B5SN5R{OnCuQ#PW?Rt;wWHL#< z1VR@V+BgcTk5g$laR+JnIAUL!ty*g6uU2rYn&d|h+4q(G;#ls+9+joNUc?4yCuh9^1xN*1g{xkhDeT@t-=FZ_^+ zPzw1J_t9M^VFY?}{m}7#99957{9?F6zTHZ*?iA;`-YEQ#%7=SwTH&}q!`b}!tGewP zQmcL6E#{6I%Mc4KJ6~J^O~MxGMp9{lkxd~P0h>!RHt6F%eMi8n^|WQ!WzvxMkh!oj z-@1nay0IJ~G;gwt>@wuWLC7-F!jwae!o^{SfVfz=C1l5=y2S?h82k`}!_)+whJ2Jn zC|wn7xTPqj-?5W>ssg5_XaqnWP)-WQ9`Cq7JqFZ5i;v$NrCU~AMZYX= z(7~P{7DI8mT@8E+sgel(Tw|$JCZtnD8lZn%y%=4RIHk<2>C)UojjvjG>6AOY8T;`K zcarNO1?I8_Vmp?lZri8>PtuyB@aUV9jS8vmwryJr&3C@GkP)z^WUx~35MQT)>uKsIIQy~IXS&UfNicSvi9FrAAz5!hYf z&`6%z>NDq|fws?;uszPE)EI~Sk$ZaFNq#HWCJ;y=o}`0eQqd_4y59sW;S9#+zSoPL zBfRFQUQ0@?b^awku(#izH1>X-^h;5wwfU%K_h(T=ZuGHs?yx05K(MiRQ%^0@X>V+k z9cGB@_fU|kHhKymgz~>l{K@oFT@W^j!I|}WsH#YX$)H0Dol^cXkyYTSdA*sI=oC#g z#!zDu#Xuumcq3mF1l8c4<4*(WA?zr+wKq@0G|LzwlM*362-|XkN#}vX`&<4c>%3Ty zXVi@~U@4GGS!_r5*PU2*CCuEuK9W@UqBJhs>fRJgV{!N|9;tbst}PhvI-c**2^6wj zu5t)irT#Bi{`G3|ZJDFpIv}kdLkc1K@UY)>%`FdPJFD|0AmVMP2E**7G-hWqmqGmt z&~ld$i8Og5huo1^5^$^Tr9^{tp)ACX3X;u_Yo?Un(0c~X@^cilq@VI}?LCZhj99&0 zTRoO^ZNZL^FZi6>EihcmWmhnj>f@j=Yz>X#&8b)h!##LSAsyTDR2TWD>S>9AXJ}WV?U%;CJyzbre-! zT#5LdGUmgBXDO$?wZnCsVd}D=no;7FBOk&{?fkUkqMCV%VxKKAy{w75_10r`h}{u} z<&;2}&|pQh8YSv)cl7#lw=gqmny6~9IPm}^-)?z*wjxHazGNO7Wp;-)C-RfxaEFe^ z8$rS`>JP|I3ce2sR{9Aa(W1FBMUiwMT&(zyd8gp5!?f6+t@qZqh!QmoN_!u^#@Ebn z0iIVHWFK3skmWR%9=8tLQj&5`(Rpj=d)sJAv=RDqlGXQcQzN#9ZiP{1dX~jBEPk3J zBJ{fQTOU~7UpXA(ikblV=`*IFO60ssK>rY0zHgiX6*Bcvw+uC z{A&1yM5%M_hW*jJJ442zqbzkb6tu-(ozDjOa0%>N{LXjn&L#hY5z#Sq_no5kx-XXQ za6nkJME8D;&99eSz0-fam?qT*{xjw6%VL|>NBVcaP$&4@A!!`9*N;Qev%{G>(_<`d zsDQS75yWZ0@4Z(_#SqWtk>mNpPSWUdPi&FJzffPYF*4=`Ydk}TiLChLuBE|xn<|ga z|7|HdlX!n42qDn~pK0E>c1giuf!2QY#QM&;Bd#km zeS`o3qw9GRsB2$pCC>k<=Wkv;7!iih!Q~LP%uqAb&Rwn7iYAPW8R89}rO(@=qzJe|E6QCsdHBg&Cn>r*7TLr;ZVo ziwFi9O=>qVU(NWa<=+zAveKVkWDv2VG(X-b7#qJxXSQqb`*l}d`I6X?)hZlo;e|Y6MP#ND zN}(u{pp>;#dhjG`zAv2i{Q1$0dQ)&qw^DN5B4{-$33K?E=6(3)r@JU_*J03QFfY&b zDQb1Ld|!It2vc0k7aZ~#{d$S`r@~@*PR&K!m%Wd+d~#baZs{!>aiLHb4c?cY*O6pu z{@q_^{Rau>kZBBo)9GK&zjG|#ehPd&X__r2NB+|tljg3J+$Um?f)muPlc!8XU<4g| z{@M)+s>DNK#*URzVI+wKG-h3Qn?+QjnO@jYO9Gs}vB;|MDnhZBtiR1)h>q^Zc_xGO zG|hu(qp}WRzp}lqEpJy_S3g{jErwL0F>|?sZ(r_mHE)D9uRHTsXIvOtBy8yitOxUH zxa`FweQ!&Sdt(&R)6u|2dkRX6AmjEZ@eWJd*KyJ!~)~fu$ydg)2b5-Tkc!^*kEPl61w2EjO)B)NVr{^ z#6jI_dRyDd^_qA_y@yD=`jGSgz$o^#iF~+Xe=zD+b~a z{{8W+LCL!PZN+I!EU3YJT&8oNj!F7XOt8tP1-HDff`r)_&@{`9drJPC@NJx9oKSaz zs_`1vvAFWdeTtlLJzMNKBD=Bf@f?!%9zdomHQgU70XRFf(6}yw`_~UWW<5lW8%-og zL3ME!e>nrR{>KcMu+RpVEYI4ib61+NT^=VAo7+omb}+X+Arp+VZf9i%(M~(V3SD(( zDCE*H1lLkX8wE>McKAa_#JJ!RID;dDGa2fH?NjPBu#S^7=!41`cUiDwd9~YAe_Onj z(6*EIFRl&UDO|*3+Zwr?1-7{sdZ@+rWY=4nV9dpQNfs_9O2F9~Y~EfJoE1UkU|(KO z>2nG{ux0ts~3F(zJSbm!9meb2*@>5zcQA*h{m=oi5va`f!hiIgo4m z^pmi!VLUIP4?ifwQTLiWwUtdgJbt%&9Aqsk3#6Y?F5r``9bkwFISdr@-Pd0ZU51)< z5^8Y+DJH;h5dOTOEz^U|;qgyqtThY82}t5I0&gfw*2fJ?=4u{tU~$v!+6gXKWsVmL z#-Unt1ak(n5&DJWyvk6K1n1)OT2EH?Nv|B%DA!mvvRh9JB6%&#!lNs$VFG59TwhO&}`jcfJB_0iH9C1oo*~a>D z-?dPWM&*$8-nSZyOTbtWi652N+-WJ)FGpnVbg(RkAWT~v*<+7PT6+(Zk}#&->LPRt zguBZ3Ki%Lpo^zgNEE^)Ua_GwY2|t3VPg}ycA~z-Nt{QXs+vh-|Y~md4MM<*IRQ~HP znkXoT9&o5xM&4;&fO`>*H(LyTQVM?8D+HWicQ?D9wz=AXMTRm&J(?0KgO;;KzaVz> zFle{Q-9o+d2rRF`OX7vy=pwxsW>w(j1=Yu@i|2%b=oZ5Nk%Dkg|9WSl$OV!_1dbBX59IBJY(p<~ z1iQc3zHi!KGmf_#bbHe3%m$pVSKFx66sLT9Z9^Av|iIrQd(;Q>Dba>i`s? zf!jv_e)6e zECbJoC$=|kc){yNso3TFz#TNAtJCdKn^AjNUhmZZ4rpUdyQR-E6%JF6qg*5#z$vJzSsdjVmXSQ=7gT?8* zGR+E*kU~;YTCuY3TtJ|!rCI~Z5YC0b(4RhrB+|T2H(X5%-8O<53%Ud7PxvfW-3TGA zQ+2!RbP^xP?ZuBYc)%zJuWjX2$Z5z0rcGO60fh&)TsBt>q5040-CvpqR2*;NIa#AW zKxsgIj#ccPcXr19P<1rExSh5P_8t3LI(KC5)kj57d+KR#tmxLdj9SbSoicThs&pWr zf+Im9xTD3SQAwrMY?H_A`*hW$`&C)co4-a8Ttb+9Ea5tQr+AtkqINhL+C z=woLaG){JUnsz;m8WuCAyYtG--XfN}^o}<(rQOGZbHXH+%nv$g1>1*T`{Q}89A~G z)>JV(=BRX%`H3{?j?V990mYmAO(tZGX_$l<)2Exm64~O9H`BS;w^o>gLq}kHI;LC7 zg;K`z6m}3q~;Lv=jii!XXRjC z|N6mII)z}&B8|{Hoo1VQtcGzE|IKyuNOi50BW;cgKX?=)iPW4CJrwC8r7$QipcZ`) zR$wtwAZ?$Fq-dRtYV5=nipTvrGtZ}i+384jbSHb?FlNGY>)bb@<;APB3VA0VTW7b~ z?REeu8VE14kIwqhVx_F<96rF02@b*|yFmTd~lV`I$5US+eAC z@3a2`rNWh{O$*(AB;utXmgwf_Q>zZ<)oJcW1cxux)nGi5rkUz!JhTy`f?J}KhB*2L zX{*oGs$Ho~LMCtIK8CrCcrIh;FgBS$rUg3*5J;vj=#~fB8``LNd!8e*jAkq_SPcm4 zSa#!(6T-LbhW%DmkUK!IMP_?(=x`EJiC%xAL>1qz`il}Se?jf=rw{FGULq}y;$6^<} zaH|~2e<%1xj$T!S%DS=R`D0Y&vR*Xtn}f^26SN?AJ$)&;vM+8%YIk^Wn@nek{;kP7!l{zO zw0upzuot9o-RsabH~n$eW_`z#VsDIR69g`8JI1m%mMv}Mc2GEJxx;hg!u;W>ezsQW z9UF$b?2~L80HXQpZ=*U}2z2lKRwe_%3I%GypI~LTIt6aWOP11vb%Q`NI5NO_&W2K+ zkLQ!a1h2q0!r?`Fm}?|U9j%o<{t*7+HYCSKlk_`6uKXuW=A8RTx}UsRuvx)V<@$h@ zVvj*LNk=H~<ik0u=g=1kV=$kP2!sCPDIyXmQ&j-xihg~(9vxoUi{46zIUg1~n>heh8aZtE z*OqGa3{4bIZ7>r1C#hT`WumZ}?Pw+wTDu+}H^$&g2detN) z`@}0DTz&1=-GoOhPy7x5`z2R|U(B$Ocb9kEwU_;i)1LbNNW!#i#0X6n;rHVpFclpB z0j<$Q_98M}yV`?66Ez-B^$h!}Iz44Fzxzq?bc^MZNqcn}BEec8)LB(x8-hC#2N0G`=M{8xdZ z!oCvk%*iATl#r407`2Z@@5dP}p#PI}pjTu4c3{An>Gw^C5^&>(dP}E^SMK^0+WGiy zqHCV#zId!>?B?iSr;|!Uh+tcajf+1TeKJZ!`im&ZAH|UdtU(*`8;pc*!`w)ry|WzO zUmU_^4F|(NPzM0H!Tv44{$hHhst>xUnPiZUF8ShCf-GevU&1YYFoAf{^V<$AqE_#< z1TNM-OkgYcUO39EP)+dHVd4*vLD8bY3IA{&q-Y^G4xw$N@7HxRqMw-x2~N_n&ph2v z*D9mdMN}XmDLwK;LKkt4v!v(LXR3sWiT`pEPzV#P{tb6{SBK2isSgBI1rQ%0OC$5P zHZldRnw4xKdRh|om;*0xZzO`BTU&;mOO)9P%r``Eq3&@mHmQGsDGDV%H0cl?FE1TI ztGyxDYYqS%uIt8o5oIU@)zt0FKch3ll7j;mOn@cMp!_!}f|wbcSuZVdPKnspm@^5d z#jLl8(0nAOp)?WIjA!F+A$+4uYZf(A&Fqrn^FbYa4vma2qW zR5Rs0nH@zFf)75}+|;nK|NA)rR1$XZ8bznnG^PtL<5>&6K8w!)Wb!|R4TmgJBLKlz z%sH?3m}AV;^_9_5aT`{yPjQrN1wO@FsgQ{{Noo z|J=#HzxDra$+n&AJHhn+r~dRhKw+5*Ld zH;x3~e*;DMbLZ1Vvf#Aa`VrK!A zqv~_jK<*&1fvI-!0RaM<)pW;oxyBJ40CZ@(US63`qEemvKcMQjUNy^PJWmZ7q&RH# zOZT2X?i)eZmj(Os zlhb56ZDVv|9;Y4Z@hnb5;dnrF=T&1sP^Mo_38(=kgNjE9nrEtyIZLj2?W=7EGXCO% z{<9`(WB;mB-}pcCv;Avz2EKEF1KE+E!7#`)7>s%?al}>!QSt3%>hf_MRdX_&c8~tv z_h3ZgQvwbzfxo@ar^Un$VX5U&FfeQ1gq3Q+^GRvL7E$Tk#3AXa!>U0h=TPza)0HJs zDYT$(S2>mm+INiZDSs$h^%B-Qa<=c9Cj9Q}s-ORiv37Z>3tmUf?3^i+fhO%u4jMIO z+qaixdV-)ryTepB3BVvxggylRArUench{q`3I6~NOB^871Wzw*$D&f;#a?RIWza-O z*L>=8IBjl_%1zR*q`#IAv|t|wig8c&(FP)A^F;FAt9^Dy z)$5$*Y?d-QG-GUB3e~FAMph&*LMX9Zk>3eO8?dJMaJydL+A$b()bKd?L`IVs2|CIV zeb+1}tc$rh8H!|n+)TW#vwzt+?@EzUQAuDg)h>`&d<|Xxo;{Q^==ylItI}lviUT8b z)o%1^l>XeVTBcD+>T0v_L#0UO8(&P*#FAxIGG&pgI4H}XWm~CG3bkFT`Y>j8p6|`s zX~ld;zxq^AHf6N!_PEHW)v3uIlTKrJ_-94%zb7IM1@_fYHEoe3gEZh@lW7&GPO0R0 zJgofL@{Eruu(+xed2zKZi@3nPOB`s_er)HXaDKgWPVw%M2io`E3}t0|aU+nN5+<-LvO2Kx+5OV6SVf~5OP!RHbyO`T~*PjVQi~s&SS>Vx$LX0W^vB}JD^w}S7p$N4L=`Pky6ffBh9|Mh0# zq(DmELaY?<)mt_cmN{ENqu)kTSom*F7eZ$55Efykn&4H*)%NzDE$#$Md!yymm;@t( zM8LOQISqZUEA@CT;FnrhC^pdT1;-@+8Rmz;MJOv4G$4fj*9wX=4um1{lxwnGvRM$U zR{Yvpv;NrB4z!uP-YwEJNIbV3tLupjpH%$eeNJe;fPZ};+T=a>%i__S$j5Ad)uoTw zdMdv)OQ2#tPgxnLV`J+3woVSCLbRvI|47cACu>=%QCa50`RcurV77FH$-(9D8kVus zm}1!Q{M%onN(L^8?aQ**XcEo#_`Bbr+~dQ{qqFLK;2IBjU^ z9g&+d8kKL3!2r4G;BnXzTV^@75x7dVL;7B9N)DP-S$&WRrdn>3XlGFdOyWQ5?F$ra zlvyQ}x9GqAj1CZ31Zsw>-8y3)oPY{N&*RL+%5wQ-PlGO5F$io!e_r{!j32Pld&2L- zWcbUsomm{Kx?S-j*wba^2fL3tX<*!omWypuu?MJha#sCTHK|GC6@mL30*Hw#51G0P%Iqns=F^X zeVeEzFh!QB^Ea;r8@lDq2???w*YZl?ElcH2(Dm~uH|S~f3X{%GKPQVz`Ws?rukMhb za)TA>lyOwMD}RrmE*tVl+;P>tj)@+xS&bgIRc^CF#{7_!pmS!ud(;39ApPPxL*$)41P_tVL+xsX0jTZjDoNVFNCwF(%lU`i^t%)Or>VSv z#^>JwzZh$euaW=rI%j>*x2~H=;3xUVGNPy$y?#Sl^I5>_$uOprNrx;v2VH-oPi2+0 zkb5457JvCQlQDnBjjz(K(_pH z2GJ7l*3cdc{quzk`*Fb(@1NiW4AKN0_BBz(_SuB)Z!iOV2usF%aP{W2&hNeqnPHzi zp3yvL-6L9ny@kH8UQ26i9AQT_qVT)R| z^7zVHR~9F0BozltW5?8nWJ}8X?=SNexBh1Txz{?O04y@?fMLde-RW>xfScje0#nx; z~(J<9=f>Cdx>E}A$uLP&|o1;J%1F>s2Gxe#BVbS|_y1(HA zkkU@Ctf!>WZ?kRX@1HLERruabXMS}(*`Ji8mRK%9`?l+<+MXn)v)(1AyVFwVv@27p zTio=Vy0sJxx!Ua@Z}?SA#Bp9@I3ZyNl??Rp>UaA#&<+_qE@rbTA92Mckn^-wlh^Aq#^SI1GEq^K=dCU{%cVWx4is)L2 zJ}WN3MWxoeTqtlVirCcnRriP~Z-6RaR>t5!o3?#;AcpbpCq0Y{);7Hp#Vh$wgfJ`# z-tKlcon}R;`L?q z26y^CD01h|HDl7f-~;sz&s!Q#eq^WH`PylYUGWNmdj+4vI{(^>c%5>O4fo{-wDxc`tO zBEokud*1Rl^&fM`0pWu zfx8sJZEQgNYguVC{XWjDH=o|YK8?xoyW?JJbuK=gpW3*1vgl7q{(KmUZ9X`b6d)P7 zH(uz~C>k#0TENr!2S>Ho&&WBU;j4Ql+m~srqlIeA?|Hs9FItCR67pf#hlLy$5=VED12k!5mC5DZyz1X@w3-eMZ|GQzB!%I zUH&vPY7dCV1kle5}hhB%t;1Vu8k@3ot4T_^5NcD*Gi5b#O?Wj1D=xSzFk6Dkb5dd{B7ojb7& zXPJ(+``dav2UQ6glP8b-7lvE+4XLSeX2)Y5>iyrrGA4I-H4PJYc6{$pAf65J9H^1p z^nFj2+Fv4>x_$r+n})e9b8u@u68$G~@de)3L;PCke@$!}+Hc~1z!%5wQ_6ENkck=i z9AZAhuN@jU+Kdjb*u!Nr3}wJP9#O&_byrr*x- z(PPB-2({*pqpz1!(e#B%p_GsL;eFOY=HWIxsfpaFf|Z7ake=#NJ2K^{8TNyExpy}q zk}1iJQVCtQ)$f4)v)doYjB>H-WJv6BhN~U)Sn18)&|qxygL=1UPp7d0r^jT`lQ6+` zg$%|gc*bSY-KpCvC{B9l_L~<80-zl8}Q3#|M!FAL9BoIV(xJYi~S# z{TX=Xbw9ZxI+YCg3`zVh}{;GAVBLr|kxu?DK8w zPBVG-;`S6sPdChfM+JG^9;KtkPPj#S{AX)H4GI5=jUwXK*=%mNe13U*zACNuJ?>Y$ zjFZy8OzLOqn)hxnZToNStHy1!RtxbPFk4dXOU++%P8MtXVl49erfkZCmBia;t=?iF z_O$RYMj}G;)7{0sPcm48voC|F^x}xsd|$39<+Di(hTYs==&QwesIr-AxCr8~7P{7-nC3PIL> zS7%#(pM+;-)2VkbbMX@JL__3yd;ZH?f!VAJpxL*^wYT>{XqGHh~L`q@4ufTe08<0$8IB&MtTUD0$2VsDw~gkwWs{hU@R00@T{63&d`W8^x~uQNk7jR43QO zFiQNd!JSq8lLrVHl~3LH>yMHvN+5pURD6c5#nHTo2Vt=_Sz=`=-Kd|XPWBGgk8w0LeXIx6)nXB=4`@js# z-XgnnO)0nJfyr-O`JW0|%7JK&lTX_n>!q*P2FE&CFz%%KNmF(Gaj-S&UA>1C}(bL}|yiS*f2$ayI5 z9xd$d%^jQyN}~p_DK?s4j$R`ma+Wp6`JbTAx+m!@Z!S=`(+eOFB=lhqr-T` z($oundurw@TIl5@gbtH(xRs-EWx=(ojA=#865%h@Fqc}Kf%M33CEc8A6biJ8`!$9= z@(xA&`Zx@e)6YbUoT|4ghMAfV;gP-gO+$8T3+c_={l0#R$pzGQxJ_O3q_t@p3&GtB zZ3FTv-Wb7}`eM|S)R9*8zH`v}h0)mNu9}Pp2VuMYs49GfXO)}|bDNx&KPH|p*~)dt z-ar88@2cFKZ`s4Kn@<+=JfL4NCTqx61h#eAbFKRw>9pLhS9^~Kd&&~DH^p=zgKY;| z<&6%nM+;h=Htf0eN}rA*f)M7L$W|o!)$#uN54{)Cc!ed)Po4SoF@LkU4xqE06=YK) zt@170y>XRM5_M(hU*GFMEh}ru*2vOO8UfR(jW+uvL1&#D)@qa{J<`$3EqV7#`0zrf z_L?0wAPD%2Fz?IxYrs;%MrDwwd=KbPlMFd2(`<PeLi#*;{-jJ3^9zjJ4 zIY+!Udv@Ls+w))s+VNPTWD%do3WA8fz42htZP#2Cj0b)GdIw81G zHM;j#Pu1C5T>Y#HUJqKx&W4Z#hqndv0gq<4e0~gN5CI&1ekxP;J{dYL&CeuURX$yp z-Jdo(TZ)x+abF$}!DY*pYJYmDZd@`e&NjR>5GeHoV5k&E2COTs*?B zonWC|Fx{-Zn#=1j)Ap#&0r9e)`&koF&@r(A+~{N}qiULMLTWpNRnF*K5D)AIYYtpF zs@i#h=M*!z(>TJ^tiC>}RjkvasrzY1_;MZx@&573FTZ;mfPRQQ+FMnA&oCw*Cr9s9mW5+@dz^CM0cAKuux*TPR$%#TSwxIO=V?}(P#zx06XM0q z)i)H$BufHei&GtAJu))Jm@jGGUg-0dG+o zt12sAkltPf4s()s6ZkzSNwh07@5ty`;IlU-TJ=@*#KDBRyTNuyRt(iYGNLoL?lBW< zE08Y#Y!F=8%DJ?T>3t(Hg8h%yA3;Of3nE|6&*c@m+T>O5&s z^>W=%?5I#-d&8*0Go|HVm{;(~KX`qKj#J|!7~0YKddEDQil%(oNZGTFd3 z9!)-T&?^5A^5SZd5zOp4B`I8SG108@A@Ry&ZTQqH1eBoN-#YRGvUd3V>aV?L4!?eW zB&rwJPyt>s13jMxe2g&cLuO;~G^ZGfqZ*J)LMZL#h``ICC3 zgn_PRgOxVBt=Z04@5wzc+{}dY=5)@my$jkG-Dg(;v0Rc7dS>5^$#}hOQ}t{Py!fNk z-)GCAw<)XKAUVydBSJ&w_+k2M=av&2!XPYwU0JSxSH3#0e5LcM7TIzd=9ZEVHW(ND z(bJV@1gCCUaQN9C%p9i_YgWTN2)H*944x%vl-Lw5vcZcBT=)E^aNg5YBPeP745V~E{%>rQVmO(DkRw1 zT}FHOm}a;s7+V;G;`WsjpyxU0m7Q z$xUA>Nq|e6>WpJVcfN2Q4mD{V6JCOmYh$g>|3In=J*j?4(fD-~0VxNIjhyOSZbCM* zg%rF1&PTt&YQ5e8d2~x~4E>-Avvvcro^pszdo}x<^c2|G79c#o%79+3g8MVZN}~D` z#Uxm`vQc&=Bv>0b$fG0y#OUZBR?=D<7a9?m;utmgx6Ib5Z%H-7yJ zjQH|kX{Dlq&q#Pg=@59>V7=mC|Iv^P!~LV5eHH6d01aIE*uBfs?rpJl@{y-qf$BlA zoz>LylL|(!K=hpjGv7HdE;RBer=z=xmZ(WG`2|twbswkd3JvLF<9DVqw*ZhT3V27O zO4S$li2jcCCyF=AlHgazHq>D z#qMdqYqH$)O*3j4KcE@=(`aN(%G0WO=Ib=D!LC}VkGJoSint&w;KvDOU{*Ng^>hxd z>@Gk-wNk99`S?|N9K_^b9iPro@XAn}_BCSwQ#iNWSzvEgf4@4Wx)E;Ix`zQ%%RrNO zG5jkTz*l+gW}N{j3>s*!%%A#5;?7K^6WH-3yT^2G-ni~!6N>A}k9R|n`%@UV5MjnT zKj0>VFgoyYSMRbQNbN4R$ZBnsfr#n;>~Ms`YFYiWIR$!aEHWVQR#O1wh=lo2-1dS# zH=5NkCo|M~lN(SyB#OW*?K&{KHEd)pyFr0ECnJ0O^_(ztdoy>9ZyBXu&_2 ziNdtg>eMI6ILD{pb4?W=%Kk+&6kJvG^4jb-MP~Naet{imibyR)OXD8o#21bEYv+@T z=DQTVbDXX#H!4d)Ap=y>+lheI85aWS1QPkFzb;g%@W<4F3=#QLBT!Gty?!}~mMupJ?xth1>?0s9F=3M7J5HZ} z2<{EJ%fNEYX@cE`QtZXJy?}MDn0i3-1tP~gi?CpO(VPTmV;j0%(fya2=wGq4MIGeK zdL{Ywq3%+z0eM`v0=a_^-}L3m?<{KNIkO+GM|~A^IMJ@MKfDOwX^r`AohgE!z`cQb z!d+XGw9kKbWh{1YT^2>4j6azZtW3=5tbDHwTzURvnym?=Bz<(CeSD|F;mBO**UGD# zgJ#STwbsw4gw!{mDNxw5;gW+vprGv?0q!yy1(}0ShfIvj&c~N@tEo&XAiwIQz?k$S zBbMdB6czgtgrBGs$b3FHgOXS$Qp5KRxm)U5dI3SivkpgP5q_>#?=-$Nao0Ow4S5hM z83@0txo=FdQzb#JQ(SP9DM~4eX|uB{^C)O@#F;XA+DA-1Gc>e;@e9`{>6sp77MEph zKsGl%O@qEgFgn(+Sd^obIMZ1uC}pO6G8Vs|%cJx!n`SC+IuiHXTj0*7+JVtfaM{B6 zwI>-e0lbfWf@nneO(FZZOZ|1Lb{QCwO3=F-j(pu`$M?!~2C3Dkl~?FqMDVVpg8pS- zC}3kuN?>ZVK>?@*UcFv@j?eiICM)OCFE-CSJr%{edt?q{`J|(=lSg~k*DBpY+|j;= z02Vs3y5=Hbc0T#PpwNEI4(#p=P_(hp$KB>k$4-7@cg_<$J78WL@DvYszqm|ZV9C`@ zvpjcBqFqVufll-_Lh;@8k4n_%nM%do>;;zgnme(mm*gVh10RC`jMkF%etp7n-v8j%JOrw@&bt05#RCv%a{| zt6{Wi-A3cv!00=e=Df5W+SGfXL`EZCJC8P_;}mH*Ba=-n1Z5;bd;#G7yvM|4?u zIiujya$%DKW1EqqYbzdpW?~3eis30%A?W!?lIjywgWH}7b4vyj?rnm=qh?9QnWCIj z*VPpOfuEtke3i&~#Aml9d!E&B_W?5FwTGcCi`;aL{~Nyyy+qQk4$2ZsI2`Os#L9P+ zHpF6}PD5dCt-=7Wwa#6+l4oLS{DgV^o$J?GJ5cl^BWoLdA++e-?eUa_U}nD>Dg=Y9 z7^a44xLB7w>3I`xgTr0Ay=K{yM}p11$1{V=6OWkuoN7c%@Q^8?3utg%SOqouepm?k>o zkdH1+$d}wC*58$w0z%sJ>LXr{;pFc9~YfAmIy~MF5B4-eP62nv-ZA zyJ^tHh4q={MYQK<*W=;KqcvYcA&5i-^XBQXcgp~6)@gkT)5-AxIglT+dyED@*B4HD zsSw6--<4gb@8UY(vPn302Z&W$e5I+%{^PN>O)w*nGQ@ zt-gKQ##oerf~H~q6aUkn`=~nDIgQ-TCI`&gYg`YJt1&!)slb)$LRiC`&Bj%9eSWAQ zX8PLh6w@`|D2h~@bB}lSZ;Ld#Flm5@v-w2InHNzH=iFDl;d-R#DYsxp_1;`Rbk|Y& zdO#32U%_x`;y}c)s_Y56-l)X5tYB~`GV*p;(Q?_NN*v07LbD~&lJ_vUI9uyKN3g@?(>06C9K z`F0nvcRG-$3t{&~kbvv#UjsNg!^w9@@gcbIH`t#{8_ythn{YH>x#;5PWm5A~tPg zvc?bBhS|U5FrQW`j!YHXX)#&p@N9tb?Ylc*w3#TqyH;QjTr#gPK$Ua@R~YwLbF3$I6F*b92? zM&$Z0umMI?(k-Hj%p}9DD22ON0nQ`9KA#X>bMI){f&`#)h@e z7vgs{dy$b0x$;Ku<&0JnKY)Z~ewU!w>855V7vG@daVo~zC_LBQ z)1^=7XrufAkdXRIo%1lj792D!lHY*X*+J%3) zsc*s^C5e4&Vq$b{S;d8N`NFkHx7iwPjd;N}Un>g;y@{fc+go0T?#BuDhsz2~WOvVpBf-{kHcd(Dw`m6<5vjywe(uXPc#aFVi`ulmBCcTYUc z0-`?XE-|&tSW9;~%Y?kdIhZh#DQ+?w^53t}c&G6G6{5*w-J#ZgLh$%kh%1(9q&dG5 zsZF>M^kCZNi(3xtB0yW)RQDa^h}I)rue-lm?hW;*$fDTVy@U1vZw;miohc`O!kTMj zyR+0lJm!+9Kaj|IrbE|jXaOUi0!Mv{DhJ@$uMxRh?|tvvgMIWHeMe39Z;tZ~7NZG? zvvCj_-_O$1Cxpe8Ke96{$5uaX2p^+26M*o~@Bn;6tbFWk+6Q@@^*K4ky$09MSGRYo z2N7%~Dp&(sX02)=uIw=ns_)_^QvDU!CRLR^hA}OUeh7AbN|oYLmN zQm$!=K)t7y0ouuHhT$ACkvg{HrS$HvUT$#jn_6$ftbchFz+}Tw3M0jqE=AhS?w@~^ zBtfbZ@>OGm2A5ZA)rVbRxlnUuPNpRZOa;q+P@W5me*rKyuXos3_O9B zH(Ex0@M%sap2N&75BS|d5HaIc!&WcJ*UOpZj~{NRh5dP3n`P&^P&PFB!0EK5|AiN+czx=C?d<>7P?UR1&yY) zHN#3Owf6~mYltD(5>LTFhgymEk?J{o6UOkG*>Tm41BM&0a+74c$HD94-fhT7BAk)5 zjM&!SWQn(`a_jpYctTHf1^^q(FO>{7vc8c`ryU|S@}*$-K0|r_Wb(Qr@Mu?Y+1(mq zrL8-qVnJCs--HEoKA$+e>mGZ?DRSrMyNufgRc~EoDvjdx)xb9HCephJiyG324BJ`7 zsuRN#SFZi?NIDpqr(CgCxO`C`AX1JP=`?EXDzUe|&q*C3{YtqW84Fwne(HK)0#eJG zwykj$!)m4zuV?4^U#3V-g)bQk{3vq&+SBv1zWABp^m4aqB@H92L(1HCgPG#xGP=5X zC4Z5*jB~UN1Lq%gZrwK&{+#=uu$0HZZNoqpfbXIf5uSd-G|hIH>r74)d3Tu=g4@O{ zn#7$)GQb#11talm(On&oIT;^t6!y^Il?Kc^%Y6*?qT!jhi6{emeklF1+@yKno( zS?a;z9wMol5~KM=13ADce%W`3}0VhPGd<&B6P zd{V7uOieGo^gg<@RKtDEZkSx#UYcbZ9YnW#wYAGKzrpU)i!OD<5%*}DaKjdW;0GJB z8MtYPaf;lmbuT#d?zvKNT@B7}@^CSC*t@N*#!}k}<`6Iea$ zB=XuK1B{FA+CNw!+mgc8+472=Vv~~AoXTR;yJc|ceZ!3wlyrq>3wffP(cl&KFz*!W z=R>nv&3b%}dW9`l7%ZCBBPCkh9;)SfL}(%!JVBE+@wU1plTi#OujgSk)5*g0OCpbg zo7LtcMo-QoBkrrZt_=GxADznqU+TEAQy6ao=;g!Q``DJjveHKi_x+~faI4xWCk zZnxFL&V>P@BbHxA2J^*Q+|wF<#UmE*VJ}m#eT=M*l{ue{ zJ)q{z%kBna!6ul-taQ}wngsq3MLsu_#-zN=sGoV20Md7VrBDw<~6QDetrV_Rcd^ysF* zFXuwt+_`d8nke6OF+gYE|9yue0%h z;-SHta^b_nRhJDwMHCPLEXTTpk~te8pM`-m2@u_Tl3=(fW>G)64JF_uCbHXJ>lNa2 zQH)rt=(#+soNmVFIL*guJKGx883!_Crq+&IJ#cncO*`_3R%G*COBS)Q-w7ElGwRwf zV>T`T%Z%(p;N!yLX2JHpR;$N#b{e^X1s)NP5gbXhSMelja{i`K;{p@GUxz()WDpL? zGULXW{tU=xwhT<~_3WKofW`8aZZEv1&)y&(zEG&ZEhbk7(xB)0UVG^k>8J~=TvnVg z#)z|^8D>2#Jaq5b+T8GF41s&dbk{dY8|srfQAoBOKRqVp^VY zeGltTLswv_#*j08@^q#w+B3(W0V<3SrDGeW9J(?Gx+eT9Z>4S=U{mD+F~{6G`sW@1 zJ*MvJo4Uut!^1@JCpmYCK};iE{psGSr0?exj?h)U-pZ(Sa)J9YBW3b6tI3-BMuE#1 zS)(_5Qn=@cFY46kwx1sa%VvO_*WdEuRg$lrs08Nt(0$T%)AT72l@%&}8Y~<48~er?`;M_RcU^yH!YMlC8qUVK zSxv>l&oW0@KvgP!vKA!+b*m;s0*KBViU4VAcp^Y9vTuKNN@TQ(}C2smLH*) zzMl^#u@epsq205d0cf8*%2u&1a_3pg8(_9mOQ~LtlQp3cp1ThkpKsOPtIQ|i-o0w< z+6}1HB$gm@y1H;_(FfcVe%3a_2V8j0xVs?^COb6k5&046EAWXmY03i^IG(Ez0t+f< z_Ie+|DB8aGI#CpyRZk_F#b=oA^YiXzgM*)5OPAM%!K*c3*VWY}Z9_gDCoi(BG7CS~ zEbSUc9UZVz_2SaJ+W?2}3&~eu>sdn5CNm6n=5@!NMvvXVn^dtA-eHI$z_FPj7j_J> zd$KhCYV(XOWM0l;V`|^jGVONCSc4;$+3C!<)>WOpo1L)UEHi^3iK5Z3O}?I>PH&ma zlj5mEwtxvW%2MwA38&XbtA z8bM~VW_`!Oui^5wsck2>;RSZ(kI_oh8Sy*E>AZO=an313E$I7u7D*>lLizHY9|#_h z`W`fPOJ0yU9=*SL^X5T|kk?;0_jb54I*X4lJ?YMPO@z{65ZvrRS^fCj$}f$?%i3W_ zbQ3GNqjsCfky7)Q2d%OFo?o?2AUgF9V}cgx)D&+UAm^cbL-z}N+9Vuu?G{U?#2v0f zQjEIz`ntUV^uXv5WWG_q-w- z&s@H%HP(GWPE@@>6f_oYc9?NvsgHYZAC~9BdCa)S`O~d0^+Dl|8ywNv40_nA=)IA( zf7#Zw;mC3U!!r8H4XMJh6z=Xek_~6!RkR(Zy*4N%(OyUMYR1Z&WhaV6+01t(=#AY9 z&SBLnskNZtg_{WaAy~ilG5R4z2n089o#WRl#|l&;B5Kjf7Fk+!h>eO%QT$6|M{4|8 zA+K(+HK9w;{5Aom^*9ZY?g2z{S!Bp)?j+T#ZBBIZ_vz>DCY729<;l1|hsRIik?GKz zpJwJYo;tjQ%uF02-V^O^i#`NiGDRiv!I@_Pl!LWkz0@c1!Gc?Z5)pc6Pr+5 z!IqtRvZOo^2@NrM)|(sZJXHx=tMMas(_yBlo9~=?Avqw`qP$_0O(3AwT_PX6^L`(j zl;j;&7q;U1CA3b&sDqWEn^b$I_f95K5lFck!*RcK8e`lR<0LWUozNzjGA}-bO~Ug( zG?(@Ns=mY8 zb)mXQ)CgQQPRD*swCf#>^tjm^Se)DF#k{&Cl0?qG>zwh9G!v8t#4g`GuKKP8^ga6x&t3wto;t%5&KYIcY zKggseuXn;KJw0dd=PVxd^8*0D7_)NWrL$XOz%W>%qX|V5Zw6RlwsQ1Ep?$6+6!3zc zy9;HXiB889kEcv&sk{Hp|2Z^}rN-G38uGQ1MekITFQwllfRbs!=Sk>Aw)J8&@N4>~1>@d_|BUq?78455g~HNgGzwyC#<~X#R6MMl17;^kO3Js;XzyBi;K%grS_X*gn;a!)aH&vEg;0gidNo zhBtwvYmjVQPcfhTKJ%272!pP)a=GL_Pmw|XOTCp(%%>ap22FR*lAm+L{A|$D(5d#I zNv!uOk2shoxlY4v{3*n9h?|R8jU`u8>!uPD@3BE+pvaYgx{qbb5@ z1ayokyZyXrkEzxY<}p3)Sig}ph1kj~G(ACdi9D>)6og&^L-+v*XBOiJU=8yQL8`c7 zSx1;--Y)_#%%ABjS^zMrEUctBZEloMW57$RZexN+J|?VNI+j(|D2R>uaUGS^lg$VU z;MAPCXq_py$>>D|^A1I7?;-^Ure1KJ%Fu<*TYwUx6{$O|H$-{%*mA`3M>4Tiq4~|@ zJ1(=I366OkbtIly0xR{IGm}q#*EE~pN^AYHl)|RS?-|X;Q#Z@5p-!nEa_pIqjkdZi z-RAcwjvVMuZv2A2B;Gas*@Reb+cnMczw-MIC+q@1-c$&8JLQ*U(>`r@nN^Ccn>@)j zdK%NOnR3J{fS1m09)i|_fynhyoz{!iJ^c_@m`g?dQ@3q4j&o zcRs}5da_eVfTuFaZu0SSmozU~m<#EhP1G1{&8TaSMm&rU0 z3TX&E72bHOrZ;{}y?`H)2cA00x%B32k^V(u1@<|>@Lf>Wr26wbX~r{rV_jtbD0xf+ zR2S;ZUPubmecH``{_8XWMmW_Y#_~rATNs|<+jwR4{C}TLfB^pF2ZUy0{>G(0O0LKQ z)nyx#t^R$F<3H`aq65Ul!zdiLgLeQg@PZTs_|2@YW{wDAInSm3*j|eal)SV>Ipf`ZB0!>xIL>9u{MJ# zKl0PldmB^N_WZtphH7lJ>4&^BO{N-bsg-!5*#-wa`KMN2rI}^Q5)?gc$^OW#r>9KE z#|Nmh4{FWWSe!eSvxhWBNGBmTK*`w*4MR3n@cHN>4-VZng{c3Y1X)S^ENiE{z{~N4 zc`|<<_LA<9Img|Bg#}`P9t5Oi!FOOy4igqkx|aRmD+xh{%g>G{x{>i46zcJdV<{?0 z*_IFWo*gbO2!dAX1$|dMs-7*qi$>iM@+R6%*5P{6z5#?r_zmiPLHjpCTF=%pniL;} zZ4d9|K5Ny%f1=My39?8RRyQyt=yKS9Ln7;EkV#nd*&0 zsK6)xY*E@){$r|*s2Z}qs>kN$DSde+>-+AGDISjT1de9$^4>2+&qg?pzbNC0V{mzQ z`g^0QIdoq{5J)|m_askYd#3z-l{GZ`hFD;{h+$7=o&MvzD{(Dz6%+dvCzzR;d+45C zC~t1&3axhKYhoM2vc{U?3FV7)w{K6573#+#hkNb8o1*Awna+{EfzU?}N_GjKP8g8y z|GvZEKm*A3^$G?z1-!QJ-XUaoGo-H`*R+7@RqL9u-!5dE;8~l1DCYP3K9I)j#765L zb@mGwyS&6U%3gZr3rjl7Xj=x@>XPo)LwAJKm^cdESR zZTyEh(2ok5(&j%^1uGGcRQ>$ie*PZr+st)bd=l@=@AG->=NKY}e3S@^UFN%^GpxDswN`LtDR97oBKg@J`s;IYQJ{r zc2Vv};+DRB-R_LIyX`3MpUmj((f!d=pgUDpriahOp*m+kxOnO@zk^$-BzmOtaqwTw zrKL*SUOue@S|t%jaS0~J?mb70D9epvvF*Mlvo8(>_z^@oTXnAj$i@lo(F-rVbh zClu!uC+j^*>3;>JZPVT~gJT$+?qm3Acy&})bqklE`qk<0)$23R%-;nvFndMI&5&jB zv{l!bWJ^1Gcvuyp!B&OE7gPI7V5fCz-7L-KOapJ%;B9|jPcbq4@BXPY%kBrEf|*cR zL@S$)6u;D>pr_L$#)fID?pXE6(`tFViDRli4t zb!+i-_&JsDYq6cGgsgM$^V*#J`N+uI8ulz;^YDmiqSB)oQ#vgS^jAQw-&za-Z3(iY z?S992z5i%0PqY1Dl^a^mTUw*v$M~HG!?T^3)X~glAXC8gCmuzxb$+{PncSHq#Wc$R zBFOi0@l|T$;)HVkz^LoD7!t|2#;AOcepU=FOfYAVbq8MQt%pAAQg#{9zr@Omd9CKTY(M#|`^c&voi@Y)a za#?ez$+#i`;#xQY^BYBZ;%bgnSzZ=_@1C*wF3cPFf5s{HR~Phzp6+&*OJ@Ers3Zm! zmxjjaeuTM8HCFCG1-HWy&;2ein#VZ2Q(Cc)B;SFAH%DBZ-rXBrinhZ&V=^(Z@U zD&@RK1q$M3JRRKS^qh(=2B1 zFBGUxyQAfLVfJa?12L}fasDdScAx#Ff*5If7Uc72X?o# zUR{`a(qyqiMtbYsp>0osVAJt=q!YxgZ)`6Fn$Mw%oYA)1|WJyc$MVvRqzx5ot> zJ*VXjbsSgp;&hGld&)9qo*TBVecC}DEvQj*t-dgGU|*-rC5Up8cX61)9+t)Uu&~eO zw&#B^QJmP2YkI#J0E=e@3|77={^7KlNut*$W%tt)#S|9H((UR;Hk7ON2jWTl#q3zr z!c94$QgZ7Ax^Af;*ek(c#-9p9Ph@}hb>w(9(Q`TZYU-v$QzN_ zMAHAZ$^T~>U(s$V{R1b+(k82J@0cC<)+{j+08dIIw)>wnPpFETa#$q zM0m4uSdPgR8P>?ZRpCIbb9KHYc@kOfTvIP+6m|d*KxJLbi6nh z-@F806LhNgne~1(2*;a(rCPT^ zz2joQ-$uN}M;(Dfc)Ju}kZ!N#Ep(p#>ijTMFDaP-a)JtMh1i9c#JZCjv^=ZCESN3X z*hOf`D^I-5cSwt9vBO4dT8@p!;8db?{=!r{rL;`+Y#}6hT{Xn!4}Z8th@+% z1I5^wrffbfW7yvAjcG0}hc<5wBt+D*>doT^I}pqw_=7T^kXMvU#bblHVOT`^6=UVA zd{^(37_QhNt;%At8sT+chU7{u`#s}sYkjF{;NoWQZ?21U`YN-&*yypIotraELH^YK#_n@h?JikcBq8GASum9sr|6}2B zQEXDthv&9Lz5=ziN`;$wB&sAWz6OP>f>furxW6PXV7m{R8mgb(_G95B5>6_B92l7# zETL-ncRWmBKP=pG6RgABuafCzPe&mXE5CeQp9ceGW^2)d_sVUVA$9TJE#5`#C4leo z{R01$SZ;2}V{HKOHIXd|e-r1!+)Ky1dCZo5s32^n;+1DSx9*$HSs4dd~jMg;d z;NFcN*&r{)yyal!=r(4H96BF*f8`d%3vU!{rF$#hH&Z+KgcH7_fO zSQxY-x*bSnOGE_$q^|!hie!OS@yN8v?e}e17RUvFLj*Cl88}N?#ZM?7pzv@aJsELp zwA}p7nZi73R%`rYSav|d6Ez_5_v^I0h8zlqfWt-fu zDSZs`jcMXqOQ~xL$vX&6U)MpuZmc-A790PoIwdJHWW0ky`$n;PdpjrS7q#64*a<@4 zbV!hr>Y=|~F5C=rc${p#e-tU&{l05vjlEl~`gtOK`%GDyHXz;e68eJ#a&Vh=95=&tLq8V8*@N1{*Q0DYm02 z%k50-b5`s7wOX}0x<+XZ!5LhR*pqi@NAV7v1EjD_>YzIO!_Jf%A2u9LSP7u+|bp_&i2-H zj9`OS5zG0+1*7<$gNeD}b!F-)Uxl4S>y2pc9nU3&6s+r-@wZw%f~l$&ew*HoOjIAh6}Zr z`$dA^L3A!KAl=Yy)5xE*4ji>==rE_R8N1pp&+U+B5i%L_<;cen}4V~3Dc+`{1n z_12K_)ycHQ)NeRCr`MqMSp_}%vGwvdmXl3#E{+ztxd-ca{Mgr54HGnI!KoY-q5PX; zx%D=2Sp=nl+t|&`3EG=}+SBb{M9A0uPH;69Bkj1mKWj)rYl0#oE#?H)`?(%Mq0x=y zw-GJSjMI+zPqar^e3!@*nOeDmLDT;VCNfXo>ToPQI<*e8+~I zULSk7$(#cD=7wH*3OrHtZ4(9dDEW?#WpGV+0IJwpe4nzH>(e^V`;X5$FYo^`qhtGL z(kt~d7q62gbJ_sN{>2MbyClc_*@W(cdo7}GMKSFMZC~5@V>xDV6IgEIjKDF{x5h;2 zo!bouqbJtsAX25f6-J-WF0X+|1{~*)S=Jb`CvKPx#Z>$4h>w*iwoF$TrIrE~F;nG&yV8I+0ej=W zs0YgoB&jVI-(P(Ls%=((sSH0d0imz0-^%e1Wl~J1{UiYj%6UZJ{PW!d_YBM<8B|Mk zlyn#6hqZWAZBpB=1p0|G}EChMR<~bZTnI_PzH(j0z`vPer zk#9Rdx!_7~q>O(a!Yx9$&LfN+f@>JZe|gbkf9>7F^)O%eOTaps@!;+B9W(25mRV#z z%ae%CW z*gOPPoMR$WgNnSqU7ts`AqgH}GiZKMrgPgAMrpKG*SFkU_ZDXUl|^hc<_n~Z3AZO- zacBj+lhl)uac$($^b3B8d#R9W;f5j z^yVg2U75VFM`&H4Se3K#CzXnk?(&>9w0^MG__`oj@v_6sb-5C9H zwxzRZq9x(v-iwv|M`f~K)}J&)$G$UDyu8}yNo@4Cpo!JCkr5dp{MyrZ ze46`WdIqs4I>NI#^33U*YwiUNM41e(L+3&nd=I)vO*Q4s}95;w>4_$ky6N)mWlABWCdaf0^B6Vds=6v_yEkHrg^-xxc$LJXyX$oTl?6_ zT|+@9+FN+pV;nFr>NprY%#o3<*~j|& zHqT#21og>i6u9Z6f8k(`pk?&)+^t84s_58RC4+^xsBh4~?9eBvOVd0pr$GmRErSo` ztn~HuoH}=%w=$>2HV(EaVdwn4XZJT169fbsc@>h}9=h?t-1ZXoo7m7HMX zRQM>F zDzGN0yDuUn1u@TDN-gWcH+(+1>q+E`Ky7X$rzQnbh!FOe;#X-vmPSnAb}^6;{!o`gv9;e)Eh?v?}(&E7D}|L zTHxhLf~w{Lda<^rv-tMX@}6^VH``6xg)oC;pIZ0E$?WN8!kVAF5Vo<}7D~w*LLbx> zjCgeJA?(tx_^v!!`^I>kFo5|(-C&XBq}Gp%BSCV_RSnrxgMcR)qidws`_1G!NIK>x z$1_lzmaaYBb&!pqr^9%iu%-}*J3BInoc4oTzEOnCryr}dt0q9!zdmx1NaeTrNV2OI zzZ~_eRn_Q6TuMdl`Xjm)n)621tU$g`njYK4M&%S*M@Fr!z04Mqb$y%hP$@_?EmjSg zGDbjfw<6#s2XI1|Qd5-M$lh)!NkGgGp{qWvd({jZkL>zP)rDfQi-(S!URR5lPtU$+ zS#@c2>;}SIR)Lj^9QB4}m+5?|z0@0qIYwtact6W8fL#DG zlZaN#T9jsu50=gJX)b+{Jo63!Ov#*0$jkmT!v98=iEfB=7wwl~`))n$Cdjt7Hm76x z!rj__m0-UyTDIh69p)+#GE}xm_;$mEg5clba8ETLpljNko%%Z`-ULggiK6gI0c3fr zlKb%CelqO&@FLl-iaz1L!{^b3cqm}6S5x4u7gvl~ay+H4oCp&Z7m%scqTXNM@UWtF z>ma*-;h*e3S@>A?=t8F8*$K!J9ZPuK-61-BrsWQ2$>+-75ki&$!oT3xt(++T?%eNB z<74&sp}s077CFOI@M8HpR_=cvAFCI-AN(ge-ieRZ--ibz|8D^Ojch7DicFu{aTekE zSA1ReCq7o6YWG0x?*{&93g{jXtN&}@$Dbvy@Z%e(&E)t`kAMGk$qEmtkSsan$-V{dYXPk`?tXa! z0y@M}e?f=GRIFYn&I|Y$)1}$;SW^C51^9may9?1XM3e$EERZz8B|tvKxIRm9lKv9I zOHs56UIh=6E7k(*?mu;FsOji#U2)K|R;&>}{hl0){>29Gh~}mF-q_6H(^(V412u}@ z#klZa1`{RgJ96tP>%{qz#_S9#x#XV$BCTD^tqPlBe`ABd%3pa;i~4;#NwekY-4z2! z!F0K%|HCJagCsz;vR;H6$ZRx2>(c)_wkHeZea}^czQ}tLlw&c|?yJ>c{-F@ve)`q> z{{aVK-ju)5Y->OU#){f6hO9 z(KH+VQ7cGg!aD+K_Zt(H!}}D5cgN4bZ^O)|uxzbHovZXiu5Z|qHiVneoAE&SI|oU1 z9WT%7vH%j?-zvAseLk7827Rp+{`WZa06D06UV56v?NY2Pz|xuT4tsB*xx;I(X|aiw z$~RK`k+}a=0hmk(@h&n8eTgD+SxSDB&nqhHY^Pib2L$Hn=ywvlya3i#ZZ6x-td=^1 zzU?j1+E#5A0oef)ZkT4FDO-b=@m=zAgn9qzFMb9jSZV=)BiVPgZKjLmX{?(#Ok3$pEq^|y@-iT80{$3Mw93Ly-TB=P zjRZa2s1LaT+ywfq^?#2LpB|{x+5S{bT#9`o{aL3_^8t{KmZwVx#K%`s6H_Yz?=1%L zS}yFzRoNc%7}(_3Z%khq!A@KNVk(ic6Spk$UalBwRqOB-=@#dwl^bRklaOC&T_<3L^Uk+3SuEbdmrb|`%9=jKrRyFz7#@{=98lW?6;JC zH+!@9tiYltvCfM1U&`Y7Rdb!>rwiZl+xnlqe)^MhE3mZ2U^1~kN-l-`ds_cdEBIkF zngXLJhrCVweQ2CEe)eA{KI@X6Slyr6*H{23ftx*4|Ch4<-RN^XbYF4<@u&7J2hiFW zl)z2S|7!oVsY-m-CEdvN{}~XlFmOCUYA+$0`oD(?e9-?XUeEJ%x&N!jXCfYr!YiR8 zm2R@L-~ZK~Y$>3apU1tB_}{s^)V&9kIAhr7|0t1V(F0UuWp5?pAKG``3$Hw}SDgPS lVY!4)j`jcNGR@)$-UhWr=sYnbIS2exl2?~2e`p@?{{X42G{OJ? literal 0 HcmV?d00001 diff --git a/_preview/88/_images/gh_org_invite_1.png b/_preview/88/_images/gh_org_invite_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0aabd9787f0c5439e2a61e527895f4758ea28c3c GIT binary patch literal 72056 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 Of1*N?f`tN_U;iIc5(9t$ literal 0 HcmV?d00001 diff --git a/_preview/88/_images/gh_org_invite_2.png b/_preview/88/_images/gh_org_invite_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9f658fa4232249c725b1a11c624986bf27f6da45 GIT binary patch literal 66258 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:first-child{margin-top:0 !important}.tabbed-content>:last-child{margin-bottom:0 !important}.tabbed-content>.tabbed-set{margin:0}.tabbed-set{border-radius:.125rem;display:flex;flex-wrap:wrap;margin:1em 0;position:relative}.tabbed-set>input{opacity:0;position:absolute}.tabbed-set>input:checked+label{border-color:var(--tabs-color-label-active);color:var(--tabs-color-label-active)}.tabbed-set>input:checked+label+.tabbed-content{display:block}.tabbed-set>input:focus+label{outline-style:auto}.tabbed-set>input:not(.focus-visible)+label{outline:none;-webkit-tap-highlight-color:transparent}.tabbed-set>label{border-bottom:.125rem solid transparent;color:var(--tabs-color-label-inactive);cursor:pointer;font-size:var(--tabs-size-label);font-weight:700;padding:1em 1.25em .5em;transition:color 250ms;width:auto;z-index:1}html .tabbed-set>label:hover{color:var(--tabs-color-label-active)} diff --git a/_preview/88/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css b/_preview/88/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css new file mode 100644 index 0000000..adc6166 --- /dev/null +++ b/_preview/88/_panels_static/panels-variables.06eb56fa6e07937060861dad626602ad.css @@ -0,0 +1,7 @@ +:root { +--tabs-color-label-active: hsla(231, 99%, 66%, 1); +--tabs-color-label-inactive: rgba(178, 206, 245, 0.62); +--tabs-color-overline: rgb(207, 236, 238); +--tabs-color-underline: rgb(207, 236, 238); +--tabs-size-label: 1rem; +} \ No newline at end of file diff --git a/_preview/88/_sources/contact.md b/_preview/88/_sources/contact.md new file mode 100644 index 0000000..72fe05f --- /dev/null +++ b/_preview/88/_sources/contact.md @@ -0,0 +1,5 @@ +# Contact Us + +(contact.data_compute_manager)= +## Manager for Data and Compute +You can contact Julius Busecke on [Slack](https://leap-nsf-stc.slack.com/team/U03MSCLCTRA). diff --git a/_preview/88/_sources/guides/education.md b/_preview/88/_sources/guides/education.md new file mode 100644 index 0000000..7688509 --- /dev/null +++ b/_preview/88/_sources/guides/education.md @@ -0,0 +1,29 @@ +# LEAP-Pangeo for Education + +## Running classes on the JupyterHub + +🚧 Full Guide coming soon ... If you are a LEAP educator and want to run your class on the hub, please reach out to [](contact.data_compute_manager). + +(education:sing_up)= +### How to sign up students + +Students should be signed up to the appropriate user [categories](users.categories) ahead of the class. Please direct your students to this documentation and try to ensure that everyone has [access to the Hub](hub:server:login) before the class starts. + +#### Troubleshooting + +**Students cannot sign on** + +Check if the students are part of the [appropriate github teams](users:categories). + +If they **are not** follow these steps: +- [ ] Did the student [sign up for LEAP membership]()? +- [ ] Did the student receive a github invite? [Here](users.invite) is how to check for that. +- [ ] Check again if they are part of the [appropriate github teams](users:categories). +- If these steps do not work, please reach out to [](contact.data_compute_manager). + +If they **are**, ask them to try the following steps: +- [ ] Refresh the browser cache +- [ ] Try a different browser +- [ ] Restart the computer +- If these steps do not work, please reach out to [](contact.data_compute_manager). + diff --git a/_preview/88/_sources/how_to_cite.md b/_preview/88/_sources/how_to_cite.md new file mode 100644 index 0000000..8088c1f --- /dev/null +++ b/_preview/88/_sources/how_to_cite.md @@ -0,0 +1,18 @@ +# How to cite LEAP-Pangeo + +If you use any of the LEAP resources, please follow these guidlines to recognize our work. + +## Add your publication to our [LEAP publication tracker]() + +## Cite LEAP-Pangeo Platform +If you used the JupyterHub platform to perform analysis, please add a statement similar to this to your acknowledgment section of the paper: +``` +We acknowledge the computing and storage resources provided by the +`NSF Science and Technology Center (STC) Learning the Earth with +Artificial intelligence and Physics (LEAP)` (Award # 2019625). +``` +## Cite Data +Please include all datasets used for your work in your citations using the doi of each individual dataset. + +## Don't forget to cite your open source packages +Please take the time to cite all packages used in your work, to ensure that the essential work of open source developers for open science is properly recognized. diff --git a/_preview/88/_sources/intro.md b/_preview/88/_sources/intro.md new file mode 100644 index 0000000..a19a09a --- /dev/null +++ b/_preview/88/_sources/intro.md @@ -0,0 +1,15 @@ +# LEAP Technical Documentation + +This website is the home for all technical documentation related to LEAP and LEAP-Pangeo. + +## Dashboard + +| Update Status | Contributors | Deployment Status | +| -- | -- | -- | +| [![GitHub last commit](https://img.shields.io/github/last-commit/leap-stc/leap-stc.github.io)](https://github.com/leap-stc/leap-stc.github.io) | ![GitHub contributors](https://img.shields.io/github/contributors/leap-stc/leap-stc.github.io) | [![publish-book](https://github.com/leap-stc/leap-stc.github.io/actions/workflows/publish-book.yaml/badge.svg?style=flat-square)](https://github.com/leap-stc/leap-stc.github.io/actions/workflows/publish-book.yaml) | + + +## Contents + +```{tableofcontents} +``` diff --git a/_preview/88/_sources/leap-pangeo/architecture.md b/_preview/88/_sources/leap-pangeo/architecture.md new file mode 100644 index 0000000..8a0194c --- /dev/null +++ b/_preview/88/_sources/leap-pangeo/architecture.md @@ -0,0 +1,200 @@ +# LEAP-Pangeo Architecture + + +LEAP-Pangeo is a cloud-based data and computing platform that will be used to support research, education, and knowledge transfer within the LEAP program. + +## Motivation + +The motivation and justification for developing LEAP-Pangeo are laid out in several recent peer-reviewed publications: {cite}`AbernatheyEtAl2021` and {cite}`GentemannEtAl2021`. +To summarize these arguments, a shared data and computing platform will: +- Empower LEAP participants with instant access to high-performance computing and analysis-ready data in order to support ambitious research objectives +- Facilitate seamless collaboration between project members around data-intensive science, accelerating research progress +- Enable rich data-driven classroom experiences for learners, helping them transition successfully from coursework to research +- Place actionable data in the hands of LEAP partners to support knowledge transfer + +## Design Principles + +In the proposal, we committed to building this in a way that enables the tools and infrastructure to be reused and remixed. +So The challenge for LEAP Pangeo is to deploy an “enterprise quality” platform built entirely out of open-source tools, and to make this platform as reusable and useful for the broader climate science community as possible. +We committed to following the following design principles: +- Open source +- Modular system: built out of smaller, standalone pieces which interoperate through clearly documented interfaces / standards +- Agile development on GitHub +- Following industry-standard best practices for continuous deployment, testing, etc. +- Resuse of existing technologies and contribution to "upstream" open source projects on which LEAP-Pangeo depends + (rather than development of new stuff just for the sake of it). + This is a key part of our sustainability plan. + +## Related Tools and Platforms + + +It’s useful to understand the recent history and related efforts in this space. + +- **[Google Colab](https://research.google.com/colaboratory/faq.html)** is a free notebook-in-the-cloud service run by Google. + It is built around the open source Jupyter project, but with advanced notebook sharing capabilities (like Google Docs). +- **[Google Earth Engine](https://earthengine.google.org/)** is a reference point for all cloud geospatial analytics platforms. + It’s actually a standalone application that is separate from Google Cloud, the single instance of a highly customized, black box (i.e. not open source) application that enables parallel computing on distributed data. + It’s very good at what it was designed for (analyzing satellite images), but isn’t easily adapted to other applications, such as machine learning. +- **[Columbia IRI Data Library](https://iridl.ldeo.columbia.edu/index.html)** is a powerful and freely accessible online data repository and analysis tool that allows a user to view, analyze, and download hundreds of terabytes of climate-related data through a standard web browser. + Due to its somewhat outdated architecture, IRI data library cannot easily be updated or adapted to new projects. +- **[Pangeo](http://pangeo.io/)** is an open science community oriented around open-source python tools for big-data geoscience. + It is a loose ecosystem of interoperable python packages including [Jupyter](https://jupyter.org/), [Xarray](http://xarray.pydata.org/), [Dask](http://dask.pydata.org/), and [Zarr](https://zarr.readthedocs.io/). + The Pangeo tools have been deployed in nearly all commercial clouds (AWS, GCP, Azure) as well as HPC environments. + [Pangeo Cloud](https://pangeo.io/cloud.html) is a publicly accessible data-proximate computing environment based on Pangeo tools. + Pangeo is used heavily within NCAR. +- **[Microsoft Planetary Computer](https://planetarycomputer.microsoft.com/)** is a collection of datasets and computational tools hosted by Microsoft in the Azure cloud. + It combines Pangeo-style computing environments with a data library based on [SpatioTemporal Asset Catalog](https://stacspec.org/) +- **[Radiant Earth ML Hub](https://www.radiant.earth/mlhub/)** is a cloud-based open library dedicated to Earth observation training data for use with machine learning algorithms. + It focuses mostly on data access and curation. + Data are cataloged using STAC. +- **[Pangeo Forge](https://pangeo-forge.org/)** is a new initiative, funded by the NSF EarthCube program, to build a platform for + "crowdsourcing" the production of analysis-ready, cloud-optimized data. + Once operational, Pangeo Forge will be a useful tool for many different projects which need data in the cloud. + +Of these different tools, we opt to build on Pangeo because of its open-source, grassroots +foundations in the climate data science community, strong uptake within NCAR, and track-record of support from NSF. + +## Design and Architecture + +```{figure} https://i.imgur.com/PVhoQUu.png +--- +name: architecture-diagram +--- +LEAP-Pangeo high-level architecture diagram +``` + +There are four primary components to LEAP-Pangeo. + +### The Data Library + +The data library will provide analysis-ready, cloud-optimized data for all aspects of LEAP. +The data library is directly inspired by the [IRI Data Library](https://iridl.ldeo.columbia.edu) mentioned above; however, LEAP-Pangeo data will be hosted in the cloud, for maximum impact, accessibility, and interoperability. + +The contents of the data library will evolve dynamically based on the needs of the project. +Examples of data that may become part of the library are +- NOAA [OISST](https://www.ncei.noaa.gov/products/optimum-interpolation-sst) sea-surface temperature data, + used in workshops and classes to illustrate the fundamentals of geospatial data science. +- High-resolution climate model simulations from the [NCAR "EarthWorks"](https://news.ucar.edu/132760/csu-ncar-develop-high-res-global-model-community-use) + project, used by LEAP researchers to develop machine-learning parameterizations of climate processes like cloud and ocean eddies. +- Machine-learning "challenge datasets," published by the LEAP Team and accessible to the world, to help broading participation + by ML researchers into climate science. +- Easily accessible syntheses of climate projections from [CMIP6 data](https://esgf-node.llnl.gov/projects/cmip6/), produced by the LEAP team, + for use by industry partners for business strategy and decision making. + +### Data Storage Service + +The underlying technology for the LEAP Data catalog will be cloud object storage (e.g. Amazon S3), +which enables high throughput concurrent access to many simultaneous users over the public internet. +Cloud Object Storage is the most performant, cost-effective, and simple way to serve such large volumes of data. + +Initially, the LEAP data will be stored in Google Cloud Storage, in the same cloud region +as the JupyterHub. +Going forward, we will work with NCAR to obtain an [Open Storage Network](https://www.openstoragenetwork.org/) +pod which allows data to be accessible from both Google Cloud and NCAR's computing system. + +#### Pangeo Forge + +```{figure} https://raw.githubusercontent.com/pangeo-forge/flow-charts/main/renders/architecture.png +--- +width: 600px +name: pangeo-forge-flow +--- +Pangeo Forge high-level workflow. Diagram from https://github.com/pangeo-forge/flow-charts +``` + +A central tool for the population and maintenance of the LEAP-Pangeo data catalog is +[Pangeo Forge](https://pangeo-forge.readthedocs.io/en/latest/). +Pangeo Forge is an open source tool for data Extraction, Transformation, and Loading (ETL). +The goal of Pangeo Forge is to make it easy to extract data from traditional data repositories and deposit in cloud object storage in analysis-ready, cloud-optimized (ARCO) format. + +Pangeo Forge works by allowing domain scientists to define "recipes" that describe data transformation pipelines. +These recipes are stored in GitHub repositories. +Continuous integration monitors GitHub and automatically executes the data pipelines when needed. +The use of distributed, cloud-based processing allows very large volumes of data to be processed quickly. + +Pangeo Forge is a new project, funded by the NSF EarthCube program. +LEAP-Pangeo will provide a high-impact use case for Pangeo Forge, and Pangeo Forge +will empower and enhance LEAP research. +This synergistic relationship with be mutually beneficial to two NSF-sponsored projects. +Using Pangeo Forge effectively will require LEAP scientists and data engineers to engage +with the open-source development process around Pangeo Forge and related technologies. + +#### Catalog + +A [STAC](https://stacspec.org/) data catalog be used to enumerate all LEAP-Pangeo datasets and provide this information to the public. +The catalog will store all relevant metadata about LEAP datasets following established metadata standards (e.g. CF Conventions). +It will also provide direct links to raw data in cloud object storage. + +The catalog will facilitate several different modes of access: +- Searching, crawling, and opening datasets from within notebooks or scripts +- "Crawling" by search indexes or other machine-to-machine interfaces +- A pretty web front-end interface for interactive public browsing + +The [Radiant Earth MLHub](https://mlhub.earth/) is a great reference for how we imagine the LEAP data catalog will eventually look. + +### The Hub + +```{figure} https://jupyter.org/assets/homepage/labpreview.webp +--- +width: 400px +name: jupyterlab-preview +--- +Screenshot from JupyterLab. From +``` + +Jupyter Notebook / Lab has emerged as the standard tool for doing interactive data science. +Jupyter supports combining rich text, code, and generated outputs (e.g. figures) into a single document, creating a way to communicate and share complete data-science research project + +```{figure} https://jupyterhub.readthedocs.io/en/stable/_images/jhub-fluxogram.jpeg +--- +width: 400px +name: jupyterhub-architecture +--- +JupyterHub architecture. From +``` + +JupyterHub is a multi-user Jupyter Notebook / Lab environment that runs on a server. +JupyterHub provides a gateway to highly customized software environments backed by dedicated computing with specified resources (CPU, RAM, GPU, etc.) +Running in the cloud, JupyterHub can scale up to accommodate any number of simultaneous users with no degradation in +performance. +JupyterHub environments can support basically [every existing programming language](https://github.com/jupyter/jupyter/wiki/Jupyter-kernels). +We anticipate that LEAP users will primarily use **Python**, **R**, and **Julia** programming languages. +In addition to Jupyter Notebook / Lab, JupyterHub also supports launching [R Studio](https://www.rstudio.com/). + +The Pangeo project already provides [curated Docker images](https://github.com/pangeo-data/pangeo-docker-images) +with full-featured Python software environments for environmental data science. +These environments will be the starting point for LEAP environments. +They may be augmented as LEAP evolves with more specific software as needed by research projects. + +Use management and access control for the Hub are described in {doc}`/policies/users_roles`. +We use GitHub for identity management, in order to make it easy to include participants +from any partner institution.. + +### The Knowledge Graph + +LEAP "outputs" will be of four main types: + +- **Datasets** (covered above) +- **Papers** - traditional scientific publications +- **Project Code** - the code behind the papers, used to actually generate the scientific results +- **Trained ML Models** - models that can be used directly for inference by others +- **Educational Modules** - used for teaching + +All of these object must be tracked and cataloged in a uniform way. +The {doc}`/policies/code_policy` and {doc}`/policies/data_policy` will help set these standards. + +```{figure} LEAP_knowledge_graph.png +--- +width: 600px +name: knowledge-graph +--- +LEAP Knowledge Graph +``` + +By tracking the linked relationships between datasets, papers, code, models, and educational , we will generate a “knowledge graph”. +This graph will reveal the dynamic, evolving state of the outputs of LEAP research and the relationships between different elements of the project. +By also tracking participations (i.e. humans), we will build a novel and inspiring track record of LEAP's impacts through the project lifetime. + +This is the most open-ended aspect of our infrastructure. +Organizing and displaying this information effectively is a challenging problem in +information architecture and systems design. diff --git a/_preview/88/_sources/leap-pangeo/implementation.md b/_preview/88/_sources/leap-pangeo/implementation.md new file mode 100644 index 0000000..a0659bd --- /dev/null +++ b/_preview/88/_sources/leap-pangeo/implementation.md @@ -0,0 +1,125 @@ +# LEAP-Pangeo Implementation Plan + +The different elements of the project can be implemented in parallel and gradually connected together. + +## Roles + +:::{admonition} Decision Needed +An open question for LEAP-Pangeo is whether to develop and maintain our infrastructure +via subcontracts or via Columbia employees whom we hire. +Below the roles are enumerated in a generic way according to the needed expertise. +::: + +### Data Engineering + +The {doc}`architecture`, particularly the Data Library, will require +expertise in modern data engineering, including the following areas: + +- Geospatial data formats and metadata standards, including modern cloud-optimized + formats such as Parquet and Zarr +- Geospatial data catalogs and APIs +- Cloud object storage +- Cloud automation and data pipelines +- Distributed computing frameworks for data science (e.g. Dask, Prefect, Apache Beam) +- GitHub workflows +- Continuous integration and agile development +- Track record of contribution to multi-stakeholder open-source software + +Possible contractors who fit this role: + +- [Development Seed](https://developmentseed.org/) +- [Element 84](https://www.element84.com/) +- [Azavea](https://www.azavea.com/) +- [Radiant Earth](https://www.radiant.earth/) + +### DevOps for Cloud Hub + +Developing and operating the LEAP-Pangeo JupyterHub will require the following expertise: + +- Strong experience with Docker and containerization of workflows +- Deploying cloud-native applications (particularly [JupyterHub](https://zero-to-jupyterhub.readthedocs.io/en/latest/)) + using Kubernetes and Helm +- Continuous deployment using GitHub workflows +- Monitoring and optimizing cloud costs in multi-user JupyterHub environments +- Building machine-learning environments for Python and R users with tools such as + Conda, Conda Forge, and repo2docker. +- Continuous integration and agile development +- Track record of contribution to multi-stakeholder open-source software + +Possible contractors who fit this role: + +- [2i2c](https://2i2c.org/) +- [Quansight](https://www.quansight.com/) + +### Full-Stack Web Development + +Developing the LEAP Knowledge Graph, including the library of papers, open-source code +and machine-learning models, will require a mix of skills commonly referred to as +"full-stack web development". + +- Front-end web development using HTML, CSS, and modern Javascript frameworks (e.g. React, Vue, etc.) +- Development and deployment of REST API endpoints for backend services +- Consumption of data from third-party APIs (e.g. GitHub API) +- Familiarity with Jupyter Notebook format +- Continuous integration and agile development +- Track record of contribution to multi-stakeholder open-source software + +#### Education and Training + +:::{admonition} Decision Needed +What is the scope of LEAP-Pangeo training? How much should we expect trainees to learn? +What is the intersection with other educational activities, including for-credit courses? +::: + +Training participants in using LEAP-Pangeo will require expertise in research computing pedagogy +and state-of-the-art knowledge of best practices in scientific computing, machine learning, +and cloud computing. + +### Contractors vs. Employees + +| | Pros | Cons | +| -- | -- | -- | +| **Employees** | Longer-term commitment to project. Better integration with on-campus activities. | Slow hiring. Recruiting challenges. Uncertainty they can deliver needed results. | +| **Contractors** | Can spin up rapidly. Proven track records. Connection to broader ecosystems. Don't have to deal with hiring. Acccess to top technical talent. | Potentially less integrated into project. | + +## Timeline + +What follows is a possible timeline for implementation. + +### Fall 2021 + +#### Activities +- 📍 Deploy generic Pangeo JupyterHub on Google Cloud using supported credits. +- 📍 Provide basic end-user documentation for using the Hub + (comparable to [Pangeo Cloud docs](https://pangeo.io/cloud.html)). + +#### Milestones + +- ✅ LEAP members log into the hub and run their first code against existing cloud data. + +### Spring 2021 + +#### Activities + +- 📍 Conduct data survey to assess data needs of research, education, and outreach activities. +- 📍 Data engineers work with researchers on data ingestion. +- 📍 Refine Hub environment based on initial feedback. + + +#### Milestones + +- ✅ LEAP researchers ingest first datasets into cloud data library. +- ✅ LEAP seminar uses LEAP-Pangeo data science environments for teaching. + +### Summer 2021 + +#### Activities + +- 📍 Launch initial data catalog +- 📍 Begin training program + +#### Milestones + +- ✅ Perform first LEAP-Pangeo training for participations +- ✅ LEAP REU interns successfully use LEAP-Pangeo for projects. +- ✅ First LEAP publications are added to the knowledge graph, along with supporting data and code diff --git a/_preview/88/_sources/leap-pangeo/jupyterhub.md b/_preview/88/_sources/leap-pangeo/jupyterhub.md new file mode 100644 index 0000000..18913b1 --- /dev/null +++ b/_preview/88/_sources/leap-pangeo/jupyterhub.md @@ -0,0 +1,397 @@ +# LEAP-Pangeo JupyterHub + +Our team has a cloud-based [JupyterHub](https://jupyter.org/hub). +For information who can access the hub with which privileges, please refer to +{doc}`/policies/users_roles` + +| | | +|--|--| +| **Hub Address** | https://leap.2i2c.cloud/ | +| **Hub Location** | [Google Cloud `us-central1`](https://cloud.google.com/compute/docs/regions-zones) | +| **Hub Operator**| [2i2c](https://2i2c.org/) | +| **Hub Configuration** | https://github.com/2i2c-org/infrastructure/tree/master/config/clusters/leap | + +## Getting Started + +To get started using the hub, check out this video by [James Munroe](https://github.com/jmunroe) from [2i2c](https://2i2c.org) explaining the architecture. + + + +## Getting Help + +For questions about how to use the Hub, please use the LEAP-Pangeo discussion forum: + +- https://github.com/leap-stc/leap-stc.github.io/discussions + +### Office Hours + +We also offer in-person and virtual Office Hours on Thursdays for questions about LEAP-Pangeo. +You can reserve an appointment [here](https://app.reclaim.ai/m/leap-pangeo-office-hours). + +## Hub Usage + +This is a rough and ready guide to using the Hub. +This documentation will be expanded as we learn and evolve. +Feel free to [edit it yourself](https://github.com/leap-stc/leap-stc.github.io/blob/main/book/leap-pangeo/jupyterhub.md) if you have suggetions for improvement! + +(hub:server:login)= +### Logging In + +1. 👀 Navigate to https://leap.2i2c.cloud/ and click the big orange button that says "Log in to continue" +2. 🔐 You will be prompted to authorize a GitHub application. Say "yes" to everything. + Note you must belong to the appropriate GitHub team in order to access the hub. + See {doc}`/policies/users_roles` for more information. +3. 📠 You will redirect to a screen with the following options. + +image + +> Note: Depending on your [membership]() you might see additional options (e.g. for GPU machines) + +You have to make 3 choices here: +- The machine type (Choose between "CPU only" or "GPU" if available) + **⚠️The GPU images should be used only when needed to accelerate model training.** +- The software environment ("Image"). Find more info in the [Software Environment Section](hub:image) below. +- The node share. These are shared resources, and you should try to use the smallest image you need. You can easily start up a new server with a larger share if you find your work to be limited by CPU/RAM + +4. 🕥 Wait for your server to start up. It can take up to few minutes. + +### Using JupyterLab + +After your server fires up, you will be dropped into a JupyterLab environment. + +If you are new to JupyterLab, you might want to peruse the [user guide](https://jupyterlab.readthedocs.io/en/stable/user/interface.html). + +### Shutting Down Your Server + +Your server will shut down automatically after a period of inactivity. +However, if you know you are done working, it's best to shut it down directly. +To shut it down, go to https://leap.2i2c.cloud/hub/home and click the big red button that says "Stop My Server" + +image + +You can also navigate to this page from JupyterLab by clicking the `File` menu and going to `Hub Control Panel`. + +(hub:image)= +### The Software Environment +The software environment you encounter on the Hub is based upon [docker images](https://www.digitalocean.com/community/tutorials/the-docker-ecosystem-an-introduction-to-common-components) which you can run on other machines (like your laptop or an HPC cluster) for better reproducibility. + +Upon start up you can choose between +- A list of preselected images +- The option of passing a custom docker image via the `"Other..."` option. + +#### Preselected Images +LEAP-Pangeo uses several full-featured, up-to-date Python environments maintained by Pangeo. You can read all about them at the following URL: + +- https://github.com/pangeo-data/pangeo-docker-images/ + +There are separate images for pytorch and tensorflow which are available in a drop-down panel when starting up your server. +The Hub contains a specific version of the image which can be found [here](https://github.com/2i2c-org/infrastructure/blob/master/config/clusters/leap/common.values.yaml). + +For example, at the time of writing, the version of `pangeo-notebook` is `2022.05.10`. +A complete list of all packages installed in this environment is located at: + +- https://github.com/pangeo-data/pangeo-docker-images/blob/2022.05.10/pangeo-notebook/packages.txt + +:::{attention} +We regularly update the version of the images provided in the drop-down menu. + +To ensure full reproducibility you should save the full info of the image you worked with (this is stored in the environment variable `JUPYTER_IMAGE_SPEC`) with your work. You can then use that string with the [custom images](hub:image:custom) to reproduce your work with exactly the same environment. +::: + +(hub:image:custom)= +#### Custom Images + +If you select the `Image > Other...` Option during [server login](hub:server:login) you can paste an arbitrary reference in the form of `docker_registry/organization/image_name:image_version`. As an example we can get the `2023.05.08` version of the pangeo tensorflow notebook by pasting `quay.io/pangeo/ml-notebook:2023.05.08`. + +If you want to build your own docker image for your project, take a look at [this template](https://github.com/2i2c-org/hub-user-image-template) and the instructions to learn how to use [repo2docker](https://github.com/jupyterhub/repo2docker) to set up CI workflows to automatically build docker images from your repository. + +#### Installing additonal packages + +You can install additional packages using `pip` and `conda`. +However, these will disappear when your server shuts down. + +For a more permanent solution we recommend building project specific dockerfiles and using those as [custom images](hub:image:custom). + +### Files and Data + +Data and files work differently in the cloud. +To help onboard you to this new way of working, we have written a guide to Files and Data in the Cloud: + +- [2i2c Docs: Data and Filesystem](https://docs.2i2c.org/data/index.html#data-and-filesystem) + +We recommend you read this thoroughly, especially the part about Git and GitHub. + +:::{warning} +Please do not store large files in your user directory `/home/jovyan`. Your home directory is intended only for notebooks, analysis scripts, and small datasets (< 1 GB). It is not an appropriate place to store large datasets. +::: + +(hub:data:buckets)= +#### LEAP-Pangeo Buckets + +LEAP-Pangeo provides users two cloud buckets to store data + +- `gs://leap-scratch/` - Temporary Storage deleted after 7 days. Use this bucket for testing and storing large intermediate results. [More info](https://docs.2i2c.org/data/cloud/#scratch-bucket) +- `gs://leap-persistent` - Persistent Storage. Use this bucket for storing results you want to share with other members. +- `gs://leap-persistent-ro` - Persistent Storage with read-only access for most users. To upload data to this bucket you need to use [this](hub:data:upload_hpc) method below. + +Files stored on each of those buckets can be accessed by any LEAP member, so be concious in the way you use these. + +- **Do not put sensitive information (passwords, keys, personal data) into these buckets!** +- **When writing to buckets only ever write to your personal folder!** Your personal folder is a combination of the bucketname and your github username (e.g. `gs://leap-persistent/funky-user/'). + +(hub:data:list)= +#### Inspecting contents of the bucket + +We recommend using [gcsfs](https://gcsfs.readthedocs.io/en/latest/) or [fsspec](https://filesystem-spec.readthedocs.io/en/latest/) which provide a filesytem-like interface for python. + +You can e.g. list the contents of your personal folder with +```python +import gcsfs +fs = gcsfs.GCSFileSystem() # equivalent to fsspec.fs('gs') +fs.ls('leap-persistent/funky-user') +``` + +(hub:data:read_write)= +#### Basic writing to and reading from cloud buckets + +We do not recommend uploading large files (e.g. netcdf) directly to the bucket. Instead we recommend to write data as ARCO (Analysis-Ready Cloud-Optimized) formats like [zarr](https://zarr.dev)(for n-dimensional arrays) and [parquet](https://parquet.apache.org)(for tabular data) (read more [here](https://ieeexplore.ieee.org/document/9354557) why we recommend ARCO formats). + +If you work with xarray Datasets switching the storage format is as easy as swapping out a single line when reading/writing data: + +Xarray provides a method to stream results of a computation to zarr +```python +ds = ... +ds_processed = ds.mean(...).resample(...) +user_path = "gs://leap-scratch/funky-user" # 👀 make sure to prepend `gs://` to the path or xarray will interpret this as a local path +store_name = "processed_store.zarr" +ds_processed.to_zarr(f'{user_path}/{store_name}') +``` +This will write a zarr store to the scratch bucket. + +You can read it back into an xarray dataset with this snippet: +```python +import xarray as xr +ds = xr.open_dataset('gs://leap-scratch/funky-user/processed_store.zarr', engine='zarr', chunks={}) # +``` +... and you can give this to any other registered LEAP user and they can load it exactly like you can! + +You can also write other files directly to the bucket by using [`fsspec.open`](https://filesystem-spec.readthedocs.io/en/latest/api.html#fsspec.open) similarly to the python builtin [`open`](https://docs.python.org/3/library/functions.html#open) +```python +with fsspec.open('gs://leap-scratch/funky-user/test.txt', mode='w') as f: + f.write('hello world') +``` + +#### Deleting from cloud buckets +:::{warning} +Depending on which cloud bucket you are working, make sure to double check which files you are deleting by [inspecting the contents](hub:data:list) and only working in a subdirectory with your username (e.g. `gs:////some/project/structure`. +::: + +You can remove single files by using a gcsfs/fsspec filessytem as above +```python +import gcsfs +fs = gcsfs.GCSFileSystem() # equivalent to fsspec.fs('gs') +fs.rm('leap-persistent/funky-user/file_to_delete.nc') +``` + +If you want to remove zarr stores (which are an 'exploded' data format, and thus represented by a folder structure) you have to recursively delete the store. +:::{warning} +The warning from above is even more important here! Make sure that the folder you are deleting does not contain any data you do not want to delete! +::: +```python +fs.rm('leap-scratch/funky-user/processed_store.zarr', recursive=True) +``` + + + + + +#### I have a dataset and want to work with it on the hub. How do I upload it? + +If you would like to add a new dataset to the LEAP Data Library, please first raise an issue [here](https://github.com/leap-stc/data-management/issues/new?assignees=&labels=dataset&template=new_dataset.yaml&title=New+Dataset+%5BDataset+Name%5D). This enables us to track detailed information about proposed datasets and have an open discussion about how to upload it to the cloud. + +We distinguish between two primary *types* of data to upload: "Original" and "Published" data. + +- **Published Data** has been published and archived in a publically accessible location (e.g. a data repository like [zenodo](https://zenodo.org) or [figshare](https://figshare.com)). We do not recommend uploading this data to the cloud directly, but instead use [Pangeo Forge](https://pangeo-forge.readthedocs.io/en/latest/) to transform and upload it to the cloud. This ensures that the data is stored in an ARCO format and can be easily accessed by other LEAP members. +- **Original Data** is any dataset that is produced by researchers at LEAP and has not been published yet. The main use case for this data is to share it with other LEAP members and collaborate on it. For original data we support direct uploaded to the cloud. *Be aware that original data could change rapidly as the data producer is iterating on their code*. We encourage all datasets to be archived and published before using them in scientific publications. + +##### Transform and Upload published data to an ARCO format (with Pangeo Forge) + +Coming Soon + +##### Upload medium sized original data from your local machine + +For medium sized datasets, that can be uploaded within an hour, you can use a temporary access token generated on the JupyterHub to upload data to the cloud. + +- Set up a new environment on your local machine (e.g. laptop) + +```shell +mamba env create --name leap_pange_transfer python=3.9 google-auth gcsfs jupyterlab xarray zarr dask #add any other dependencies (e.g. netcdf4) that you need to read your data +``` + +- Activate the environment + +```shell +conda activate leap_pange_transfer +``` + +and set up a jupyter notbook (or a pure python script) that loads your data in as few xarray datasets as possible. For instance, if you have one dataset that consists of many files split in time, you should set your notebook up to read all the files using xarray into a single dataset, and then try to write out a small part of the dataset to a zarr store. + +- Now start up a [LEAP-Pangeo server](leap.2i2c.cloud) and open a terminal. Install the [Google Cloud SDK](https://cloud.google.com/sdk/docs/install) using mamba + +```shell +mamba install google-cloud-sdk +``` +Now you can generate a temporary token (valid for 1 hour) that allows you to upload data to the cloud. + +```shell +gcloud auth print-access-token +``` + +Copy the resulting token into a plain text file `token.txt` in a convenient location on your **local machine**. + +- Now start a JupyterLab notebook and paste the following code into a cell: + +```python +import gcsfs +import xarray as xr +from google.cloud import storage +from google.oauth2.credentials import Credentials + +# import an access token +# - option 1: read an access token from a file +with open("path/to/your/token.txt") as f: + access_token = f.read().strip() + +# setup a storage client using credentials +credentials = Credentials(access_token) +fs = gcsfs.GCSFileSystem(token=credentials) +``` + +> Make sure to replace the `path/to/your/token.txt` with the actual path to your token file. + +Try to write a small dataset to the cloud: + +```python +ds = xr.DataArray([1]).to_dataset(name='test') +ds.to_zarr('gs://leap-scratch//test_offsite_upload.zarr') #adding the 'gs://' prefix makes this just work with xarray! +``` + +> Replace `` with your actual username on the hub. + +- Make sure that you can read the test dataset from within the hub (go back to [Basic writing to and reading from cloud buckets](hub:data:read_write)). + +- Now the last step is to paste the code to load your actual dataset into the notebook and use `.to_zarr` to upload it. + +> Make sure to give the store a meaningful name, and raise an issue in the [data-management repo](https://github.com/leap-stc/data-management/issues) to get the dataset added to the LEAP Data Library. + +> Make sure to use a different bucket than `leap-scratch`, since that will be deleted every 7 days! For more info refer to the available [storage buckets](hub:data:buckets). + +(hub:data:upload_hpc)= +##### Uploading large original data from an HPC system (no browser access on the system available) + +A commong scenario is the following: A researcher/student has run a simulation on a High Performance Computer (HPC) at their institution, but now wants to collaboratively work on the analysis or train a machine learning model with this data. For this they need to upload it to the cloud storage. + +The following steps will guide you through the steps needed to authenticate and upload data to the cloud, but might have to be slightly modified depending on the actual setup of the users HPC. + +**Conversion Script/Notebook** + +In most cases you do not just want to upload the data in its current form (e.g. many netcdf files). + +Instead we will load the data into an [`xarray.Dataset`](https://docs.xarray.dev/en/stable/generated/xarray.Dataset.html) and then write that Dataset object directly to a zarr store in the cloud. For this you need a python environment with `xarray, gcsfs, zarr` installed (you might need additional dependencies for your particular use case). + +1. Spend some time to set up a python script/jupyter notebook on the HPC system that opens your files and combines them in to one or more xarray.Datasets (combine as many files as sensible into a single dataset). Make sure that your data is lazily loaded and the `Dataset.data` is a [dask array](https://docs.dask.org/en/stable/array.html) + +2. Check your dataset: + - Check that the metadata is correct. + - Check that all the variables/dimensions are in the dataset + - Check the dask chunksize. A general rule is to aim for around 100MB size, but the size and structure of chunking that is optimal depends heavily on the later use case. + + +3. Try to write out a subset of the data locally by calling the [`.to_zarr`](https://docs.xarray.dev/en/stable/generated/xarray.Dataset.to_zarr.html) method on the dataset. + +Once that works we can move on to the authentication. + +**Upload Prerequisites** + +Before we are able to set up authentication we need to make sure our HPC and local computer (required) are set up correctly. +- We manage access rights through [Google Groups](https://groups.google.com). Please contact [LEAP's manager for Data and Computer](contact.data_compute_manager) to get added to the appropriate group (a gmail address is required for this). +- Make sure to install the [Google Cloud SDK](https://cloud.google.com/sdk/docs/install) in both your HPC environment, and your local computer that can open a web browser (e.g. your laptop). + +**Steps** +Steps executed on your "local" computer (e.g. laptop) will be colored in green and steps on your "remote" computer (e.g. HPC) in purple. + +1. SSH into the HPC +2. Check that you have an internet connection with `ping www.google.com` +3. Request no browser authentication: + ``` + gcloud auth application-default login --scopes=https://www.googleapis.com/auth/devstorage.read_write,https://www.googleapis.com/auth/iam.test --no-browser + ``` + > 🚨 It is very important to include the `--scopes=` argument for security reasons. Do not run this command without it! +4. Follow the onscreen prompt and paste the command into a terminal on your local machine. +5. This will open a browser window. Authenticate with the gmail account that was added to the google group. +6. Go back to the terminal and follow the onscreen instructions. Copy the text from the command line and paste the command in the open dialog on the remote machine. +7. Make sure to note the path to the auth json! It will be something like `.../.config/gcloud/....json`. + +Now you are have everything you need to authenticate. + +Lets verify that you can write a small dummy dataset to the cloud. In your notebook/script run the following (make sure to replace the filename and your username as instructed). + +Your dataset should now be available for all LEAP members 🎉🚀 + +```python +import xarray as xr +import gcsfs +import json + +with open("your_auth_file.json") as f: #🚨 make sure to enter the `.json` file from step 7 + token=json.load(f) + +# test write a small dummy xarray dataset to zarr +ds = xr.DataArray([1, 4, 6]).to_dataset(name='data') +# Once you have confirmed + +fs = gcsfs.GCSFileSystem(token=token) +mapper = fs.get_mapper("gs://leap-persistent//testing/demo_write_from_remote.zarr") #🚨 enter your leap (github) username here +ds.to_zarr(mapper) +``` + +Now you can repeat the same steps but replace your dataset with the full dataset from above and leave your python code running until the upload has finished. Depending on the internet connection speed and the size of the full dataset, this can take a while. + +If you want to see a progress bar, you can wrap the call to `.to_zarr` with a [dask progress bar](https://docs.dask.org/en/stable/diagnostics-local.html#progress-bar) + +```python +from dask.diagnostics import ProgressBar +with ProgressBar(): + ds.to_zarr(mapper) +``` + +Once the data has been uploaded, make sure to erase the `.../.config/gcloud/....json` file from step 7, and ask to be removed from the Google Group. + +### Dask + +To help you scale up calculations using a cluster, the Hub is configured with Dask Gateway. +For a quick guide on how to start a Dask Cluster, consult this page from the Pangeo docs: + +- https://pangeo.io/cloud.html#dask + +### GPUs + +Tier2 and Tier3 members (see [Users and Categories](../../policies/users_roles.md)) have access to a 'Large' Server instance with GPU. Currently the GPUs are [Nvidia T4](https://www.nvidia.com/en-us/data-center/tesla-t4/) models. To check what GPU is available on your server you can use [`nvidia-smi`](https://developer.nvidia.com/nvidia-system-management-interface) in the terminal window. You should get output similar to this: + +```shell + + nvidia-smi + + +-----------------------------------------------------------------------------+ + | NVIDIA-SMI 510.47.03 Driver Version: 510.47.03 CUDA Version: 11.6 | + |-------------------------------+----------------------+----------------------+ + | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | + | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | + | | | MIG M. | + |===============================+======================+======================| + | 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 | + | N/A 41C P8 11W / 70W | 0MiB / 15360MiB | 0% Default | + | | | N/A | + +-------------------------------+----------------------+----------------------+ +``` + diff --git a/_preview/88/_sources/leap-pangeo/solutions.md b/_preview/88/_sources/leap-pangeo/solutions.md new file mode 100644 index 0000000..5077c7a --- /dev/null +++ b/_preview/88/_sources/leap-pangeo/solutions.md @@ -0,0 +1,30 @@ +# Common Problems (with Solutions) + +## Dask + +### "Killed Workers" + +The "Killed Worker" message in dask can result due to a variety of reasons. Here are some of the common reasons why you might see such an error message + +#### Datasets Chunks too large + +**Issue** +The default dask worker configuration can deal well with dataset chunk sizes of ~100MB. If the chunks of your data are significantly larger, your worker might crash just upon loading a few of these chunks into memory. + +**Solution** +You can change the configuration of your dask workers and increase the memory each worker has to deal with larger chunks. You can adjust the memory by passing additional [options](https://gateway.dask.org/cluster-options.html) to the dask-gatway cluster upon creation: +```python +from dask_gateway import Gateway +gateway = Gateway() +options = gateway.cluster_options() + +options.worker_memory = 10 # 10 GB of memory per worker. + +# Create a cluster with those options +cluster = gateway.new_cluster(options) +cluster.scale(...) +client = cluster.get_client() +``` + + +[Example with Solution](https://notebooksharing.space/view/2b6753a5ffe8ddfae1da3b8e2b5507e617de47eb25f758a20c92b62e7e650fd7#displayOptions=) diff --git a/_preview/88/_sources/policies/code_policy.md b/_preview/88/_sources/policies/code_policy.md new file mode 100644 index 0000000..68957a9 --- /dev/null +++ b/_preview/88/_sources/policies/code_policy.md @@ -0,0 +1 @@ +# Code Policy diff --git a/_preview/88/_sources/policies/data_policy.md b/_preview/88/_sources/policies/data_policy.md new file mode 100644 index 0000000..ef1923d --- /dev/null +++ b/_preview/88/_sources/policies/data_policy.md @@ -0,0 +1 @@ +# Data Policy diff --git a/_preview/88/_sources/policies/infrastructure_policy.md b/_preview/88/_sources/policies/infrastructure_policy.md new file mode 100644 index 0000000..6c02312 --- /dev/null +++ b/_preview/88/_sources/policies/infrastructure_policy.md @@ -0,0 +1 @@ +# Infrastructure Policy diff --git a/_preview/88/_sources/policies/users_roles.md b/_preview/88/_sources/policies/users_roles.md new file mode 100644 index 0000000..3186b21 --- /dev/null +++ b/_preview/88/_sources/policies/users_roles.md @@ -0,0 +1,177 @@ +(users:categories)= +# Users and Categories + +**Version 2 - 2022-10-25** + +Access to the LEAP-Pangeo Hub will depend on the [LEAP Membership Structure](https://leap.columbia.edu/wp-content/uploads/2022/09/LEAP-Membership-and-Space-Policy-Sept-2022.pdf) (see links in this document to apply for membership). +Membership in a particular tier will be implemented via +[GitHub Teams](https://docs.github.com/en/organizations/organizing-members-into-teams) +in the [leap-stc](https://github.com/orgs/leap-stc/teams) GitHub organization. + +Here we define those roles and map them to GitHub teams. + +:::{warning} +We have discovered a technical issue which affects some of the policies here. +It turns out that GitHub sub-teams don't appear as part of parent teams. +This means that the strategies described here for using sub-teams don't quite work. +The issue is being tracked by 2i2c in . + +The short term resolution is to _manually add users to both the parent team and sub-team_. +This is annoying, and we hope to have a better solution soon. +::: + +## Code of Conduct + +All users of LEAP-Pangeo must abide by the LEAP Code of Conduct: + +- https://docs.google.com/document/d/1eE-aYrsf_k5Ep8GB-n8hmqM_LVW-U3uzYKHJBZMvYWU + +:::{note} +The LEAP executive committee has not yet defined a process by which membership status is conferred and removed. +Once this is decided, we will provide instructions on how to add / remove affiliates. +::: + +## Tier 1 Members + +Tier 1 members have access to [storage](hub:data:buckets) and computing resource up to 4 cores and 32GB RAM on JupyterHub servers +in the LEAP-Pangeo Hub. + +Tier 1 membership is granted by adding the user to the [`leap-pangeo-base-access`](https://github.com/orgs/leap-stc/teams/leap-pangeo-base-access) GitHub Team. + +## Tier 2 Members + +Tier 2 members involved in LEAP research and community, have access to all computing resources and storage on LEAPangeo. In addition to the CPU computing resources, Tier 2 members get GPU access. + +Tier 2 membership is granted by adding the user to the [`leap-pangeo-full-access`](https://github.com/orgs/leap-stc/teams/leap-pangeo-full-access) GitHub Team. + +Tier 2 membership requires an application reviewed by LEAP’s Convergence Subcommittee. [Application Form](https://docs.google.com/forms/d/e/1FAIpQLSf_-vvkU__-rnaQimXRxAN_xGdQlqLulbBUistmetrhQtTjHg/viewform) + +Tier 2 membership also provides swipe access at Innovation Hub (for Columbia affiliates). Members can apply to attend LEAP’s Annual Meeting and to be part of focus groups. + +## Tier 3 Members + +Tier 3 membership is reserved for individuals supported by LEAP funding as a Request for Proposal (RFP) PI, Co-PI, researcher, student, or postdoc. + +Tier 3 members currently have identical access to LEAP pangeo computing resources and storage as Tier 2 members. + +Tier 3 membership is granted by adding the user to the [`leap-pangeo-full-access`](https://github.com/orgs/leap-stc/teams/leap-pangeo-full-access) GitHub Team. + +## Education Category + +The education category is intended for _termed access_ to LEAP-Pangeo Hub resources associated +with educational activities. Examples of educational activities include: + +- Semester-long LEAP-affiliated courses +- Short bootcamps and hackathons + +Members of the Community Category may access to `Small`, `Medium`, and `Large` JupyterHub servers +in the LEAP-Pangeo Hub. + +Membership in the Community Category is granted by adding the user to the +[`leap-pangeo-education`](https://github.com/orgs/leap-stc/teams/leap-pangeo-education) +GitHub Team. +Additional sub-teams will be created within this team to organize students into +specific courses, bootcamps, etc. + +### Eligibility + +Course instructors who meet one of the following criteria are eligible to request +access for their class (including self, co-instructor(s), TAs, students, evaluators, etc): +- LEAP senior personnel or advanced research member +- Full-time faculty at LEAP Institution (Columbia, NYU, UMN, UCI) +- Full-time faculty who participated in a LEAP’s "train the trainer" workshop + +### Proposal Process + +Course instructors may propose to the LEAP-Pangeo Hub for their upcoming course by submitting +a short proposal to the LEAP’s Convergence Subcommittee. +Instructors are required to submit their proposal at least 30 days before the participants will require. +The proposal should provide the following information. +- Instructor's GitHub username +- Basic information about the course (institution, department/program, student population, class size, course dates) +- Basic information about the Instructor (name, affiliation, research interests) +- Confirmation of available administrative support for using the LEAP-Pangeo Hub for the class (setting up user account, monitoring use, etc) +- Anticipated usage level of LEAP-Pangeo Hub, including + - Number of user hours / week + - Types of virtual machines to be used (`Small`, `Medium`, or `Large`) + +

+ +Once the proposal is approved, a LEAP administrator will create a GitHub sub-team +within the [`leap-pangeo-education`](https://github.com/orgs/leap-stc/teams/leap-pangeo-education) +team for the course and add the instructor as a "Maintainer". +It is the instructor's responsibility to add the course's users to this team +and remove them when the course has been concluded. + +(users.invite)= +### "Where is my invite?" + +Please check your email account (**the one you used to sign up for Github** - this is independent of the email you use for LEAP) for an invite that will look similar to this: + + +LEAPPangeo email invite + + +Click the link and accept all invites. + +Alternatively you can log into your github account, and should see a notification in the top right menu under the "Organizations" tab. + +LEAPPangeo gh invite + +You can follow that and accept the invitation there aswell. + +LEAPPangeo gh invite2 + + +## Research Category + +The education category is intended for _long-term access_ to LEAP-Pangeo resources associated +with research activities. + +There are two levels to the Research Category: +- **Entry-level**: involved in LEAP research and community, have access to computing resources and storage on LEAPangeo. +Members of this Community Tier may access `Large` JupyterHub servers +Office Space. Admission based on paragraph sent to Office Space committee. +Membership in the entry-level research category corresponds to the +[`leap-pangeo-research-entry-level`](https://github.com/orgs/leap-stc/teams/leap-pangeo-research-entry-level) +GitHub team. +- **Advanced**: RFP or supported researcher, student, postdoc, invited to annual meeting, swipe access for LEAP. +Members of this Community Tier may access `Large` and `Huge` JupyterHub servers, plus GPU access. +Membership in the entry-level research category corresponds to the +[`leap-pangeo-research-advanced`](https://github.com/orgs/leap-stc/teams/leap-pangeo-research-entry-level) +GitHub team. + +### Eligibility + +Anyone participating in a LEAP-sponsored research project is eligible to participate +in the Research Category. +A LEAP administrator will create a GitHub sub-team within the +[`leap-pangeo-research`](https://github.com/orgs/leap-stc/teams/leap-pangeo-research) +team for each research project and add the project PIs as "maintainer". +It is the PIs' responsibility to add and remove members from their team. + +## Administrator and Developer Category + +The LEAP Director of Data and Computing or the LEAP Manager of Data and Computing may grant access to other participants for +the purposes of technical development, debugging, and evaluation of the platform. These members will be added to the [`leap-pangeo-full-access`](https://github.com/orgs/leap-stc/teams/leap-pangeo-full-access) team to have full access to all resources. + +## Termination of Access + +Users who violate usage policies will have their access suspended pending investigation. +The LEAP Director of Data and Computing decides if a policy has been violated and +may suspend or terminate access to LEAP-Pangeo at any time. + +## Offboarding Process + +Users may also be transferred from e.g. the Education Category to the Community Category +when their termed access ends. +Removing a user from the corresponding team is sufficient to disable their access +to those resources. +Removing a user from the `leap-pangeo-users` group entirely will disable their access +completely. +An automated process will delete user data from the hub one month after a user +is removed from the `leap-pangeo-users` group. + +## How can I get access to the Hub diff --git a/_preview/88/_sources/references.md b/_preview/88/_sources/references.md new file mode 100644 index 0000000..d977a9b --- /dev/null +++ b/_preview/88/_sources/references.md @@ -0,0 +1,4 @@ +# References + +```{bibliography} +``` diff --git a/_preview/88/_static/LEAP_logo.png b/_preview/88/_static/LEAP_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..304a806bfee4a615fefb57a09284e8a81c157703 GIT binary patch literal 66863 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 LQL6NnQSko*ZS--5 literal 0 HcmV?d00001 diff --git a/_preview/88/_static/__init__.py b/_preview/88/_static/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/_preview/88/_static/__pycache__/__init__.cpython-310.pyc b/_preview/88/_static/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab3031dac75c97df0cdee4db9b1c7d1d9f86e79c GIT binary patch literal 158 zcmd1j<>g`kg3D^9Ng(<$h(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6u;Co@UEpt2+* zKhIdt&_KU9vm{lwATc>RF+H_dzqlYHGp`~(DL+3uz9b_xH&ws5B(WqjSwB8LGcU6w bK3=b&@)n0pZhlH>PO2Tq=wc=y!NLFlR%Rtr literal 0 HcmV?d00001 diff --git a/_preview/88/_static/basic.css b/_preview/88/_static/basic.css new file mode 100644 index 0000000..d54be80 --- /dev/null +++ b/_preview/88/_static/basic.css @@ -0,0 +1,906 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_preview/88/_static/check-solid.svg b/_preview/88/_static/check-solid.svg new file mode 100644 index 0000000..92fad4b --- /dev/null +++ b/_preview/88/_static/check-solid.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_preview/88/_static/clipboard.min.js b/_preview/88/_static/clipboard.min.js new file mode 100644 index 0000000..54b3c46 --- /dev/null +++ b/_preview/88/_static/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.8 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1 + + + + diff --git a/_preview/88/_static/copybutton.css b/_preview/88/_static/copybutton.css new file mode 100644 index 0000000..f1916ec --- /dev/null +++ b/_preview/88/_static/copybutton.css @@ -0,0 +1,94 @@ +/* Copy buttons */ +button.copybtn { + position: absolute; + display: flex; + top: .3em; + right: .3em; + width: 1.7em; + height: 1.7em; + opacity: 0; + transition: opacity 0.3s, border .3s, background-color .3s; + user-select: none; + padding: 0; + border: none; + outline: none; + border-radius: 0.4em; + /* The colors that GitHub uses */ + border: #1b1f2426 1px solid; + background-color: #f6f8fa; + color: #57606a; +} + +button.copybtn.success { + border-color: #22863a; + color: #22863a; +} + +button.copybtn svg { + stroke: currentColor; + width: 1.5em; + height: 1.5em; + padding: 0.1em; +} + +div.highlight { + position: relative; +} + +/* Show the copybutton */ +.highlight:hover button.copybtn, button.copybtn.success { + opacity: 1; +} + +.highlight button.copybtn:hover { + background-color: rgb(235, 235, 235); +} + +.highlight button.copybtn:active { + background-color: rgb(187, 187, 187); +} + +/** + * A minimal CSS-only tooltip copied from: + * https://codepen.io/mildrenben/pen/rVBrpK + * + * To use, write HTML like the following: + * + *

Short

+ */ + .o-tooltip--left { + position: relative; + } + + .o-tooltip--left:after { + opacity: 0; + visibility: hidden; + position: absolute; + content: attr(data-tooltip); + padding: .2em; + font-size: .8em; + left: -.2em; + background: grey; + color: white; + white-space: nowrap; + z-index: 2; + border-radius: 2px; + transform: translateX(-102%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); +} + +.o-tooltip--left:hover:after { + display: block; + opacity: 1; + visibility: visible; + transform: translateX(-100%) translateY(0); + transition: opacity 0.2s cubic-bezier(0.64, 0.09, 0.08, 1), transform 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + transition-delay: .5s; +} + +/* By default the copy button shouldn't show up when printing a page */ +@media print { + button.copybtn { + display: none; + } +} diff --git a/_preview/88/_static/copybutton.js b/_preview/88/_static/copybutton.js new file mode 100644 index 0000000..2ea7ff3 --- /dev/null +++ b/_preview/88/_static/copybutton.js @@ -0,0 +1,248 @@ +// Localization support +const messages = { + 'en': { + 'copy': 'Copy', + 'copy_to_clipboard': 'Copy to clipboard', + 'copy_success': 'Copied!', + 'copy_failure': 'Failed to copy', + }, + 'es' : { + 'copy': 'Copiar', + 'copy_to_clipboard': 'Copiar al portapapeles', + 'copy_success': '¡Copiado!', + 'copy_failure': 'Error al copiar', + }, + 'de' : { + 'copy': 'Kopieren', + 'copy_to_clipboard': 'In die Zwischenablage kopieren', + 'copy_success': 'Kopiert!', + 'copy_failure': 'Fehler beim Kopieren', + }, + 'fr' : { + 'copy': 'Copier', + 'copy_to_clipboard': 'Copier dans le presse-papier', + 'copy_success': 'Copié !', + 'copy_failure': 'Échec de la copie', + }, + 'ru': { + 'copy': 'Скопировать', + 'copy_to_clipboard': 'Скопировать в буфер', + 'copy_success': 'Скопировано!', + 'copy_failure': 'Не удалось скопировать', + }, + 'zh-CN': { + 'copy': '复制', + 'copy_to_clipboard': '复制到剪贴板', + 'copy_success': '复制成功!', + 'copy_failure': '复制失败', + }, + 'it' : { + 'copy': 'Copiare', + 'copy_to_clipboard': 'Copiato negli appunti', + 'copy_success': 'Copiato!', + 'copy_failure': 'Errore durante la copia', + } +} + +let locale = 'en' +if( document.documentElement.lang !== undefined + && messages[document.documentElement.lang] !== undefined ) { + locale = document.documentElement.lang +} + +let doc_url_root = DOCUMENTATION_OPTIONS.URL_ROOT; +if (doc_url_root == '#') { + doc_url_root = ''; +} + +/** + * SVG files for our copy buttons + */ +let iconCheck = ` + ${messages[locale]['copy_success']} + + +` + +// If the user specified their own SVG use that, otherwise use the default +let iconCopy = ``; +if (!iconCopy) { + iconCopy = ` + ${messages[locale]['copy_to_clipboard']} + + + +` +} + +/** + * Set up copy/paste for code blocks + */ + +const runWhenDOMLoaded = cb => { + if (document.readyState != 'loading') { + cb() + } else if (document.addEventListener) { + document.addEventListener('DOMContentLoaded', cb) + } else { + document.attachEvent('onreadystatechange', function() { + if (document.readyState == 'complete') cb() + }) + } +} + +const codeCellId = index => `codecell${index}` + +// Clears selected text since ClipboardJS will select the text when copying +const clearSelection = () => { + if (window.getSelection) { + window.getSelection().removeAllRanges() + } else if (document.selection) { + document.selection.empty() + } +} + +// Changes tooltip text for a moment, then changes it back +// We want the timeout of our `success` class to be a bit shorter than the +// tooltip and icon change, so that we can hide the icon before changing back. +var timeoutIcon = 2000; +var timeoutSuccessClass = 1500; + +const temporarilyChangeTooltip = (el, oldText, newText) => { + el.setAttribute('data-tooltip', newText) + el.classList.add('success') + // Remove success a little bit sooner than we change the tooltip + // So that we can use CSS to hide the copybutton first + setTimeout(() => el.classList.remove('success'), timeoutSuccessClass) + setTimeout(() => el.setAttribute('data-tooltip', oldText), timeoutIcon) +} + +// Changes the copy button icon for two seconds, then changes it back +const temporarilyChangeIcon = (el) => { + el.innerHTML = iconCheck; + setTimeout(() => {el.innerHTML = iconCopy}, timeoutIcon) +} + +const addCopyButtonToCodeCells = () => { + // If ClipboardJS hasn't loaded, wait a bit and try again. This + // happens because we load ClipboardJS asynchronously. + if (window.ClipboardJS === undefined) { + setTimeout(addCopyButtonToCodeCells, 250) + return + } + + // Add copybuttons to all of our code cells + const COPYBUTTON_SELECTOR = 'div.highlight pre'; + const codeCells = document.querySelectorAll(COPYBUTTON_SELECTOR) + codeCells.forEach((codeCell, index) => { + const id = codeCellId(index) + codeCell.setAttribute('id', id) + + const clipboardButton = id => + `` + codeCell.insertAdjacentHTML('afterend', clipboardButton(id)) + }) + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} + + +var copyTargetText = (trigger) => { + var target = document.querySelector(trigger.attributes['data-clipboard-target'].value); + + // get filtered text + let exclude = '.linenos'; + + let text = filterText(target, exclude); + return formatCopyText(text, '', false, true, true, true, '', '') +} + + // Initialize with a callback so we can modify the text before copy + const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText}) + + // Update UI with error/success messages + clipboard.on('success', event => { + clearSelection() + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_success']) + temporarilyChangeIcon(event.trigger) + }) + + clipboard.on('error', event => { + temporarilyChangeTooltip(event.trigger, messages[locale]['copy'], messages[locale]['copy_failure']) + }) +} + +runWhenDOMLoaded(addCopyButtonToCodeCells) \ No newline at end of file diff --git a/_preview/88/_static/copybutton_funcs.js b/_preview/88/_static/copybutton_funcs.js new file mode 100644 index 0000000..dbe1aaa --- /dev/null +++ b/_preview/88/_static/copybutton_funcs.js @@ -0,0 +1,73 @@ +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string +} + +/** + * Removes excluded text from a Node. + * + * @param {Node} target Node to filter. + * @param {string} exclude CSS selector of nodes to exclude. + * @returns {DOMString} Text from `target` with text removed. + */ +export function filterText(target, exclude) { + const clone = target.cloneNode(true); // clone as to not modify the live DOM + if (exclude) { + // remove excluded nodes + clone.querySelectorAll(exclude).forEach(node => node.remove()); + } + return clone.innerText; +} + +// Callback when a copy button is clicked. Will be passed the node that was clicked +// should then grab the text and replace pieces of text that shouldn't be used in output +export function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true, copyEmptyLines = true, lineContinuationChar = "", hereDocDelim = "") { + var regexp; + var match; + + // Do we check for line continuation characters and "HERE-documents"? + var useLineCont = !!lineContinuationChar + var useHereDoc = !!hereDocDelim + + // create regexp to capture prompt and remaining line + if (isRegexp) { + regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)') + } else { + regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)') + } + + const outputLines = []; + var promptFound = false; + var gotLineCont = false; + var gotHereDoc = false; + const lineGotPrompt = []; + for (const line of textContent.split('\n')) { + match = line.match(regexp) + if (match || gotLineCont || gotHereDoc) { + promptFound = regexp.test(line) + lineGotPrompt.push(promptFound) + if (removePrompts && promptFound) { + outputLines.push(match[2]) + } else { + outputLines.push(line) + } + gotLineCont = line.endsWith(lineContinuationChar) & useLineCont + if (line.includes(hereDocDelim) & useHereDoc) + gotHereDoc = !gotHereDoc + } else if (!onlyCopyPromptLines) { + outputLines.push(line) + } else if (copyEmptyLines && line.trim() === '') { + outputLines.push(line) + } + } + + // If no lines with the prompt were found then just use original lines + if (lineGotPrompt.some(v => v === true)) { + textContent = outputLines.join('\n'); + } + + // Remove a trailing newline to avoid auto-running when pasting + if (textContent.endsWith("\n")) { + textContent = textContent.slice(0, -1) + } + return textContent +} diff --git a/_preview/88/_static/css/blank.css b/_preview/88/_static/css/blank.css new file mode 100644 index 0000000..8a686ec --- /dev/null +++ b/_preview/88/_static/css/blank.css @@ -0,0 +1,2 @@ +/* This file is intentionally left blank to override the stylesheet of the +parent theme via theme.conf. The parent style we import directly in theme.css */ \ No newline at end of file diff --git a/_preview/88/_static/css/index.ff1ffe594081f20da1ef19478df9384b.css b/_preview/88/_static/css/index.ff1ffe594081f20da1ef19478df9384b.css new file mode 100644 index 0000000..9b1c5d7 --- /dev/null +++ b/_preview/88/_static/css/index.ff1ffe594081f20da1ef19478df9384b.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v4.5.0 (https://getbootstrap.com/) + * Copyright 2011-2020 The Bootstrap Authors + * Copyright 2011-2020 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:540px;--breakpoint-md:720px;--breakpoint-lg:960px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;line-height:1.5;color:#212529;text-align:left}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;background-color:transparent}a:hover{color:#0056b3}a:not([href]),a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:540px){.container{max-width:540px}}@media (min-width:720px){.container{max-width:720px}}@media (min-width:960px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1400px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:540px){.container,.container-sm{max-width:540px}}@media (min-width:720px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:960px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1400px}}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:540px){.col-sm{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:720px){.col-md{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:960px){.col-lg{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:539.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:719.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:959.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:540px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:540px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:720px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:960px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:none}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:539.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:540px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:719.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:720px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:959.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:960px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:540px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:540px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:540px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb,.breadcrumb-item{display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:540px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:540px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:720px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:960px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:540px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:min-content}.modal-sm{max-width:300px}}@media (min-width:960px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:540px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:720px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:960px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:540px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:720px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:960px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:540px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:720px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:960px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{user-select:all!important}.user-select-auto{user-select:auto!important}.user-select-none{user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:540px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:720px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:960px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:540px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:720px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:960px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:960px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}html{font-size:var(--pst-font-size-base);scroll-padding-top:calc(var(--pst-header-height) + 12px)}body{padding-top:calc(var(--pst-header-height) + 20px);background-color:#fff;font-family:var(--pst-font-family-base);font-weight:400;line-height:1.65;color:rgba(var(--pst-color-text-base),1)}p{margin-bottom:1.15rem;font-size:1em;color:rgba(var(--pst-color-paragraph),1)}p.rubric{border-bottom:1px solid #c9c9c9}a{color:rgba(var(--pst-color-link),1);text-decoration:none}a:hover{color:rgba(var(--pst-color-link-hover),1);text-decoration:underline}a.headerlink{color:rgba(var(--pst-color-headerlink),1);font-size:.8em;padding:0 4px;text-decoration:none}a.headerlink:hover{background-color:rgba(var(--pst-color-headerlink),1);color:rgba(var(--pst-color-headerlink-hover),1)}.heading-style,h1,h2,h3,h4,h5,h6{margin:2.75rem 0 1.05rem;font-family:var(--pst-font-family-heading);font-weight:400;line-height:1.15}h1{margin-top:0;font-size:var(--pst-font-size-h1);color:rgba(var(--pst-color-h1),1)}h2{font-size:var(--pst-font-size-h2);color:rgba(var(--pst-color-h2),1)}h3{font-size:var(--pst-font-size-h3);color:rgba(var(--pst-color-h3),1)}h4{font-size:var(--pst-font-size-h4);color:rgba(var(--pst-color-h4),1)}h5{font-size:var(--pst-font-size-h5);color:rgba(var(--pst-color-h5),1)}h6{font-size:var(--pst-font-size-h6);color:rgba(var(--pst-color-h6),1)}.text_small,small{font-size:var(--pst-font-size-milli)}hr{border:0;border-top:1px solid #e5e5e5}code,kbd,pre,samp{font-family:var(--pst-font-family-monospace)}code{color:rgba(var(--pst-color-inline-code),1)}pre{margin:1.5em 0;padding:10px;background-color:rgba(var(--pst-color-preformatted-background),1);color:rgba(var(--pst-color-preformatted-text),1);line-height:1.2em;border:1px solid #c9c9c9;border-radius:.2rem;box-shadow:1px 1px 1px #d8d8d8}dd{margin-top:3px;margin-bottom:10px;margin-left:30px}.navbar{position:fixed;min-height:var(--pst-header-height);width:100%;padding:0}.navbar .container-xl{height:100%}@media (min-width:960px){.navbar #navbar-end>.navbar-end-item{display:inline-block}}.navbar-brand{position:relative;height:var(--pst-header-height);width:auto;padding:.5rem 0}.navbar-brand img{max-width:100%;height:100%;width:auto}.navbar-light{background:#fff!important;box-shadow:0 .125rem .25rem 0 rgba(0,0,0,.11)}.navbar-light .navbar-nav li a.nav-link{padding:0 .5rem;color:rgba(var(--pst-color-navbar-link),1)}.navbar-light .navbar-nav li a.nav-link:hover{color:rgba(var(--pst-color-navbar-link-hover),1)}.navbar-light .navbar-nav>.active>.nav-link{font-weight:600;color:rgba(var(--pst-color-navbar-link-active),1)}.navbar-header a{padding:0 15px}.admonition,div.admonition{margin:1.5625em auto;padding:0 .6rem .8rem;overflow:hidden;page-break-inside:avoid;border-left:.2rem solid;border-left-color:rgba(var(--pst-color-admonition-default),1);border-bottom-color:rgba(var(--pst-color-admonition-default),1);border-right-color:rgba(var(--pst-color-admonition-default),1);border-top-color:rgba(var(--pst-color-admonition-default),1);border-radius:.2rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .0625rem rgba(0,0,0,.1);transition:color .25s,background-color .25s,border-color .25s}.admonition :last-child,div.admonition :last-child{margin-bottom:0}.admonition p.admonition-title~*,div.admonition p.admonition-title~*{padding:0 1.4rem}.admonition>ol,.admonition>ul,div.admonition>ol,div.admonition>ul{margin-left:1em}.admonition>.admonition-title,div.admonition>.admonition-title{position:relative;margin:0 -.6rem;padding:.4rem .6rem .4rem 2rem;font-weight:700;background-color:rgba(var(--pst-color-admonition-default),.1)}.admonition>.admonition-title:before,div.admonition>.admonition-title:before{position:absolute;left:.6rem;width:1rem;height:1rem;color:rgba(var(--pst-color-admonition-default),1);font-family:Font Awesome\ 5 Free;font-weight:900;content:var(--pst-icon-admonition-default)}.admonition>.admonition-title+*,div.admonition>.admonition-title+*{margin-top:.4em}.admonition.attention,div.admonition.attention{border-color:rgba(var(--pst-color-admonition-attention),1)}.admonition.attention>.admonition-title,div.admonition.attention>.admonition-title{background-color:rgba(var(--pst-color-admonition-attention),.1)}.admonition.attention>.admonition-title:before,div.admonition.attention>.admonition-title:before{color:rgba(var(--pst-color-admonition-attention),1);content:var(--pst-icon-admonition-attention)}.admonition.caution,div.admonition.caution{border-color:rgba(var(--pst-color-admonition-caution),1)}.admonition.caution>.admonition-title,div.admonition.caution>.admonition-title{background-color:rgba(var(--pst-color-admonition-caution),.1)}.admonition.caution>.admonition-title:before,div.admonition.caution>.admonition-title:before{color:rgba(var(--pst-color-admonition-caution),1);content:var(--pst-icon-admonition-caution)}.admonition.warning,div.admonition.warning{border-color:rgba(var(--pst-color-admonition-warning),1)}.admonition.warning>.admonition-title,div.admonition.warning>.admonition-title{background-color:rgba(var(--pst-color-admonition-warning),.1)}.admonition.warning>.admonition-title:before,div.admonition.warning>.admonition-title:before{color:rgba(var(--pst-color-admonition-warning),1);content:var(--pst-icon-admonition-warning)}.admonition.danger,div.admonition.danger{border-color:rgba(var(--pst-color-admonition-danger),1)}.admonition.danger>.admonition-title,div.admonition.danger>.admonition-title{background-color:rgba(var(--pst-color-admonition-danger),.1)}.admonition.danger>.admonition-title:before,div.admonition.danger>.admonition-title:before{color:rgba(var(--pst-color-admonition-danger),1);content:var(--pst-icon-admonition-danger)}.admonition.error,div.admonition.error{border-color:rgba(var(--pst-color-admonition-error),1)}.admonition.error>.admonition-title,div.admonition.error>.admonition-title{background-color:rgba(var(--pst-color-admonition-error),.1)}.admonition.error>.admonition-title:before,div.admonition.error>.admonition-title:before{color:rgba(var(--pst-color-admonition-error),1);content:var(--pst-icon-admonition-error)}.admonition.hint,div.admonition.hint{border-color:rgba(var(--pst-color-admonition-hint),1)}.admonition.hint>.admonition-title,div.admonition.hint>.admonition-title{background-color:rgba(var(--pst-color-admonition-hint),.1)}.admonition.hint>.admonition-title:before,div.admonition.hint>.admonition-title:before{color:rgba(var(--pst-color-admonition-hint),1);content:var(--pst-icon-admonition-hint)}.admonition.tip,div.admonition.tip{border-color:rgba(var(--pst-color-admonition-tip),1)}.admonition.tip>.admonition-title,div.admonition.tip>.admonition-title{background-color:rgba(var(--pst-color-admonition-tip),.1)}.admonition.tip>.admonition-title:before,div.admonition.tip>.admonition-title:before{color:rgba(var(--pst-color-admonition-tip),1);content:var(--pst-icon-admonition-tip)}.admonition.important,div.admonition.important{border-color:rgba(var(--pst-color-admonition-important),1)}.admonition.important>.admonition-title,div.admonition.important>.admonition-title{background-color:rgba(var(--pst-color-admonition-important),.1)}.admonition.important>.admonition-title:before,div.admonition.important>.admonition-title:before{color:rgba(var(--pst-color-admonition-important),1);content:var(--pst-icon-admonition-important)}.admonition.note,div.admonition.note{border-color:rgba(var(--pst-color-admonition-note),1)}.admonition.note>.admonition-title,div.admonition.note>.admonition-title{background-color:rgba(var(--pst-color-admonition-note),.1)}.admonition.note>.admonition-title:before,div.admonition.note>.admonition-title:before{color:rgba(var(--pst-color-admonition-note),1);content:var(--pst-icon-admonition-note)}table.field-list{border-collapse:separate;border-spacing:10px;margin-left:1px}table.field-list th.field-name{padding:1px 8px 1px 5px;white-space:nowrap;background-color:#eee}table.field-list td.field-body p{font-style:italic}table.field-list td.field-body p>strong{font-style:normal}table.field-list td.field-body blockquote{border-left:none;margin:0 0 .3em;padding-left:30px}.table.autosummary td:first-child{white-space:nowrap}.sig{font-family:var(--pst-font-family-monospace)}.sig-inline.c-texpr,.sig-inline.cpp-texpr{font-family:unset}.sig.c .k,.sig.c .kt,.sig.c .m,.sig.c .s,.sig.c .sc,.sig.cpp .k,.sig.cpp .kt,.sig.cpp .m,.sig.cpp .s,.sig.cpp .sc{color:rgba(var(--pst-color-text-base),1)}.sig-name{color:rgba(var(--pst-color-inline-code),1)}blockquote{padding:0 1em;color:#6a737d;border-left:.25em solid #dfe2e5}dt.label>span.brackets:not(:only-child):before{content:"["}dt.label>span.brackets:not(:only-child):after{content:"]"}a.footnote-reference{vertical-align:super;font-size:small}div.deprecated{margin-bottom:10px;margin-top:10px;padding:7px;background-color:#f3e5e5;border:1px solid #eed3d7;border-radius:.5rem}div.deprecated p{color:#b94a48;display:inline}.topic{background-color:#eee}.seealso dd{margin-top:0;margin-bottom:0}.viewcode-back{font-family:var(--pst-font-family-base)}.viewcode-block:target{background-color:#f4debf;border-top:1px solid #ac9;border-bottom:1px solid #ac9}span.guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}footer{width:100%;border-top:1px solid #ccc;padding:10px}footer .footer-item p{margin-bottom:0}.bd-search{position:relative;padding:1rem 15px;margin-right:-15px;margin-left:-15px}.bd-search .icon{position:absolute;color:#a4a6a7;left:25px;top:25px}.bd-search input{border-radius:0;border:0;border-bottom:1px solid #e5e5e5;padding-left:35px}.bd-toc{-ms-flex-order:2;order:2;height:calc(100vh - 2rem);overflow-y:auto}@supports (position:-webkit-sticky) or (position:sticky){.bd-toc{position:-webkit-sticky;position:sticky;top:calc(var(--pst-header-height) + 20px);height:calc(100vh - 5rem);overflow-y:auto}}.bd-toc .onthispage{color:#a4a6a7}.section-nav{padding-left:0;border-left:1px solid #eee;border-bottom:none}.section-nav ul{padding-left:1rem}.toc-entry,.toc-entry a{display:block}.toc-entry a{padding:.125rem 1.5rem;color:rgba(var(--pst-color-toc-link),1)}@media (min-width:1200px){.toc-entry a{padding-right:0}}.toc-entry a:hover{color:rgba(var(--pst-color-toc-link-hover),1);text-decoration:none}.bd-sidebar{padding-top:1em}@media (min-width:720px){.bd-sidebar{border-right:1px solid rgba(0,0,0,.1)}@supports (position:-webkit-sticky) or (position:sticky){.bd-sidebar{position:-webkit-sticky;position:sticky;top:calc(var(--pst-header-height) + 20px);z-index:1000;height:calc(100vh - var(--pst-header-height) - 20px)}}}.bd-sidebar.no-sidebar{border-right:0}.bd-links{padding-top:1rem;padding-bottom:1rem;margin-right:-15px;margin-left:-15px}@media (min-width:720px){.bd-links{display:block}@supports (position:-webkit-sticky) or (position:sticky){.bd-links{max-height:calc(100vh - 11rem);overflow-y:auto}}}.bd-sidenav{display:none}.bd-content{padding-top:20px}.bd-content .section{max-width:100%}.bd-content .section table{display:block;overflow:auto}.bd-toc-link{display:block;padding:.25rem 1.5rem;font-weight:600;color:rgba(0,0,0,.65)}.bd-toc-link:hover{color:rgba(0,0,0,.85);text-decoration:none}.bd-toc-item.active{margin-bottom:1rem}.bd-toc-item.active:not(:first-child){margin-top:1rem}.bd-toc-item.active>.bd-toc-link{color:rgba(0,0,0,.85)}.bd-toc-item.active>.bd-toc-link:hover{background-color:transparent}.bd-toc-item.active>.bd-sidenav{display:block}nav.bd-links p.caption{font-size:var(--pst-sidebar-caption-font-size);text-transform:uppercase;font-weight:700;position:relative;margin-top:1.25em;margin-bottom:.5em;padding:0 1.5rem;color:rgba(var(--pst-color-sidebar-caption),1)}nav.bd-links p.caption:first-child{margin-top:0}.bd-sidebar .nav{font-size:var(--pst-sidebar-font-size)}.bd-sidebar .nav ul{list-style:none;padding:0 0 0 1.5rem}.bd-sidebar .nav li>a{display:block;padding:.25rem 1.5rem;color:rgba(var(--pst-color-sidebar-link),1)}.bd-sidebar .nav li>a:hover{color:rgba(var(--pst-color-sidebar-link-hover),1);text-decoration:none;background-color:transparent}.bd-sidebar .nav li>a.reference.external:after{font-family:Font Awesome\ 5 Free;font-weight:900;content:"\f35d";font-size:.75em;margin-left:.3em}.bd-sidebar .nav .active:hover>a,.bd-sidebar .nav .active>a{font-weight:600;color:rgba(var(--pst-color-sidebar-link-active),1)}.toc-h2{font-size:.85rem}.toc-h3{font-size:.75rem}.toc-h4{font-size:.65rem}.toc-entry>.nav-link.active{font-weight:600;color:#130654;color:rgba(var(--pst-color-toc-link-active),1);background-color:transparent;border-left:2px solid rgba(var(--pst-color-toc-link-active),1)}.nav-link:hover{border-style:none}#navbar-main-elements li.nav-item i{font-size:.7rem;padding-left:2px;vertical-align:middle}.bd-toc .nav .nav{display:none}.bd-toc .nav .nav.visible,.bd-toc .nav>.active>ul{display:block}.prev-next-area{margin:20px 0}.prev-next-area p{margin:0 .3em;line-height:1.3em}.prev-next-area i{font-size:1.2em}.prev-next-area a{display:flex;align-items:center;border:none;padding:10px;max-width:45%;overflow-x:hidden;color:rgba(0,0,0,.65);text-decoration:none}.prev-next-area a p.prev-next-title{color:rgba(var(--pst-color-link),1);font-weight:600;font-size:1.1em}.prev-next-area a:hover p.prev-next-title{text-decoration:underline}.prev-next-area a .prev-next-info{flex-direction:column;margin:0 .5em}.prev-next-area a .prev-next-info .prev-next-subtitle{text-transform:capitalize}.prev-next-area a.left-prev{float:left}.prev-next-area a.right-next{float:right}.prev-next-area a.right-next div.prev-next-info{text-align:right}.alert{padding-bottom:0}.alert-info a{color:#e83e8c}#navbar-icon-links i.fa,#navbar-icon-links i.fab,#navbar-icon-links i.far,#navbar-icon-links i.fas{vertical-align:middle;font-style:normal;font-size:1.5rem;line-height:1.25}#navbar-icon-links i.fa-github-square:before{color:#333}#navbar-icon-links i.fa-twitter-square:before{color:#55acee}#navbar-icon-links i.fa-gitlab:before{color:#548}#navbar-icon-links i.fa-bitbucket:before{color:#0052cc}.tocsection{border-left:1px solid #eee;padding:.3rem 1.5rem}.tocsection i{padding-right:.5rem}.editthispage{padding-top:2rem}.editthispage a{color:var(--pst-color-sidebar-link-active)}.xr-wrap[hidden]{display:block!important}.toctree-checkbox{position:absolute;display:none}.toctree-checkbox~ul{display:none}.toctree-checkbox~label i{transform:rotate(0deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label i{transform:rotate(180deg)}.bd-sidebar li{position:relative}.bd-sidebar label{position:absolute;top:0;right:0;height:30px;width:30px;cursor:pointer;display:flex;justify-content:center;align-items:center}.bd-sidebar label:hover{background:rgba(var(--pst-color-sidebar-expander-background-hover),1)}.bd-sidebar label i{display:inline-block;font-size:.75rem;text-align:center}.bd-sidebar label i:hover{color:rgba(var(--pst-color-sidebar-link-hover),1)}.bd-sidebar li.has-children>.reference{padding-right:30px}div.doctest>div.highlight span.gp,span.linenos,table.highlighttable td.linenos{user-select:none;-webkit-user-select:text;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.docutils.container{padding-left:unset;padding-right:unset} \ No newline at end of file diff --git a/_preview/88/_static/css/theme.css b/_preview/88/_static/css/theme.css new file mode 100644 index 0000000..2e03fe3 --- /dev/null +++ b/_preview/88/_static/css/theme.css @@ -0,0 +1,120 @@ +/* Provided by the Sphinx base theme template at build time */ +@import "../basic.css"; + +:root { + /***************************************************************************** + * Theme config + **/ + --pst-header-height: 60px; + + /***************************************************************************** + * Font size + **/ + --pst-font-size-base: 15px; /* base font size - applied at body / html level */ + + /* heading font sizes */ + --pst-font-size-h1: 36px; + --pst-font-size-h2: 32px; + --pst-font-size-h3: 26px; + --pst-font-size-h4: 21px; + --pst-font-size-h5: 18px; + --pst-font-size-h6: 16px; + + /* smaller then heading font sizes*/ + --pst-font-size-milli: 12px; + + --pst-sidebar-font-size: .9em; + --pst-sidebar-caption-font-size: .9em; + + /***************************************************************************** + * Font family + **/ + /* These are adapted from https://systemfontstack.com/ */ + --pst-font-family-base-system: -apple-system, BlinkMacSystemFont, Segoe UI, "Helvetica Neue", + Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; + --pst-font-family-monospace-system: "SFMono-Regular", Menlo, Consolas, Monaco, + Liberation Mono, Lucida Console, monospace; + + --pst-font-family-base: var(--pst-font-family-base-system); + --pst-font-family-heading: var(--pst-font-family-base); + --pst-font-family-monospace: var(--pst-font-family-monospace-system); + + /***************************************************************************** + * Color + * + * Colors are defined in rgb string way, "red, green, blue" + **/ + --pst-color-primary: 19, 6, 84; + --pst-color-success: 40, 167, 69; + --pst-color-info: 0, 123, 255; /*23, 162, 184;*/ + --pst-color-warning: 255, 193, 7; + --pst-color-danger: 220, 53, 69; + --pst-color-text-base: 51, 51, 51; + + --pst-color-h1: var(--pst-color-primary); + --pst-color-h2: var(--pst-color-primary); + --pst-color-h3: var(--pst-color-text-base); + --pst-color-h4: var(--pst-color-text-base); + --pst-color-h5: var(--pst-color-text-base); + --pst-color-h6: var(--pst-color-text-base); + --pst-color-paragraph: var(--pst-color-text-base); + --pst-color-link: 0, 91, 129; + --pst-color-link-hover: 227, 46, 0; + --pst-color-headerlink: 198, 15, 15; + --pst-color-headerlink-hover: 255, 255, 255; + --pst-color-preformatted-text: 34, 34, 34; + --pst-color-preformatted-background: 250, 250, 250; + --pst-color-inline-code: 232, 62, 140; + + --pst-color-active-navigation: 19, 6, 84; + --pst-color-navbar-link: 77, 77, 77; + --pst-color-navbar-link-hover: var(--pst-color-active-navigation); + --pst-color-navbar-link-active: var(--pst-color-active-navigation); + --pst-color-sidebar-link: 77, 77, 77; + --pst-color-sidebar-link-hover: var(--pst-color-active-navigation); + --pst-color-sidebar-link-active: var(--pst-color-active-navigation); + --pst-color-sidebar-expander-background-hover: 244, 244, 244; + --pst-color-sidebar-caption: 77, 77, 77; + --pst-color-toc-link: 119, 117, 122; + --pst-color-toc-link-hover: var(--pst-color-active-navigation); + --pst-color-toc-link-active: var(--pst-color-active-navigation); + + /***************************************************************************** + * Icon + **/ + + /* font awesome icons*/ + --pst-icon-check-circle: '\f058'; + --pst-icon-info-circle: '\f05a'; + --pst-icon-exclamation-triangle: '\f071'; + --pst-icon-exclamation-circle: '\f06a'; + --pst-icon-times-circle: '\f057'; + --pst-icon-lightbulb: '\f0eb'; + + /***************************************************************************** + * Admonitions + **/ + + --pst-color-admonition-default: var(--pst-color-info); + --pst-color-admonition-note: var(--pst-color-info); + --pst-color-admonition-attention: var(--pst-color-warning); + --pst-color-admonition-caution: var(--pst-color-warning); + --pst-color-admonition-warning: var(--pst-color-warning); + --pst-color-admonition-danger: var(--pst-color-danger); + --pst-color-admonition-error: var(--pst-color-danger); + --pst-color-admonition-hint: var(--pst-color-success); + --pst-color-admonition-tip: var(--pst-color-success); + --pst-color-admonition-important: var(--pst-color-success); + + --pst-icon-admonition-default: var(--pst-icon-info-circle); + --pst-icon-admonition-note: var(--pst-icon-info-circle); + --pst-icon-admonition-attention: var(--pst-icon-exclamation-circle); + --pst-icon-admonition-caution: var(--pst-icon-exclamation-triangle); + --pst-icon-admonition-warning: var(--pst-icon-exclamation-triangle); + --pst-icon-admonition-danger: var(--pst-icon-exclamation-triangle); + --pst-icon-admonition-error: var(--pst-icon-times-circle); + --pst-icon-admonition-hint: var(--pst-icon-lightbulb); + --pst-icon-admonition-tip: var(--pst-icon-lightbulb); + --pst-icon-admonition-important: var(--pst-icon-exclamation-circle); + +} diff --git a/_preview/88/_static/doctools.js b/_preview/88/_static/doctools.js new file mode 100644 index 0000000..e1bfd70 --- /dev/null +++ b/_preview/88/_static/doctools.js @@ -0,0 +1,358 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + this.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + var url = new URL(window.location); + url.searchParams.delete('highlight'); + window.history.replaceState({}, '', url); + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar : function() { + $('input[name=q]').first().focus(); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + return; + + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box, textarea, dropdown or button + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && activeElementType !== 'BUTTON') { + if (event.altKey || event.ctrlKey || event.metaKey) + return; + + if (!event.shiftKey) { + switch (event.key) { + case 'ArrowLeft': + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) + break; + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + break; + case 'ArrowRight': + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) + break; + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + break; + case 'Escape': + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + break; + Documentation.hideSearchWords(); + return false; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case '/': + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) + break; + Documentation.focusSearchBar(); + return false; + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/_preview/88/_static/documentation_options.js b/_preview/88/_static/documentation_options.js new file mode 100644 index 0000000..877e3c3 --- /dev/null +++ b/_preview/88/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '', + NAVIGATION_WITH_KEYS: true, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_preview/88/_static/file.png b/_preview/88/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/_preview/88/_static/images/logo_binder.svg b/_preview/88/_static/images/logo_binder.svg new file mode 100644 index 0000000..45fecf7 --- /dev/null +++ b/_preview/88/_static/images/logo_binder.svg @@ -0,0 +1,19 @@ + + + + +logo + + + + + + + + diff --git a/_preview/88/_static/images/logo_colab.png b/_preview/88/_static/images/logo_colab.png new file mode 100644 index 0000000000000000000000000000000000000000..b7560ec216b2d1b6f77855525fe966c741833428 GIT binary patch literal 7601 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 diff --git a/_preview/88/_static/jquery-3.5.1.js b/_preview/88/_static/jquery-3.5.1.js new file mode 100644 index 0000000..5093733 --- /dev/null +++ b/_preview/88/_static/jquery-3.5.1.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " +{% endmacro %} \ No newline at end of file diff --git a/_preview/88/contact.html b/_preview/88/contact.html new file mode 100644 index 0000000..e265935 --- /dev/null +++ b/_preview/88/contact.html @@ -0,0 +1,382 @@ + + + + + + + + Contact Us — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+ Contents +
+ +
+
+
+
+
+ +
+

Contact Us

+ +
+
+ +
+

Contents

+
+ +
+
+
+ +
+ +
+

Contact Us

+
+

Manager for Data and Compute

+

You can contact Julius Busecke on Slack.

+
+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/genindex.html b/_preview/88/genindex.html new file mode 100644 index 0000000..426e155 --- /dev/null +++ b/_preview/88/genindex.html @@ -0,0 +1,303 @@ + + + + + + + + Index — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+
+ +
+

+ +
+
+ +
+
+
+ +
+ + +

Index

+ +
+ +
+ + +
+ + + +
+
+ +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/guides/education.html b/_preview/88/guides/education.html new file mode 100644 index 0000000..1412ab5 --- /dev/null +++ b/_preview/88/guides/education.html @@ -0,0 +1,433 @@ + + + + + + + + LEAP-Pangeo for Education — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + + +
+
+
+
+ +
+

LEAP-Pangeo for Education

+ +
+ +
+
+ +
+ +
+

LEAP-Pangeo for Education

+
+

Running classes on the JupyterHub

+

🚧 Full Guide coming soon … If you are a LEAP educator and want to run your class on the hub, please reach out to Manager for Data and Compute.

+
+

How to sign up students

+

Students should be signed up to the appropriate user categories ahead of the class. Please direct your students to this documentation and try to ensure that everyone has access to the Hub before the class starts.

+
+

Troubleshooting

+

Students cannot sign on

+

Check if the students are part of the appropriate github teams.

+

If they are not follow these steps:

+ +

If they are, ask them to try the following steps:

+
    +
  • Refresh the browser cache

  • +
  • Try a different browser

  • +
  • Restart the computer

  • +
  • If these steps do not work, please reach out to Manager for Data and Compute.

  • +
+
+
+
+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/how_to_cite.html b/_preview/88/how_to_cite.html new file mode 100644 index 0000000..6d913d5 --- /dev/null +++ b/_preview/88/how_to_cite.html @@ -0,0 +1,427 @@ + + + + + + + + How to cite LEAP-Pangeo — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + + +
+
+
+
+ + + +
+ +
+

How to cite LEAP-Pangeo

+

If you use any of the LEAP resources, please follow these guidlines to recognize our work.

+
+

Add your publication to our LEAP publication tracker

+
+
+

Cite LEAP-Pangeo Platform

+

If you used the JupyterHub platform to perform analysis, please add a statement similar to this to your acknowledgment section of the paper:

+
We acknowledge the computing and storage resources provided by the
+`NSF Science and Technology Center (STC) Learning the Earth with
+Artificial intelligence and Physics (LEAP)` (Award # 2019625).
+
+
+
+
+

Cite Data

+

Please include all datasets used for your work in your citations using the doi of each individual dataset.

+
+
+

Don’t forget to cite your open source packages

+

Please take the time to cite all packages used in your work, to ensure that the essential work of open source developers for open science is properly recognized.

+
+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/index.html b/_preview/88/index.html new file mode 100644 index 0000000..3157386 --- /dev/null +++ b/_preview/88/index.html @@ -0,0 +1 @@ + diff --git a/_preview/88/intro.html b/_preview/88/intro.html new file mode 100644 index 0000000..423371c --- /dev/null +++ b/_preview/88/intro.html @@ -0,0 +1,437 @@ + + + + + + + + LEAP Technical Documentation — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+ Contents +
+ +
+
+
+
+
+ +
+

LEAP Technical Documentation

+ +
+
+ +
+

Contents

+
+ +
+
+
+ +
+ +
+

LEAP Technical Documentation

+

This website is the home for all technical documentation related to LEAP and LEAP-Pangeo.

+
+

Dashboard

+ + + + + + + + + + + + + +

Update Status

Contributors

Deployment Status

GitHub last commit

GitHub contributors

publish-book

+
+ +
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/leap-pangeo/architecture.html b/_preview/88/leap-pangeo/architecture.html new file mode 100644 index 0000000..d886be9 --- /dev/null +++ b/_preview/88/leap-pangeo/architecture.html @@ -0,0 +1,650 @@ + + + + + + + + LEAP-Pangeo Architecture — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + + +
+
+
+
+ + + +
+ +
+

LEAP-Pangeo Architecture

+

LEAP-Pangeo is a cloud-based data and computing platform that will be used to support research, education, and knowledge transfer within the LEAP program.

+
+

Motivation

+

The motivation and justification for developing LEAP-Pangeo are laid out in several recent peer-reviewed publications: [Abernathey et al., 2021] and [Gentemann et al., 2021]. +To summarize these arguments, a shared data and computing platform will:

+
    +
  • Empower LEAP participants with instant access to high-performance computing and analysis-ready data in order to support ambitious research objectives

  • +
  • Facilitate seamless collaboration between project members around data-intensive science, accelerating research progress

  • +
  • Enable rich data-driven classroom experiences for learners, helping them transition successfully from coursework to research

  • +
  • Place actionable data in the hands of LEAP partners to support knowledge transfer

  • +
+
+
+

Design Principles

+

In the proposal, we committed to building this in a way that enables the tools and infrastructure to be reused and remixed. +So The challenge for LEAP Pangeo is to deploy an “enterprise quality” platform built entirely out of open-source tools, and to make this platform as reusable and useful for the broader climate science community as possible. +We committed to following the following design principles:

+
    +
  • Open source

  • +
  • Modular system: built out of smaller, standalone pieces which interoperate through clearly documented interfaces / standards

  • +
  • Agile development on GitHub

  • +
  • Following industry-standard best practices for continuous deployment, testing, etc.

  • +
  • Resuse of existing technologies and contribution to “upstream” open source projects on which LEAP-Pangeo depends +(rather than development of new stuff just for the sake of it). +This is a key part of our sustainability plan.

  • +
+
+ +
+

Design and Architecture

+
+https://i.imgur.com/PVhoQUu.png +

Fig. 1 LEAP-Pangeo high-level architecture diagram

+
+

There are four primary components to LEAP-Pangeo.

+
+

The Data Library

+

The data library will provide analysis-ready, cloud-optimized data for all aspects of LEAP. +The data library is directly inspired by the IRI Data Library mentioned above; however, LEAP-Pangeo data will be hosted in the cloud, for maximum impact, accessibility, and interoperability.

+

The contents of the data library will evolve dynamically based on the needs of the project. +Examples of data that may become part of the library are

+
    +
  • NOAA OISST sea-surface temperature data, +used in workshops and classes to illustrate the fundamentals of geospatial data science.

  • +
  • High-resolution climate model simulations from the NCAR “EarthWorks” +project, used by LEAP researchers to develop machine-learning parameterizations of climate processes like cloud and ocean eddies.

  • +
  • Machine-learning “challenge datasets,” published by the LEAP Team and accessible to the world, to help broading participation +by ML researchers into climate science.

  • +
  • Easily accessible syntheses of climate projections from CMIP6 data, produced by the LEAP team, +for use by industry partners for business strategy and decision making.

  • +
+
+
+

Data Storage Service

+

The underlying technology for the LEAP Data catalog will be cloud object storage (e.g. Amazon S3), +which enables high throughput concurrent access to many simultaneous users over the public internet. +Cloud Object Storage is the most performant, cost-effective, and simple way to serve such large volumes of data.

+

Initially, the LEAP data will be stored in Google Cloud Storage, in the same cloud region +as the JupyterHub. +Going forward, we will work with NCAR to obtain an Open Storage Network +pod which allows data to be accessible from both Google Cloud and NCAR’s computing system.

+
+

Pangeo Forge

+
+https://raw.githubusercontent.com/pangeo-forge/flow-charts/main/renders/architecture.png +

Fig. 2 Pangeo Forge high-level workflow. Diagram from https://github.com/pangeo-forge/flow-charts

+
+

A central tool for the population and maintenance of the LEAP-Pangeo data catalog is +Pangeo Forge. +Pangeo Forge is an open source tool for data Extraction, Transformation, and Loading (ETL). +The goal of Pangeo Forge is to make it easy to extract data from traditional data repositories and deposit in cloud object storage in analysis-ready, cloud-optimized (ARCO) format.

+

Pangeo Forge works by allowing domain scientists to define “recipes” that describe data transformation pipelines. +These recipes are stored in GitHub repositories. +Continuous integration monitors GitHub and automatically executes the data pipelines when needed. +The use of distributed, cloud-based processing allows very large volumes of data to be processed quickly.

+

Pangeo Forge is a new project, funded by the NSF EarthCube program. +LEAP-Pangeo will provide a high-impact use case for Pangeo Forge, and Pangeo Forge +will empower and enhance LEAP research. +This synergistic relationship with be mutually beneficial to two NSF-sponsored projects. +Using Pangeo Forge effectively will require LEAP scientists and data engineers to engage +with the open-source development process around Pangeo Forge and related technologies.

+
+
+

Catalog

+

A STAC data catalog be used to enumerate all LEAP-Pangeo datasets and provide this information to the public. +The catalog will store all relevant metadata about LEAP datasets following established metadata standards (e.g. CF Conventions). +It will also provide direct links to raw data in cloud object storage.

+

The catalog will facilitate several different modes of access:

+
    +
  • Searching, crawling, and opening datasets from within notebooks or scripts

  • +
  • “Crawling” by search indexes or other machine-to-machine interfaces

  • +
  • A pretty web front-end interface for interactive public browsing

  • +
+

The Radiant Earth MLHub is a great reference for how we imagine the LEAP data catalog will eventually look.

+
+
+
+

The Hub

+
+https://jupyter.org/assets/homepage/labpreview.webp +

Fig. 3 Screenshot from JupyterLab. From https://jupyter.org/

+
+

Jupyter Notebook / Lab has emerged as the standard tool for doing interactive data science. +Jupyter supports combining rich text, code, and generated outputs (e.g. figures) into a single document, creating a way to communicate and share complete data-science research project

+
+https://jupyterhub.readthedocs.io/en/stable/_images/jhub-fluxogram.jpeg +

Fig. 4 JupyterHub architecture. From https://jupyterhub.readthedocs.io/

+
+

JupyterHub is a multi-user Jupyter Notebook / Lab environment that runs on a server. +JupyterHub provides a gateway to highly customized software environments backed by dedicated computing with specified resources (CPU, RAM, GPU, etc.) +Running in the cloud, JupyterHub can scale up to accommodate any number of simultaneous users with no degradation in +performance. +JupyterHub environments can support basically every existing programming language. +We anticipate that LEAP users will primarily use Python, R, and Julia programming languages. +In addition to Jupyter Notebook / Lab, JupyterHub also supports launching R Studio.

+

The Pangeo project already provides curated Docker images +with full-featured Python software environments for environmental data science. +These environments will be the starting point for LEAP environments. +They may be augmented as LEAP evolves with more specific software as needed by research projects.

+

Use management and access control for the Hub are described in Users and Categories. +We use GitHub for identity management, in order to make it easy to include participants +from any partner institution..

+
+
+

The Knowledge Graph

+

LEAP “outputs” will be of four main types:

+
    +
  • Datasets (covered above)

  • +
  • Papers - traditional scientific publications

  • +
  • Project Code - the code behind the papers, used to actually generate the scientific results

  • +
  • Trained ML Models - models that can be used directly for inference by others

  • +
  • Educational Modules - used for teaching

  • +
+

All of these object must be tracked and cataloged in a uniform way. +The Code Policy and Data Policy will help set these standards.

+
+../_images/LEAP_knowledge_graph.png +

Fig. 5 LEAP Knowledge Graph

+
+

By tracking the linked relationships between datasets, papers, code, models, and educational , we will generate a “knowledge graph”. +This graph will reveal the dynamic, evolving state of the outputs of LEAP research and the relationships between different elements of the project. +By also tracking participations (i.e. humans), we will build a novel and inspiring track record of LEAP’s impacts through the project lifetime.

+

This is the most open-ended aspect of our infrastructure. +Organizing and displaying this information effectively is a challenging problem in +information architecture and systems design.

+
+
+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/leap-pangeo/implementation.html b/_preview/88/leap-pangeo/implementation.html new file mode 100644 index 0000000..72aeab7 --- /dev/null +++ b/_preview/88/leap-pangeo/implementation.html @@ -0,0 +1,708 @@ + + + + + + + + LEAP-Pangeo Implementation Plan — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + + +
+
+
+
+ + + +
+ +
+

LEAP-Pangeo Implementation Plan

+

The different elements of the project can be implemented in parallel and gradually connected together.

+
+

Roles

+
+

Decision Needed

+

An open question for LEAP-Pangeo is whether to develop and maintain our infrastructure +via subcontracts or via Columbia employees whom we hire. +Below the roles are enumerated in a generic way according to the needed expertise.

+
+
+

Data Engineering

+

The LEAP-Pangeo Architecture, particularly the Data Library, will require +expertise in modern data engineering, including the following areas:

+
    +
  • Geospatial data formats and metadata standards, including modern cloud-optimized +formats such as Parquet and Zarr

  • +
  • Geospatial data catalogs and APIs

  • +
  • Cloud object storage

  • +
  • Cloud automation and data pipelines

  • +
  • Distributed computing frameworks for data science (e.g. Dask, Prefect, Apache Beam)

  • +
  • GitHub workflows

  • +
  • Continuous integration and agile development

  • +
  • Track record of contribution to multi-stakeholder open-source software

  • +
+

Possible contractors who fit this role:

+ +
+
+

DevOps for Cloud Hub

+

Developing and operating the LEAP-Pangeo JupyterHub will require the following expertise:

+
    +
  • Strong experience with Docker and containerization of workflows

  • +
  • Deploying cloud-native applications (particularly JupyterHub) +using Kubernetes and Helm

  • +
  • Continuous deployment using GitHub workflows

  • +
  • Monitoring and optimizing cloud costs in multi-user JupyterHub environments

  • +
  • Building machine-learning environments for Python and R users with tools such as +Conda, Conda Forge, and repo2docker.

  • +
  • Continuous integration and agile development

  • +
  • Track record of contribution to multi-stakeholder open-source software

  • +
+

Possible contractors who fit this role:

+ +
+
+

Full-Stack Web Development

+

Developing the LEAP Knowledge Graph, including the library of papers, open-source code +and machine-learning models, will require a mix of skills commonly referred to as +“full-stack web development”.

+
    +
  • Front-end web development using HTML, CSS, and modern Javascript frameworks (e.g. React, Vue, etc.)

  • +
  • Development and deployment of REST API endpoints for backend services

  • +
  • Consumption of data from third-party APIs (e.g. GitHub API)

  • +
  • Familiarity with Jupyter Notebook format

  • +
  • Continuous integration and agile development

  • +
  • Track record of contribution to multi-stakeholder open-source software

  • +
+
+

Education and Training

+
+

Decision Needed

+

What is the scope of LEAP-Pangeo training? How much should we expect trainees to learn? +What is the intersection with other educational activities, including for-credit courses?

+
+

Training participants in using LEAP-Pangeo will require expertise in research computing pedagogy +and state-of-the-art knowledge of best practices in scientific computing, machine learning, +and cloud computing.

+
+
+
+

Contractors vs. Employees

+ + + + + + + + + + + + + + + + + +

Pros

Cons

Employees

Longer-term commitment to project. Better integration with on-campus activities.

Slow hiring. Recruiting challenges. Uncertainty they can deliver needed results.

Contractors

Can spin up rapidly. Proven track records. Connection to broader ecosystems. Don’t have to deal with hiring. Acccess to top technical talent.

Potentially less integrated into project.

+
+
+
+

Timeline

+

What follows is a possible timeline for implementation.

+
+

Fall 2021

+
+

Activities

+
    +
  • 📍 Deploy generic Pangeo JupyterHub on Google Cloud using supported credits.

  • +
  • 📍 Provide basic end-user documentation for using the Hub +(comparable to Pangeo Cloud docs).

  • +
+
+
+

Milestones

+
    +
  • ✅ LEAP members log into the hub and run their first code against existing cloud data.

  • +
+
+
+
+

Spring 2021

+
+

Activities

+
    +
  • 📍 Conduct data survey to assess data needs of research, education, and outreach activities.

  • +
  • 📍 Data engineers work with researchers on data ingestion.

  • +
  • 📍 Refine Hub environment based on initial feedback.

  • +
+
+
+

Milestones

+
    +
  • ✅ LEAP researchers ingest first datasets into cloud data library.

  • +
  • ✅ LEAP seminar uses LEAP-Pangeo data science environments for teaching.

  • +
+
+
+
+

Summer 2021

+
+

Activities

+
    +
  • 📍 Launch initial data catalog

  • +
  • 📍 Begin training program

  • +
+
+
+

Milestones

+
    +
  • ✅ Perform first LEAP-Pangeo training for participations

  • +
  • ✅ LEAP REU interns successfully use LEAP-Pangeo for projects.

  • +
  • ✅ First LEAP publications are added to the knowledge graph, along with supporting data and code

  • +
+
+
+
+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/leap-pangeo/jupyterhub.html b/_preview/88/leap-pangeo/jupyterhub.html new file mode 100644 index 0000000..34ad27a --- /dev/null +++ b/_preview/88/leap-pangeo/jupyterhub.html @@ -0,0 +1,995 @@ + + + + + + + + LEAP-Pangeo JupyterHub — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + +
+
+ + + +
+ +
+

LEAP-Pangeo JupyterHub

+

Our team has a cloud-based JupyterHub. +For information who can access the hub with which privileges, please refer to +Users and Categories

+ + + + + + + + + + + + + + + + + + + + +

Hub Address

https://leap.2i2c.cloud/

Hub Location

Google Cloud us-central1

Hub Operator

2i2c

Hub Configuration

https://github.com/2i2c-org/infrastructure/tree/master/config/clusters/leap

+
+

Getting Started

+

To get started using the hub, check out this video by James Munroe from 2i2c explaining the architecture.

+ +
+
+

Getting Help

+

For questions about how to use the Hub, please use the LEAP-Pangeo discussion forum:

+ +
+

Office Hours

+

We also offer in-person and virtual Office Hours on Thursdays for questions about LEAP-Pangeo. +You can reserve an appointment here.

+
+
+
+

Hub Usage

+

This is a rough and ready guide to using the Hub. +This documentation will be expanded as we learn and evolve. +Feel free to edit it yourself if you have suggetions for improvement!

+
+

Logging In

+
    +
  1. 👀 Navigate to https://leap.2i2c.cloud/ and click the big orange button that says “Log in to continue”

  2. +
  3. 🔐 You will be prompted to authorize a GitHub application. Say “yes” to everything. +Note you must belong to the appropriate GitHub team in order to access the hub. +See Users and Categories for more information.

  4. +
  5. 📠 You will redirect to a screen with the following options.

  6. +
+image +
+

Note: Depending on your membership you might see additional options (e.g. for GPU machines)

+
+

You have to make 3 choices here:

+
    +
  • The machine type (Choose between “CPU only” or “GPU” if available) +⚠️The GPU images should be used only when needed to accelerate model training.

  • +
  • The software environment (“Image”). Find more info in the Software Environment Section below.

  • +
  • The node share. These are shared resources, and you should try to use the smallest image you need. You can easily start up a new server with a larger share if you find your work to be limited by CPU/RAM

  • +
+
    +
  1. 🕥 Wait for your server to start up. It can take up to few minutes.

  2. +
+
+
+

Using JupyterLab

+

After your server fires up, you will be dropped into a JupyterLab environment.

+

If you are new to JupyterLab, you might want to peruse the user guide.

+
+
+

Shutting Down Your Server

+

Your server will shut down automatically after a period of inactivity. +However, if you know you are done working, it’s best to shut it down directly. +To shut it down, go to https://leap.2i2c.cloud/hub/home and click the big red button that says “Stop My Server”

+image +

You can also navigate to this page from JupyterLab by clicking the File menu and going to Hub Control Panel.

+
+
+

The Software Environment

+

The software environment you encounter on the Hub is based upon docker images which you can run on other machines (like your laptop or an HPC cluster) for better reproducibility.

+

Upon start up you can choose between

+
    +
  • A list of preselected images

  • +
  • The option of passing a custom docker image via the "Other..." option.

  • +
+
+

Preselected Images

+

LEAP-Pangeo uses several full-featured, up-to-date Python environments maintained by Pangeo. You can read all about them at the following URL:

+ +

There are separate images for pytorch and tensorflow which are available in a drop-down panel when starting up your server. +The Hub contains a specific version of the image which can be found here.

+

For example, at the time of writing, the version of pangeo-notebook is 2022.05.10. +A complete list of all packages installed in this environment is located at:

+ +
+

Attention

+

We regularly update the version of the images provided in the drop-down menu.

+

To ensure full reproducibility you should save the full info of the image you worked with (this is stored in the environment variable JUPYTER_IMAGE_SPEC) with your work. You can then use that string with the custom images to reproduce your work with exactly the same environment.

+
+
+
+

Custom Images

+

If you select the Image > Other... Option during server login you can paste an arbitrary reference in the form of docker_registry/organization/image_name:image_version. As an example we can get the 2023.05.08 version of the pangeo tensorflow notebook by pasting quay.io/pangeo/ml-notebook:2023.05.08.

+

If you want to build your own docker image for your project, take a look at this template and the instructions to learn how to use repo2docker to set up CI workflows to automatically build docker images from your repository.

+
+
+

Installing additonal packages

+

You can install additional packages using pip and conda. +However, these will disappear when your server shuts down.

+

For a more permanent solution we recommend building project specific dockerfiles and using those as custom images.

+
+
+
+

Files and Data

+

Data and files work differently in the cloud. +To help onboard you to this new way of working, we have written a guide to Files and Data in the Cloud:

+ +

We recommend you read this thoroughly, especially the part about Git and GitHub.

+
+

Warning

+

Please do not store large files in your user directory /home/jovyan. Your home directory is intended only for notebooks, analysis scripts, and small datasets (< 1 GB). It is not an appropriate place to store large datasets.

+
+
+

LEAP-Pangeo Buckets

+

LEAP-Pangeo provides users two cloud buckets to store data

+
    +
  • gs://leap-scratch/ - Temporary Storage deleted after 7 days. Use this bucket for testing and storing large intermediate results. More info

  • +
  • gs://leap-persistent - Persistent Storage. Use this bucket for storing results you want to share with other members.

  • +
  • gs://leap-persistent-ro - Persistent Storage with read-only access for most users. To upload data to this bucket you need to use this method below.

  • +
+

Files stored on each of those buckets can be accessed by any LEAP member, so be concious in the way you use these.

+
    +
  • Do not put sensitive information (passwords, keys, personal data) into these buckets!

  • +
  • When writing to buckets only ever write to your personal folder! Your personal folder is a combination of the bucketname and your github username (e.g. `gs://leap-persistent/funky-user/’).

  • +
+
+
+

Inspecting contents of the bucket

+

We recommend using gcsfs or fsspec which provide a filesytem-like interface for python.

+

You can e.g. list the contents of your personal folder with

+
import gcsfs
+fs = gcsfs.GCSFileSystem() # equivalent to fsspec.fs('gs')
+fs.ls('leap-persistent/funky-user')
+
+
+
+
+

Basic writing to and reading from cloud buckets

+

We do not recommend uploading large files (e.g. netcdf) directly to the bucket. Instead we recommend to write data as ARCO (Analysis-Ready Cloud-Optimized) formats like zarr(for n-dimensional arrays) and parquet(for tabular data) (read more here why we recommend ARCO formats).

+

If you work with xarray Datasets switching the storage format is as easy as swapping out a single line when reading/writing data:

+

Xarray provides a method to stream results of a computation to zarr

+
ds = ...
+ds_processed = ds.mean(...).resample(...)
+user_path = "gs://leap-scratch/funky-user" # 👀 make sure to prepend `gs://` to the path or xarray will interpret this as a local path
+store_name = "processed_store.zarr"
+ds_processed.to_zarr(f'{user_path}/{store_name}')
+
+
+

This will write a zarr store to the scratch bucket.

+

You can read it back into an xarray dataset with this snippet:

+
import xarray as xr
+ds = xr.open_dataset('gs://leap-scratch/funky-user/processed_store.zarr', engine='zarr', chunks={}) #
+
+
+

… and you can give this to any other registered LEAP user and they can load it exactly like you can!

+

You can also write other files directly to the bucket by using fsspec.open similarly to the python builtin open

+
with fsspec.open('gs://leap-scratch/funky-user/test.txt', mode='w') as f:
+    f.write('hello world')
+
+
+
+
+

Deleting from cloud buckets

+
+

Warning

+

Depending on which cloud bucket you are working, make sure to double check which files you are deleting by inspecting the contents and only working in a subdirectory with your username (e.g. gs://<leap-bucket>/<your-username>/some/project/structure.

+
+

You can remove single files by using a gcsfs/fsspec filessytem as above

+
import gcsfs
+fs = gcsfs.GCSFileSystem() # equivalent to fsspec.fs('gs')
+fs.rm('leap-persistent/funky-user/file_to_delete.nc')
+
+
+

If you want to remove zarr stores (which are an ‘exploded’ data format, and thus represented by a folder structure) you have to recursively delete the store.

+
+

Warning

+

The warning from above is even more important here! Make sure that the folder you are deleting does not contain any data you do not want to delete!

+
+
fs.rm('leap-scratch/funky-user/processed_store.zarr', recursive=True)
+
+
+
+
+

I have a dataset and want to work with it on the hub. How do I upload it?

+

If you would like to add a new dataset to the LEAP Data Library, please first raise an issue here. This enables us to track detailed information about proposed datasets and have an open discussion about how to upload it to the cloud.

+

We distinguish between two primary types of data to upload: “Original” and “Published” data.

+
    +
  • Published Data has been published and archived in a publically accessible location (e.g. a data repository like zenodo or figshare). We do not recommend uploading this data to the cloud directly, but instead use Pangeo Forge to transform and upload it to the cloud. This ensures that the data is stored in an ARCO format and can be easily accessed by other LEAP members.

  • +
  • Original Data is any dataset that is produced by researchers at LEAP and has not been published yet. The main use case for this data is to share it with other LEAP members and collaborate on it. For original data we support direct uploaded to the cloud. Be aware that original data could change rapidly as the data producer is iterating on their code. We encourage all datasets to be archived and published before using them in scientific publications.

  • +
+
+
Transform and Upload published data to an ARCO format (with Pangeo Forge)
+

Coming Soon

+
+
+
Upload medium sized original data from your local machine
+

For medium sized datasets, that can be uploaded within an hour, you can use a temporary access token generated on the JupyterHub to upload data to the cloud.

+
    +
  • Set up a new environment on your local machine (e.g. laptop)

  • +
+
mamba env create --name leap_pange_transfer python=3.9 google-auth gcsfs jupyterlab xarray zarr dask #add any other dependencies (e.g. netcdf4) that you need to read your data
+
+
+
    +
  • Activate the environment

  • +
+
conda activate leap_pange_transfer
+
+
+

and set up a jupyter notbook (or a pure python script) that loads your data in as few xarray datasets as possible. For instance, if you have one dataset that consists of many files split in time, you should set your notebook up to read all the files using xarray into a single dataset, and then try to write out a small part of the dataset to a zarr store.

+
    +
  • Now start up a LEAP-Pangeo server and open a terminal. Install the Google Cloud SDK using mamba

  • +
+
mamba install google-cloud-sdk
+
+
+

Now you can generate a temporary token (valid for 1 hour) that allows you to upload data to the cloud.

+
gcloud auth print-access-token
+
+
+

Copy the resulting token into a plain text file token.txt in a convenient location on your local machine.

+
    +
  • Now start a JupyterLab notebook and paste the following code into a cell:

  • +
+
import gcsfs
+import xarray as xr
+from google.cloud import storage
+from google.oauth2.credentials import Credentials
+
+# import an access token
+# - option 1: read an access token from a file
+with open("path/to/your/token.txt") as f:
+    access_token = f.read().strip()
+
+# setup a storage client using credentials
+credentials = Credentials(access_token)
+fs = gcsfs.GCSFileSystem(token=credentials)
+
+
+
+

Make sure to replace the path/to/your/token.txt with the actual path to your token file.

+
+

Try to write a small dataset to the cloud:

+
ds = xr.DataArray([1]).to_dataset(name='test')
+ds.to_zarr('gs://leap-scratch/<your_username>/test_offsite_upload.zarr') #adding the 'gs://' prefix makes this just work with xarray!
+
+
+
+

Replace <your_username> with your actual username on the hub.

+
+
    +
  • Make sure that you can read the test dataset from within the hub (go back to Basic writing to and reading from cloud buckets).

  • +
  • Now the last step is to paste the code to load your actual dataset into the notebook and use .to_zarr to upload it.

  • +
+
+

Make sure to give the store a meaningful name, and raise an issue in the data-management repo to get the dataset added to the LEAP Data Library.

+
+
+

Make sure to use a different bucket than leap-scratch, since that will be deleted every 7 days! For more info refer to the available storage buckets.

+
+
+
+
Uploading large original data from an HPC system (no browser access on the system available)
+

A commong scenario is the following: A researcher/student has run a simulation on a High Performance Computer (HPC) at their institution, but now wants to collaboratively work on the analysis or train a machine learning model with this data. For this they need to upload it to the cloud storage.

+

The following steps will guide you through the steps needed to authenticate and upload data to the cloud, but might have to be slightly modified depending on the actual setup of the users HPC.

+

Conversion Script/Notebook

+

In most cases you do not just want to upload the data in its current form (e.g. many netcdf files).

+ +

Instead we will load the data into an xarray.Dataset and then write that Dataset object directly to a zarr store in the cloud. For this you need a python environment with xarray, gcsfs, zarr installed (you might need additional dependencies for your particular use case).

+
    +
  1. Spend some time to set up a python script/jupyter notebook on the HPC system that opens your files and combines them in to one or more xarray.Datasets (combine as many files as sensible into a single dataset). Make sure that your data is lazily loaded and the Dataset.data is a dask array

  2. +
  3. Check your dataset:

    +
      +
    • Check that the metadata is correct.

    • +
    • Check that all the variables/dimensions are in the dataset

    • +
    • Check the dask chunksize. A general rule is to aim for around 100MB size, but the size and structure of chunking that is optimal depends heavily on the later use case.

    • +
    + +
  4. +
  5. Try to write out a subset of the data locally by calling the .to_zarr method on the dataset.

  6. +
+ +

Once that works we can move on to the authentication.

+

Upload Prerequisites

+

Before we are able to set up authentication we need to make sure our HPC and local computer (required) are set up correctly.

+ +

Steps +Steps executed on your ”local” computer (e.g. laptop) will be colored in green and steps on your ”remote” computer (e.g. HPC) in purple.

+
    +
  1. SSH into the HPC

  2. +
  3. Check that you have an internet connection with ping www.google.com

  4. +
  5. Request no browser authentication:

    +
    gcloud auth application-default login --scopes=https://www.googleapis.com/auth/devstorage.read_write,https://www.googleapis.com/auth/iam.test --no-browser
    +
    +
    +
    +

    🚨 It is very important to include the --scopes= argument for security reasons. Do not run this command without it!

    +
    +
  6. +
  7. Follow the onscreen prompt and paste the command into a terminal on your local machine.

  8. +
  9. This will open a browser window. Authenticate with the gmail account that was added to the google group.

  10. +
  11. Go back to the terminal and follow the onscreen instructions. Copy the text from the command line and paste the command in the open dialog on the remote machine.

  12. +
  13. Make sure to note the path to the auth json! It will be something like .../.config/gcloud/....json.

  14. +
+

Now you are have everything you need to authenticate.

+

Lets verify that you can write a small dummy dataset to the cloud. In your notebook/script run the following (make sure to replace the filename and your username as instructed).

+

Your dataset should now be available for all LEAP members 🎉🚀

+
import xarray as xr
+import gcsfs
+import json
+
+with open("your_auth_file.json") as f: #🚨 make sure to enter the `.json` file from step 7
+	token=json.load(f)
+
+# test write a small dummy xarray dataset to zarr
+ds = xr.DataArray([1, 4, 6]).to_dataset(name='data') 
+# Once you have confirmed 
+
+fs = gcsfs.GCSFileSystem(token=token)
+mapper = fs.get_mapper("gs://leap-persistent/<username>/testing/demo_write_from_remote.zarr") #🚨 enter your leap (github) username here
+ds.to_zarr(mapper)
+
+
+

Now you can repeat the same steps but replace your dataset with the full dataset from above and leave your python code running until the upload has finished. Depending on the internet connection speed and the size of the full dataset, this can take a while.

+

If you want to see a progress bar, you can wrap the call to .to_zarr with a dask progress bar

+
from dask.diagnostics import ProgressBar
+with ProgressBar():
+   ds.to_zarr(mapper)
+
+
+

Once the data has been uploaded, make sure to erase the .../.config/gcloud/....json file from step 7, and ask to be removed from the Google Group.

+
+
+
+
+

Dask

+

To help you scale up calculations using a cluster, the Hub is configured with Dask Gateway. +For a quick guide on how to start a Dask Cluster, consult this page from the Pangeo docs:

+ +
+
+

GPUs

+

Tier2 and Tier3 members (see Users and Categories) have access to a ‘Large’ Server instance with GPU. Currently the GPUs are Nvidia T4 models. To check what GPU is available on your server you can use nvidia-smi in the terminal window. You should get output similar to this:

+
   nvidia-smi
+   
+   +-----------------------------------------------------------------------------+
+   | NVIDIA-SMI 510.47.03    Driver Version: 510.47.03    CUDA Version: 11.6     |
+   |-------------------------------+----------------------+----------------------+
+   | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
+   | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
+   |                               |                      |               MIG M. |
+   |===============================+======================+======================|
+   |   0  Tesla T4            Off  | 00000000:00:04.0 Off |                    0 |
+   | N/A   41C    P8    11W /  70W |      0MiB / 15360MiB |      0%      Default |
+   |                               |                      |                  N/A |
+   +-------------------------------+----------------------+----------------------+
+
+
+
+
+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/leap-pangeo/solutions.html b/_preview/88/leap-pangeo/solutions.html new file mode 100644 index 0000000..f079df7 --- /dev/null +++ b/_preview/88/leap-pangeo/solutions.html @@ -0,0 +1,434 @@ + + + + + + + + Common Problems (with Solutions) — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+ Contents +
+ +
+
+
+
+
+ +
+

Common Problems (with Solutions)

+ +
+
+ +
+

Contents

+
+ +
+
+
+ +
+ +
+

Common Problems (with Solutions)

+
+

Dask

+
+

“Killed Workers”

+

The “Killed Worker” message in dask can result due to a variety of reasons. Here are some of the common reasons why you might see such an error message

+
+

Datasets Chunks too large

+

Issue +The default dask worker configuration can deal well with dataset chunk sizes of ~100MB. If the chunks of your data are significantly larger, your worker might crash just upon loading a few of these chunks into memory.

+

Solution +You can change the configuration of your dask workers and increase the memory each worker has to deal with larger chunks. You can adjust the memory by passing additional options to the dask-gatway cluster upon creation:

+
from dask_gateway import Gateway
+gateway = Gateway()
+options = gateway.cluster_options()
+
+options.worker_memory = 10  # 10 GB of memory per worker.
+
+# Create a cluster with those options
+cluster = gateway.new_cluster(options)
+cluster.scale(...)
+client = cluster.get_client()
+
+
+ +

Example with Solution

+
+
+
+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/objects.inv b/_preview/88/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..5a1f3314933daa522dc3bab9285acc37a380e8be GIT binary patch literal 1043 zcmV+u1nm1GAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkVd30!R zZVDqHR%LQ?X>V>iAPOTORA^-&a%F8{X>Md?av*PJAarPHb0B7EY-J#6b0A}HZE$jB zb8}^6Aa!$TZf78RY-wUH3V7O`R>6|nHVnP%D>$<`BnR5lt1q2ochhydnelY9)1!x` zV2N3Z(2$f>-|`{t&*e)Bl9Ek1_IA7{i2&XM2!I5Im9_F9eP@A}N>o-f%=vPm#RfFv zzc3A=<*hIk;9O+Zv)VWM<{f*y|G46-sAsjRYOY~N$lR0-#DzrTh4j%ui89a+qR7T> z2mP}fO=qR>VlA<0I}htd7*TM76G*(fF@2z$F9)kTf{+T&VMC32cfoEV0vqg}>U)ZJzgQn}c4@&&xR+#27ycJILw zAZ3PrQV~XE9^|JaJJM_A{2RCd#9vb%EAlq2%9ksuZ5*+2o#2gIvS=Er$&qy-JLj=^134d%x9PJCvXorf)(-4KBW2+_;)LW0`G{2&lDag7 zGTvf-W}@JD-q=@=wNa9CeuuIPTTDmp=!8%1z^g9R-xJA0x0zg|Gxj-@w)Vbti+R4E z(0o))iq*{&&c`UoA#W}06!g~x@FXpOaW(qXO+!GBVsk!*8QN-Iycp~?lvF9Y?%VqM zLBjqR8Q5=up|}LfEAuMxbc!_*!^)vl)%CgeJ6zBWzl82KHovaj!(Y^$>8M_;vCfmICDvF#kMPq)R2QUv1E^A@w>TOXgsc2?O zEMXm2`#e+U^kbq*V5=xNvc%`eD=e8lvBY=ADT^{&E1b7o%))DYXD!FqLazGBM@KiC zTU*rN&N65E#P=Ko=}9C!R5ViPa?Q&AKmD-U` + + + + + + Code Policy — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+
+ +
+

Code Policy

+ +
+
+ +
+
+
+ +
+ +
+

Code Policy

+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/policies/data_policy.html b/_preview/88/policies/data_policy.html new file mode 100644 index 0000000..8a042e5 --- /dev/null +++ b/_preview/88/policies/data_policy.html @@ -0,0 +1,352 @@ + + + + + + + + Data Policy — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+
+ +
+

Data Policy

+ +
+
+ +
+
+
+ +
+ +
+

Data Policy

+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/policies/infrastructure_policy.html b/_preview/88/policies/infrastructure_policy.html new file mode 100644 index 0000000..200c00b --- /dev/null +++ b/_preview/88/policies/infrastructure_policy.html @@ -0,0 +1,352 @@ + + + + + + + + Infrastructure Policy — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+
+ +
+

Infrastructure Policy

+ +
+
+ +
+
+
+ +
+ +
+

Infrastructure Policy

+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/policies/users_roles.html b/_preview/88/policies/users_roles.html new file mode 100644 index 0000000..7b9325c --- /dev/null +++ b/_preview/88/policies/users_roles.html @@ -0,0 +1,678 @@ + + + + + + + + Users and Categories — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + +
+
+ + + +
+ +
+

Users and Categories

+

Version 2 - 2022-10-25

+

Access to the LEAP-Pangeo Hub will depend on the LEAP Membership Structure (see links in this document to apply for membership). +Membership in a particular tier will be implemented via +GitHub Teams +in the leap-stc GitHub organization.

+

Here we define those roles and map them to GitHub teams.

+
+

Warning

+

We have discovered a technical issue which affects some of the policies here. +It turns out that GitHub sub-teams don’t appear as part of parent teams. +This means that the strategies described here for using sub-teams don’t quite work. +The issue is being tracked by 2i2c in https://github.com/2i2c-org/infrastructure/issues/1311.

+

The short term resolution is to manually add users to both the parent team and sub-team. +This is annoying, and we hope to have a better solution soon.

+
+
+

Code of Conduct

+

All users of LEAP-Pangeo must abide by the LEAP Code of Conduct:

+ +
+

Note

+

The LEAP executive committee has not yet defined a process by which membership status is conferred and removed. +Once this is decided, we will provide instructions on how to add / remove affiliates.

+
+
+
+

Tier 1 Members

+

Tier 1 members have access to storage and computing resource up to 4 cores and 32GB RAM on JupyterHub servers +in the LEAP-Pangeo Hub.

+

Tier 1 membership is granted by adding the user to the leap-pangeo-base-access GitHub Team.

+
+
+

Tier 2 Members

+

Tier 2 members involved in LEAP research and community, have access to all computing resources and storage on LEAPangeo. In addition to the CPU computing resources, Tier 2 members get GPU access.

+

Tier 2 membership is granted by adding the user to the leap-pangeo-full-access GitHub Team.

+

Tier 2 membership requires an application reviewed by LEAP’s Convergence Subcommittee. Application Form

+

Tier 2 membership also provides swipe access at Innovation Hub (for Columbia affiliates). Members can apply to attend LEAP’s Annual Meeting and to be part of focus groups.

+
+
+

Tier 3 Members

+

Tier 3 membership is reserved for individuals supported by LEAP funding as a Request for Proposal (RFP) PI, Co-PI, researcher, student, or postdoc.

+

Tier 3 members currently have identical access to LEAP pangeo computing resources and storage as Tier 2 members.

+

Tier 3 membership is granted by adding the user to the leap-pangeo-full-access GitHub Team.

+
+
+

Education Category

+

The education category is intended for termed access to LEAP-Pangeo Hub resources associated +with educational activities. Examples of educational activities include:

+
    +
  • Semester-long LEAP-affiliated courses

  • +
  • Short bootcamps and hackathons

  • +
+

Members of the Community Category may access to Small, Medium, and Large JupyterHub servers +in the LEAP-Pangeo Hub.

+

Membership in the Community Category is granted by adding the user to the +leap-pangeo-education +GitHub Team. +Additional sub-teams will be created within this team to organize students into +specific courses, bootcamps, etc.

+
+

Eligibility

+

Course instructors who meet one of the following criteria are eligible to request +access for their class (including self, co-instructor(s), TAs, students, evaluators, etc):

+
    +
  • LEAP senior personnel or advanced research member

  • +
  • Full-time faculty at LEAP Institution (Columbia, NYU, UMN, UCI)

  • +
  • Full-time faculty who participated in a LEAP’s “train the trainer” workshop

  • +
+
+
+

Proposal Process

+

Course instructors may propose to the LEAP-Pangeo Hub for their upcoming course by submitting +a short proposal to the LEAP’s Convergence Subcommittee. +Instructors are required to submit their proposal at least 30 days before the participants will require. +The proposal should provide the following information.

+
    +
  • Instructor’s GitHub username

  • +
  • Basic information about the course (institution, department/program, student population, class size, course dates)

  • +
  • Basic information about the Instructor (name, affiliation, research interests)

  • +
  • Confirmation of available administrative support for using the LEAP-Pangeo Hub for the class (setting up user account, monitoring use, etc)

  • +
  • Anticipated usage level of LEAP-Pangeo Hub, including

    +
      +
    • Number of user hours / week

    • +
    • Types of virtual machines to be used (Small, Medium, or Large)

    • +
    +
  • +
+ +

Once the proposal is approved, a LEAP administrator will create a GitHub sub-team +within the leap-pangeo-education +team for the course and add the instructor as a “Maintainer”. +It is the instructor’s responsibility to add the course’s users to this team +and remove them when the course has been concluded.

+
+
+

“Where is my invite?”

+

Please check your email account (the one you used to sign up for Github - this is independent of the email you use for LEAP) for an invite that will look similar to this:

+LEAPPangeo email invite +

Click the link and accept all invites.

+

Alternatively you can log into your github account, and should see a notification in the top right menu under the “Organizations” tab.

+LEAPPangeo gh invite +

You can follow that and accept the invitation there aswell.

+LEAPPangeo gh invite2 +
+
+
+

Research Category

+

The education category is intended for long-term access to LEAP-Pangeo resources associated +with research activities.

+

There are two levels to the Research Category:

+
    +
  • Entry-level: involved in LEAP research and community, have access to computing resources and storage on LEAPangeo. +Members of this Community Tier may access Large JupyterHub servers +Office Space. Admission based on paragraph sent to Office Space committee. +Membership in the entry-level research category corresponds to the +leap-pangeo-research-entry-level +GitHub team.

  • +
  • Advanced: RFP or supported researcher, student, postdoc, invited to annual meeting, swipe access for LEAP. +Members of this Community Tier may access Large and Huge JupyterHub servers, plus GPU access. +Membership in the entry-level research category corresponds to the +leap-pangeo-research-advanced +GitHub team.

  • +
+
+

Eligibility

+

Anyone participating in a LEAP-sponsored research project is eligible to participate +in the Research Category. +A LEAP administrator will create a GitHub sub-team within the +leap-pangeo-research +team for each research project and add the project PIs as “maintainer”. +It is the PIs’ responsibility to add and remove members from their team.

+
+
+
+

Administrator and Developer Category

+

The LEAP Director of Data and Computing or the LEAP Manager of Data and Computing may grant access to other participants for +the purposes of technical development, debugging, and evaluation of the platform. These members will be added to the leap-pangeo-full-access team to have full access to all resources.

+
+
+

Termination of Access

+

Users who violate usage policies will have their access suspended pending investigation. +The LEAP Director of Data and Computing decides if a policy has been violated and +may suspend or terminate access to LEAP-Pangeo at any time.

+
+
+

Offboarding Process

+

Users may also be transferred from e.g. the Education Category to the Community Category +when their termed access ends. +Removing a user from the corresponding team is sufficient to disable their access +to those resources. +Removing a user from the leap-pangeo-users group entirely will disable their access +completely. +An automated process will delete user data from the hub one month after a user +is removed from the leap-pangeo-users group.

+
+
+

How can I get access to the Hub

+
+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/references.html b/_preview/88/references.html new file mode 100644 index 0000000..3e61d69 --- /dev/null +++ b/_preview/88/references.html @@ -0,0 +1,362 @@ + + + + + + + + References — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+
+ +
+

References

+ +
+
+ +
+
+
+ +
+ +
+

References

+
+
+
AAB+21
+

Ryan P. Abernathey, Tom Augspurger, Anderson Banihirwe, Charles C. Blackmon-Luca, Timothy J. Crone, Chelle L. Gentemann, Joseph J. Hamman, Naomi Henderson, Chiara Lepore, Theo A. McCaie, Niall H. Robinson, and Richard P. Signell. Cloud-native repositories for big scientific data. Computing in Science Engineering, 23(2):26–35, 2021. doi:10.1109/MCSE.2021.3059437.

+
+
GHA+21
+

C. L. Gentemann, C. Holdgraf, R. Abernathey, D. Crichton, J. Colliander, E. J. Kearns, Y. Panda, and R. P. Signell. Science storms the cloud. AGU Advances, 2(2):e2020AV000354, 2021. e2020AV000354 2020AV000354. URL: https://agupubs.onlinelibrary.wiley.com/doi/abs/10.1029/2020AV000354, arXiv:https://agupubs.onlinelibrary.wiley.com/doi/pdf/10.1029/2020AV000354, doi:https://doi.org/10.1029/2020AV000354.

+
+
+
+
+ + + + +
+ + + + + +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/search.html b/_preview/88/search.html new file mode 100644 index 0000000..e85e999 --- /dev/null +++ b/_preview/88/search.html @@ -0,0 +1,332 @@ + + + + + + + + Search — Technical Documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ +
+
+ +
+ + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
+
+ +
+

+ +
+
+ +
+
+
+ +
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + + +
+ +
+ + +
+ + + +
+
+ +
+
+
+

+ + By LEAP Community
+ + © Copyright 2021.
+

+
+
+ + +
+
+ + + + + \ No newline at end of file diff --git a/_preview/88/searchindex.js b/_preview/88/searchindex.js new file mode 100644 index 0000000..1891fdf --- /dev/null +++ b/_preview/88/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["contact","guides/education","how_to_cite","intro","leap-pangeo/architecture","leap-pangeo/implementation","leap-pangeo/jupyterhub","leap-pangeo/solutions","policies/code_policy","policies/data_policy","policies/infrastructure_policy","policies/users_roles","references"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,"sphinxcontrib.bibtex":9,sphinx:56},filenames:["contact.md","guides/education.md","how_to_cite.md","intro.md","leap-pangeo/architecture.md","leap-pangeo/implementation.md","leap-pangeo/jupyterhub.md","leap-pangeo/solutions.md","policies/code_policy.md","policies/data_policy.md","policies/infrastructure_policy.md","policies/users_roles.md","references.md"],objects:{},objnames:{},objtypes:{},terms:{"0":6,"00":6,"00000000":6,"03":6,"04":6,"05":6,"08":6,"0mib":6,"1":6,"10":[6,7,11,12],"100mb":[6,7],"1029":12,"11":6,"1109":12,"11w":6,"1311":11,"15360mib":6,"1ee":11,"2":12,"2019625":2,"2020av000354":12,"2021":[4,12],"2022":[6,11],"2023":6,"21":12,"23":12,"25":11,"26":12,"2i2c":[5,6,11],"3":6,"30":11,"3059437":12,"32gb":11,"35":12,"4":[6,11],"41c":6,"47":6,"510":6,"6":6,"7":6,"70w":6,"84":5,"9":6,"case":[4,6],"class":[4,11],"default":[6,7],"do":[1,4],"import":[6,7],"long":11,"new":[4,6],"public":[4,5,6],"short":11,"switch":6,"true":6,"try":[1,6],"while":6,A:[4,6,11,12],As:6,Be:6,By:4,For:6,If:[1,2,6,7],In:[4,11],It:[4,6,11],Of:4,The:[5,7,11],There:[4,6,11],These:[4,6,11],To:[4,6],aab:12,ab:12,abernathei:[4,12],abid:11,abl:6,about:[4,6,11],abov:[4,6],acccess:5,acceler:[4,6],accept:11,access:[1,4],access_token:6,accommod:4,accord:5,account:[6,11],acknowledg:2,action:4,activ:[6,11],actual:[4,6],ad:[5,6,11],adapt:4,add:[6,11],addit:[4,6,7,11],address:6,adjust:7,admiss:11,advanc:[4,11,12],affect:11,affili:11,after:[6,11],again:1,against:5,agil:[4,5],agu:12,agupub:12,ahead:1,aim:6,al:4,algorithm:4,all:[2,3,4,6,11],allow:[4,6],along:5,alreadi:4,also:[4,6,11],altern:11,amazon:4,ambiti:4,an:[4,5,7,11],analysi:[2,4,6],analyt:4,analyz:4,anderson:12,ani:[2,4,6,11],annoi:11,annual:11,anticip:[4,11],anyon:11,apach:5,api:5,appear:11,appli:11,applic:[4,5,6,11],appoint:6,appropri:[1,6],approv:11,ar:[1,4,5,6,7,11],arbitrari:6,architectur:[3,5,6],archiv:6,arco:4,area:5,argument:[4,6],around:[4,6],arrai:6,art:5,artifici:2,arxiv:12,ask:[1,6],aspect:4,assess:5,asset:4,associ:11,aswel:11,attend:11,augment:4,augspurg:12,auth:6,authent:6,author:6,autom:[5,11],automat:[4,6],avail:11,aw:4,awar:6,award:2,ayrsf_k5ep8gb:11,azavea:5,azur:4,back:[4,6],backend:5,banihirw:12,bar:6,base:[4,5,6,11],basic:[4,5,11],beam:5,becaus:4,becom:4,been:[4,6,11],befor:[1,6,11],begin:5,behind:4,being:11,belong:6,below:[5,6],benefici:4,best:[4,5,6],better:[5,6,11],between:[4,6],big:[4,6,12],black:4,blackmon:12,blob:6,bootcamp:11,both:[4,6,11],box:4,broad:4,broader:[4,5],brows:4,browser:[1,4],bu:6,bucketnam:6,build:[4,5,6],built:4,builtin:6,buseck:0,busi:4,button:6,c:12,cach:1,calcul:6,call:6,campu:5,can:[0,4,5,6,7],cannot:[1,4],cap:6,capabl:4,catalog:5,categori:[1,3,4,6],cell:6,center:2,central1:6,central:4,cf:4,challeng:[4,5],chang:[6,7],charl:12,chart:4,check:[1,6,11],chell:12,chiara:12,choic:6,choos:6,chunk:6,chunksiz:6,ci:6,citat:2,cite:3,classroom:4,clearli:4,click:[6,11],client:[6,7],climat:4,cloud:[4,12],cluster:[6,7],cluster_opt:7,cmip6:4,co:11,code:[3,4,5,6],colab:4,collabor:[4,6],collect:4,colliand:12,color:6,columbia:[4,5,11],com:[4,6,11,12],combin:[4,6],come:[1,6],command:6,commerci:4,commit:[4,5],committe:11,common:3,commong:6,commonli:5,commun:[4,11],compar:5,complet:[4,6,11],compon:4,comput:[1,2,4,5,6,11,12],con:5,conciou:6,conclud:11,concurr:4,conda:[5,6],conduct:5,confer:11,config:6,configur:[6,7],confirm:[6,11],connect:[5,6],consist:6,consult:6,consumpt:5,contact:[3,6],contain:6,container:5,content:4,continu:[4,5,6],contribut:[4,5],contributor:3,control:[4,6],conveni:6,convent:4,converg:11,convers:6,copi:6,core:11,correct:6,correctli:6,correspond:11,cost:[4,5],could:6,cours:[5,11],coursework:4,cover:4,cpu:[4,6,11],crash:7,crawl:4,creat:[4,6,7,11],creation:7,credenti:6,credit:5,crichton:12,criteria:11,crone:12,crowdsourc:4,css:5,cuda:6,curat:4,current:[6,11],custom:4,d:[11,12],dai:[6,11],dask:[4,5],dask_gatewai:7,data:[1,3,7,11,12],dataarrai:6,dataset:[2,4,5],date:[6,11],deal:[5,7],debug:11,decid:11,decis:4,dedic:4,defin:[4,11],degrad:4,delet:11,deliv:5,demo_write_from_remot:6,depart:11,depend:[4,6,11],deploi:[4,5],deploy:[3,4,5],deposit:4,describ:[4,11],detail:6,develop:[2,4],devstorag:6,diagnost:6,diagram:4,dialog:6,did:1,differ:[1,4,5,6],dimens:6,dimension:6,direct:[1,4,6],directli:[4,6],director:11,directori:6,disabl:11,disappear:6,discov:11,discuss:6,disp:6,displai:4,distinguish:6,distribut:[4,5],doc:[4,5,6,11],docker:[4,5,6],docker_registri:6,dockerfil:6,document:[1,4,5,6,11],doe:6,doi:[2,12],domain:4,don:[5,11],done:6,doubl:6,download:4,driven:4,driver:6,drop:6,ds:6,ds_process:6,due:[4,7],dummi:6,dure:6,dynam:4,e2020av000354:12,e:[4,5,6,11,12],each:[2,6,7,11],earth:[2,4,5],earthcub:4,earthwork:4,easi:[4,6],easili:[4,6],ecc:6,ecosystem:[4,5],eddi:4,edit:6,educ:[3,4],effect:4,effort:4,element:[4,5],email:11,emerg:4,empow:4,enabl:[4,6],encount:6,encourag:6,end:[4,5,11],endpoint:5,engag:4,engin:[4,6,12],enhanc:4,ensur:[1,2,6],enter:6,enterpris:4,entir:[4,11],entri:11,enumer:[4,5],env:6,environ:[4,5],environment:4,equival:6,eras:6,error:7,especi:6,essenti:2,establish:4,et:4,etc:[4,5,11],etl:4,evalu:11,even:6,eventu:4,ever:6,everi:[4,6],everyon:1,everyth:6,evolv:[4,6],exactli:6,exampl:[4,6,7,11],execut:[4,6,11],exist:[4,5],expand:6,expect:5,experi:[4,5],expertis:5,explain:6,explod:6,extract:4,f:6,facilit:4,faculti:11,familiar:5,fan:6,featur:[4,6],feedback:5,feel:6,few:[6,7],figshar:6,figur:4,file_to_delet:6,filenam:6,filessytem:6,filesystem:6,filesytem:6,find:6,finish:6,fire:6,first:[5,6],fit:5,flow:4,focu:11,focus:4,folder:6,follow:[1,2,4,5,6,11],forg:5,form:[6,11],format:[4,5],forum:6,forward:4,found:6,foundat:4,four:4,framework:5,free:[4,6],freeli:4,from:[4,5,7,11],front:[4,5],fs:6,fsspec:6,full:[1,4,6,11],fund:[4,11],fundament:4,funki:6,g:[4,5,6,11],gatewai:[4,6,7],gatwai:7,gb:[6,7],gcloud:6,gcp:4,gcsf:6,gcsfilesystem:6,gener:[4,5,6],gentemann:[4,12],geoscienc:4,geospati:[4,5],get_client:7,get_mapp:6,gha:12,git:6,github:[1,4,5,6,11],give:6,gmail:6,go:[4,6],goal:4,good:4,googl:[4,5,6,11],googleapi:6,gpu:[4,11],gradual:5,grant:11,graph:5,grassroot:4,great:4,green:6,group:[6,11],gs:6,guid:[1,6],guidlin:2,h:12,ha:[1,4,6,7,11],hackathon:11,hamman:12,hand:4,have:[4,5,11],heavili:[4,6],hello:6,helm:5,help:4,henderson:12,here:[1,6,7,11],high:[4,6],highli:4,hire:5,histori:4,holdgraf:12,home:[3,6],hope:11,host:4,hour:11,how:[3,4,5],howev:[4,6],hpc:4,html:[5,6],http:[4,6,11,12],hub:1,huge:11,human:4,hundr:4,i:4,iam:6,id:6,ident:[4,11],illustr:4,imag:4,image_nam:6,image_vers:6,imagin:4,impact:4,implement:[3,11],improv:6,inact:6,includ:[2,4,5,6,11],increas:7,independ:11,index:4,individu:[2,11],industri:4,infer:4,info:6,inform:[4,6,11],infrastructur:[3,4,5,6,11],ingest:5,initi:[4,5],innov:11,inspir:4,instanc:[4,6],instant:4,instead:6,institut:[4,6,11],instruct:[6,11],instructor:11,integr:[4,5],intellig:2,intend:[6,11],intens:4,interact:4,interest:11,interfac:[4,6],intermedi:6,intern:5,internet:[4,6],interoper:4,interpret:6,intersect:5,investig:11,invit:1,involv:11,io:[4,6],iri:4,isn:4,issu:[6,7,11],iter:6,its:[4,6],j:12,jame:6,javascript:5,joseph:12,jovyan:6,json:6,julia:4,juliu:0,jupyt:[4,5,6],jupyter_image_spec:6,jupyterhub:[2,3,4,5,11],jupyterlab:4,just:[4,6,7],justif:4,kearn:12,kei:[4,6],know:6,knowledg:5,kubernet:5,l:12,lab:4,laid:4,languag:4,laptop:6,larg:[4,11],larger:[6,7],last:6,later:6,launch:[4,5],lazili:6,leap:11,leap_pange_transf:6,leapangeo:11,learn:[2,4,5,6],learner:4,least:11,leav:6,lepor:12,less:5,let:6,level:[4,11],librari:[5,6],lifetim:4,like:[4,6],limit:6,line:6,link:[4,11],list:6,load:[4,6,7],locat:6,log:[5,11],login:6,longer:5,look:[4,6,11],loos:4,ls:6,luca:12,m:6,machin:[4,5,11],mai:[4,11],main:[4,6],maintain:[5,6,11],mainten:4,make:[4,6],mamba:6,manag:[1,4,6,11],mani:[4,6],manual:11,map:11,mapper:6,master:6,maximum:4,mccaie:12,mcse:12,mean:[6,11],meaning:6,medium:11,meet:11,member:[4,5,6],membership:[1,6,11],memori:[6,7],mention:4,menu:[6,11],messag:7,metadata:[4,5,6],method:6,microsoft:4,mig:6,might:[6,7],minut:6,mix:5,ml:[4,6],mlhub:4,mode:[4,6],model:[4,5,6],modern:5,modifi:6,modul:4,modular:4,monitor:[4,5,11],month:11,more:[4,6],most:[4,6],mostli:4,move:6,much:5,multi:[4,5],munro:6,must:[4,6,11],mutual:4,my:6,n8hmqm_lvw:11,n:6,name:[6,11],naomi:12,nativ:[5,12],navig:6,nc:6,ncar:4,nearli:4,need:[4,6],netcdf4:6,netcdf:6,network:4,new_clust:7,niall:12,noaa:4,node:6,notbook:6,note:6,notebook:[4,5,6],notif:11,novel:4,now:6,nsf:[2,4],number:[4,11],nvidia:6,nyu:11,oauth2:6,object:[4,5,6],observ:4,obtain:4,ocean:4,off:6,offer:6,offic:11,oisst:4,onboard:6,onc:[4,6,11],one:[6,11],onli:6,onlin:4,onlinelibrari:12,onscreen:6,open:[4,5,6],open_dataset:6,oper:[4,5,6],opt:4,optim:[4,5,6],option:[6,7],orang:6,order:[4,6],org:[4,6,11,12],organ:[4,6,11],orient:4,other:[4,5,6,11],our:[4,5,6],out:[1,4,6,11],outdat:4,output:[4,6],outreach:5,over:4,own:6,p8:6,p:12,packag:4,page:6,panda:12,panel:6,pangeo:11,paper:[2,4,5],paragraph:11,parallel:[4,5],parameter:4,parent:11,parquet:[5,6],part:[1,4,6,11],parti:5,particip:[4,5,11],particular:[6,11],particularli:5,partner:4,pass:[6,7],password:6,past:6,path:6,pdf:12,pedagogi:5,peer:4,pend:11,per:7,perf:6,perform:[2,4,5,6],period:6,perman:6,persist:6,person:6,personnel:11,perus:6,physic:2,pi:11,piec:4,ping:6,pip:6,pipelin:[4,5],place:[4,6],plain:6,plan:[3,4],planetari:4,platform:11,pleas:[1,2,6,11],plu:11,pod:4,point:4,polici:[4,11],popul:[4,11],possibl:[4,5,6],postdoc:11,potenti:5,power:4,practic:[4,5],prefect:5,prefix:6,prepend:6,prerequisit:6,pretti:4,primari:[4,6],primarili:4,print:6,privileg:6,pro:5,problem:[3,4],process:4,processed_stor:6,produc:[4,6],product:4,program:[4,5,11],progress:[4,6],progressbar:6,project:[4,5,6,11],prompt:6,properli:2,propos:[4,6],proven:5,provid:[2,4,5,6,11],proxim:4,publicli:4,publish:4,pure:6,purpl:6,purpos:11,put:6,pwr:6,python:[4,5,6],pytorch:6,quai:6,qualiti:4,quansight:5,question:[5,6],quick:6,quickli:4,quit:11,r:[4,5,12],radiant:[4,5],rais:6,ram:[4,6,11],rapidli:[5,6],rather:4,raw:4,reach:1,react:5,read_writ:6,readi:[4,6],readthedoc:4,reason:[6,7],receiv:1,recent:4,recip:4,recogn:2,recommend:6,record:[4,5],recruit:5,recurs:6,red:6,redirect:6,refer:[3,4,5,6],refin:5,refresh:1,region:4,regist:6,regularli:6,relat:3,relationship:4,relev:4,remix:4,remot:6,remov:[6,11],repeat:6,replac:6,repo2dock:[5,6],repo:6,repositori:[4,6,12],repres:6,reproduc:6,request:[6,11],requir:[4,5,6,11],resampl:6,research:[4,5,6],reserv:[6,11],resolut:[4,11],resourc:[2,4,6,11],respons:11,rest:5,restart:1,result:[4,5,6,7],resus:4,reu:5,reus:4,reusabl:4,reveal:4,review:[4,11],rfp:11,rich:4,richard:12,right:[6,11],rm:6,ro:6,robinson:12,role:11,rough:6,rule:6,run:[4,5,6],ryan:12,s3:4,s:[4,6,11],sai:6,sake:4,same:[4,6],satellit:4,save:6,scale:[4,6,7],scenario:6,scienc:[2,4,5,12],scientif:[4,5,6,12],scientist:4,scope:[5,6],scratch:6,screen:6,screenshot:4,script:[4,6],sdk:6,sea:4,seamless:4,search:4,section:[2,6],secur:6,see:[6,7,11],seed:5,select:6,self:11,semest:11,seminar:5,senior:11,sensibl:6,sensit:6,sent:11,separ:[4,6],serv:4,server:[4,11],servic:5,set:[4,6,11],setup:6,sever:[4,6],share:[4,6],should:[1,5,6,11],sign:11,signel:12,significantli:7,similar:[2,6,11],similarli:6,simpl:4,simul:[4,6],simultan:4,sinc:6,singl:[4,6],size:[7,11],skill:5,slack:0,slightli:6,slow:5,small:[6,11],smaller:4,smallest:6,smi:6,snippet:6,so:[4,6],softwar:[4,5],solut:[3,6,11],some:[6,7,11],someth:6,somewhat:4,soon:[1,6,11],sourc:[4,5],space:[4,11],spatiotempor:4,specif:[4,6,11],specifi:4,speed:6,spend:6,spin:5,split:6,sponsor:[4,11],ssh:6,stac:4,stakehold:5,standalon:4,standard:[4,5],start:[1,4],state:[4,5],statement:2,statu:[3,11],stc:[2,6,11],step:[1,6],stop:6,storag:[2,5,6,11],store:[4,6],store_nam:6,storm:12,strategi:[4,11],stream:6,string:6,strip:6,strong:[4,5],structur:[6,11],student:[6,11],studio:4,stuff:4,style:4,sub:11,subcommitte:11,subcontract:5,subdirectori:6,submit:11,subset:6,successfulli:[4,5],suffici:11,sugget:6,summar:4,support:[4,5,6,11],sure:6,surfac:4,survei:5,suspend:11,sustain:4,swap:6,swipe:11,synergist:4,synthes:4,system:4,t4:6,t:[4,5,11],ta:11,tab:11,tabular:6,take:[2,6],talent:5,teach:[4,5],team:[1,4,6,11],technic:[5,11],technolog:[2,4],temp:6,temperatur:4,templat:6,temporari:6,tensorflow:6,terabyt:4,term:[5,11],termin:6,tesla:6,test:[4,6],test_offsite_upload:6,text:[4,6],than:[4,6],thei:[1,4,5,6],them:[1,4,6,11],theo:12,thi:[1,2,3,4,5,6,11],third:5,thoroughli:6,those:[6,7,11],through:[4,6],throughput:4,thu:6,thursdai:6,tier2:6,tier3:6,time:[2,6,11],timothi:12,to_dataset:6,to_zarr:6,togeth:5,token:6,tom:12,tool:5,top:[5,11],track:[4,5,6,11],tradit:4,train:[4,6,11],traine:5,trainer:11,transfer:[4,11],transform:4,transit:4,tree:6,turn:11,two:[4,6,11],txt:6,type:[4,6,11],u3uzykhjbzmvywu:11,uci:11,umn:11,uncertainti:5,uncorr:6,under:11,underli:4,understand:4,uniform:4,until:6,up:[4,5,6,11],upcom:11,updat:[3,4,6],upon:[6,7],upstream:4,uptak:4,url:[6,12],us:[2,3,4,5,11],usag:11,user:[1,3,4,5,6],user_path:6,usernam:[6,11],util:6,valid:6,variabl:6,varieti:7,veri:[4,6],verifi:6,version:[6,11],via:[5,6,11],video:6,view:4,violat:11,virtual:[6,11],volatil:6,volum:4,vue:5,w:6,wa:[4,6],wai:[4,5,6],wait:6,want:1,warn:6,we:[2,4,5,6,11],web:[4,6],websit:3,week:11,well:[4,7],what:[4,5,6],when:[4,6,11],whether:5,which:[4,6,11],who:[5,6,11],whom:5,why:[6,7],wilei:12,window:6,within:[4,6,11],without:6,work:[1,2,4,5,11],worker_memori:7,workflow:[4,5,6],workshop:[4,11],world:[4,6],would:6,wrap:6,written:6,www:6,xarrai:[4,6],xr:6,y:12,ye:6,yet:[6,11],you:[0,1,2,6,7,11],your:[1,7,11],your_auth_fil:6,your_usernam:6,yourself:6,zarr:[4,5,6],zenodo:6},titles:["Contact Us","LEAP-Pangeo for Education","How to cite LEAP-Pangeo","LEAP Technical Documentation","LEAP-Pangeo Architecture","LEAP-Pangeo Implementation Plan","LEAP-Pangeo JupyterHub","Common Problems (with Solutions)","Code Policy","Data Policy","Infrastructure Policy","Users and Categories","References"],titleterms:{"1":11,"2":11,"2021":5,"3":11,"class":1,"do":6,"public":2,In:6,The:[4,6],access:[6,11],activ:5,add:2,additon:6,administr:11,an:6,architectur:4,arco:6,avail:6,basic:6,browser:6,bucket:6,can:11,catalog:4,categori:11,chunk:7,cite:2,cloud:[5,6],code:[8,11],common:7,comput:0,conduct:11,contact:0,content:[3,6],contractor:5,custom:6,dashboard:3,dask:[6,7],data:[0,2,4,5,6,9],dataset:[6,7],decis:5,delet:6,design:4,develop:[5,11],devop:5,document:3,don:2,down:6,educ:[1,5,11],elig:11,employe:5,engin:5,environ:6,fall:5,file:6,forg:[4,6],forget:2,format:6,from:6,full:5,get:[6,11],gpu:6,graph:4,guid:3,have:6,help:6,hour:6,how:[1,2,6,11],hpc:6,hub:[4,5,6,11],i:[6,11],imag:6,implement:5,infrastructur:10,inspect:6,instal:6,invit:11,jupyterhub:[1,6],jupyterlab:6,kill:7,knowledg:4,larg:[6,7],leap:[1,2,3,4,5,6],librari:4,local:6,log:6,machin:6,manag:0,medium:6,member:11,mileston:5,miscellan:3,motiv:4,my:11,need:5,offboard:11,offic:6,open:2,origin:6,our:2,packag:[2,6],pangeo:[1,2,3,4,5,6],plan:5,platform:[2,4],polici:[3,8,9,10],preselect:6,principl:4,problem:7,process:11,propos:11,publish:6,read:6,refer:12,relat:4,research:11,role:5,run:1,server:6,servic:4,shut:6,sign:1,size:6,softwar:6,solut:7,sourc:2,spring:5,stack:5,start:6,storag:4,student:1,summer:5,system:6,t:2,technic:3,termin:11,tier:11,timelin:5,too:7,tool:4,tracker:2,train:5,transform:6,troubleshoot:1,up:1,upload:6,us:[0,6],usag:6,user:11,vs:5,want:6,web:5,where:11,work:6,worker:7,write:6,your:[2,6]}}) \ No newline at end of file