From 0cf2d6685a14cc4e33823ad53ec242d2d339ad86 Mon Sep 17 00:00:00 2001 From: YONGHUNI Date: Mon, 14 Oct 2024 16:52:56 +0900 Subject: [PATCH] Flushed Quarto Freeze --- .../index/execute-results/html.json | 21 - .../index/figure-html/unnamed-chunk-4-1.png | Bin 30249 -> 0 bytes .../index/figure-html/unnamed-chunk-5-1.png | Bin 29644 -> 0 bytes .../index/execute-results/html.json | 21 - .../index/figure-html/unnamed-chunk-11-3.png | Bin 47933 -> 0 bytes .../index/figure-html/unnamed-chunk-12-5.png | Bin 36716 -> 0 bytes .../index/figure-html/unnamed-chunk-9-1.png | Bin 102354 -> 0 bytes .../Proj4Leaflet-1.0.1/proj4leaflet.js | 272 - .../clipboard-0.0.1/setClipboardText.js | 51 - _freeze/site_libs/clipboard/clipboard.min.js | 7 - .../site_libs/htmltools-fill-0.5.8.1/fill.css | 21 - .../htmlwidgets-1.6.4/htmlwidgets.js | 901 -- .../site_libs/jquery-3.6.0/jquery-3.6.0.js | 10881 ---------------- .../jquery-3.6.0/jquery-3.6.0.min.js | 2 - .../jquery-3.6.0/jquery-3.6.0.min.map | 1 - .../leaflet-1.3.1/images/layers-2x.png | Bin 1259 -> 0 bytes .../site_libs/leaflet-1.3.1/images/layers.png | Bin 696 -> 0 bytes .../leaflet-1.3.1/images/marker-icon-2x.png | Bin 2464 -> 0 bytes .../leaflet-1.3.1/images/marker-icon.png | Bin 1466 -> 0 bytes .../leaflet-1.3.1/images/marker-shadow.png | Bin 618 -> 0 bytes _freeze/site_libs/leaflet-1.3.1/leaflet.css | 636 - _freeze/site_libs/leaflet-1.3.1/leaflet.js | 5 - .../leaflet-binding-2.2.2/leaflet.js | 2787 ---- .../leaflet-providers_2.0.0.js | 1178 -- .../leaflet-providers-plugin.js | 3 - .../site_libs/leafletfix-1.0.0/leafletfix.css | 36 - _freeze/site_libs/proj4-2.6.2/proj4.min.js | 1 - _freeze/site_libs/quarto-listing/list.min.js | 2 - .../quarto-listing/quarto-listing.js | 243 - .../rstudio_leaflet-1.3.1/images/1px.png | Bin 68 -> 0 bytes .../rstudio_leaflet-1.3.1/rstudio_leaflet.css | 41 - 31 files changed, 17110 deletions(-) delete mode 100644 _freeze/posts/envsetting/index/execute-results/html.json delete mode 100644 _freeze/posts/envsetting/index/figure-html/unnamed-chunk-4-1.png delete mode 100644 _freeze/posts/envsetting/index/figure-html/unnamed-chunk-5-1.png delete mode 100644 _freeze/posts/pyenvsetting/index/execute-results/html.json delete mode 100644 _freeze/posts/pyenvsetting/index/figure-html/unnamed-chunk-11-3.png delete mode 100644 _freeze/posts/pyenvsetting/index/figure-html/unnamed-chunk-12-5.png delete mode 100644 _freeze/posts/pyenvsetting/index/figure-html/unnamed-chunk-9-1.png delete mode 100644 _freeze/site_libs/Proj4Leaflet-1.0.1/proj4leaflet.js delete mode 100644 _freeze/site_libs/clipboard-0.0.1/setClipboardText.js delete mode 100644 _freeze/site_libs/clipboard/clipboard.min.js delete mode 100644 _freeze/site_libs/htmltools-fill-0.5.8.1/fill.css delete mode 100644 _freeze/site_libs/htmlwidgets-1.6.4/htmlwidgets.js delete mode 100644 _freeze/site_libs/jquery-3.6.0/jquery-3.6.0.js delete mode 100644 _freeze/site_libs/jquery-3.6.0/jquery-3.6.0.min.js delete mode 100644 _freeze/site_libs/jquery-3.6.0/jquery-3.6.0.min.map delete mode 100644 _freeze/site_libs/leaflet-1.3.1/images/layers-2x.png delete mode 100644 _freeze/site_libs/leaflet-1.3.1/images/layers.png delete mode 100644 _freeze/site_libs/leaflet-1.3.1/images/marker-icon-2x.png delete mode 100644 _freeze/site_libs/leaflet-1.3.1/images/marker-icon.png delete mode 100644 _freeze/site_libs/leaflet-1.3.1/images/marker-shadow.png delete mode 100644 _freeze/site_libs/leaflet-1.3.1/leaflet.css delete mode 100644 _freeze/site_libs/leaflet-1.3.1/leaflet.js delete mode 100644 _freeze/site_libs/leaflet-binding-2.2.2/leaflet.js delete mode 100644 _freeze/site_libs/leaflet-providers-2.0.0/leaflet-providers_2.0.0.js delete mode 100644 _freeze/site_libs/leaflet-providers-plugin-2.2.2/leaflet-providers-plugin.js delete mode 100644 _freeze/site_libs/leafletfix-1.0.0/leafletfix.css delete mode 100644 _freeze/site_libs/proj4-2.6.2/proj4.min.js delete mode 100644 _freeze/site_libs/quarto-listing/list.min.js delete mode 100644 _freeze/site_libs/quarto-listing/quarto-listing.js delete mode 100644 _freeze/site_libs/rstudio_leaflet-1.3.1/images/1px.png delete mode 100644 _freeze/site_libs/rstudio_leaflet-1.3.1/rstudio_leaflet.css diff --git a/_freeze/posts/envsetting/index/execute-results/html.json b/_freeze/posts/envsetting/index/execute-results/html.json deleted file mode 100644 index fa01bfb..0000000 --- a/_freeze/posts/envsetting/index/execute-results/html.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "hash": "ceae2a3734480a84fa81f1d0868786d5", - "result": { - "engine": "knitr", - "markdown": "---\ntitle: \"R Dependency Test\"\nauthor: \"Yonghun Suh\"\ndate: \"Oct 7, 2024\"\ncategories: [Code]\nimage: https://posit.co/wp-content/uploads/2023/07/MY-COPY-Backgrounds.png\n#comments: false\n---\n\n\n\n\nThis is the first post in a Quarto blog. Welcome!\n\n![](https://posit.co/wp-content/uploads/2023/07/MY-COPY-Backgrounds.png)\n\n\\\n\\\n\nSee: `https://github.com/quarto-dev/quarto-actions/blob/main/examples/example-03-dependencies.md`\n\n\\\n\\\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(yaml)\nlibrary(tidyverse)\nlibrary(data.table)\nlibrary(sf)\nlibrary(terra)\nlibrary(tmap)\nlibrary(leafem)\n```\n:::\n\n\n\n\n# Tidyverse\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nread_csv(\"./data/SVI_2000_US.csv\")\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nRows: 65081 Columns: 82\n── Column specification ────────────────────────────────────────────────────────\nDelimiter: \",\"\nchr (9): STATE_FIPS, CNTY_FIPS, STCOFIPS, TRACT, FIPS, STATE_NAME, STATE_AB...\ndbl (73): G1V1R, G1V2R, G1V3R, G1V4R, G2V1R, G2V2R, G2V3R, G2V4R, G3V1R, G3V...\n\nℹ Use `spec()` to retrieve the full column specification for this data.\nℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.\n```\n\n\n:::\n\n::: {.cell-output .cell-output-stdout}\n\n```\n# A tibble: 65,081 × 82\n STATE_FIPS CNTY_FIPS STCOFIPS TRACT FIPS STATE_NAME STATE_ABBR COUNTY G1V1R\n \n 1 01 001 01001 0201… 0100… Alabama AL Autau… 0.127 \n 2 01 001 01001 0202… 0100… Alabama AL Autau… 0.227 \n 3 01 001 01001 0203… 0100… Alabama AL Autau… 0.0766\n 4 01 001 01001 0204… 0100… Alabama AL Autau… 0.0454\n 5 01 001 01001 0205… 0100… Alabama AL Autau… 0.0367\n 6 01 001 01001 0206… 0100… Alabama AL Autau… 0.152 \n 7 01 001 01001 0207… 0100… Alabama AL Autau… 0.11 \n 8 01 001 01001 0208… 0100… Alabama AL Autau… 0.0844\n 9 01 001 01001 0209… 0100… Alabama AL Autau… 0.138 \n10 01 001 01001 0210… 0100… Alabama AL Autau… 0.176 \n# ℹ 65,071 more rows\n# ℹ 73 more variables: G1V2R , G1V3R , G1V4R , G2V1R ,\n# G2V2R , G2V3R , G2V4R , G3V1R , G3V2R ,\n# G4V1R , G4V2R , G4V3R , G4V4R , G4V5R ,\n# USG1V1P , USG1V2P , USG1V3P , USG1V4P , USG1TP ,\n# USG2V1P , USG2V2P , USG2V3P , USG2V4P , USG2TP ,\n# USG3V1P , USG3V2P , USG3TP , USG4V1P , USG4V2P , …\n```\n\n\n:::\n:::\n\n\n\n\n# data.table\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nfread(\"./data/SVI_2000_US.csv\") |> head()\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n STATE_FIPS CNTY_FIPS STCOFIPS TRACT FIPS STATE_NAME STATE_ABBR COUNTY\n \n1: 1 1 1001 20100 1001020100 Alabama AL Autauga\n2: 1 1 1001 20200 1001020200 Alabama AL Autauga\n3: 1 1 1001 20300 1001020300 Alabama AL Autauga\n4: 1 1 1001 20400 1001020400 Alabama AL Autauga\n5: 1 1 1001 20500 1001020500 Alabama AL Autauga\n6: 1 1 1001 20600 1001020600 Alabama AL Autauga\n G1V1R G1V2R G1V3R G1V4R G2V1R G2V2R G2V3R G2V4R G3V1R G3V2R G4V1R\n \n1: 0.1268 0.0527 17771 0.1841 0.0782 0.2783 0.2032 0.1018 0.0447 0.0000 0.0000\n2: 0.2270 0.0997 14217 0.3249 0.1215 0.2735 0.3466 0.1176 0.6691 0.0045 0.0092\n3: 0.0766 0.0288 18346 0.1699 0.1338 0.2890 0.1902 0.1130 0.1794 0.0056 0.0317\n4: 0.0454 0.0351 19741 0.1341 0.1510 0.2500 0.1842 0.0560 0.0621 0.0000 0.0310\n5: 0.0367 0.0166 24510 0.0863 0.0682 0.3079 0.1193 0.0654 0.1121 0.0059 0.0246\n6: 0.1521 0.0550 16395 0.2386 0.0938 0.3034 0.2214 0.1101 0.2078 0.0185 0.0000\n G4V2R G4V3R G4V4R G4V5R USG1V1P USG1V2P USG1V3P USG1V4P USG1TP USG2V1P\n \n1: 0.2075 0.0090 0.0409 0.0389 0.604 0.541 0.566 0.518 0.591 0.214\n2: 0.0198 0.0544 0.0705 0.0140 0.829 0.837 0.790 0.814 0.904 0.495\n3: 0.0143 0.0141 0.0582 0.0270 0.390 0.211 0.533 0.473 0.367 0.580\n4: 0.0492 0.0181 0.0301 0.0040 0.209 0.306 0.452 0.355 0.264 0.687\n5: 0.0070 0.0182 0.0241 0.0000 0.153 0.061 0.258 0.194 0.067 0.162\n6: 0.3373 0.0182 0.0571 0.0000 0.682 0.566 0.658 0.659 0.706 0.306\n USG2V2P USG2V3P USG2V4P USG2TP USG3V1P USG3V2P USG3TP USG4V1P USG4V2P\n \n1: 0.675 0.547 0.754 0.609 0.169 0.000 0.000 0.000 0.872\n2: 0.641 0.971 0.850 0.935 0.828 0.061 0.375 0.332 0.592\n3: 0.739 0.473 0.820 0.818 0.488 0.072 0.142 0.477 0.571\n4: 0.456 0.439 0.315 0.440 0.233 0.000 0.002 0.474 0.662\n5: 0.829 0.119 0.421 0.236 0.370 0.081 0.078 0.441 0.512\n6: 0.811 0.644 0.811 0.802 0.527 0.289 0.344 0.000 0.954\n USG4V3P USG4V4P USG4V5P USG4TP USTP USG1V1F USG1V2F USG1V3F USG1V4F USG1TF\n \n1: 0.048 0.316 0.945 0.574 0.450 0 0 0 0 0\n2: 0.421 0.532 0.846 0.782 0.854 0 0 0 0 0\n3: 0.070 0.454 0.879 0.682 0.522 0 0 0 0 0\n4: 0.107 0.215 0.000 0.280 0.183 0 0 0 0 0\n5: 0.109 0.159 0.000 0.206 0.078 0 0 0 0 0\n6: 0.109 0.446 0.000 0.302 0.557 0 0 0 0 0\n USG2V1F USG2V2F USG2V3F USG2V4F USG2TF USG3V1F USG3V2F USG3TF USG4V1F\n \n1: 0 0 0 0 0 0 0 0 0\n2: 0 0 1 0 1 0 0 0 0\n3: 0 0 0 0 0 0 0 0 0\n4: 0 0 0 0 0 0 0 0 0\n5: 0 0 0 0 0 0 0 0 0\n6: 0 0 0 0 0 0 0 0 0\n USG4V2F USG4V3F USG4V4F USG4V5F USG4TF USTF Totpop2000 Totalhu G1V1N G1V2N\n \n1: 0 0 0 1 1 1 1879 742 227 46\n2: 0 0 0 0 0 1 1934 758 433 80\n3: 0 0 0 0 0 0 3339 1263 250 42\n4: 0 0 0 0 0 0 4556 1871 207 77\n5: 0 0 0 0 0 0 6040 2277 222 49\n6: 1 0 0 0 1 1 3378 1352 514 90\n G1V4N G2V1N G2V2N G2V3N G2V4N G3V1N G3V2N G4V1N G4V2N G4V3N G4V4N G4V5N\n \n1: 226 147 523 339 73 84 0 0 154 6 27 73\n2: 376 235 529 603 74 1294 8 7 15 37 48 27\n3: 362 447 965 549 136 599 17 40 18 17 70 90\n4: 412 688 1139 777 98 283 0 58 92 32 53 18\n5: 326 412 1860 644 143 677 33 56 16 40 53 0\n6: 487 317 1025 689 132 702 58 0 456 22 69 0\n Shape Shape.STArea() Shape.STLength()\n \n1: (-86.49001754505039, 32.47712149572407) 0.0009407913 0.15003547\n2: (-86.47336703419953, 32.47430466837865) 0.0003177997 0.09226531\n3: (-86.4602033958281, 32.47548170589444) 0.0005147620 0.10013704\n4: (-86.44371817489963, 32.47198623491002) 0.0006099415 0.11676753\n5: (-86.42267086235849, 32.45886190833748) 0.0011041460 0.16854121\n6: (-86.47834504936274, 32.44206725458296) 0.0007950631 0.16149683\n```\n\n\n:::\n:::\n\n\n\n\n# Simple Features\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nread_sf(\"./data/test.gpkg\") |> st_geometry() |> plot()\n```\n\n::: {.cell-output-display}\n![](index_files/figure-html/unnamed-chunk-4-1.png){width=672}\n:::\n:::\n\n\n\n# Terra\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nvect(\"./data/test.gpkg\") |> plot()\n```\n\n::: {.cell-output-display}\n![](index_files/figure-html/unnamed-chunk-5-1.png){width=672}\n:::\n:::\n\n\n\n\n\n# Themetic Map(tmap) & leafem\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ntmap_mode(\"view\")\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\ntmap mode set to interactive viewing\n```\n\n\n:::\n\n```{.r .cell-code}\npark_list <- read_sf(\"./data/test.gpkg\") %>% \n filter(grepl(\"서울\",소재지지번주소)) %>%\n select(공원명,소재지지번주소)\n\n{\n tm_basemap(c(\"OpenStreetMap.HOT\",\n \"https://mt1.google.com/vt/lyrs=y&hl=en&z={z}&x={x}&y={y}\",\n \"https://mt1.google.com/vt/lyrs=s&hl=en&z={z}&x={x}&y={y}\"),\n group = list(c(\"OpenStreetMap.HOT\",\n \"Google Satellite Imagery w/ label\",\n \"Google Satellite Imagery wo/ label\"))) +\n tm_shape(park_list) + \n tm_dots(size=.1,\n col = \"red\", \n border.col=\"white\",\n border.lwd=3,\n id=\"name\") -> themap\n \n \n \n tmap_leaflet(themap)|>\n addMouseCoordinates()\n \n}\n```\n\n::: {.cell-output-display}\n\n```{=html}\n
\n\n```\n\n:::\n:::\n", - "supporting": [ - "index_files" - ], - "filters": [ - "rmarkdown/pagebreak.lua" - ], - "includes": { - "include-in-header": [ - "\n\n\n\n\n\n\n\n\n\n\n\n\n" - ] - }, - "engineDependencies": {}, - "preserve": {}, - "postProcess": true - } -} \ No newline at end of file diff --git a/_freeze/posts/envsetting/index/figure-html/unnamed-chunk-4-1.png b/_freeze/posts/envsetting/index/figure-html/unnamed-chunk-4-1.png deleted file mode 100644 index d6048e01a0b6f7854f3543dd2d1b9514cdef78ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30249 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 diff --git a/_freeze/posts/envsetting/index/figure-html/unnamed-chunk-5-1.png b/_freeze/posts/envsetting/index/figure-html/unnamed-chunk-5-1.png deleted file mode 100644 index d267b8c315c11c45e7c3f430dce07db2011cb256..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29644 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 themap\n \n \n \n tmap_leaflet(themap)|>\n addMouseCoordinates()\n \n}\n```\n\n::: {.cell-output .cell-output-stderr}\n\n```\nstars object downsampled to 895 by 1118 cells. See tm_shape manual (argument raster.downsample)\n```\n\n\n:::\n\n::: {.cell-output-display}\n\n```{=html}\n
\n\n```\n\n:::\n:::\n\n\n\n### Extra: Compairing with the plot from Korea Meteorological Agency\n\n![](data/RDR_CMI_202208082200.png)\n\n", - "supporting": [ - "index_files" - ], - "filters": [ - "rmarkdown/pagebreak.lua" - ], - "includes": { - "include-in-header": [ - "\n\n\n\n\n\n\n\n\n\n\n\n\n" - ] - }, - "engineDependencies": {}, - "preserve": {}, - "postProcess": true - } -} \ No newline at end of file diff --git a/_freeze/posts/pyenvsetting/index/figure-html/unnamed-chunk-11-3.png b/_freeze/posts/pyenvsetting/index/figure-html/unnamed-chunk-11-3.png deleted file mode 100644 index 8beec884d548e97c41186adbf7178d7ca7e2ab9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47933 zcmeEuc|4Ts-~S+#NDE~Nb+Qy$B2<>Kl(Ng3o$Pz|eXHn*QiCLW$U4Zr4y9;FW63(k zBxD)8VHn%*8sluw@B4e6^ZWm~U+28eoaw%=>$WQlO(u?%a{n?>lUK zeHO%mWu{iQ#(SsmGieJ+X+tyfX=zhg1<`3Uy}3|KZ{r-|*N%VFv&w$bPLM8|7XvtI z@<)hV_32}syN-Rd_f@43PEuc|i@ zC8&_~@;Y2`z0gv@eh`|L<(H$dXqMUd@yLC{9|y0Vt({8i9V)k5!}n_9hMh|EjvuPq zTBu(ew2EEx%h`WsPMY*gSm(EIvnw6K11l?Kt_{md!IJ{!FQ@uK33?Zqy!!MEW+oHO z`(IwTjR*G##3AtyK9e85y#KJw%9jg9W@fLrWtN($7{+qBCs+M3p?f>9>^MHn*(koW znjcPwNDpKrA0|!40Sz&Mc@5bl&P;b_3C1QRCEXQDjN_Ks-55XP?6N1AI*_%3)m)em@a=pMOoR~?(XjAoK_(rhAAp2eLTR=O^Mc2~8eAHQvxRkYWgP*HF{@=YHG>181}VwO zy%Q7GC5aS2D8~jkAR-ws{ms*MVkClFnT?$tx9sTCPe_+}8})v4z+CWh1o0(f z%G{bL1P=k3iau{@^dwkCX_i6+UEfxd zRU}9(UFY&? z@5M%f3hepW>u-%+YbPI;oB;Pf5-hdEnn32%_wDFiZmu^rn4k#_QL7#eD3smXMBzvdI5Lv5zKAWsl{A_8 zj{4`yE`>AV1ERnbELxdG3PWbXS;GC03`x>H#MW&7O7>pulq3YOk`@6m(ZWN3C6X?Y z(!7I@rsGx3gb+$8;~(LT(R5nmKZa06Lzu`Po15<+mEQk2{ifN7x{82CZCNrv0v`SM z_p%9~&zu@`;VPn#bJL>u6U^K__*lpLLa&RqFL9@o2GS@G40Qkc2kv=K&AI=jm---| z;tS%xnDhTvy&E@F{){?_(U8s%>W`4d8PE1 zL98HORMCP<`=2tL6a=V)OSh!w9{r1ZKMv;%{NtsoaE07U-}uDmg`d7_ zQ*Ov=WgXLvjN_AR2(2{g+uKgx)A7Z4Cx*=ChNzq|^?KPeQ^Cv2>(wbfFr5~-&?F38}KgJk(Z@@e>xQ$>40_T)J zaVCA&VP}kMH*3MXuX6OoE=v&}( zs<|4eJyx+Yz@zK($G7${OlP7P+{%)pep%1Cpv76YV;utmj3h@MJVFrrN@hWJiRTWU z)k)W`HIZGMVwj@=Zohv`Ie2;LiiwHc@LT#(wXj#;v{hgC^Qpk_=5?n!$f?!3z1=OITEQ)LJs9Pq#|JOyrEb49RfgW# zh~4uG+Ub{_z$h zu$n}>3H(g&@;aeIxGAV*^=5U`O1nUr4@AW(Ts=FWk^I_WM;$CJEnCohe0;)R6{>z5 zHQ#uMScAJM!$Q^!LiG@fk|VNzrr)XIrqCwtd|iGA8=G5MSy@sIMj1^9rB#@WO*tJh zr0{9b^5-+&Z5+OLV52(=zBtK{amjv;^13=U^Voo(syNitIPOr!;874UNh^>WcpO}| zLvmr~wj?n-FSJWFY49X9rC3>_eaCJ(vaA0!X453x_54Aw2y7=AVN_Ir#YHE0!bX0a< zpB~1eLy))%-ScF%!gKAmgm&GA61%I~G&MEb2I6{u8ejMP6~irgA`QY6NO4dsPQTGo z%ADVMHHWF7M%=qRTZMM*l|(EvDEGX#YQrzbh6c54nf!O@_C23pqZxVgAt@?3Z(~F7 zS;Sd`CVpk&S3B7(^Q}sA+%&?#Jh+m3Cdn?%Ay6$}w7l!uuiDN6%=Y>IUD#DIG0!vs z8Xww&z338`ccBY{nh=vJ_4k&zb`^I>frCeRZz6sBR4}nOeYEGg?E3pyl54=cP%?yz z^evI-=+AE#8VP2~JpfaBbqH3^HMfWF-ex4n=P-_?pV7jO4i1-giQn^eme<@uR+9s^ z=Bvj`gd6eNrU5fK%LBe6?oT*FHY}BUNMKnrl-O%zXy~wY4zgY%JsPyy zNiuL>d`h!x-B!ZxFAWIqw0Z2-I8LJ9NPJg$ezU zH~#Tv@%vWrQI-Tq|MMCEE+}o$NRz%~rFJ_JR5l?ko-&&gac`26x-%7@#CJ@3Z7f-0 zLbm1u)`#q*%upIBBx4*b?s|i$g$$Bv}s6#u->NZ?*V|G*H+o^Y_SeYc15xqt@h*7$)y=fE!`i zduvU*iLx6X7+q&}NoZ+%rK7T;p@`kB;jZ~+yTOG2T2m1-9knSa*8?^u6TK(CoM;61 zv|Ecxg*;ysheAv8^Dim)Fx06#l$TF|!)M`UHtrwrGJ#!{l*~mUk(?#d+ob5a7xK%^ z(Ow!e&aCVd&AhYf)Fk8}VrB(N9UtI=blGwGPn-a6sS4xt`w<@bLmRfT*|5;G7osfW z9Q-qiug-&1eFGMkly>n+<82tXUE%sUQ4X1aipeVgrU8@<%WmTeZ4j6u-RGlV-?+c; z8+fW_YAvBeDcSW;Q6MJ*hNXD^%8;|ZfvI-__e{hYv*~v7cC#D;N8EL*Y2B%bRFneb z5B_Of3|{O_^&QP$4BgujjD-dhy&AlC0C9p{8tI-dX;^s*n@{omd6qOMg#M{+$r(_s z&Pic6HG&#Vgm9nFn17EJM&yMO7I#y@(S~TIZ%^>CKTl6heOAJC?SVy$=i)yZ3=XN= zxxc2S(4$qQrKLHZ6cC7o2(>7kHQ*Z%B;z~>p$_Bt;}5TX(*F8Q=cm zcbpNIMg3Q057M4@kGfGyPn8qrxWwjdulzWyar5tXR^3<@&K>Goo~rr zcLlx0utv6ZK+wp8tY6bSx;09e^$nTwPDKm zwzjq^5#So{jw#?O%|B+=CVbyDQ<2A4l5iD+TENo9^Knm9_K$D4a){Rn0GbV0fA4DObbMh z)Ekv!^Vr?>YBGQE?%g|lIdrR>p*nQViYvOh6brVSuBCKr{r>yBz{N%b7^vt@kT5BZ z(~9pKum!M9=k_gN{S( z-fP*(&CMMT!{_Iw^?({9Ep*qPL=)o7_v&2hW_TO%J*u#5RPcf)@N8Uv>8S%RD&cDq zqvi~I-w(1rC4>g~>Cy=qd^5q^A@D27&Yo}ve zVk*bR=RRGpataAC)6vm^WwU!F_e8#61{H4VQ$d{54I$+>$;rk8d?D4!yQWK$dvk6A z(6oi+r`aFx-`bmX3o`7nXlRApNF3;{f0sU6KZcZZEugv;Y;lyGp7+N%3fBi-05IN(M+C%^389 zD!JI^k9~Dj0xU>|z&zYrpzUByvm{=NonBv2V2rj zMP@O))Guafy&LG5j{X-M1f@TnGbrdO9h<{sqBWs^4tv1IOuy-3i>M+{{r(T00;qZa zksQ)8Gp9dCw`D;}jei^KFCptsLWe=;2L+z(55zTvG%8Fq3s7c+ZkNg~M`=z29=F}L zT(tEIOBSHYe1eMk(u1@~m9W?J3s9RL5N>dEj!0~62`01?J+1TCbSo{zwL?6&61_LMx`jZEA4ygH7h`&5CNo5jo z=?Sz5a3~?FgutZ_wBtWk`ia?|@O2h0l39rhw%d~xsFIB~Pr!{q-c zk{_gzXb9+L9JCuG#~htpjTvxDuev1W`|^&RogLZjNSrt+0pE`0?8D(gqhV|atA*jLt zJjmxu^Lq<&5Y34{>q7uUYVqacZLz8_q5oIP`tx?VSds@H6!*NzowEgn#elP3`gqjz zI<3g>f1urfX;LZQzqVh>TV+Gb_AzSp{ZmYYPB~#qmFYE*=oq>+k)JZjpKGB16H`(RH9aR6Myc@h{9LrI@92YG-QyWZ&*Qa-l@`Yu9HJZVi|DAZ=|civj0mD<`*WMXhTrllbbCT; zXZ8g0151`^p&RnS^G<+Y7zF7?@|Zx}pQY^LxPKaeVibU6GG$K-1X1$u?%Iz_?r?oD zH+Us@M%BE>r5f|@5iKKs9C8})bA7_wABCscu^URaKTHB-z`~txCQJ@(7RRLl1t{f_ zmh6Twl*9&kqCgaQidn`TfPTmz&0irwl&)`w;$~_QRrBc0|AC;kcm_(-`Kf zr>o7R0}GS2(RN7kQsGU21)0CoXK;*p+3-$;uaG6AS_$_`>E5_W2wB1?YFETcMGx1 zkU@6x0c2oVPSGa076hIfXT3By5d!Cj9=T2d2|RnSlhOJz*V!KeE~`|JJV_~gMZtn| z;AOq^X|7DQQ0H(vI_Xk7a%7Ne`aQs>s@_G6eQoOy#3J@SjvMK8v-M^k@Nn+f$%7RC+nV)|F7nSbW;c>vU2a_LrO@O;K3~6 ztf)J!aYZi~;Mp&ZGf@e|-_09!gOXJiGMzK145wie4;7Z}k6TtyMjTbhKTHj=Xd}OA zv&NOm_HU7k;v80rLvpZ(!}Dn|b|!jxBkO+bhtvt@kAqw54@{hINaUEfjWkk~J0sJ3 z%uX@Kj_LOT&NQ}?keE-8{pK7k)78Ss69e=QUbR`{eU;A*j*2aovS5IFP&KO30hYLO)+s#wQ>RPmspyJz=|mQ>JrlD`n;c$nxgC zr&^SX(pz+%yOHz7k zL&)Pi{Av`CX;$*9)GIPwUAXzWCe^co?nW}os^OE~1$L$C@;)%18JQF*-I}vz8P3o1 z(DjhF8?1;J^%FHKd{NOhX199$;t$HBHcSP7%8&co+r03CeldV`f~P>5ho|a${g?{O zWYVtWktPx@VB}T-1jKcg18aJ!FMnU~katVMNi0r$9Jzt8RvhYzV_I(m(s51Lfivpd z^|Svr+)X%2<>zq0r?g z5ClC`4ir|o1M`+0j)>YhDXN4kr2yMzp-HB*!czN7&RaDVAEoLv>OJ#^kV-ZbA3BN) z5J+$vj?`kXe`Of|fox4rts|K>_6e&0L9L9uv;+xwMs_?f$bUxaUF&U!*1OgNs38Fn z;8y$l|E=yQB|Gr{Y%1{?NF{j;Bn7@CS8(y z3yZ33F#{}eQ(%+A82%Gj%0-j0qAlJ-$RD$aoNmcc!P z*jnga-2S$BXSjjV%g0AQ(LAIUh;81Ws+bip-+U@vvb*(8Av2?}xK2g5X}gRh3V?eI zlhob`qugcpk8r=9+x^6~rb#`WzSoFNyvkB?CF~msuBt2DzAY{$cIrvG@!FRQvG)G{ zhA@0H730;%&tdTgxZVRjpYHcF3L!%amiqvqkn{(mXYqssx)9jg%MMpepuuiACC$*8yD5tt{NIq<~F3IKk(@4t=^n`{KCE6nKHn$Tp>Yg-)f) zY9Vodr=&g@^-7+B1nLwF90g>H=$|^=e{F+7+_=s62Z_|R><>b!#A~D1Ey5xckip|1 zvCU=l_4RE8d^avn4MNBs5o48J@3?;Bg!=j+h*$G#42SNCsn1|sEQGq|Il&8l?1PY~@O9{<&u4*6> zod-9UAK}Fu+g5W#rq}p^U+%M0U3k1#&<-fxhn5D#?7rRch#QRiVAYh8bt*0{&iDo= zMC4qIvhKNsmt9B}R+NmJ@%*`Nn?9(#We!Qg_*^@(CS)4n$kb6Cu3BVZTSGv{*HH8`~T&#Y_pM>YFJgt_FNvy%sxU zy!X9a{#=|2=Rs})R9YEZ)^Fh3og+n0R^k1;epzk1PpM^>% zvrw&$kN+zRMY8DTV^`9gkJJBp@#;cOb3F zD);DU%H)9lIhnof)i zod~mg926Oi|CIOK&R*rkxVLcxOlLkZ8f_zY1(BNaB&2Dyf@S=n6gE*ghw1dwM~0ZXmlv&7T|Fh!0!^haP=^;1;SsNkeeK_>h@Eh4O^B8# z3Wc)z43{qNcDu|6m@Q0({$wq8N)P=@i*)etC~FhA0Yx?)-5t#GMRFktez&wswY#F5 zHUeQZg4$SS-RSKR zVt~?`mQ*7oogdMb@{ywCG#!}Lf-x^5RH6bWAQ#6Bd-QD;mymw<9&5zMO3S;Q%qi~n zBOXTeXK3@QwBcNFhfS@J1HQtIzo_hA2*`!v_dI>Ex?u>ft-T9m7ESelr66kY8Arhr z;QDATH)-X-45&TJm;R~}RhaX|3rOqo<#nHNRc%2$K1NNjsG|SVd55o&+Jgnc7yFzb z5NBF42D`=(hpfIf)OdZOLa@q(QPjBbA)KM1EHmNZxzW>ZL7KedRmfyr72Y`a#CPiy z5*2HX-S5&e?@rpIKPU(KLrxNnNCmpkV^Y&e)0%Np4yjAz{(XfRFC#!)k~$W>0KJ2o z8!Asu8%Oe`e+LBWF^(JACPKL_PZ)9QXt#lKlx!eH8ij}-88WPkS^+TVE1v2&SjTZ% z6~@5!JfT8Lp~|eJFS1O2nzBPpi4Nm!j7u&U&bV;l^Ny~I?vXc#B~44Tpu31=8AB(V z7;h+BeOsg^MeqV?M(kE#s3vG`V8EuQrw@S8l4Y0XuN1mO8=3*#9f$T~x06H5C$BFw ztZD##xo9lVtzkKmGZ=q&r<-f%rR>%as;7->@V9+X8rDg_)NcjMfSvuNq{MG=s9HCD z{>qGEb!t0Zp1LG6J??cRs)Hunx%THrl$T0-wkgZ(R?@ z3qAEGa|jx6a!8nCzd^xw_Z#*uZ%fAAj8nQ{BrF-20@vT-%N)G4vt;7TLZGaSc=&PC zKjLU~S;X6q+R9b;97l+w4-Beztv~0+3=Cdik~7~V^`Izg%cc+9mR))Is%^VRct<;E zryjfG+T!x}b|bm7AxeKJWj&xtZSB)3&AIPA;o-N*rM{FPUA)V5)klNE1#SLImzk_P zY=#_jIK3k0sf?{+3Qs;$Kt+z-;i$SWEm`m0+00uuRK$&3Z3u9R<_)>OG_RBImvzgGBRczvrt5P|56A!rz*r+M--TCld@dsE>4=k32`J zyWz(}?qA6Crm*2pWjWXPTZ;2BsVu9LV|E=53ze(JPB~q5Z7lIirvkr4mrrlgFlY__$vtu^ft_V(>-MtJw9FdnHHqD@u+Ye`WBbVW^1h3-zVBcOj`x!6+? zMLF8a0s;b{K^L=P6y6v~E>NnP*KqXKMK6QQ)6#vgj2~MwdMXAV4DfHLMP`A_Vp_Oi zVzBAZ&{~oYp{jB&=kJ);*Ee(j%uF1I?pp0+h2mpLy)*E7Qs3EkQp=QMWr1!1C-P?R zIL~JpSu|)`TlS{Z$`B)~?MAE>`O|~fD>FnnO>~pLJA*Kq3R9-P9<}9P@V?1TvCobv zNFo%&za8TmTe8YYO++s4E-cQwQ+O*>T~ ztCFEQK=pzaR#sMSgdm$MF%TXI`Zl?)_j;>$@q`ibJ0)^>!j3%{>OY{59+7H8RY`W4$C5Kob-KkrWR&A z{A_^5F(3*)kKi&0mw578P_ff~>26`>oj|?9b&BR=VEQh=s-rvf_4t{0Izl&vd6b(r zqMHVfhwx%Rs}Au8E%c%?k!16&3F*DPy~|e?K|G0!_5SshRoV47X^M+oth*(oC^5&| zdMB-E(_L!QFVIkMBSxWf<7bkec3_Z6#Tw>&b%Ux9KIS1RQmfowM7#d{ZNZP-;cd-) zbE4SIZ@yQdP+?^v5-7odH4nh&aZ7GYgUAcZ-bcBUWR$zN&y(XM+kN~q!~*B`-hxS+ z7bYh?R`__Wd!jV-G23m6X1hxA%=pnvFzYBhItj+=yBzG)NcFP6R0?eA@BRsD2xw*sg4GQgyAT!Rb! z&ZtCIt~ge%1j!q}x!K<_6EZm3>+_)Ax5t(1P$j0h>wAmJI4e?2DEs#U*;5JWya^tO z7tb-Y41X>T-JTezTy+ght>2uYq|Z=%a_sW}sjZD6c8BC`Djqvhgn9It&^^$J7dOE# zhfW>;n<%?#BvzV8CQ8m2DGDRMJ?ePiDnEv{vp#xj=$zI)er3zjz=tZRrc%9}sq$wx z?q<$>M6IEJO!}9}{}AeLO~{bQ({wlYMcCdwKKzdHVi;x&vlvo6x|&9~1KY)g?vxNa znzlP$wUL@bNR4B>%0x8iknK>#GwuS};I!MLrm3_*rpRZZk<8JzFo1W5WnZ}ceEOBK z>(KHPkXCjVN!{8eclwJNf8CgwaZns`yk(i6U8)ri*OfdblVz5P+;g2!I20$*@PGpA zLpkP?P?0uJLoG{>Yr8e($)tO;FEd#NRqB4UXt}Xfgo%Z_DptsJUu5u*pJb36$pAv_ z9a1!`C@sw(DSzp^_}n!hxZi;RaE&(x5Qu@0o|g6;wS3TQ2a1jcTRXe8wUSU%NsL$A zKbq|pWY1fKWlKOwKMHAnt`h0luOcz{Gx%XAm8ug@t=2a`B?PQ zv#`X-0$I!mp18m@)87lBIoV`HTCPyMU+K4Fy2d^y7y1fLxm3+=GFGZafc0o;?wkNFnc&Y=@55|x8ui{EDw&=a; z6Tja4%DkDDuj!XKvSzJ`n2^{w_d;ArNoeD0Qj8R$|AMZz%$zfwJiM~F#D0DxS^Wi# zPqM3~1-AW$&|?B&WgWka{dgbab6xIr+))K1x+5_|Z#FEic}xO4DCD@z}^| zd@D(<&IkFO_wxX1o){vr<1AA$w##t16HpNnWH_2SvALoYiFxt1t9>I)O;*^LA4wA) zbCNkcb+^6_U zWHhse~S?zm|c# z`RMtZ>VgiqA&lK?VyhTy$Mldlk`4S);1qf?Yl`(r4pKH#yYcN+S;T2qCB58aJPox^ z+|lm)HND>CUNAt}r7|&az^q&3J|vZk9*uU-!M-Yh`j(5lc*f641#+#2@z0#K^Y%;+ zcuOQ{(~vl+yF9}|LJp?T9_zynLACsyMqeD@2~n=Gd+c>8C=og_C-Z@RHiJMF_YKx3 zZzW{}U zrOuLsE5^9YI@a;p*>7sC>TYh`v0kRJJ*8FRvWHDXSTURo%1>#yDmSk4@wK<@$ez+m zcWD7iL#YcnZ(?lWIErDMHy&0AV;Euj)k*o4f%1MF@{6@-S%d=m#d|9t6tPNXTugo` z$TU8hF8JsU$|+B+vadjw-ImF~M`_?uhS`-ja~J9o=Jy8gok9O*VK)!@ZXiU){i6z7 z_qkzRK%MF0hE_XXBd=I_+zaja!A3f%(Zmp%eNndG$-I%hQv8ndGXr?L*fE8i{y0or z?oiPbpFH+PD*;DUVWda5`i27HNT!=B>>Ad?Z49_1uWa8bFfgSF|Je5sUF<5YY}qo; zk#6jfkk)@^@@Wyjt3cpeVy|DZQD3%>>mBXyXwOFv1h3O056RzVPG=aiyBfur{Imtd zjY@<{{H9FzN`FI^2)_H-{H=K|nhs;QF=WCzXcFZhT`sik z#heng#q$VNnt!8@Fs{6~yi=5LMA1-Fdr-H#PUr^)XewiNw~H#*(g2%8e(7eRKCRl? zq`Z~#&##CzD`E+*hoR%g#bhIn-nRKlJc5ss`yK$g{|3&svTC*#uCcjPb2`UX(isf+ zF>J-mFZnW^xz7Pv=RJ@vo>amVBop&{Wn+;`<(s^yI|bBf`MQc+s8*ftA2qRwF)njk zNkx?KU~H=sW^VKN_xWp82r9^%14SgY>IQe7jk&sJD)1XF_7@p36$jmDY$9 ze}nl;zRvRjiX|u&y{A0Qx7F4G@oYM09U2XwT9>*`0= z*Yk|T>M%6L?Y$djGM{1|_pi~YKZYl3_`4m00)>y7+|6Qfjs^84vhw)%;4ID?Y^b%3 zBI*PX736J?f6*@#5^;Hhca_m>)l^2zqQ|n9#O}^GBtO(T6;X&3T&nbT_Qy%-7}sUR zy*e^@rJv2vNdme=xv!*?btOUp!!3{PfWyOYhkLjSWHF}6N;-T`&fMCO<~j3fGX#F} zs{PznErnG~QEtscFV!)=G0@>C^{(YT>6dPhF08Ztz>}D6p!K!C>Ts`o2iMI}$?;Kx z^Ity9_EB>@@R{*kmR8^D$miGI##m#GShvPO32gP_bd0r{Rp22=a~e6pgkcKxUibZG zQjwWZpvS7*zse>c?Ub2YDKT2*nr(#rb~9pTQ^VCwEJ7CX?1$%6<4w-7xunMO*0%8#VT9jY z#1@xziD`>Ei3wIsS0~?(osSOT)D5C+P9s;$8PyF&&Gx#CG}WgLDSfzK79EjoW; zc^P4j{b`nbRv1a0*}dZ^Bj3lqi>lsaW%Fi_~u=SleJ~)!zOTb3c}x zLdWGLLM>actET_VXUW8;h_2!~WTf-FJ^H-1OPXdb8k1i`9VQd8Urov_8lqXuT$l!L zwGC;(u)kPJ*138&8uMc9yi5y1QJ&}R&-zIeMx=MfVc~GXsb>QNL25e3-KX2)f4F%F6f^4oCzG_x-4na-*#^vf3Q=4nEGULc>?KRot%EgkSGUHos)CEN2 z;(k~~iF~I~|6q^5XL+xL)8&I7@39-n0(ZyJK5yx~OxLD_h8A3mw!c=b8gW0u|I(6? zjhsateNGb9V)oY^Xdrq~o={ORrxt|TK&bJK7w2l1^%ZoETkV~z85z^+ zc?y$L_f33?{&gm@J5vZov-N_A%VyC^Uu1_LsYR?e*96%XDqMbiD!gEhlxHpsN$JZL2x@-I8bpY``nX zOQu#`*3kP+3Lpb+$hzRA9nagB|N7zDHQEHC(PjW&`jp1w#7FCO6cCAhxwDj`-aqf~ zgYzuolp0urdzZysDN6K=>KxSo%j|r-My1QSO2VPBQ)2R0nCM|^$GB9Cm0#4XCe%#T z3u|rR5EJDlHZu%;#vgV5c6ZkW-<8$^6=gb{d|{>jyIY}MYbC15FG|La>l~FwbCqZQ zD)p&$I1_R|F>B?t+~Pq9l|{u0Tz5Hs^^iVqy6>264!@iI7wU-5unABXWt5t@w*l<8 ziHKM3&@D`+HFqIOwPxnpv2A%sxTwbRAp)bqy8M>MTN~w)tJ?W!PqPX;A7){%YOj8+ z(Uj@)!9F)wp4QUXmk$*u#{_u&eGwPkjf8%D2AWh%MReiC^)8sIZ=b%;PW#3A1fMW1 zWztJO0l`1hhqiq&+qlkpK{zo%^7>d+c1h7i6GOOxCtH@tVH0l~S-vgS77jtc6Do9pQcZLdbazFUgA;s2Q%9J}FX%s!%;*gkP0z3&^ zf1@p^$$_~v1%;o*eDM=as(82)2XmW15m&S?4JlkHUa3eZuvUzi`Ze*4UUeo$O-KMm zuu%okm+eAMFO1u`kPg$+l{W3om|Ru;#8T(55!YiTgUHBCc6t{XUm5%1U&Yg^^|H;* zHx}y_D+?$w&Z+^0OCAD?g}+u8TM0imcMaRp6Ly~b={Xt3MG1llM%dFnr{@M$46C$9 zKitYJWUCTlTzb4|%h{Iani zb~nA(S0PX~;45G3R%jL!2_2t!9eKyo-f6je# zspCy}g|xAWToIjos(th`(WP=8=W{Xl=jRJ5%)IeLggbilQP)n2^IPI|x~ERYgQkjI*GbO$^Y5Pf#V-PAtdrAqD^EM~~SePk0Y5meneh zC86JqUd#K!GOnN@PLrOTk~ij_OnU)te7ktXqnTmoJns-O2Hq_d&kX5$#vWDPy@SVSk3ljEWgOMC)Q8!Uwy_m9`URt zc39e#DMZ4+zKX#vd7x%!op^eR#)tWz@Oduek%+$(9feeC0H(x|0>%JWyCG-{ucPZa z6j!{%eD(0`m^PP-sU%|Y-D6c(oR7Utp=pR4tESK`=h^6_8dvR0gn(P&_8p$n+h!fZ zTU~xiqZ_ZkPXDgUV6AGiX?c$0wZ8w}?>*&Cq6r0RwZGYz*gNp+RSP1j#1TQ=rE2y( z0y$It*$Ukev6WUo3Af6giqV@+H>8%9s82gcpTg>MJ)Za+o~x|!)NNQ6E3xft*%Gci zkHEgI^X#2MbZ-JGO_gLK7QQNn#MhL+hS;IuTQ4iAPKDIrGM#JZ3iz^`zp?mlro=1? zTuuP*(zM-ha_2m|LZ0j6@-(g{A>O!rndb@0_3eg}o<5)Uh=xRj zbI$C?VK1Xr0#otnemCL8n|Obf+@E1R)}jkr^5?|jbslurIJfHrxT=rNHGs~)03{p?vPNX~8xdZ2qZ(>|mi3*+TSHM3?*$P}W2blEkJCF*<-K&^Z?oEOVf4wjzNa(# zVIC#boGrGpay`PysjSbjB(ayhznwQ!s9WFH$#la|h@iQ|s$BHm$+BXqo>0WVBh2F# zq_+NZr&!W9lUpj@bFb5md7@XecYLK^rOYiofkDAv=hVt=rJq_?Qj8x^*h>h+Y1H$p z<&Sz~aOjjgjS(=D(d12!rZSYeaak%p0cpo$r7Qiyz)}2#L6J=BN|{vRVp?41)W~UH z_BxR(sW5)Me61JiIU{xwaj({btG^j_Ify!3N_8g)@br(EFtfw!$JQVJI$nyA*bpg7 zEjaCGjO%BojzQ1V4k?LlJEH}31t0e4x5OElx)ILOW~S26M9;@nTa$XdG)dtz%oOR@ zx_0ra&3M5TgS&%FuT1hn-FY}W^abct@vO##VdKJ5E&E{Ors@8=w=Q#tMgHs0_-uOU z7)`S$2{G+#4%?GF{;M5ys5H;MGQ{G;PG_YmZFlCxLMNd+^pr#Qk$PJ1v_%#D!Re({ z7SA{TgcY83Sxbp|DS4Iq6!oi_PtYUM=00Bc#_Tmd+)>J0yrjl%gJKrP55JXqXYvyM zomOMWQSfUFXRfxpaYvzEb!USvEU~lBWwCNrH%_DW$CZNC%cn6@LoA7!gIc@^KG(ep zMQ+f!okF9>*KS(Awd+?mjxCUlOUU4*x3L*Wj_mR{K z@e%2w2lU3iPE;SaY{HY8??QbHo_$kGo89_Cew84i!x+w96>2bb#&xo-TjeFT{LtuN{U&$oW zx<yyB+H-E;}>;9 zWPPtK>S02q7TX|~yYvOUd#--P6FE33_3cj=UWTno!jubO$yauo35>tV*JxeKT zFQVqx$Vo^`i@(0}9Jh9vv!Zn)=~|*D8H>##HaU(;OuQDaIlYtc&v zE~gI(Ej=xO>RgJ*@=sDTGJBtw(ZH>|Qf8Rc-R*}fJ>nuWA>x=9iMvsd$|g>WPF`wj zofSM*lmOSAoGj~^d}1?tJ=emgDmog&7HWO3eTpe9xsXsoPc`HLpUSo~xyEux=;%EL zn}=Ej`jf^2$=|+ADEJS>=)(I2E=(3cJHs6kgp;(y(_!ZH)&-f`0yabOd?mA&ynT?3 z)!^?dLB(;fYA>6{@h_-eDrdS#STAUZV5ZiwDl;^<>`&wnSFs5;#Oioo&H9O`c!ixr z3agHnM6@?m^1C^xCv`Uz>T_@<2r^+#9fLdPr{o!VQN>w1TDs)?=0rtkaJh(#7El<- zXXrF)3T{|?FIe5URiNj=>l#gYTiD3BcSqtd6z61Lqqq~mw{r*m_-!&x=KRMI{q&@x zn^UTuJa$ro!{#PS8K)s(he(jCtG4rF!?2H6oJ#F(fTc{H2x2OLMZ%z(XECjzWP&Eo zuM#N^Rz-gKv( zi!Sz3$#_$=K4|^uH}Y3hq%+XB5n$In?{g_dWT+_Siff>!Jy)e7ENs5#00KaN8mlVXR^hnfXePqOK_UM{jSpIu8NsO0)K!?$)ObkftAE) z*i>!!t=;VS6+LN@-;xVla1u&|w7vYX&m1;7i`vH>{3o@B%AM#|9U_wA8}93wiN_mM zzS#)hT3ljxTCqK2bCfzM$0kSVwn^ob(Fd3CSbq6nEQ2K7$AC3EmO50R?wY+((5~_B z+?$6jg057)GB?rc&)u$wtEGh33C@X_)5P1A$wI9dq( z+5HnqvM%Y=-;)E8H`tsvF#$Pc3NeJY1I{TZ{wPOWT({}utHp=kURpXhD%jenSKTXc z@h1FS5}Org!C;Gv+T&GN|i1c$vGSL9hp+w6A?Jed|ohn&D zH#Ie&=^UHp3BTXjQ8&edt6Fu$K9)vZe4ShZ4XF-z7Jw)eQOjilBX-!@Fmh=-hA4lK zvhzVzYziVIs!a6rTDz{A7{Ok>`qqRhFbKpBmR|Z=K>G^DMrkV?=hOGha(b9ww?K3z zz9Fdi^iqVoh<$X*s?ON92WP(ft^3`X|Gn$ya;=#)lbmz1&))BTpXYt|^VEhuC)VSJ5p*=IWtpD6 zM)+uJq&@UHm^462z@Pl;*UE~bBDcgxbQw(45kpRk_)^m?HU>96*ZS&Tk4jm{0v-Z; z>%JL-qI`4qf>vBl2L~5&bH(6#3i4n^dPHBn<&M#0N7Y_tN-I~|xWto$uR^`4jYgP9 z`jV&jKlTS0Hu8>M@lW(_L|aP!@yxD{=2wdg?sDLJ)GqfdPwpvkMi(_;<)Ll1)OV*j+;lUvig*STeLf^B8M`*`zX#q ztNVsSCq^nngbm>KK(A~+80;?%qC@bQEM<3!z=ZoRWq z!syylR~IO=Z2ZX{V;+L=Li1Omj#3w8t_ojO&vm*nuZy<23nPl@mtTP&Gnt5ULS}n> z;m6tZi@sASL5bIejPge0+@$=@lNeumH~7x}W26Ob?mazUPfa@?EnlB*_;*b5-jxs7 z%TwR;P2pvY=M-nQjV$V^N)#?Oe%^M$WIeFfv&0C51#7mnsBh=nlhXZ7#xtML-u9fu z#Appw?~ggM+i3CLj-t#HGldGR1 z9}l?KJ^tWA)bbWV+5}sTKNzR}nzoXcso@d+!28uF!Vm{1qT4R#MIKYsEWD8~-)YjMUE+ zxZlPULyx0V4xf4_pk<5kzRu$urO%UXsAsBhAw0~-WK!xjGC2XCokly5##>~xf3Gb> zxYHI#USJ+XqT*k>@OZ1d&LUt874wMi46Rv>ADR-pTJE!!lvaJ}A&BgRs}?;dvv&4L z7SJOU9o)+u5|MJ5+j$zeQC4AVJ7W|?EoFSlJ+Dr=>a#1FGapWx-wsuk-0AXN4?ZDx zgo<)_+Si-6N?`v3|C;Pa&u=?FV;X+tl#`n}p+F@dR3awj| z2Qn9Pw>?iDjKXSbZ+KA}2j3au&Y8B0kw3T%CSV*J^bAHu%(0KYmEEhn!NjQ=qI~9} z`W?Ey9F~CFtL0AC&ShnMLg!s@%^I#d_vh-1goGZua?@j#!0IWNen%1~aL z9en(wcos)@G+d)oU*?i}g|l;sXvL;n_OH{t2|g2eQjQ@ENj|3^Ah)~|AZ*N>Hz2UI zMuHdj3mVmlrL|UZv*jj;2}G#wf8arzrwq3!S{T|XppoyS$(=`>Z4H{hcAVPfOzJO= z7-utjNv`tb%k6)vH_8y;xAFsJXo`2@e)+iS)vq~ASx75dbDnDMq2sJ|O^GF62SQX0 zN<^zzyai~lV@G|r=j_d$Z(ED9k+C!TX=7}G_stpMQ@bTcF%}s~jT-kl>oG>W^owQ_ z!(8UgmUQxQvDSpy<)q+7U$ZGcSPh|Jh=1*A`o}1wredSk;j!<-I-koG+7p7dwk)0a zF2+tlHWLC$E=}*vNd6LI^iqEXosu(!@rgOi?utm5Et)gMMofT<-N31k+r5sDE&DEa zwo{Msn;-F|5v%qI+=SW%U5@$;{u34}EkCXaStt~*zIpX4ulW8#e7{JrPPO@KMd`_- zu}(u9^I-dpVNg$dwGsVz{#w8X6h{}{oq{a_CEnm75b7G%i!FvNpBlUHD7syzMRe14 zwP%qtK0vkFT<=a{ecAeQG>I?pVayn!_37gS8v z4=h|lDHfIBN38?}Ez|@%0#Nh;0?{1Ec65J{s^t*=sj6syho4ye7Do{*)kL54rIwq2 zqbIAXjGF`Q{TjgVZQ$TfgkQ%q9x)5Xm20DAJOAae2GLCNveVF6L*n($9dPDjk=BFf^0 z*%2cN#(|mBsIjP5zZO59tZF1h(FOJM8+#a+)GCR`8O?t-Fs*Gh2#_;$>h2J+758y6 z4YVh2oYLCXm*A0=EMAy?89Bg4>Ulj4KT3VcgjtyLwN_o^^+hd*eV9(RVio?%GyD}A zeAr4c$dpj`rERr2jIB*IpFTSu5hz);n$P>WELl^vnyAuuyo8Vij-b{UXw~1^Z&Dw@ zT^r$QDl8)&^D)3>2=v{1YveSRX~3UYL#V&dTklA$zO$g7Yu}kxL?jluniXy^xt=;s z%aX8gtkkLHPHn|k<)yyUBgY0-H?{cXWChJiIwquew4(6E#r$tly~v4Xx^q@JUSSeN znUr0d=y(fy+vry~yPONX9|bi`gN6%Qt1h3ZZ@F2KCfb?F+hhgb0V#BOagjE?3Q1cC z*Cm28ayF|kf^WNnh!ry1V!}l;cPs+0eFbg)b;-{lkwbcui3)VRxIA;*(s|~XU zVgaxZu4km4Kai95`Al9sa%cJattU~9@5$L0Zx5jsk?i7Fn&09GVAH=)5Z-|fnrTDx z6F0hw$?nlb3eK|^%Zqxy;l00-C#~^<5o##j2rv)Y3&G$uQAMHWInx4&my@C5ZA*1unM3XGoOpY3x^h9|iZcL}v= zSwpysjtlazW@(XzvYZD2Bh>IVXUZq1h{I?CFv1my=^3&55Z7v|X#E1NvsXECK)!s_}n(O&rFblo?r@u6Nl)YUica9A1^Q_P(S z-Q+W_7k)eT@bO!%irDeyw6ioX+O{^DGUma~{k57PMSrsh^QwS4y^Z{-97E1Q+A!7D z7_aR%N~#sQ>b@!7iE@Vpvq+ALrWYU8div~J!0ls*uATeYEAAw06LO)~=*XN8^z5W7DA*r0z>=uC~ zddtm!HY#%Kz$coJ5{#I>rNRFHCc)93Dz-wU zGvdK`mRzgK` zuZ$cA3&eTQmMMCH3Oom&DuQtg_eZ}ClBS94-8){YnXy02eH@r{Q9duvY^WK|9Um&D zi^}?*Wv*u{j;>LBsplK27FTMXlWE)|;6LTv>AJ?7>M{2DjJ4~UOz!A%>Pa~#|A*(< zKi)Gd&OC!gndSQT8VA3z|0Eg60ZKKdL4>NA5=}uVdlLMlfS6PX-odCaYYcWihD4%? zt5`{a-{BLWEcr=$f7ZhR)yA9^E^6vhKsf!uoN>Rd$v%THnywlNR)gG0+o z$LI}g@m-(W(}x`Jv}#)J1}r));|$f+yHGLmZG@)K`|qM`I5KHF^wXJvJUKuojGMY% zh?=bvkWz11tw>Ihza|`~-8sEhK@>1ILGr(z-fl`}X)ZIQ3p#psor!j1c~Vcp82y{; z(pV*olFu)+hpbW^r?*k&$C|q>Z6|crKVQqOXbiUvcozWQ$LF+G>3v(4h;A0m8`21t zdSh2u{HZ3Cm3$7fUEF1==WC0Z++LY}crmW$J@e~6!wvsMA67L>n5Cp3$J15SwwxCt zo{mtulijJZu47r{Hf=FtsgZz0`74!Y$8~;;D zg<3MtTM0YwMs~KP0!qEbZ}PK+s*X*JX?nY}J+9|S;%smX!gBL}OkAE>u3}HC>bquE z$3R7;c36u$4*~M@xNEAGby@fZ5rkHvDU~V0La-iPG7{C5BmzqH4DBY~7juM1XY<4o z1cl8_EuxEBUCO7G+j{Ya&Sv9r%nmo^1a4~ZFmww!%xySQzheUw;njGAUtf+lXpeTV zY;n*o+?FsQcwukPvLFfehKU_GGePH_Iuk9;lk>~Y&wO_B^v>^3J$}4`+Ua0Y7EaoU~W*`fofBgtWF0IKD8{6$8Hd zQxppt^VhYtzoU`UXDewVqM|UX#(30>m%zDm{T+@tvpagG2!12;Efaydw3DP zN!4x~rJSp`N>k}D&O$7Y8ICqZTb7IxJwdZ`Wy%SW&jA*>9(#2RpDu7u?P6S)F)O(S z8*j&oYFc%3Enn655sD|9ISMgH{@^(_AxY?_E_jC3cCkAiqUXtId=+z9$z0@V^)7gJ$iiJ!09SE3{Np z|KKVs4ppmIw3qA{;LJQyb$O93ARM(<$EPPqR#$HL3K&!d&C|R>CQd4ZAxBrPnHOR)+qdxD&GzaU261yzn4> z*&(D`v8FqM^4^$ZH%y?a;=K5VSLQB@!1V_BGH@6O{1YJ3=fG}RmSC> z+vAq658S$(d*!{K53cYNLbnM`CVXl2<#$8z?;{4M{$%TQ@Nx&oh#;9L`SVEaK;B2_nRWa2k`o83t zX3PrEojK;4wV&$|KJHsxefe=^0UmVCwB5$+4WC5GedX_9HF1ZH*cJ^o6{~`xbA0K- z;2(`Brl{j6mZ&J?8JC*r+mBM6|VkIC<%~*^$}= zhqb9&&l_rR9t+=I`vGBrmcu%o7AQqFSMiFObLcWXt#GDJRMxvuIM`b>P{Is24uJ#< zY7<@|Gl7QXQkbSo%;PssL*ZPYvP+X2`2AD|gUR#i@tw3*PqcoC?n^+84Z%q|#r0JA z=6VarEKT9d?oNiQa`4Sqyolj6bCK{L7G_1~&5Rz*xa>Ys{2VMVXiH6JI~*jI3>a$j zEwdo4)}cT~{f5TiM=Y2R_|8!!Za;bNI6UcbL&TSYYFjfzP?6ssU-b(PB4i|oQp z;>H)y*aWJ4{eq8R_nR6~RS&|e-bkdXSt4#v5zwo38#rD-(&&V z+=6C%p*_veyeAj-6IDY(rqU`GkDu}>W5)0oo1gWU#14N7a~fF6p6we9yrFL%{b{wX zeF(n+GozY){;x(V7rc>R#fwgutyq66qLoB?pR+2HtyFD@D7Qw_x|rbYa$zPgdmH_x zrH+^4HD7pJHK2~b8>@|hjIDg{PZULC_p=0Qo#2zJk#t(dbQ?<9y74Rtwlg!J)d?RJ z!*{N`^9s7&sev!5oJehkT_V||Tkm<0H<_Y{DJN81G14z-*;Ovz|5`Rm474aI0`iLT zjRk>KoF$`t-a061r~UU&=_ci~yGGyvyP&L8x1eo+L=b-YOGEKZZwI-b zw!eQg)NwD!sM=7!*7O0zFxulH$>|1YDHUZi22C*duAU(j4^Nn{dbayClbu|6lir&R zq_lB-IYKK45W1oxRhkNdV$B5)0&*4hiX6x4H%!;lKRGDHIPL|zi1fxhjYRPz=htv3 zE=058pCXuQPl?mY#+{it^CbQ&VNEqjQ0xrZ)!g~sf6rU zoUM@I?&se@Ys;bD(8KOq17ps}2YpxL{Tn<7OU2f6Jf*))@dIau*`tX0U!{t9QV|K- zf>)R!YB zx5}M}Q8t(6z@GGo?d;~wtqG#|sSSz^m|i*q&xdV%xk_(wKzLhkWyc-(v_8^k?CLG- zGpQM=g2Bw8LL(S%pCIgks zy(dZnMLv9SCmM?-5apu8+U3PugeI?0Wh1X_N`kcPENYGWYy{6^P7YM2vX}y;KC)z# z-AU#C=*IdBRBx+;%=-4pk(L?LCMo5!G0)&qa|PSArf>&}vyLc=Q3G#d6R}zncpX%P zgjn}Z3yQ@X``?9yt6Ty}J%EYmCc)AVWVL6dvbihiav6dmK^g;fa5y@jk@B&|d#{_( zVa_#sUDgqq9~CUPeG4ZNf$u888>)=-T}(7r1%w_ummcZsuZd0tgGKKA=6B*z&m)KD zD8^Un-ip(%2J4L98tAvt&SP&wCXK`T7>?1MIfKjoA~G6!e*M8B27}O(`+~=Z5Wm9i z6j~l(i(qiZ+`tMct03J}l*Z2mOP*A6Dq(Uh;QS1m8!7%^v{g+pOx{7a9cfzWy!j*@ zHROsZrrx}=Pp12MYCy@pRjE48G7*E0Mc=BAcsOOJ&Vb+z@ z!MJ$^HMmw+-zpe2mJ2I;H&S3)`vkpz*z{=e!B+B;86Vz1ZE5QdmI}KSg7zF+Sc!<^_1DJR{nrAJzrwwmD%N;%wFx*?dH3vDW|~Kj==`P> z;xkUcp5}hu3|KU{w%ad3$Z{wy~{#3(*6=tj$!{X&TJRAk%xpps364X1%G*-q+Vm|~`Sam{77HqgOSh8Fonso@2~n*XGPV8)!+comZ;{;e z9o=iqwyxD1*dfAwc%MnTes9d;OkWi6$X*kFfx>0`z$g@Zx?U01$G>E>9}brBP)z|% z$wA&=6U`UZ*1MD{X9=294dO4=HVw`*Sx$*>@lC%tR+RB$)=}<~`#tl?S5IgwngDji zc)vIB7!~M>s9-BvVsrdT!wg?bW9dw@JZK5UhHT!Wn2<^fALJBw6_>78zyk}j2KDvq z9O08ACe)w}*WS(+bT3~hIN0^;i&ISK>y=e0QCu=@2@j5&f?=iej~!e#^pPuCS_BlR z{P0IbNknmEjKJj(D}d3QhkC}HZj5Z7PDCN`%*I0VY3uc&36dv<85Kvnw2dzCh9=%^ zbZ7_^&A=e67;m}`Mr6gozWLT*Xf=j6o@|(c>S)t=?Q)Y(Y~M}-x~Mx&C6?XYsoWy8 zhGKGz>MiGCpL~6(^wqMKO@a4GH3U^=OPrJLy5-<(d3Eksjy`Aw04<6WQvAuVy z!HFr=@c!pYUE*>o}(|v%wnf=HDV-2gmgLrNH>6f(&FO7z$k@yO0KCvKe z#|ghSRZY}H`qkTfB@WaOSjGleWMWM!K zfv~FIv55xz-mrl%J@`KQ@!s&b(N)Ejqon}hCBV_)2!I2}S1UXxye`_Y{^ItcZe=*o zpq?CsHndPGw8_0|&zQ1~A)L3fk$U2o6zz@VclbO)a8X(+ zhZ8s_7Z@OU&W@e4)VfISA-cTHA`lJfNgf{lc^h6nBv9JjlglE%-^-CU5vcE{FdI6P zmVcKo8>!;RoS(aD#oy7GI0!KMWtiOw2wGYvvkdpLgjdHx!fEdSP z<(AZeJ0nAw2-Iyee!)9Vw7jmY&l0{Zn!@jUg|Zn_c#dc1lJhJk(|Cp8)aYLZ6tO>s90K_8%D6Gr>{H(PgcoQHH@2ALyVGk>QzG~=a{2u> zs@vO2g^0@sV{Ey`MKER*ZJz2h8c9kw>D?D0;8@-ly0@N4#-@0 z92dn}#^)24F4vtIYv8D^PMME;PMx=`@hdtDo|DAo{1v6r$?DS$fFy74&%6`c@S1zx3J5K~&X1FuFss!d-pH0}`B-CRq*&D14xq4eRkRos>J0%nDh zCuJgIo@j)@8Nlc1IvwS7dG?ZC%BnYhWb-M6`x;IX41+yHoT&DLL|BFzuUkn z#Vsz*DzVL-t^U*TE$#5U>Dxf49{j-~7Bzz>?JVQ2&ILcom^pQo7TxM<_|#M|k!4mc zeZzI*2XnpS3T`ENCXztM6kK99cJiE8CQoa7wb>Ul^@xq-)=urFW^0F}xfe-$>_E(u z`S2u16_H74)X8U-D;s{7X@d?kR;;>otM;Skd7Q*kj!zNVqfFvY(;3DF2~(I)E^~Un z@43kSF|Uj<2BR~kdU!^%9W>52j#XRmyN3p!b-kWqHy}&CZvM&Pu}rnSELM^uk62T1 z)HPoV?hw)$;<yKF)wGsukHLA)pP_&%;{Y?pK2bcN zTOmECsTn4f_KM-m*o17MOzyB?Z<@rnerHH^S-$0`%rT{9H2TSVZIxc_9`|?EA#xnN zZ{1m3+^X$BSE$#|1Lbq)?-ObMNDj~7NOi7kAN_+tmd<2k2Z+#>9M(F4qHxxQa`=fr z1=H|1%Xu9&i?X9=%#om1=)X3IkC2Pt!+qPR>21-%_~~uKafYmAdg;+6^X}oei5IQi zHmpf|q4}|uaf?9I-vY`Zw2Cp1*xdT}cZ`c?(zl+*aLS`xBn5$F@im!%)#(VbV!*0R z@RHr32h6~R+~0e^gla?P5g%FZPctxfa5Vw`fV!n{ z6EWcwn-3&yxQXO5@Kb}bzgJiw9UAU~(+(4m`J;FMWn*~bzT)P6tYrlEe2?tPAn+Dr zZz8vGxX(crXIwz#YrZm_QVdihN=nj?QB{Nc0q$O*@D2i0*gI{*Ns&y)OHc#;qD_}q zvK(>b9H)#gOT~?#3*5!Xmv2@%&x@{tB>L!#uWEzPx8-pwbZc+-w__PGz*;dd3TTvm ze9Mzyp2Zlp^{#$@XR*fT0La`c1F=q55y-$}Y*zuYseSPOV^iz1aSmt&v~~Q9V7V1t zTW=bldj!-K@0DMhzdT;lueCBP%he1krBL1_9lX5=0G_dsjKsxUgZ{m&B{O@bD^Mi} z8>)K#T46l+PC(tK8F=Yjs!@xrr*p73{Sjyha)Q_;UY;7^y+UYmcp58fpZzyG^3X)zsa?N4uvrD8#sx0!{Mx-gRMlD)ze{|{dvN#WvxD}>ZTt6(Oz!|`?`qwbDEP>Q zk0I6utb8d}FVTkFu}7psN{6myf8K=TNjV@vPX%uVX!0Zp7}_Kn%ek<6FcEq3V0MLn&3@t)rH9Pi z6bh?0d@W=Q1QaWfC?+>+Q9rI0 z)|5eCO@9^Dwv@e$JyEK#rpRTY;UN+Fr#d1U%4o8$A%3u@pWPW#UAZQp z@@TCcxW~#v1|i;krIgW9$o~#l2!X$l1*JD+b+J2f5IVM-q7Wi8UJtB`6Wsmx=QhFY zxh44{wj%X94VBAt3}^=i{o&#}pQRI#5@+uk6#)*sk@UFVy{9vnob$M5La(gsf*F6q zcv@cuo3m{Z^7{3v8@A)X|$8krRl@tLP0;Ifl$2#q^<4y z<}X9g{DbxMb+mhk1~3FQD8Do4*Su>HG9#AW_wnN!JgEW_>j?qoEqDA5eyYx<1Jzjt zE~`IXd^EMRFjyC(0NT4$CW2;#_1`NEJ(*JwyW?QBIJJbQH}tuEbN`hJYqvY+d4w{O zPDu>iP6#tu2_OWC%gGi0_~C&CA~r*WgFV9H#KCS@^JGZ+-KHsN^ zuWH;l{p0qao{fErgQT&Nk-B$u&vlyz)ngq-T7z|}0zI{r&TpMBSm&o4*&wps6Bn!X zsPWGGW1QZ{0C}-|nB??Zw5ix}2E=vM6D3E?v!C}~pjDGeOW!ff#F0EJ>SMwwibo*-A)bteU{B~Nq#X`fG|HDIFBlXdIG$*qq-$nX`9#_Q?i zi9Nff^;{8KV6G(b{5&2;&G+`SFYwEmiIM%LhHx2glQFOkJFb>v$DQRa~{P# z!?KFQT=&=8X1bFb=*9cUS zSHWVonQDs$?z8z`z)IAfkS3of>*w}b*dp+K6EEK}Al~ltU}MO57AR<`SGd<~LjI9M z&iC7*3e%b?n`81ZmDcYfxOaWMR#F<5Vy^{G0gXhtoZUx9GS+4kZZj73qO3?uu6B|yIHH0E4lcAERk&6Ju%#jyPwglY`Nw&gLkIs*8w z$f40_N2gKa8sNj5aQK^mw@4*4?E7o!1ZZov?Ra?+LwTIR4YHcSmi_2wh;vmYy=?X= zuYhAFFOJ4Yuf(iISY0%9Z|j)p=iU4C58thhJ?~MS=qjkp<|nF72hq?!FspVcXK6FAnj0d%0lJg3j0fKt8S7^wINS=V%LvI*D;ZXA zM#sjARv6f2eO>Z&(k=0!hDxUkwM?;E<#kG z(m@m<0im`7pWaIMrfoY6CFE1BhkR%nW!MT>>@is?9>xBCgtj*vUSwpuy-FI&_R?Q# zSKRlg8AeP$rV}pswzmZw;PTOEp=2rd9x#+^#$g-Ai84M;8`yL!%7U@i9}6d<|Zq>}Sqr zPQbm&(b-v}qO@ZYc&c=tZTcQwY>E+R@LTB_#|Eu61Esqj6-N1Z$Sro8SkvV5c5OFZ z3jySlG3^9QnBt?Dm>8F_>gAXB!yk1Bf2Xq8(m9w{Bmo22`PESgun6CV5z-Z#lN>Y= zpBwyU$0qiDA;DHZ*?r)cl-#_X+>8TKalOm(HJ^RWh^1EPV0I|R%5UD`3|cBbRw5-K zVLRCxPV-@40!mZUnVJ{zvHk#ES6&v8`L zbM`OJiu5Q_1{6t9tbpc+%V-t<`Sa)5B%BNt_9hu;$zca%FW~k>QsLU^rHR2f^ktd* z48a4wJfb;_B5O0<(xi9;Pmtc*Z7z+}&1Joa>44@xS*F>|3G80be^~``ep0~AM!Q0! zFaWyP-Wq`bl3xTE&@M1y^{@11pE~F2kNF{6mAIj40=yS@%F-#oI0~r)tfVO{omGwl zqOPM=^|8=fEeG>3id_OV(Z+G@-uoj5@?raXPOFubK+tXm=*{8}wzv*1>B#-K31+jH z%SYh$I#GWAc5Hgl+Q!6wqtbBWp|e;)A`AiRqq?2{Mm3rp2?AL8*pzPcIcZU7?d+3* z|KI2`cDK~W+j|W?3Qmw13LsO!(ojd- zkCD!6e{VDU%OVgWOyHKDiV{PuteQ9Yy2hqEf3EjYNBo#-cTRX_i8vIYnak!k$O9MS zU)XL+m{}_|A3mBj5aCSZIO5!oyTjTn-j1zcx$I zK}4OGl^n>|Da8#Ru?6o6T&(wY`#CR779rF48&8gtpj9mlf=uwi?gSxED|r=|!_B%M zY`PDCu$ILq8n{093Fr*c$SK-&y}5Fy?1K90bev9JZZ40YQL&ntnOR!M=7>2ESvA21 z`XHvqgI2m1A?z%X{64CSztac zHELZNl1R;zB;_A1}?OQKcNFXZd07ph` z+2tyFHc@UMA#GOzHWWEvpbWgWdrt2;Wt{toyfI$CNM2Y#USfUsOmS~=ujXKL;^gkO z<3OJ6Xq6*{^)$W9p>`kD!~UNWg9@f`XsMzrd#sF_)8WeB{9iHTy$L<{=u^jZx&Gr5 zKYeZZgbv?1RYn!q2Eb2z2#z<%fq&}CekhF%bbiYEu>Ma6o%q*>lbK4_)btDZ*L|T(iFo1~)yAKGME~{PetrUT|EzyT z&(Fz3m79BbnF6-t3r9Bo=8~BEXSo0C3p{_lh(oR@!}lMbWqafA=G33B*7p(3g66-E z4v2w{j)zvoPWfsA(Y>ML;HUWfuYSt^>B;_clnxiJ((=b&ek~CDxrmhR zC$=#L&p@G9LqkJbk+M$DA$i3<)yJr$d4ER^cs5`dSz)lBFFO&|cfI|U?;^U!ZXiz! z+Y|=2-0kVhiit!bac?!DS@ZVo+ra!d`ie;fH`l>d`x>$|I5(nCIpF7TtXBdzUpbA} zS8%l+Q-MAQfTl?RF^oqYzg=)4-E->+SB?=xD{=mdD&UQi4?)cn-}(Q62ykaDdc!ou3vcaE4b? z4RM&agT%#|MK=D`FMLXup`;7IYHU}c*k#ChP#dIl^qg|nvsI(<)3`V>_wmL?z=~lx zOBKf_2KYci^wyf6eeSxl8^9mMR?P~KC2tA{o*`c-K)hY8+U;`^w@K{->!hTUn#1&5 z3UYqq0rm(R%Fc#KwTsCC4Fiu6e`MB4_ZBJ#O)kpZ?KO~YlKlx#W=6y5e<6Ll%RaEt z9gOD?%j*eAhu(}}V8e$`k@kv-ymqo(cBL^6WXzYH z#sSFY1sr*a(pgROdktT19}o^?+v(-2drtE-$c_`5_Y`X`7cP^xAnXgW^Q6<4RBbjE zhPHtVa6GW9<_7mxh${`FEYipyW_AR*HO(FX6^bnysyjVoWn@I11`DccYGwgB+4c3q z3+LYy<6qJ0KGX)ABUW5Of&_NGt|yENZy?p-kt#<603VY}feWGZd`{fz{_cuB*wf_q zi=4w6oAdSBz=8<0Cx83AJpfWa2tS5VhQm@BL*`Vlfo>!`QXK*EDBmDLZ>EYEfEV02 zV7L5{eAk)^*jDu7ptSiDun%EV3=K{g4%@6uCjmIw1zbYC#sg-7(z~VfTv~N?brgq` zuvv{;H#99E;a-}mvZasZmwyEA;Y{fOO z=N(Fi^jE2O5y!RW>D&D&#TtAlu?W#i)%|R%tkhN|pFJO7XJ2EU21`L#aWcMM{ z=4r@=K-7D#7u+gaMz|M>2dTl^omSr@w-dPmA>n4%lak17f^mW;tQ=d8C6mSRAY0W{ z1yB$NUh=@Q$92n~WejBR#3t^byT2QDutG!G|C|bb(ZV)B*P~O|{1i_ZB4qhH$fRY9 zuUlUL+x7LET-zPDQL}&>CEge|Gb2+vDc}Xhfz-}hS`{p82rO|2toPmK@CBR4TxFnp z@ZbktH4q9qfj4Y}{K<9*Lgj)a3pi#tLutLGVhvbo3)}k>-3?;FTi+MzK(d+k3*Xy| zfxF8!MYESv9<<&V-kqYzM~ecY{d>#){>p&@q(SXTG_fZErr~;yy=-%$u7>Pj1oXAh zX6s&XFEQ)Zr^iaL+cU{S)oUJ8Z5!8n_7_W=b{38_uOAKuLq1>^E@f~-lc+mc$}i|# zWX(jVEFf^S5TC*hDAEx7G`|fdu_3{4>0{p%Hnr3*^yJ*gwT+WhUmPm@e|&8O!prIi z;7BR`Tf$s6)-CB!UJw z4)6moL<&eAx4)ik_V1Oa{Mb)ZWrObM-cJKhJ4$s9b&p&U_>79i1mxm~X~)w|$|f-e(cP4a`c1g&ChI9c9WmE9vs_B`{lp&=#1qI0TPI zeei+(Un|Oi?^gNB!{3rXj)<@U0Qd9w05CicAsm2U7OQ5i%K{QAg|`hWP01i;k!BSS z0**7V$3tY%eXiX*3FOW8-5_?`sPVaZiW-=UdepR3Z*Rz!4QoZ;+iGauZD3r=8EyVC z2Vqo&!^k#WT-k%Nba!*>0nR0H80TTT50T7uAcixt|3w)9A&1xdv|Pu3`BnEJr^`f> zJV@IKI-#p^0IJBX_o^gbyRTY9CjWKkQZg^-Uh7-%0~}3I$O@P$UM0kx>ACyaT2dv^Q5A^pV09MHX;2#(uyFj+$#gR(zEaV4~L8}v|S*kfdLJn zF<>o_5)6`igyF=*0Fp5c}Q)qt+w0)@2SNM*yJt zMD2T00-v3@oeR_ZsLFV^8K54onJ&4#@9)$RfSi+n_zXtJsDBHRE0pmSpY8oL^*CNz zursg$`h{3*;-yQcksZ}{7Wf-ztHyEyZsSTfn|WW}F{<9wKlh$p$t1ba3C#GmU(56K zCc%H(bz%=Dnl<%fR<891f%IG^QNq~>aD<@hH4A81e6{OXy}a+rct|hne~n(TL&h=I zmmtCP_AE%I60&T(E;a6dKVcXUZ%DvZG z$pT8&7xV!|cIjW2q>3?WAC#qfsMjy|#AQ%t32Ex_37}b$S*wgo@7NCoOKR;9K ze@`OyeDD5KZj}Tf5BI-89xAu=#gz{NF1@E3eDW8P_?b9MKsoXFUrF?T&pac=+xAr; zEOqv8E-Z$`{=Xoie*$ZNCe|R16x68xaioCm?{e9HOiA~4{@b?;4_OAMHeNL)?9YD( z!16B$0&0<9$d{QuG-Z#oUp$^6{C5MxZgX}^T$x_U;-?wY|8NP%sLi#1dhA5llcl2* z{{(Lgm~i9A=M+WQFZ{!UL|Snjf~3Dg77_;k2@w8*zkk9ggTFxSf5G0L@XQWEp2>gB zm%qUBpU6}D$KpSak=^F% zu_utxC~zzD__>GsWKgiTS)c0z)q?(%7UV^rm=jbP9?Js0Gl^Ba>XPo`DG;64b9$ru zNHd-G_6vFiJO9*6fW97oWgogetiE#)v5Gm#LS*S>24($_j+vA-FLq{H$dMpq19v2XtlukJOVU9|TdiS1jt+ z)j}L~AzQeDU!k>+%|BYT>11+bCtM`>BB-<*w8e5wkT%jOOZL!4UkTE~6p#ymQk(I~ zdWbrQvPrN>dx2W%EL1#AN(wcoslMMHqnUF3nlrH&+NYr^3O(CbKbJX%!}y{E%{c2A z(`^7BKe?`osrLW__O29ZG4%?kA)pROvjYm{Hj6~GIwG9zEa%HTO~mB8XR~1ZH4y-Z zHMPU^zbHZM2w+Y&U&RLJ1nvWi((~R}jE@!d_y0Kuc0R=uANP|sjfM!-p|vyG*C#U; zf3lpZGMKSz5hu?lfl@TDx+Q?3p)sfMKSNeQYL-JvcFd-`xj5hvHQ!vFeCYgd^@feOq>UDo?vs9*OqrV66S;^(bfy!M9AS=&5z=BFsVCX_& z{^oTee|`#rdmdDBz~(3l($&ytX1v;Aq-51qD8N@J3JMydO_3&*c0B4m3cE|eKVDb? zvT=E=#+X2Eo~o1u_0Q5YjfcuB5V1r>g*ja9Ll;5rFPQ_XZjpavsD5p@r$^o^OHPEnSO_14r2Ol z2{4qIZNG}l1Rw-BOhJhZf*ZF9WMsnTbW2;tK9pkcIG0yjW`jlKbM zxp{#!&|vExZ}45lN3n^m4jSn2sDA_C?UQGx5H`@aKSy010T^1pARRzb7?qeOawp0K zcyeWjKTVX~X7AT7C{`Mjm;L+}yrVTVV4qY>z1bM!^Y^w#WC(sM!#(|Ws!f)l# z7_p|N#(sZqTO9$qe(ZME=P9S8>FIw?ct%FSRFWT>>Wa1@GCiE-9hcqBE}0C;gG!2cg+#g5a}JyZ{P`%?O9+t*9kQp zLA*g)&^H`ZxVqUS%tr^3U~OKlqg}S9+~W%xf7lJX1HD)(JS5h4a6k^8pi6CICQy{=va`!O})i z$lWk>XCNJ-z90nGw23Jt<-}>@p&~2b+KsH-#^XS_&lUu$&z!q{flK)RHNoXgPjy{s zAS351;l#t9$gJx*Q-Eq&@@Ry>8t4X-FL*ea^+H%i)aq2cW-eb0BJAjq>qh|*A~Kzq z?1l$kSPhN)pjqt7SxbNGYWImW09!>$8&~l+$PiZrioV*2X&S|?8wx+3>zwmE=j!Up zCgo-hkycQ(d*Wc9JTSPPtSAZa^eYhdK#Z373j_4ZKHRw<)#ML4VxZayH_q0v=S!p? z(~)@PT+cy6y_P;3<8m=Vj)Zzez}id-Fje-6DR7rL5cc1`J!AL%+PlSbdKJ#(n7uFg zWN!X;GV7fDfj3<*E}?mki6BZ0@i0 zRa8BKkt+?bBVxFwr_RPh1<<@ZcXRa&)pa}wUFWi5gQqVItpVbqh&MeO<1^8`pYGKo z4b_Vi$W>KUHXqBZ)e*P3LaKNHj|U*8_EDxUr~VcAGmQyLpX%0LDzqO~&<*mnmp9Wg zRi4>>eg9k?an>rh9QvA)6&&nSC-2@pWLtKn=-K51y?Hg?^iE-GK6z@W#+*xpzBAXG zDGfMNv7pVR#?4XZ&kAe6gUQHjxILOA{I^Lwz_eO3S$sqg^Ve>rsp038wR zx;|nWe6}a!#*@It13+Wpz^X?q6&>=Lo02BEoUI`d5^^2Y zsBzaA<1&~zpJ#?ro6h@p(IL%f>LpA3`B`8xp-REtJ)vU*G)0JH}Rv;;Yszei9y z`_+y2R?Ul=O0jmCmA~if48hE$FP1qVLmo)fD)mcRk=!okg^Rxa zMQ=Q-jVN92md97h4`1TZ<`D7$s(lM2z;&!f1QyP-A6+HBBczu{{Q|Q&spI5=4eMA- z-12TU7@C`#|5BYiPJ>_tz-}L0id9*Rd*Yo#O$1%p&1bM*#T|leHxKO*hcM4&UWJ@M z8~(+_`O>xr&(sM5evseZ5qc`8xOHkM#Cgj0y4al|#Q0Z>7; zD%JCGIa|;zDb#H*IZg96&cgti%<^$iaB%SRayFYrBF#AL0Raz?OGPoX*mrI{>mIK;g#z8*b+B`f2*wYw> z!^kHdCo?^Z^u$JZ8q-7eRb6xpL?Im<(p~Ej zbH91yesjwvS>LAMTmBGBIHI4Fn2SOQw<6e%r5RQIafj zA`$}^pqwSz=FpkJWV)bvYQ|45n7dyjJvkh$SC{2wcV@e&n)Yl^o0@xcJ#0X|1a9OU z0bAO}?ghCZn3F$fOSTE<1waUkb)+xCMZ@{BVNP30LN9=~R%+4qYu=8;R9W?+fExJZ z+d1;keDK~P4unw>n?67Ez}Ak;D#dg=nu??ar0?!K^Iky!oj{*26=*Y3~p-65V_Llk^ZV?r%?~$ynINcKU|(2VkpzF`2?q zJ5_s9b5Lt3T-%pll*>^L7K^PXwXW;ya!iVOL3Y9p)37h?CzG%2Jvs|`lzEf8xlU@z zl~bB2?=VTPX4~8B`&VAJ(mQ(n6uo}@t+6=q9Y%SwC7=b#Xfoe9>n(D~>l8r!qW%TJ z12q;Ap$8~b*0?;PP>S$vy5<+u`H%#{CJ{Z1ojRKm&TW<{A1A`WWS@H7+z_^k zr&4`+R>AE_zmEqY+5{Fs*vq+mUFN#4796Rj{OkK6XQygUTcX%4qpj~y9KXwR$YaOD&R$Q11oWv)?y8gjcV+0~^%YlBpl_$nZl-SaJ#Bu1;<=Pv!0EOJJ7C zoO}MH()-D0KZkEW#Zg#lM?*;c^rSjqhJ)#HsDch3!DjT!wE^;?doJL&YnxN63_ncz zD^X(pv7*d0IY?UXld&6m)8P}}>H4BSt-cpQEEgmsvGQ@6pLu+mP^?h|Lcm}ICY#4R^Xr=p||RwX!KhX;4?ep` zD^|EwVG3=AZERw)u+CZOraLzRz^bqB22>0z^rO#?bEi?!)*^ve>oo1Ztz5lw5cz+1 z4=;E6=l=fw zXE_sBoX*1ZnZRO8^|-d|SHx|6F-fQKNQ19SJ|na{UnX7EU+WRrd8J6@22YXgpa1NW zp6c|?vSnxy^xCz^HMG_)tAuwxdKaeHuBH8fsbb?;?+FCIjz6!I)Ny{~Wgr?4iR0gR z+XqIw-x*Az^hq-qx9*?LMF3ZW=B8Oa=SkY!Y#qsK2M#_77m!T6_#$*S5ug+=@aFZpLMnXJb$Ya4n5;8;vEhKkqx&*jI`D~z ztd^Zo5A{SoQFCwRrGF`vXgI3jhx`4d_w$De%q%eekpx%JG2NP6nm9E5@qV;{75?22 z4cc|)Iqx|9nGi^T+Q%k-O9)N!6e?%>&fy{;8$sdg7ABtj7(3{%XnyOvuE2EDFKUh9 zWHa_Ai$=~IDAeFySS?O{3P9KL{2#oNOEZiQ9+TXhCgFRnaok1~@5f4+1L>8E2F+y^ zPDpVHn(husfD833l0Xk!`ohF5v_Uurs9K>VzL|PcyL6{m>`L@okJl)bgXx zb;9z@NqXJi*U{*{HFZn7`iyWs=zx1TG}QF<>eb*qN)t@vhYIyMEi6KK!;LORPj(Q$ zyReP@a=JFVg$`-NZlgwd-~LW{56}W4gnQoo9yriwBb_2ZsawCyt__N8y%oi=G7yaf;mLlxDR)TALh< z6o<$*-lEG&bHxvDXzpfQjxBuDRDS%9rZ=r2+rJzMM|6@sLW^7X7gftX2Z#j^x<)7O&V!)B(#0>cHG9wXHdz^tP4{$Y$PjV@?>E znula$E?z*P*@9!NX?Y3aS73u;xHr8=X`N0YH7Y6>+9F2J03)LoN1Bu#L5p+@0WG1= zQbQ_ViW;F^ZBc#~6y8>$B!8qNUk$L{VwM{2Vb|wD5TT|I6g9e9+0`KXN78Ir?qJ<5 zc@1O?`!Z}?sG*}IjacV)Hsxdwf_QUE>;McQ{=UdtF@)ceA$$&`?XomhY{%@g1=2m0P966!)o==jt zA7W7ZKnwVF1Cp%xS9~6&>lY~|e6Bu;hSh@A1Dtl9Kj(*Hi_aoRNv=&xHo&YIO=Wdb zK2(aO+95CgrCrn}&v1Nb@52RVJSI8xP+}-wy|*968&|l=lZR<#kcD7423o^Wi;0P~ zN1Hh!Jjda1OuMcIbHDrXZV?ewq)R!~4 zC<-D`XmJLQ%DS6p5o|~ZZ%(}Tl6(ou#CB7z>1ldl3)wuvL$DPO!IG>{+O8J0f&>~!p diff --git a/_freeze/posts/pyenvsetting/index/figure-html/unnamed-chunk-12-5.png b/_freeze/posts/pyenvsetting/index/figure-html/unnamed-chunk-12-5.png deleted file mode 100644 index e9c633cc30ebd5fc8f91e776f1ffdbd399333769..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36716 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Μ71do*s}O{3WEC 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

;>ad2jQSeQZk_Ozb^s;(G4m)tZR$s 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 ^E+v5eMyqO10Q`q7oGMo^Cy!{&v=VbC*d%(X6Oa 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ⓈmZ+~@E=R>m*PZUxUL3a`k)NX7I(g1`Qz$ksDRZUAuvWXTW5$9GOa8M} z{ZDhOFAAPFT}&^=42n(3UfbAj$sez>eZWfZS=LYj()5SflC}SHNX8?*ul<9i*}^b# z#r_ug`{W#1t&j5Fw}a9x88@him3!#+G(Dug1I~RaExDBSv(UlWZh<8;KK#^r`>tzm z+wb4xZ>6t7kmqXo9IdnMgMo&b4(`?o_CNe%?1Iqkmw%xXwGPF-->-8ss$^G>$hB%? z&(nLcY)(N(2q=9nBIFwvB~tp${=1mjtS4(JrRx%ldyHoihz!n*9tsJaosa>f9G__Ly2%m!v9-UU5;ka_$Wh2 zT_34AG=5h(4)P7?-7d0GF1(Ns3QCOh8hd_i_a;2b%N_^$S}ja*#UB1#I z%2S*m%#PrX$SymE?)lngo~vany3#eH%^~61pX}wnNPJ7JTO7SNWYim38W+M2Go+BR zu4rpVN^$-;lcoLf&+q4<Ur6xapR@~7DER!N~6FKz^23ZcmRrdoo0JZ_2_n6T?Qq;)Gtb11MZLM=Vw z;#gS(iIaxM|G%L7s; zXnCkbJqD-17S3Ko{B9;KUuAS~2M=Mb#W*WrFSm{uk|pv-U|c%bi&!EuYdQwMpEq0Z zn-2V`8WHdqiJ-j;(hQXn4DVJzi2Q3~)~iILn;lE*Uw-EHi({rs=TCRgPao7FcCcId zy$ths0%=!EVN^f*G|<@t-Y3%&WCemdiKGXsFbMKBGX~dmH=}^=7r@PhKQLI8ArRow z39&m=tL4i^e zCjX*)S46E~jI8$ICecS{LlAGe7cemm#7h*h;BL(tn8ybVQg zf505`jS4$Zg;(H!*RVCUCZ$OVJl&)9AgxB?b+Gb$X;^;Bc5=UX%guC1uq3;F&YPih zcKeU_PXpczqU_X;dhG9gI=Hgz2Q`IPF6d8=0gt`|>K}TgO6rcqOFLcmi4YsYsAAOr z!C83cwpf2rRcWB}@Sh+(ghnDUJf;mWwIK8&>EI&og!NtY0m&ljDNA zHxWj|KO6$1K0s|Fs|EM+mfSSH$KD3EmsL)Pcs*zvHS8ICJ^7&Wt|@J4hqrE4-X^*5 z@#WPAj~g=L9oF}yNF>co3h$I&|3xW-1|Y_!kiWbDuAi%lfGd)Vu>)-Qu7xWpP&3mG%ELuSps9TVU567WDiS=V_orakNB{&MYHQwwLs zVC2(}G>iF}I)YYyaN45soy{O&gx5rzqx^1=m0i24_FRCaQPV(XTDz`k3SGjAAYyUJ zGeT0@I7bPC8LSGaCb)S^){jQDC!MtzQwf2@f{6dBd<1DUhx&K)4WN#U~`PC7<*1{;a z`E1wghoa9+^0PB9k)xDjO{%#SGcwNIG@VttWd`oGU41M#ZmU)f*P)BFT{RyLBA@3e z)N4FM_Zt51yG`|1`A5uZj^B1>n&y~H?A-5~9*Zf%v7@n$mp|p@RcQ1;> zfoBL$vd2@^Y!*RUu5q2RLodFRT^wIiLIqc@nIXp8 zx;Fx8SpOR}Z%||SQL7@|w%$=+Y4%MW(Eb~=Tv=z3D+FWZJG_P%@%dOSABzmQhZg<{ z*%WY#$FvXWoTEsZyp62ve#fqvwCcm>8qNK0dUKgd7cx|Q)_$<|Sh`cPJ`upz_K(|T zWpj>cdoNN#-8;Mt69gC8>O9&4G#!>L8ANj}xG*C3Z00G9`=H05bPQ!TIzqxxU zSL=K8>HK~dzTDT0o!FQm^X-uId+>-nUxQF?I=e(*Vo8ecLVD z_L)zO-RGm0>Ww##g0_!t4>K;Ef7wbYaT^ppUZVTS@3c8bgI6e|9e}4Tr#5{}hMUUXHrsGv%0Dm=myX(p4CvEz3ygOv*v9qy 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 Tx7`}3NwU`!ucckleeyp5zPXsr diff --git a/_freeze/site_libs/Proj4Leaflet-1.0.1/proj4leaflet.js b/_freeze/site_libs/Proj4Leaflet-1.0.1/proj4leaflet.js deleted file mode 100644 index eaa650c..0000000 --- a/_freeze/site_libs/Proj4Leaflet-1.0.1/proj4leaflet.js +++ /dev/null @@ -1,272 +0,0 @@ -(function (factory) { - var L, proj4; - if (typeof define === 'function' && define.amd) { - // AMD - define(['leaflet', 'proj4'], factory); - } else if (typeof module === 'object' && typeof module.exports === "object") { - // Node/CommonJS - L = require('leaflet'); - proj4 = require('proj4'); - module.exports = factory(L, proj4); - } else { - // Browser globals - if (typeof window.L === 'undefined' || typeof window.proj4 === 'undefined') - throw 'Leaflet and proj4 must be loaded first'; - factory(window.L, window.proj4); - } -}(function (L, proj4) { - if (proj4.__esModule && proj4.default) { - // If proj4 was bundled as an ES6 module, unwrap it to get - // to the actual main proj4 object. - // See discussion in https://github.com/kartena/Proj4Leaflet/pull/147 - proj4 = proj4.default; - } - - L.Proj = {}; - - L.Proj._isProj4Obj = function(a) { - return (typeof a.inverse !== 'undefined' && - typeof a.forward !== 'undefined'); - }; - - L.Proj.Projection = L.Class.extend({ - initialize: function(code, def, bounds) { - var isP4 = L.Proj._isProj4Obj(code); - this._proj = isP4 ? code : this._projFromCodeDef(code, def); - this.bounds = isP4 ? def : bounds; - }, - - project: function (latlng) { - var point = this._proj.forward([latlng.lng, latlng.lat]); - return new L.Point(point[0], point[1]); - }, - - unproject: function (point, unbounded) { - var point2 = this._proj.inverse([point.x, point.y]); - return new L.LatLng(point2[1], point2[0], unbounded); - }, - - _projFromCodeDef: function(code, def) { - if (def) { - proj4.defs(code, def); - } else if (proj4.defs[code] === undefined) { - var urn = code.split(':'); - if (urn.length > 3) { - code = urn[urn.length - 3] + ':' + urn[urn.length - 1]; - } - if (proj4.defs[code] === undefined) { - throw 'No projection definition for code ' + code; - } - } - - return proj4(code); - } - }); - - L.Proj.CRS = L.Class.extend({ - includes: L.CRS, - - options: { - transformation: new L.Transformation(1, 0, -1, 0) - }, - - initialize: function(a, b, c) { - var code, - proj, - def, - options; - - if (L.Proj._isProj4Obj(a)) { - proj = a; - code = proj.srsCode; - options = b || {}; - - this.projection = new L.Proj.Projection(proj, options.bounds); - } else { - code = a; - def = b; - options = c || {}; - this.projection = new L.Proj.Projection(code, def, options.bounds); - } - - L.Util.setOptions(this, options); - this.code = code; - this.transformation = this.options.transformation; - - if (this.options.origin) { - this.transformation = - new L.Transformation(1, -this.options.origin[0], - -1, this.options.origin[1]); - } - - if (this.options.scales) { - this._scales = this.options.scales; - } else if (this.options.resolutions) { - this._scales = []; - for (var i = this.options.resolutions.length - 1; i >= 0; i--) { - if (this.options.resolutions[i]) { - this._scales[i] = 1 / this.options.resolutions[i]; - } - } - } - - this.infinite = !this.options.bounds; - - }, - - scale: function(zoom) { - var iZoom = Math.floor(zoom), - baseScale, - nextScale, - scaleDiff, - zDiff; - if (zoom === iZoom) { - return this._scales[zoom]; - } else { - // Non-integer zoom, interpolate - baseScale = this._scales[iZoom]; - nextScale = this._scales[iZoom + 1]; - scaleDiff = nextScale - baseScale; - zDiff = (zoom - iZoom); - return baseScale + scaleDiff * zDiff; - } - }, - - zoom: function(scale) { - // Find closest number in this._scales, down - var downScale = this._closestElement(this._scales, scale), - downZoom = this._scales.indexOf(downScale), - nextScale, - nextZoom, - scaleDiff; - // Check if scale is downScale => return array index - if (scale === downScale) { - return downZoom; - } - if (downScale === undefined) { - return -Infinity; - } - // Interpolate - nextZoom = downZoom + 1; - nextScale = this._scales[nextZoom]; - if (nextScale === undefined) { - return Infinity; - } - scaleDiff = nextScale - downScale; - return (scale - downScale) / scaleDiff + downZoom; - }, - - distance: L.CRS.Earth.distance, - - R: L.CRS.Earth.R, - - /* Get the closest lowest element in an array */ - _closestElement: function(array, element) { - var low; - for (var i = array.length; i--;) { - if (array[i] <= element && (low === undefined || low < array[i])) { - low = array[i]; - } - } - return low; - } - }); - - L.Proj.GeoJSON = L.GeoJSON.extend({ - initialize: function(geojson, options) { - this._callLevel = 0; - L.GeoJSON.prototype.initialize.call(this, geojson, options); - }, - - addData: function(geojson) { - var crs; - - if (geojson) { - if (geojson.crs && geojson.crs.type === 'name') { - crs = new L.Proj.CRS(geojson.crs.properties.name); - } else if (geojson.crs && geojson.crs.type) { - crs = new L.Proj.CRS(geojson.crs.type + ':' + geojson.crs.properties.code); - } - - if (crs !== undefined) { - this.options.coordsToLatLng = function(coords) { - var point = L.point(coords[0], coords[1]); - return crs.projection.unproject(point); - }; - } - } - - // Base class' addData might call us recursively, but - // CRS shouldn't be cleared in that case, since CRS applies - // to the whole GeoJSON, inluding sub-features. - this._callLevel++; - try { - L.GeoJSON.prototype.addData.call(this, geojson); - } finally { - this._callLevel--; - if (this._callLevel === 0) { - delete this.options.coordsToLatLng; - } - } - } - }); - - L.Proj.geoJson = function(geojson, options) { - return new L.Proj.GeoJSON(geojson, options); - }; - - L.Proj.ImageOverlay = L.ImageOverlay.extend({ - initialize: function (url, bounds, options) { - L.ImageOverlay.prototype.initialize.call(this, url, null, options); - this._projectedBounds = bounds; - }, - - // Danger ahead: Overriding internal methods in Leaflet. - // Decided to do this rather than making a copy of L.ImageOverlay - // and doing very tiny modifications to it. - // Future will tell if this was wise or not. - _animateZoom: function (event) { - var scale = this._map.getZoomScale(event.zoom); - var northWest = L.point(this._projectedBounds.min.x, this._projectedBounds.max.y); - var offset = this._projectedToNewLayerPoint(northWest, event.zoom, event.center); - - L.DomUtil.setTransform(this._image, offset, scale); - }, - - _reset: function () { - var zoom = this._map.getZoom(); - var pixelOrigin = this._map.getPixelOrigin(); - var bounds = L.bounds( - this._transform(this._projectedBounds.min, zoom)._subtract(pixelOrigin), - this._transform(this._projectedBounds.max, zoom)._subtract(pixelOrigin) - ); - var size = bounds.getSize(); - - L.DomUtil.setPosition(this._image, bounds.min); - this._image.style.width = size.x + 'px'; - this._image.style.height = size.y + 'px'; - }, - - _projectedToNewLayerPoint: function (point, zoom, center) { - var viewHalf = this._map.getSize()._divideBy(2); - var newTopLeft = this._map.project(center, zoom)._subtract(viewHalf)._round(); - var topLeft = newTopLeft.add(this._map._getMapPanePos()); - - return this._transform(point, zoom)._subtract(topLeft); - }, - - _transform: function (point, zoom) { - var crs = this._map.options.crs; - var transformation = crs.transformation; - var scale = crs.scale(zoom); - - return transformation.transform(point, scale); - } - }); - - L.Proj.imageOverlay = function (url, bounds, options) { - return new L.Proj.ImageOverlay(url, bounds, options); - }; - - return L.Proj; -})); diff --git a/_freeze/site_libs/clipboard-0.0.1/setClipboardText.js b/_freeze/site_libs/clipboard-0.0.1/setClipboardText.js deleted file mode 100644 index 919477d..0000000 --- a/_freeze/site_libs/clipboard-0.0.1/setClipboardText.js +++ /dev/null @@ -1,51 +0,0 @@ -// taken from -// https://ourcodeworld.com/articles/read/143/how-to-copy-text-to-clipboard-with-javascript-easily -function setClipboardText(text) { - var id = 'mycustom-clipboard-textarea-hidden-id'; - var existsTextarea = document.getElementById(id); - - if (!existsTextarea) { - console.log('Creating textarea'); - var textarea = document.createElement('textarea'); - textarea.id = id; - // Place in top-left corner of screen regardless of scroll position. - textarea.style.position = 'fixed'; - textarea.style.top = 0; - textarea.style.left = 0; - - // Ensure it has a small width and height. Setting to 1px / 1em - // doesn't work as this gives a negative w/h on some browsers. - textarea.style.width = '1px'; - textarea.style.height = '1px'; - - // We don't need padding, reducing the size if it does flash render. - textarea.style.padding = 0; - - // Clean up any borders. - textarea.style.border = 'none'; - textarea.style.outline = 'none'; - textarea.style.boxShadow = 'none'; - - // Avoid flash of white box if rendered for any reason. - textarea.style.background = 'transparent'; - document.querySelector('body').appendChild(textarea); - console.log('The textarea now exists :)'); - existsTextarea = document.getElementById(id); - } else { - console.log('The textarea already exists :3'); - } - - existsTextarea.value = text; - existsTextarea.select(); - - try { - var status = document.execCommand('copy'); - if (!status) { - console.error('Cannot copy text'); - } else { - console.log('The text is now on the clipboard'); - } - } catch (err) { - console.log('Unable to copy.'); - } -} diff --git a/_freeze/site_libs/clipboard/clipboard.min.js b/_freeze/site_libs/clipboard/clipboard.min.js deleted file mode 100644 index 1103f81..0000000 --- a/_freeze/site_libs/clipboard/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.11 - * 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 b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1 .html-fill-item { - /* Fill items can grow and shrink freely within - available vertical space in fillable container */ - flex: 1 1 auto; - min-height: 0; - min-width: 0; - } - .html-fill-container > :not(.html-fill-item) { - /* Prevent shrinking or growing of non-fill items */ - flex: 0 0 auto; - } -} diff --git a/_freeze/site_libs/htmlwidgets-1.6.4/htmlwidgets.js b/_freeze/site_libs/htmlwidgets-1.6.4/htmlwidgets.js deleted file mode 100644 index 1067d02..0000000 --- a/_freeze/site_libs/htmlwidgets-1.6.4/htmlwidgets.js +++ /dev/null @@ -1,901 +0,0 @@ -(function() { - // If window.HTMLWidgets is already defined, then use it; otherwise create a - // new object. This allows preceding code to set options that affect the - // initialization process (though none currently exist). - window.HTMLWidgets = window.HTMLWidgets || {}; - - // See if we're running in a viewer pane. If not, we're in a web browser. - var viewerMode = window.HTMLWidgets.viewerMode = - /\bviewer_pane=1\b/.test(window.location); - - // See if we're running in Shiny mode. If not, it's a static document. - // Note that static widgets can appear in both Shiny and static modes, but - // obviously, Shiny widgets can only appear in Shiny apps/documents. - var shinyMode = window.HTMLWidgets.shinyMode = - typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings; - - // We can't count on jQuery being available, so we implement our own - // version if necessary. - function querySelectorAll(scope, selector) { - if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) { - return scope.find(selector); - } - if (scope.querySelectorAll) { - return scope.querySelectorAll(selector); - } - } - - function asArray(value) { - if (value === null) - return []; - if ($.isArray(value)) - return value; - return [value]; - } - - // Implement jQuery's extend - function extend(target /*, ... */) { - if (arguments.length == 1) { - return target; - } - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - target[prop] = source[prop]; - } - } - } - return target; - } - - // IE8 doesn't support Array.forEach. - function forEach(values, callback, thisArg) { - if (values.forEach) { - values.forEach(callback, thisArg); - } else { - for (var i = 0; i < values.length; i++) { - callback.call(thisArg, values[i], i, values); - } - } - } - - // Replaces the specified method with the return value of funcSource. - // - // Note that funcSource should not BE the new method, it should be a function - // that RETURNS the new method. funcSource receives a single argument that is - // the overridden method, it can be called from the new method. The overridden - // method can be called like a regular function, it has the target permanently - // bound to it so "this" will work correctly. - function overrideMethod(target, methodName, funcSource) { - var superFunc = target[methodName] || function() {}; - var superFuncBound = function() { - return superFunc.apply(target, arguments); - }; - target[methodName] = funcSource(superFuncBound); - } - - // Add a method to delegator that, when invoked, calls - // delegatee.methodName. If there is no such method on - // the delegatee, but there was one on delegator before - // delegateMethod was called, then the original version - // is invoked instead. - // For example: - // - // var a = { - // method1: function() { console.log('a1'); } - // method2: function() { console.log('a2'); } - // }; - // var b = { - // method1: function() { console.log('b1'); } - // }; - // delegateMethod(a, b, "method1"); - // delegateMethod(a, b, "method2"); - // a.method1(); - // a.method2(); - // - // The output would be "b1", "a2". - function delegateMethod(delegator, delegatee, methodName) { - var inherited = delegator[methodName]; - delegator[methodName] = function() { - var target = delegatee; - var method = delegatee[methodName]; - - // The method doesn't exist on the delegatee. Instead, - // call the method on the delegator, if it exists. - if (!method) { - target = delegator; - method = inherited; - } - - if (method) { - return method.apply(target, arguments); - } - }; - } - - // Implement a vague facsimilie of jQuery's data method - function elementData(el, name, value) { - if (arguments.length == 2) { - return el["htmlwidget_data_" + name]; - } else if (arguments.length == 3) { - el["htmlwidget_data_" + name] = value; - return el; - } else { - throw new Error("Wrong number of arguments for elementData: " + - arguments.length); - } - } - - // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex - function escapeRegExp(str) { - return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); - } - - function hasClass(el, className) { - var re = new RegExp("\\b" + escapeRegExp(className) + "\\b"); - return re.test(el.className); - } - - // elements - array (or array-like object) of HTML elements - // className - class name to test for - // include - if true, only return elements with given className; - // if false, only return elements *without* given className - function filterByClass(elements, className, include) { - var results = []; - for (var i = 0; i < elements.length; i++) { - if (hasClass(elements[i], className) == include) - results.push(elements[i]); - } - return results; - } - - function on(obj, eventName, func) { - if (obj.addEventListener) { - obj.addEventListener(eventName, func, false); - } else if (obj.attachEvent) { - obj.attachEvent(eventName, func); - } - } - - function off(obj, eventName, func) { - if (obj.removeEventListener) - obj.removeEventListener(eventName, func, false); - else if (obj.detachEvent) { - obj.detachEvent(eventName, func); - } - } - - // Translate array of values to top/right/bottom/left, as usual with - // the "padding" CSS property - // https://developer.mozilla.org/en-US/docs/Web/CSS/padding - function unpackPadding(value) { - if (typeof(value) === "number") - value = [value]; - if (value.length === 1) { - return {top: value[0], right: value[0], bottom: value[0], left: value[0]}; - } - if (value.length === 2) { - return {top: value[0], right: value[1], bottom: value[0], left: value[1]}; - } - if (value.length === 3) { - return {top: value[0], right: value[1], bottom: value[2], left: value[1]}; - } - if (value.length === 4) { - return {top: value[0], right: value[1], bottom: value[2], left: value[3]}; - } - } - - // Convert an unpacked padding object to a CSS value - function paddingToCss(paddingObj) { - return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px"; - } - - // Makes a number suitable for CSS - function px(x) { - if (typeof(x) === "number") - return x + "px"; - else - return x; - } - - // Retrieves runtime widget sizing information for an element. - // The return value is either null, or an object with fill, padding, - // defaultWidth, defaultHeight fields. - function sizingPolicy(el) { - var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']"); - if (!sizingEl) - return null; - var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}"); - if (viewerMode) { - return sp.viewer; - } else { - return sp.browser; - } - } - - // @param tasks Array of strings (or falsy value, in which case no-op). - // Each element must be a valid JavaScript expression that yields a - // function. Or, can be an array of objects with "code" and "data" - // properties; in this case, the "code" property should be a string - // of JS that's an expr that yields a function, and "data" should be - // an object that will be added as an additional argument when that - // function is called. - // @param target The object that will be "this" for each function - // execution. - // @param args Array of arguments to be passed to the functions. (The - // same arguments will be passed to all functions.) - function evalAndRun(tasks, target, args) { - if (tasks) { - forEach(tasks, function(task) { - var theseArgs = args; - if (typeof(task) === "object") { - theseArgs = theseArgs.concat([task.data]); - task = task.code; - } - var taskFunc = tryEval(task); - if (typeof(taskFunc) !== "function") { - throw new Error("Task must be a function! Source:\n" + task); - } - taskFunc.apply(target, theseArgs); - }); - } - } - - // Attempt eval() both with and without enclosing in parentheses. - // Note that enclosing coerces a function declaration into - // an expression that eval() can parse - // (otherwise, a SyntaxError is thrown) - function tryEval(code) { - var result = null; - try { - result = eval("(" + code + ")"); - } catch(error) { - if (!(error instanceof SyntaxError)) { - throw error; - } - try { - result = eval(code); - } catch(e) { - if (e instanceof SyntaxError) { - throw error; - } else { - throw e; - } - } - } - return result; - } - - function initSizing(el) { - var sizing = sizingPolicy(el); - if (!sizing) - return; - - var cel = document.getElementById("htmlwidget_container"); - if (!cel) - return; - - if (typeof(sizing.padding) !== "undefined") { - document.body.style.margin = "0"; - document.body.style.padding = paddingToCss(unpackPadding(sizing.padding)); - } - - if (sizing.fill) { - document.body.style.overflow = "hidden"; - document.body.style.width = "100%"; - document.body.style.height = "100%"; - document.documentElement.style.width = "100%"; - document.documentElement.style.height = "100%"; - cel.style.position = "absolute"; - var pad = unpackPadding(sizing.padding); - cel.style.top = pad.top + "px"; - cel.style.right = pad.right + "px"; - cel.style.bottom = pad.bottom + "px"; - cel.style.left = pad.left + "px"; - el.style.width = "100%"; - el.style.height = "100%"; - - return { - getWidth: function() { return cel.getBoundingClientRect().width; }, - getHeight: function() { return cel.getBoundingClientRect().height; } - }; - - } else { - el.style.width = px(sizing.width); - el.style.height = px(sizing.height); - - return { - getWidth: function() { return cel.getBoundingClientRect().width; }, - getHeight: function() { return cel.getBoundingClientRect().height; } - }; - } - } - - // Default implementations for methods - var defaults = { - find: function(scope) { - return querySelectorAll(scope, "." + this.name); - }, - renderError: function(el, err) { - var $el = $(el); - - this.clearError(el); - - // Add all these error classes, as Shiny does - var errClass = "shiny-output-error"; - if (err.type !== null) { - // use the classes of the error condition as CSS class names - errClass = errClass + " " + $.map(asArray(err.type), function(type) { - return errClass + "-" + type; - }).join(" "); - } - errClass = errClass + " htmlwidgets-error"; - - // Is el inline or block? If inline or inline-block, just display:none it - // and add an inline error. - var display = $el.css("display"); - $el.data("restore-display-mode", display); - - if (display === "inline" || display === "inline-block") { - $el.hide(); - if (err.message !== "") { - var errorSpan = $("").addClass(errClass); - errorSpan.text(err.message); - $el.after(errorSpan); - } - } else if (display === "block") { - // If block, add an error just after the el, set visibility:none on the - // el, and position the error to be on top of the el. - // Mark it with a unique ID and CSS class so we can remove it later. - $el.css("visibility", "hidden"); - if (err.message !== "") { - var errorDiv = $("

").addClass(errClass).css("position", "absolute") - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - // setting width can push out the page size, forcing otherwise - // unnecessary scrollbars to appear and making it impossible for - // the element to shrink; so use max-width instead - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - errorDiv.text(err.message); - $el.after(errorDiv); - - // Really dumb way to keep the size/position of the error in sync with - // the parent element as the window is resized or whatever. - var intId = setInterval(function() { - if (!errorDiv[0].parentElement) { - clearInterval(intId); - return; - } - errorDiv - .css("top", el.offsetTop) - .css("left", el.offsetLeft) - .css("maxWidth", el.offsetWidth) - .css("height", el.offsetHeight); - }, 500); - } - } - }, - clearError: function(el) { - var $el = $(el); - var display = $el.data("restore-display-mode"); - $el.data("restore-display-mode", null); - - if (display === "inline" || display === "inline-block") { - if (display) - $el.css("display", display); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } else if (display === "block"){ - $el.css("visibility", "inherit"); - $(el.nextSibling).filter(".htmlwidgets-error").remove(); - } - }, - sizing: {} - }; - - // Called by widget bindings to register a new type of widget. The definition - // object can contain the following properties: - // - name (required) - A string indicating the binding name, which will be - // used by default as the CSS classname to look for. - // - initialize (optional) - A function(el) that will be called once per - // widget element; if a value is returned, it will be passed as the third - // value to renderValue. - // - renderValue (required) - A function(el, data, initValue) that will be - // called with data. Static contexts will cause this to be called once per - // element; Shiny apps will cause this to be called multiple times per - // element, as the data changes. - window.HTMLWidgets.widget = function(definition) { - if (!definition.name) { - throw new Error("Widget must have a name"); - } - if (!definition.type) { - throw new Error("Widget must have a type"); - } - // Currently we only support output widgets - if (definition.type !== "output") { - throw new Error("Unrecognized widget type '" + definition.type + "'"); - } - // TODO: Verify that .name is a valid CSS classname - - // Support new-style instance-bound definitions. Old-style class-bound - // definitions have one widget "object" per widget per type/class of - // widget; the renderValue and resize methods on such widget objects - // take el and instance arguments, because the widget object can't - // store them. New-style instance-bound definitions have one widget - // object per widget instance; the definition that's passed in doesn't - // provide renderValue or resize methods at all, just the single method - // factory(el, width, height) - // which returns an object that has renderValue(x) and resize(w, h). - // This enables a far more natural programming style for the widget - // author, who can store per-instance state using either OO-style - // instance fields or functional-style closure variables (I guess this - // is in contrast to what can only be called C-style pseudo-OO which is - // what we required before). - if (definition.factory) { - definition = createLegacyDefinitionAdapter(definition); - } - - if (!definition.renderValue) { - throw new Error("Widget must have a renderValue function"); - } - - // For static rendering (non-Shiny), use a simple widget registration - // scheme. We also use this scheme for Shiny apps/documents that also - // contain static widgets. - window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || []; - // Merge defaults into the definition; don't mutate the original definition. - var staticBinding = extend({}, defaults, definition); - overrideMethod(staticBinding, "find", function(superfunc) { - return function(scope) { - var results = superfunc(scope); - // Filter out Shiny outputs, we only want the static kind - return filterByClass(results, "html-widget-output", false); - }; - }); - window.HTMLWidgets.widgets.push(staticBinding); - - if (shinyMode) { - // Shiny is running. Register the definition with an output binding. - // The definition itself will not be the output binding, instead - // we will make an output binding object that delegates to the - // definition. This is because we foolishly used the same method - // name (renderValue) for htmlwidgets definition and Shiny bindings - // but they actually have quite different semantics (the Shiny - // bindings receive data that includes lots of metadata that it - // strips off before calling htmlwidgets renderValue). We can't - // just ignore the difference because in some widgets it's helpful - // to call this.renderValue() from inside of resize(), and if - // we're not delegating, then that call will go to the Shiny - // version instead of the htmlwidgets version. - - // Merge defaults with definition, without mutating either. - var bindingDef = extend({}, defaults, definition); - - // This object will be our actual Shiny binding. - var shinyBinding = new Shiny.OutputBinding(); - - // With a few exceptions, we'll want to simply use the bindingDef's - // version of methods if they are available, otherwise fall back to - // Shiny's defaults. NOTE: If Shiny's output bindings gain additional - // methods in the future, and we want them to be overrideable by - // HTMLWidget binding definitions, then we'll need to add them to this - // list. - delegateMethod(shinyBinding, bindingDef, "getId"); - delegateMethod(shinyBinding, bindingDef, "onValueChange"); - delegateMethod(shinyBinding, bindingDef, "onValueError"); - delegateMethod(shinyBinding, bindingDef, "renderError"); - delegateMethod(shinyBinding, bindingDef, "clearError"); - delegateMethod(shinyBinding, bindingDef, "showProgress"); - - // The find, renderValue, and resize are handled differently, because we - // want to actually decorate the behavior of the bindingDef methods. - - shinyBinding.find = function(scope) { - var results = bindingDef.find(scope); - - // Only return elements that are Shiny outputs, not static ones - var dynamicResults = results.filter(".html-widget-output"); - - // It's possible that whatever caused Shiny to think there might be - // new dynamic outputs, also caused there to be new static outputs. - // Since there might be lots of different htmlwidgets bindings, we - // schedule execution for later--no need to staticRender multiple - // times. - if (results.length !== dynamicResults.length) - scheduleStaticRender(); - - return dynamicResults; - }; - - // Wrap renderValue to handle initialization, which unfortunately isn't - // supported natively by Shiny at the time of this writing. - - shinyBinding.renderValue = function(el, data) { - Shiny.renderDependencies(data.deps); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var i = 0; data.evals && i < data.evals.length; i++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]); - } - if (!bindingDef.renderOnNullValue) { - if (data.x === null) { - el.style.visibility = "hidden"; - return; - } else { - el.style.visibility = "inherit"; - } - } - if (!elementData(el, "initialized")) { - initSizing(el); - - elementData(el, "initialized", true); - if (bindingDef.initialize) { - var rect = el.getBoundingClientRect(); - var result = bindingDef.initialize(el, rect.width, rect.height); - elementData(el, "init_result", result); - } - } - bindingDef.renderValue(el, data.x, elementData(el, "init_result")); - evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]); - }; - - // Only override resize if bindingDef implements it - if (bindingDef.resize) { - shinyBinding.resize = function(el, width, height) { - // Shiny can call resize before initialize/renderValue have been - // called, which doesn't make sense for widgets. - if (elementData(el, "initialized")) { - bindingDef.resize(el, width, height, elementData(el, "init_result")); - } - }; - } - - Shiny.outputBindings.register(shinyBinding, bindingDef.name); - } - }; - - var scheduleStaticRenderTimerId = null; - function scheduleStaticRender() { - if (!scheduleStaticRenderTimerId) { - scheduleStaticRenderTimerId = setTimeout(function() { - scheduleStaticRenderTimerId = null; - window.HTMLWidgets.staticRender(); - }, 1); - } - } - - // Render static widgets after the document finishes loading - // Statically render all elements that are of this widget's class - window.HTMLWidgets.staticRender = function() { - var bindings = window.HTMLWidgets.widgets || []; - forEach(bindings, function(binding) { - var matches = binding.find(document.documentElement); - forEach(matches, function(el) { - var sizeObj = initSizing(el, binding); - - var getSize = function(el) { - if (sizeObj) { - return {w: sizeObj.getWidth(), h: sizeObj.getHeight()} - } else { - var rect = el.getBoundingClientRect(); - return {w: rect.width, h: rect.height} - } - }; - - if (hasClass(el, "html-widget-static-bound")) - return; - el.className = el.className + " html-widget-static-bound"; - - var initResult; - if (binding.initialize) { - var size = getSize(el); - initResult = binding.initialize(el, size.w, size.h); - elementData(el, "init_result", initResult); - } - - if (binding.resize) { - var lastSize = getSize(el); - var resizeHandler = function(e) { - var size = getSize(el); - if (size.w === 0 && size.h === 0) - return; - if (size.w === lastSize.w && size.h === lastSize.h) - return; - lastSize = size; - binding.resize(el, size.w, size.h, initResult); - }; - - on(window, "resize", resizeHandler); - - // This is needed for cases where we're running in a Shiny - // app, but the widget itself is not a Shiny output, but - // rather a simple static widget. One example of this is - // an rmarkdown document that has runtime:shiny and widget - // that isn't in a render function. Shiny only knows to - // call resize handlers for Shiny outputs, not for static - // widgets, so we do it ourselves. - if (window.jQuery) { - window.jQuery(document).on( - "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets", - resizeHandler - ); - window.jQuery(document).on( - "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets", - resizeHandler - ); - } - - // This is needed for the specific case of ioslides, which - // flips slides between display:none and display:block. - // Ideally we would not have to have ioslide-specific code - // here, but rather have ioslides raise a generic event, - // but the rmarkdown package just went to CRAN so the - // window to getting that fixed may be long. - if (window.addEventListener) { - // It's OK to limit this to window.addEventListener - // browsers because ioslides itself only supports - // such browsers. - on(document, "slideenter", resizeHandler); - on(document, "slideleave", resizeHandler); - } - } - - var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']"); - if (scriptData) { - var data = JSON.parse(scriptData.textContent || scriptData.text); - // Resolve strings marked as javascript literals to objects - if (!(data.evals instanceof Array)) data.evals = [data.evals]; - for (var k = 0; data.evals && k < data.evals.length; k++) { - window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]); - } - binding.renderValue(el, data.x, initResult); - evalAndRun(data.jsHooks.render, initResult, [el, data.x]); - } - }); - }); - - invokePostRenderHandlers(); - } - - - function has_jQuery3() { - if (!window.jQuery) { - return false; - } - var $version = window.jQuery.fn.jquery; - var $major_version = parseInt($version.split(".")[0]); - return $major_version >= 3; - } - - /* - / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's - / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now - / really means $(setTimeout(fn)). - / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous - / - / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny - / one tick later than it did before, which means staticRender() is - / called renderValue() earlier than (advanced) widget authors might be expecting. - / https://github.com/rstudio/shiny/issues/2630 - / - / For a concrete example, leaflet has some methods (e.g., updateBounds) - / which reference Shiny methods registered in initShiny (e.g., setInputValue). - / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to - / delay execution of those methods (until Shiny methods are ready) - / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268 - / - / Ideally widget authors wouldn't need to use this setTimeout() hack that - / leaflet uses to call Shiny methods on a staticRender(). In the long run, - / the logic initShiny should be broken up so that method registration happens - / right away, but binding happens later. - */ - function maybeStaticRenderLater() { - if (shinyMode && has_jQuery3()) { - window.jQuery(window.HTMLWidgets.staticRender); - } else { - window.HTMLWidgets.staticRender(); - } - } - - if (document.addEventListener) { - document.addEventListener("DOMContentLoaded", function() { - document.removeEventListener("DOMContentLoaded", arguments.callee, false); - maybeStaticRenderLater(); - }, false); - } else if (document.attachEvent) { - document.attachEvent("onreadystatechange", function() { - if (document.readyState === "complete") { - document.detachEvent("onreadystatechange", arguments.callee); - maybeStaticRenderLater(); - } - }); - } - - - window.HTMLWidgets.getAttachmentUrl = function(depname, key) { - // If no key, default to the first item - if (typeof(key) === "undefined") - key = 1; - - var link = document.getElementById(depname + "-" + key + "-attachment"); - if (!link) { - throw new Error("Attachment " + depname + "/" + key + " not found in document"); - } - return link.getAttribute("href"); - }; - - window.HTMLWidgets.dataframeToD3 = function(df) { - var names = []; - var length; - for (var name in df) { - if (df.hasOwnProperty(name)) - names.push(name); - if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") { - throw new Error("All fields must be arrays"); - } else if (typeof(length) !== "undefined" && length !== df[name].length) { - throw new Error("All fields must be arrays of the same length"); - } - length = df[name].length; - } - var results = []; - var item; - for (var row = 0; row < length; row++) { - item = {}; - for (var col = 0; col < names.length; col++) { - item[names[col]] = df[names[col]][row]; - } - results.push(item); - } - return results; - }; - - window.HTMLWidgets.transposeArray2D = function(array) { - if (array.length === 0) return array; - var newArray = array[0].map(function(col, i) { - return array.map(function(row) { - return row[i] - }) - }); - return newArray; - }; - // Split value at splitChar, but allow splitChar to be escaped - // using escapeChar. Any other characters escaped by escapeChar - // will be included as usual (including escapeChar itself). - function splitWithEscape(value, splitChar, escapeChar) { - var results = []; - var escapeMode = false; - var currentResult = ""; - for (var pos = 0; pos < value.length; pos++) { - if (!escapeMode) { - if (value[pos] === splitChar) { - results.push(currentResult); - currentResult = ""; - } else if (value[pos] === escapeChar) { - escapeMode = true; - } else { - currentResult += value[pos]; - } - } else { - currentResult += value[pos]; - escapeMode = false; - } - } - if (currentResult !== "") { - results.push(currentResult); - } - return results; - } - // Function authored by Yihui/JJ Allaire - window.HTMLWidgets.evaluateStringMember = function(o, member) { - var parts = splitWithEscape(member, '.', '\\'); - for (var i = 0, l = parts.length; i < l; i++) { - var part = parts[i]; - // part may be a character or 'numeric' member name - if (o !== null && typeof o === "object" && part in o) { - if (i == (l - 1)) { // if we are at the end of the line then evalulate - if (typeof o[part] === "string") - o[part] = tryEval(o[part]); - } else { // otherwise continue to next embedded object - o = o[part]; - } - } - } - }; - - // Retrieve the HTMLWidget instance (i.e. the return value of an - // HTMLWidget binding's initialize() or factory() function) - // associated with an element, or null if none. - window.HTMLWidgets.getInstance = function(el) { - return elementData(el, "init_result"); - }; - - // Finds the first element in the scope that matches the selector, - // and returns the HTMLWidget instance (i.e. the return value of - // an HTMLWidget binding's initialize() or factory() function) - // associated with that element, if any. If no element matches the - // selector, or the first matching element has no HTMLWidget - // instance associated with it, then null is returned. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.find = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var el = scope.querySelector(selector); - if (el === null) { - return null; - } else { - return window.HTMLWidgets.getInstance(el); - } - }; - - // Finds all elements in the scope that match the selector, and - // returns the HTMLWidget instances (i.e. the return values of - // an HTMLWidget binding's initialize() or factory() function) - // associated with the elements, in an array. If elements that - // match the selector don't have an associated HTMLWidget - // instance, the returned array will contain nulls. - // - // The scope argument is optional, and defaults to window.document. - window.HTMLWidgets.findAll = function(scope, selector) { - if (arguments.length == 1) { - selector = scope; - scope = document; - } - - var nodes = scope.querySelectorAll(selector); - var results = []; - for (var i = 0; i < nodes.length; i++) { - results.push(window.HTMLWidgets.getInstance(nodes[i])); - } - return results; - }; - - var postRenderHandlers = []; - function invokePostRenderHandlers() { - while (postRenderHandlers.length) { - var handler = postRenderHandlers.shift(); - if (handler) { - handler(); - } - } - } - - // Register the given callback function to be invoked after the - // next time static widgets are rendered. - window.HTMLWidgets.addPostRenderHandler = function(callback) { - postRenderHandlers.push(callback); - }; - - // Takes a new-style instance-bound definition, and returns an - // old-style class-bound definition. This saves us from having - // to rewrite all the logic in this file to accomodate both - // types of definitions. - function createLegacyDefinitionAdapter(defn) { - var result = { - name: defn.name, - type: defn.type, - initialize: function(el, width, height) { - return defn.factory(el, width, height); - }, - renderValue: function(el, x, instance) { - return instance.renderValue(x); - }, - resize: function(el, width, height, instance) { - return instance.resize(width, height); - } - }; - - if (defn.find) - result.find = defn.find; - if (defn.renderError) - result.renderError = defn.renderError; - if (defn.clearError) - result.clearError = defn.clearError; - - return result; - } -})(); diff --git a/_freeze/site_libs/jquery-3.6.0/jquery-3.6.0.js b/_freeze/site_libs/jquery-3.6.0/jquery-3.6.0.js deleted file mode 100644 index fc6c299..0000000 --- a/_freeze/site_libs/jquery-3.6.0/jquery-3.6.0.js +++ /dev/null @@ -1,10881 +0,0 @@ -/*! - * jQuery JavaScript Library v3.6.0 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright OpenJS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2021-03-02T17:08Z - */ -( 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. - // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 - // Plus for old WebKit, typeof returns "function" for HTML collections - // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) - return typeof obj === "function" && typeof obj.nodeType !== "number" && - typeof obj.item !== "function"; - }; - - -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.6.0", - - // 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.6 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2021-02-16 - */ -( 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 && elem.namespaceURI, - docElem = elem && ( 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 primary Deferred - primary = 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 ) ) { - primary.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( primary.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return primary.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); - } - - return primary.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 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(); - - // Support: Chrome 86+ - // In Chrome, if an element having a focusout handler is blurred by - // clicking outside of it, it invokes the handler synchronously. If - // that handler calls `.remove()` on the element, the data is cleared, - // leaving `result` undefined. We need to guard against this. - return result && 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: true -}, 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; - }, - - // Suppress native focus or blur as it's already being fired - // in leverageNative. - _default: function() { - 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! - // - // Support: Firefox 70+ - // Only Firefox includes border widths - // in computed dimensions. (gh-4529) - 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;border-collapse:separate"; - tr.style.cssText = "border:1px solid"; - - // Support: Chrome 86+ - // Height set through cssText does not get applied. - // Computed height then comes back as 0. - tr.style.height = "1px"; - trChild.style.height = "9px"; - - // Support: Android 8 Chrome 86+ - // In our bodyBackground.html iframe, - // display for all div elements is set to "inline", - // which causes a problem only in Android 8 Chrome 86. - // Ensuring the div is display: block - // gets around this issue. - trChild.style.display = "block"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + - parseInt( trStyle.borderTopWidth, 10 ) + - parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; - - 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, parserErrorElem; - 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 ) {} - - parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; - if ( !xml || parserErrorElem ) { - jQuery.error( "Invalid XML: " + ( - parserErrorElem ? - jQuery.map( parserErrorElem.childNodes, function( el ) { - return el.textContent; - } ).join( "\n" ) : - 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 but not if jsonp - if ( !isSuccess && - jQuery.inArray( "script", s.dataTypes ) > -1 && - jQuery.inArray( "json", s.dataTypes ) < 0 ) { - 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( "